]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Release v0.3.6
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.3.7 (http://getbootstrap.com)
8 * Copyright 2011-2016 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 */
11 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
12 html {
13 font-family: sans-serif;
14 -webkit-text-size-adjust: 100%;
15 -ms-text-size-adjust: 100%;
16 }
17 body {
18 margin: 0;
19 }
20 article,
21 aside,
22 details,
23 figcaption,
24 figure,
25 footer,
26 header,
27 hgroup,
28 main,
29 menu,
30 nav,
31 section,
32 summary {
33 display: block;
34 }
35 audio,
36 canvas,
37 progress,
38 video {
39 display: inline-block;
40 vertical-align: baseline;
41 }
42 audio:not([controls]) {
43 display: none;
44 height: 0;
45 }
46 [hidden],
47 template {
48 display: none;
49 }
50 a {
51 background-color: transparent;
52 }
53 a:active,
54 a:hover {
55 outline: 0;
56 }
57 abbr[title] {
58 border-bottom: 1px dotted;
59 }
60 b,
61 strong {
62 font-weight: bold;
63 }
64 dfn {
65 font-style: italic;
66 }
67 h1 {
68 margin: .67em 0;
69 font-size: 2em;
70 }
71 mark {
72 color: #000;
73 background: #ff0;
74 }
75 small {
76 font-size: 80%;
77 }
78 sub,
79 sup {
80 position: relative;
81 font-size: 75%;
82 line-height: 0;
83 vertical-align: baseline;
84 }
85 sup {
86 top: -.5em;
87 }
88 sub {
89 bottom: -.25em;
90 }
91 img {
92 border: 0;
93 }
94 svg:not(:root) {
95 overflow: hidden;
96 }
97 figure {
98 margin: 1em 40px;
99 }
100 hr {
101 height: 0;
102 -webkit-box-sizing: content-box;
103 -moz-box-sizing: content-box;
104 box-sizing: content-box;
105 }
106 pre {
107 overflow: auto;
108 }
109 code,
110 kbd,
111 pre,
112 samp {
113 font-family: monospace, monospace;
114 font-size: 1em;
115 }
116 button,
117 input,
118 optgroup,
119 select,
120 textarea {
121 margin: 0;
122 font: inherit;
123 color: inherit;
124 }
125 button {
126 overflow: visible;
127 }
128 button,
129 select {
130 text-transform: none;
131 }
132 button,
133 html input[type="button"],
134 input[type="reset"],
135 input[type="submit"] {
136 -webkit-appearance: button;
137 cursor: pointer;
138 }
139 button[disabled],
140 html input[disabled] {
141 cursor: default;
142 }
143 button::-moz-focus-inner,
144 input::-moz-focus-inner {
145 padding: 0;
146 border: 0;
147 }
148 input {
149 line-height: normal;
150 }
151 input[type="checkbox"],
152 input[type="radio"] {
153 -webkit-box-sizing: border-box;
154 -moz-box-sizing: border-box;
155 box-sizing: border-box;
156 padding: 0;
157 }
158 input[type="number"]::-webkit-inner-spin-button,
159 input[type="number"]::-webkit-outer-spin-button {
160 height: auto;
161 }
162 input[type="search"] {
163 -webkit-box-sizing: content-box;
164 -moz-box-sizing: content-box;
165 box-sizing: content-box;
166 -webkit-appearance: textfield;
167 }
168 input[type="search"]::-webkit-search-cancel-button,
169 input[type="search"]::-webkit-search-decoration {
170 -webkit-appearance: none;
171 }
172 fieldset {
173 padding: .35em .625em .75em;
174 margin: 0 2px;
175 border: 1px solid #c0c0c0;
176 }
177 legend {
178 padding: 0;
179 border: 0;
180 }
181 textarea {
182 overflow: auto;
183 }
184 optgroup {
185 font-weight: bold;
186 }
187 table {
188 border-spacing: 0;
189 border-collapse: collapse;
190 }
191 td,
192 th {
193 padding: 0;
194 }
195 /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
196 @media print {
197 *,
198 *:before,
199 *:after {
200 color: #000 !important;
201 text-shadow: none !important;
202 background: transparent !important;
203 -webkit-box-shadow: none !important;
204 box-shadow: none !important;
205 }
206 a,
207 a:visited {
208 text-decoration: underline;
209 }
210 a[href]:after {
211 content: " (" attr(href) ")";
212 }
213 abbr[title]:after {
214 content: " (" attr(title) ")";
215 }
216 a[href^="#"]:after,
217 a[href^="javascript:"]:after {
218 content: "";
219 }
220 pre,
221 blockquote {
222 border: 1px solid #999;
223
224 page-break-inside: avoid;
225 }
226 thead {
227 display: table-header-group;
228 }
229 tr,
230 img {
231 page-break-inside: avoid;
232 }
233 img {
234 max-width: 100% !important;
235 }
236 p,
237 h2,
238 h3 {
239 orphans: 3;
240 widows: 3;
241 }
242 h2,
243 h3 {
244 page-break-after: avoid;
245 }
246 .navbar {
247 display: none;
248 }
249 .btn > .caret,
250 .dropup > .btn > .caret {
251 border-top-color: #000 !important;
252 }
253 .label {
254 border: 1px solid #000;
255 }
256 .table {
257 border-collapse: collapse !important;
258 }
259 .table td,
260 .table th {
261 background-color: #fff !important;
262 }
263 .table-bordered th,
264 .table-bordered td {
265 border: 1px solid #ddd !important;
266 }
267 }
268 @font-face {
269 font-family: 'Glyphicons Halflings';
270
271 src: url('../fonts/glyphicons-halflings-regular.eot');
272 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), 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');
273 }
274 .glyphicon {
275 position: relative;
276 top: 1px;
277 display: inline-block;
278 font-family: 'Glyphicons Halflings';
279 font-style: normal;
280 font-weight: normal;
281 line-height: 1;
282
283 -webkit-font-smoothing: antialiased;
284 -moz-osx-font-smoothing: grayscale;
285 }
286 .glyphicon-asterisk:before {
287 content: "\002a";
288 }
289 .glyphicon-plus:before {
290 content: "\002b";
291 }
292 .glyphicon-euro:before,
293 .glyphicon-eur:before {
294 content: "\20ac";
295 }
296 .glyphicon-minus:before {
297 content: "\2212";
298 }
299 .glyphicon-cloud:before {
300 content: "\2601";
301 }
302 .glyphicon-envelope:before {
303 content: "\2709";
304 }
305 .glyphicon-pencil:before {
306 content: "\270f";
307 }
308 .glyphicon-glass:before {
309 content: "\e001";
310 }
311 .glyphicon-music:before {
312 content: "\e002";
313 }
314 .glyphicon-search:before {
315 content: "\e003";
316 }
317 .glyphicon-heart:before {
318 content: "\e005";
319 }
320 .glyphicon-star:before {
321 content: "\e006";
322 }
323 .glyphicon-star-empty:before {
324 content: "\e007";
325 }
326 .glyphicon-user:before {
327 content: "\e008";
328 }
329 .glyphicon-film:before {
330 content: "\e009";
331 }
332 .glyphicon-th-large:before {
333 content: "\e010";
334 }
335 .glyphicon-th:before {
336 content: "\e011";
337 }
338 .glyphicon-th-list:before {
339 content: "\e012";
340 }
341 .glyphicon-ok:before {
342 content: "\e013";
343 }
344 .glyphicon-remove:before {
345 content: "\e014";
346 }
347 .glyphicon-zoom-in:before {
348 content: "\e015";
349 }
350 .glyphicon-zoom-out:before {
351 content: "\e016";
352 }
353 .glyphicon-off:before {
354 content: "\e017";
355 }
356 .glyphicon-signal:before {
357 content: "\e018";
358 }
359 .glyphicon-cog:before {
360 content: "\e019";
361 }
362 .glyphicon-trash:before {
363 content: "\e020";
364 }
365 .glyphicon-home:before {
366 content: "\e021";
367 }
368 .glyphicon-file:before {
369 content: "\e022";
370 }
371 .glyphicon-time:before {
372 content: "\e023";
373 }
374 .glyphicon-road:before {
375 content: "\e024";
376 }
377 .glyphicon-download-alt:before {
378 content: "\e025";
379 }
380 .glyphicon-download:before {
381 content: "\e026";
382 }
383 .glyphicon-upload:before {
384 content: "\e027";
385 }
386 .glyphicon-inbox:before {
387 content: "\e028";
388 }
389 .glyphicon-play-circle:before {
390 content: "\e029";
391 }
392 .glyphicon-repeat:before {
393 content: "\e030";
394 }
395 .glyphicon-refresh:before {
396 content: "\e031";
397 }
398 .glyphicon-list-alt:before {
399 content: "\e032";
400 }
401 .glyphicon-lock:before {
402 content: "\e033";
403 }
404 .glyphicon-flag:before {
405 content: "\e034";
406 }
407 .glyphicon-headphones:before {
408 content: "\e035";
409 }
410 .glyphicon-volume-off:before {
411 content: "\e036";
412 }
413 .glyphicon-volume-down:before {
414 content: "\e037";
415 }
416 .glyphicon-volume-up:before {
417 content: "\e038";
418 }
419 .glyphicon-qrcode:before {
420 content: "\e039";
421 }
422 .glyphicon-barcode:before {
423 content: "\e040";
424 }
425 .glyphicon-tag:before {
426 content: "\e041";
427 }
428 .glyphicon-tags:before {
429 content: "\e042";
430 }
431 .glyphicon-book:before {
432 content: "\e043";
433 }
434 .glyphicon-bookmark:before {
435 content: "\e044";
436 }
437 .glyphicon-print:before {
438 content: "\e045";
439 }
440 .glyphicon-camera:before {
441 content: "\e046";
442 }
443 .glyphicon-font:before {
444 content: "\e047";
445 }
446 .glyphicon-bold:before {
447 content: "\e048";
448 }
449 .glyphicon-italic:before {
450 content: "\e049";
451 }
452 .glyphicon-text-height:before {
453 content: "\e050";
454 }
455 .glyphicon-text-width:before {
456 content: "\e051";
457 }
458 .glyphicon-align-left:before {
459 content: "\e052";
460 }
461 .glyphicon-align-center:before {
462 content: "\e053";
463 }
464 .glyphicon-align-right:before {
465 content: "\e054";
466 }
467 .glyphicon-align-justify:before {
468 content: "\e055";
469 }
470 .glyphicon-list:before {
471 content: "\e056";
472 }
473 .glyphicon-indent-left:before {
474 content: "\e057";
475 }
476 .glyphicon-indent-right:before {
477 content: "\e058";
478 }
479 .glyphicon-facetime-video:before {
480 content: "\e059";
481 }
482 .glyphicon-picture:before {
483 content: "\e060";
484 }
485 .glyphicon-map-marker:before {
486 content: "\e062";
487 }
488 .glyphicon-adjust:before {
489 content: "\e063";
490 }
491 .glyphicon-tint:before {
492 content: "\e064";
493 }
494 .glyphicon-edit:before {
495 content: "\e065";
496 }
497 .glyphicon-share:before {
498 content: "\e066";
499 }
500 .glyphicon-check:before {
501 content: "\e067";
502 }
503 .glyphicon-move:before {
504 content: "\e068";
505 }
506 .glyphicon-step-backward:before {
507 content: "\e069";
508 }
509 .glyphicon-fast-backward:before {
510 content: "\e070";
511 }
512 .glyphicon-backward:before {
513 content: "\e071";
514 }
515 .glyphicon-play:before {
516 content: "\e072";
517 }
518 .glyphicon-pause:before {
519 content: "\e073";
520 }
521 .glyphicon-stop:before {
522 content: "\e074";
523 }
524 .glyphicon-forward:before {
525 content: "\e075";
526 }
527 .glyphicon-fast-forward:before {
528 content: "\e076";
529 }
530 .glyphicon-step-forward:before {
531 content: "\e077";
532 }
533 .glyphicon-eject:before {
534 content: "\e078";
535 }
536 .glyphicon-chevron-left:before {
537 content: "\e079";
538 }
539 .glyphicon-chevron-right:before {
540 content: "\e080";
541 }
542 .glyphicon-plus-sign:before {
543 content: "\e081";
544 }
545 .glyphicon-minus-sign:before {
546 content: "\e082";
547 }
548 .glyphicon-remove-sign:before {
549 content: "\e083";
550 }
551 .glyphicon-ok-sign:before {
552 content: "\e084";
553 }
554 .glyphicon-question-sign:before {
555 content: "\e085";
556 }
557 .glyphicon-info-sign:before {
558 content: "\e086";
559 }
560 .glyphicon-screenshot:before {
561 content: "\e087";
562 }
563 .glyphicon-remove-circle:before {
564 content: "\e088";
565 }
566 .glyphicon-ok-circle:before {
567 content: "\e089";
568 }
569 .glyphicon-ban-circle:before {
570 content: "\e090";
571 }
572 .glyphicon-arrow-left:before {
573 content: "\e091";
574 }
575 .glyphicon-arrow-right:before {
576 content: "\e092";
577 }
578 .glyphicon-arrow-up:before {
579 content: "\e093";
580 }
581 .glyphicon-arrow-down:before {
582 content: "\e094";
583 }
584 .glyphicon-share-alt:before {
585 content: "\e095";
586 }
587 .glyphicon-resize-full:before {
588 content: "\e096";
589 }
590 .glyphicon-resize-small:before {
591 content: "\e097";
592 }
593 .glyphicon-exclamation-sign:before {
594 content: "\e101";
595 }
596 .glyphicon-gift:before {
597 content: "\e102";
598 }
599 .glyphicon-leaf:before {
600 content: "\e103";
601 }
602 .glyphicon-fire:before {
603 content: "\e104";
604 }
605 .glyphicon-eye-open:before {
606 content: "\e105";
607 }
608 .glyphicon-eye-close:before {
609 content: "\e106";
610 }
611 .glyphicon-warning-sign:before {
612 content: "\e107";
613 }
614 .glyphicon-plane:before {
615 content: "\e108";
616 }
617 .glyphicon-calendar:before {
618 content: "\e109";
619 }
620 .glyphicon-random:before {
621 content: "\e110";
622 }
623 .glyphicon-comment:before {
624 content: "\e111";
625 }
626 .glyphicon-magnet:before {
627 content: "\e112";
628 }
629 .glyphicon-chevron-up:before {
630 content: "\e113";
631 }
632 .glyphicon-chevron-down:before {
633 content: "\e114";
634 }
635 .glyphicon-retweet:before {
636 content: "\e115";
637 }
638 .glyphicon-shopping-cart:before {
639 content: "\e116";
640 }
641 .glyphicon-folder-close:before {
642 content: "\e117";
643 }
644 .glyphicon-folder-open:before {
645 content: "\e118";
646 }
647 .glyphicon-resize-vertical:before {
648 content: "\e119";
649 }
650 .glyphicon-resize-horizontal:before {
651 content: "\e120";
652 }
653 .glyphicon-hdd:before {
654 content: "\e121";
655 }
656 .glyphicon-bullhorn:before {
657 content: "\e122";
658 }
659 .glyphicon-bell:before {
660 content: "\e123";
661 }
662 .glyphicon-certificate:before {
663 content: "\e124";
664 }
665 .glyphicon-thumbs-up:before {
666 content: "\e125";
667 }
668 .glyphicon-thumbs-down:before {
669 content: "\e126";
670 }
671 .glyphicon-hand-right:before {
672 content: "\e127";
673 }
674 .glyphicon-hand-left:before {
675 content: "\e128";
676 }
677 .glyphicon-hand-up:before {
678 content: "\e129";
679 }
680 .glyphicon-hand-down:before {
681 content: "\e130";
682 }
683 .glyphicon-circle-arrow-right:before {
684 content: "\e131";
685 }
686 .glyphicon-circle-arrow-left:before {
687 content: "\e132";
688 }
689 .glyphicon-circle-arrow-up:before {
690 content: "\e133";
691 }
692 .glyphicon-circle-arrow-down:before {
693 content: "\e134";
694 }
695 .glyphicon-globe:before {
696 content: "\e135";
697 }
698 .glyphicon-wrench:before {
699 content: "\e136";
700 }
701 .glyphicon-tasks:before {
702 content: "\e137";
703 }
704 .glyphicon-filter:before {
705 content: "\e138";
706 }
707 .glyphicon-briefcase:before {
708 content: "\e139";
709 }
710 .glyphicon-fullscreen:before {
711 content: "\e140";
712 }
713 .glyphicon-dashboard:before {
714 content: "\e141";
715 }
716 .glyphicon-paperclip:before {
717 content: "\e142";
718 }
719 .glyphicon-heart-empty:before {
720 content: "\e143";
721 }
722 .glyphicon-link:before {
723 content: "\e144";
724 }
725 .glyphicon-phone:before {
726 content: "\e145";
727 }
728 .glyphicon-pushpin:before {
729 content: "\e146";
730 }
731 .glyphicon-usd:before {
732 content: "\e148";
733 }
734 .glyphicon-gbp:before {
735 content: "\e149";
736 }
737 .glyphicon-sort:before {
738 content: "\e150";
739 }
740 .glyphicon-sort-by-alphabet:before {
741 content: "\e151";
742 }
743 .glyphicon-sort-by-alphabet-alt:before {
744 content: "\e152";
745 }
746 .glyphicon-sort-by-order:before {
747 content: "\e153";
748 }
749 .glyphicon-sort-by-order-alt:before {
750 content: "\e154";
751 }
752 .glyphicon-sort-by-attributes:before {
753 content: "\e155";
754 }
755 .glyphicon-sort-by-attributes-alt:before {
756 content: "\e156";
757 }
758 .glyphicon-unchecked:before {
759 content: "\e157";
760 }
761 .glyphicon-expand:before {
762 content: "\e158";
763 }
764 .glyphicon-collapse-down:before {
765 content: "\e159";
766 }
767 .glyphicon-collapse-up:before {
768 content: "\e160";
769 }
770 .glyphicon-log-in:before {
771 content: "\e161";
772 }
773 .glyphicon-flash:before {
774 content: "\e162";
775 }
776 .glyphicon-log-out:before {
777 content: "\e163";
778 }
779 .glyphicon-new-window:before {
780 content: "\e164";
781 }
782 .glyphicon-record:before {
783 content: "\e165";
784 }
785 .glyphicon-save:before {
786 content: "\e166";
787 }
788 .glyphicon-open:before {
789 content: "\e167";
790 }
791 .glyphicon-saved:before {
792 content: "\e168";
793 }
794 .glyphicon-import:before {
795 content: "\e169";
796 }
797 .glyphicon-export:before {
798 content: "\e170";
799 }
800 .glyphicon-send:before {
801 content: "\e171";
802 }
803 .glyphicon-floppy-disk:before {
804 content: "\e172";
805 }
806 .glyphicon-floppy-saved:before {
807 content: "\e173";
808 }
809 .glyphicon-floppy-remove:before {
810 content: "\e174";
811 }
812 .glyphicon-floppy-save:before {
813 content: "\e175";
814 }
815 .glyphicon-floppy-open:before {
816 content: "\e176";
817 }
818 .glyphicon-credit-card:before {
819 content: "\e177";
820 }
821 .glyphicon-transfer:before {
822 content: "\e178";
823 }
824 .glyphicon-cutlery:before {
825 content: "\e179";
826 }
827 .glyphicon-header:before {
828 content: "\e180";
829 }
830 .glyphicon-compressed:before {
831 content: "\e181";
832 }
833 .glyphicon-earphone:before {
834 content: "\e182";
835 }
836 .glyphicon-phone-alt:before {
837 content: "\e183";
838 }
839 .glyphicon-tower:before {
840 content: "\e184";
841 }
842 .glyphicon-stats:before {
843 content: "\e185";
844 }
845 .glyphicon-sd-video:before {
846 content: "\e186";
847 }
848 .glyphicon-hd-video:before {
849 content: "\e187";
850 }
851 .glyphicon-subtitles:before {
852 content: "\e188";
853 }
854 .glyphicon-sound-stereo:before {
855 content: "\e189";
856 }
857 .glyphicon-sound-dolby:before {
858 content: "\e190";
859 }
860 .glyphicon-sound-5-1:before {
861 content: "\e191";
862 }
863 .glyphicon-sound-6-1:before {
864 content: "\e192";
865 }
866 .glyphicon-sound-7-1:before {
867 content: "\e193";
868 }
869 .glyphicon-copyright-mark:before {
870 content: "\e194";
871 }
872 .glyphicon-registration-mark:before {
873 content: "\e195";
874 }
875 .glyphicon-cloud-download:before {
876 content: "\e197";
877 }
878 .glyphicon-cloud-upload:before {
879 content: "\e198";
880 }
881 .glyphicon-tree-conifer:before {
882 content: "\e199";
883 }
884 .glyphicon-tree-deciduous:before {
885 content: "\e200";
886 }
887 .glyphicon-cd:before {
888 content: "\e201";
889 }
890 .glyphicon-save-file:before {
891 content: "\e202";
892 }
893 .glyphicon-open-file:before {
894 content: "\e203";
895 }
896 .glyphicon-level-up:before {
897 content: "\e204";
898 }
899 .glyphicon-copy:before {
900 content: "\e205";
901 }
902 .glyphicon-paste:before {
903 content: "\e206";
904 }
905 .glyphicon-alert:before {
906 content: "\e209";
907 }
908 .glyphicon-equalizer:before {
909 content: "\e210";
910 }
911 .glyphicon-king:before {
912 content: "\e211";
913 }
914 .glyphicon-queen:before {
915 content: "\e212";
916 }
917 .glyphicon-pawn:before {
918 content: "\e213";
919 }
920 .glyphicon-bishop:before {
921 content: "\e214";
922 }
923 .glyphicon-knight:before {
924 content: "\e215";
925 }
926 .glyphicon-baby-formula:before {
927 content: "\e216";
928 }
929 .glyphicon-tent:before {
930 content: "\26fa";
931 }
932 .glyphicon-blackboard:before {
933 content: "\e218";
934 }
935 .glyphicon-bed:before {
936 content: "\e219";
937 }
938 .glyphicon-apple:before {
939 content: "\f8ff";
940 }
941 .glyphicon-erase:before {
942 content: "\e221";
943 }
944 .glyphicon-hourglass:before {
945 content: "\231b";
946 }
947 .glyphicon-lamp:before {
948 content: "\e223";
949 }
950 .glyphicon-duplicate:before {
951 content: "\e224";
952 }
953 .glyphicon-piggy-bank:before {
954 content: "\e225";
955 }
956 .glyphicon-scissors:before {
957 content: "\e226";
958 }
959 .glyphicon-bitcoin:before {
960 content: "\e227";
961 }
962 .glyphicon-btc:before {
963 content: "\e227";
964 }
965 .glyphicon-xbt:before {
966 content: "\e227";
967 }
968 .glyphicon-yen:before {
969 content: "\00a5";
970 }
971 .glyphicon-jpy:before {
972 content: "\00a5";
973 }
974 .glyphicon-ruble:before {
975 content: "\20bd";
976 }
977 .glyphicon-rub:before {
978 content: "\20bd";
979 }
980 .glyphicon-scale:before {
981 content: "\e230";
982 }
983 .glyphicon-ice-lolly:before {
984 content: "\e231";
985 }
986 .glyphicon-ice-lolly-tasted:before {
987 content: "\e232";
988 }
989 .glyphicon-education:before {
990 content: "\e233";
991 }
992 .glyphicon-option-horizontal:before {
993 content: "\e234";
994 }
995 .glyphicon-option-vertical:before {
996 content: "\e235";
997 }
998 .glyphicon-menu-hamburger:before {
999 content: "\e236";
1000 }
1001 .glyphicon-modal-window:before {
1002 content: "\e237";
1003 }
1004 .glyphicon-oil:before {
1005 content: "\e238";
1006 }
1007 .glyphicon-grain:before {
1008 content: "\e239";
1009 }
1010 .glyphicon-sunglasses:before {
1011 content: "\e240";
1012 }
1013 .glyphicon-text-size:before {
1014 content: "\e241";
1015 }
1016 .glyphicon-text-color:before {
1017 content: "\e242";
1018 }
1019 .glyphicon-text-background:before {
1020 content: "\e243";
1021 }
1022 .glyphicon-object-align-top:before {
1023 content: "\e244";
1024 }
1025 .glyphicon-object-align-bottom:before {
1026 content: "\e245";
1027 }
1028 .glyphicon-object-align-horizontal:before {
1029 content: "\e246";
1030 }
1031 .glyphicon-object-align-left:before {
1032 content: "\e247";
1033 }
1034 .glyphicon-object-align-vertical:before {
1035 content: "\e248";
1036 }
1037 .glyphicon-object-align-right:before {
1038 content: "\e249";
1039 }
1040 .glyphicon-triangle-right:before {
1041 content: "\e250";
1042 }
1043 .glyphicon-triangle-left:before {
1044 content: "\e251";
1045 }
1046 .glyphicon-triangle-bottom:before {
1047 content: "\e252";
1048 }
1049 .glyphicon-triangle-top:before {
1050 content: "\e253";
1051 }
1052 .glyphicon-console:before {
1053 content: "\e254";
1054 }
1055 .glyphicon-superscript:before {
1056 content: "\e255";
1057 }
1058 .glyphicon-subscript:before {
1059 content: "\e256";
1060 }
1061 .glyphicon-menu-left:before {
1062 content: "\e257";
1063 }
1064 .glyphicon-menu-right:before {
1065 content: "\e258";
1066 }
1067 .glyphicon-menu-down:before {
1068 content: "\e259";
1069 }
1070 .glyphicon-menu-up:before {
1071 content: "\e260";
1072 }
1073 * {
1074 -webkit-box-sizing: border-box;
1075 -moz-box-sizing: border-box;
1076 box-sizing: border-box;
1077 }
1078 *:before,
1079 *:after {
1080 -webkit-box-sizing: border-box;
1081 -moz-box-sizing: border-box;
1082 box-sizing: border-box;
1083 }
1084 html {
1085 font-size: 10px;
1086
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1088 }
1089 body {
1090 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1091 font-size: 14px;
1092 line-height: 1.42857143;
1093 color: #333;
1094 background-color: #fff;
1095 }
1096 input,
1097 button,
1098 select,
1099 textarea {
1100 font-family: inherit;
1101 font-size: inherit;
1102 line-height: inherit;
1103 }
1104 a {
1105 color: #337ab7;
1106 text-decoration: none;
1107 }
1108 a:hover,
1109 a:focus {
1110 color: #23527c;
1111 text-decoration: underline;
1112 }
1113 a:focus {
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1116 }
1117 figure {
1118 margin: 0;
1119 }
1120 img {
1121 vertical-align: middle;
1122 }
1123 .img-responsive,
1124 .thumbnail > img,
1125 .thumbnail a > img,
1126 .carousel-inner > .item > img,
1127 .carousel-inner > .item > a > img {
1128 display: block;
1129 max-width: 100%;
1130 height: auto;
1131 }
1132 .img-rounded {
1133 border-radius: 6px;
1134 }
1135 .img-thumbnail {
1136 display: inline-block;
1137 max-width: 100%;
1138 height: auto;
1139 padding: 4px;
1140 line-height: 1.42857143;
1141 background-color: #fff;
1142 border: 1px solid #ddd;
1143 border-radius: 4px;
1144 -webkit-transition: all .2s ease-in-out;
1145 -o-transition: all .2s ease-in-out;
1146 transition: all .2s ease-in-out;
1147 }
1148 .img-circle {
1149 border-radius: 50%;
1150 }
1151 hr {
1152 margin-top: 20px;
1153 margin-bottom: 20px;
1154 border: 0;
1155 border-top: 1px solid #eee;
1156 }
1157 .sr-only {
1158 position: absolute;
1159 width: 1px;
1160 height: 1px;
1161 padding: 0;
1162 margin: -1px;
1163 overflow: hidden;
1164 clip: rect(0, 0, 0, 0);
1165 border: 0;
1166 }
1167 .sr-only-focusable:active,
1168 .sr-only-focusable:focus {
1169 position: static;
1170 width: auto;
1171 height: auto;
1172 margin: 0;
1173 overflow: visible;
1174 clip: auto;
1175 }
1176 [role="button"] {
1177 cursor: pointer;
1178 }
1179 h1,
1180 h2,
1181 h3,
1182 h4,
1183 h5,
1184 h6,
1185 .h1,
1186 .h2,
1187 .h3,
1188 .h4,
1189 .h5,
1190 .h6 {
1191 font-family: inherit;
1192 font-weight: 500;
1193 line-height: 1.1;
1194 color: inherit;
1195 }
1196 h1 small,
1197 h2 small,
1198 h3 small,
1199 h4 small,
1200 h5 small,
1201 h6 small,
1202 .h1 small,
1203 .h2 small,
1204 .h3 small,
1205 .h4 small,
1206 .h5 small,
1207 .h6 small,
1208 h1 .small,
1209 h2 .small,
1210 h3 .small,
1211 h4 .small,
1212 h5 .small,
1213 h6 .small,
1214 .h1 .small,
1215 .h2 .small,
1216 .h3 .small,
1217 .h4 .small,
1218 .h5 .small,
1219 .h6 .small {
1220 font-weight: normal;
1221 line-height: 1;
1222 color: #777;
1223 }
1224 h1,
1225 .h1,
1226 h2,
1227 .h2,
1228 h3,
1229 .h3 {
1230 margin-top: 20px;
1231 margin-bottom: 10px;
1232 }
1233 h1 small,
1234 .h1 small,
1235 h2 small,
1236 .h2 small,
1237 h3 small,
1238 .h3 small,
1239 h1 .small,
1240 .h1 .small,
1241 h2 .small,
1242 .h2 .small,
1243 h3 .small,
1244 .h3 .small {
1245 font-size: 65%;
1246 }
1247 h4,
1248 .h4,
1249 h5,
1250 .h5,
1251 h6,
1252 .h6 {
1253 margin-top: 10px;
1254 margin-bottom: 10px;
1255 }
1256 h4 small,
1257 .h4 small,
1258 h5 small,
1259 .h5 small,
1260 h6 small,
1261 .h6 small,
1262 h4 .small,
1263 .h4 .small,
1264 h5 .small,
1265 .h5 .small,
1266 h6 .small,
1267 .h6 .small {
1268 font-size: 75%;
1269 }
1270 h1,
1271 .h1 {
1272 font-size: 36px;
1273 }
1274 h2,
1275 .h2 {
1276 font-size: 30px;
1277 }
1278 h3,
1279 .h3 {
1280 font-size: 24px;
1281 }
1282 h4,
1283 .h4 {
1284 font-size: 18px;
1285 }
1286 h5,
1287 .h5 {
1288 font-size: 14px;
1289 }
1290 h6,
1291 .h6 {
1292 font-size: 12px;
1293 }
1294 p {
1295 margin: 0 0 10px;
1296 }
1297 .lead {
1298 margin-bottom: 20px;
1299 font-size: 16px;
1300 font-weight: 300;
1301 line-height: 1.4;
1302 }
1303 @media (min-width: 768px) {
1304 .lead {
1305 font-size: 21px;
1306 }
1307 }
1308 small,
1309 .small {
1310 font-size: 85%;
1311 }
1312 mark,
1313 .mark {
1314 padding: .2em;
1315 background-color: #fcf8e3;
1316 }
1317 .text-left {
1318 text-align: left;
1319 }
1320 .text-right {
1321 text-align: right;
1322 }
1323 .text-center {
1324 text-align: center;
1325 }
1326 .text-justify {
1327 text-align: justify;
1328 }
1329 .text-nowrap {
1330 white-space: nowrap;
1331 }
1332 .text-lowercase {
1333 text-transform: lowercase;
1334 }
1335 .text-uppercase {
1336 text-transform: uppercase;
1337 }
1338 .text-capitalize {
1339 text-transform: capitalize;
1340 }
1341 .text-muted {
1342 color: #777;
1343 }
1344 .text-primary {
1345 color: #337ab7;
1346 }
1347 a.text-primary:hover,
1348 a.text-primary:focus {
1349 color: #286090;
1350 }
1351 .text-success {
1352 color: #3c763d;
1353 }
1354 a.text-success:hover,
1355 a.text-success:focus {
1356 color: #2b542c;
1357 }
1358 .text-info {
1359 color: #31708f;
1360 }
1361 a.text-info:hover,
1362 a.text-info:focus {
1363 color: #245269;
1364 }
1365 .text-warning {
1366 color: #8a6d3b;
1367 }
1368 a.text-warning:hover,
1369 a.text-warning:focus {
1370 color: #66512c;
1371 }
1372 .text-danger {
1373 color: #a94442;
1374 }
1375 a.text-danger:hover,
1376 a.text-danger:focus {
1377 color: #843534;
1378 }
1379 .bg-primary {
1380 color: #fff;
1381 background-color: #337ab7;
1382 }
1383 a.bg-primary:hover,
1384 a.bg-primary:focus {
1385 background-color: #286090;
1386 }
1387 .bg-success {
1388 background-color: #dff0d8;
1389 }
1390 a.bg-success:hover,
1391 a.bg-success:focus {
1392 background-color: #c1e2b3;
1393 }
1394 .bg-info {
1395 background-color: #d9edf7;
1396 }
1397 a.bg-info:hover,
1398 a.bg-info:focus {
1399 background-color: #afd9ee;
1400 }
1401 .bg-warning {
1402 background-color: #fcf8e3;
1403 }
1404 a.bg-warning:hover,
1405 a.bg-warning:focus {
1406 background-color: #f7ecb5;
1407 }
1408 .bg-danger {
1409 background-color: #f2dede;
1410 }
1411 a.bg-danger:hover,
1412 a.bg-danger:focus {
1413 background-color: #e4b9b9;
1414 }
1415 .page-header {
1416 padding-bottom: 9px;
1417 margin: 40px 0 20px;
1418 border-bottom: 1px solid #eee;
1419 }
1420 ul,
1421 ol {
1422 margin-top: 0;
1423 margin-bottom: 10px;
1424 }
1425 ul ul,
1426 ol ul,
1427 ul ol,
1428 ol ol {
1429 margin-bottom: 0;
1430 }
1431 .list-unstyled {
1432 padding-left: 0;
1433 list-style: none;
1434 }
1435 .list-inline {
1436 padding-left: 0;
1437 margin-left: -5px;
1438 list-style: none;
1439 }
1440 .list-inline > li {
1441 display: inline-block;
1442 padding-right: 5px;
1443 padding-left: 5px;
1444 }
1445 dl {
1446 margin-top: 0;
1447 margin-bottom: 20px;
1448 }
1449 dt,
1450 dd {
1451 line-height: 1.42857143;
1452 }
1453 dt {
1454 font-weight: bold;
1455 }
1456 dd {
1457 margin-left: 0;
1458 }
1459 @media (min-width: 768px) {
1460 .dl-horizontal dt {
1461 float: left;
1462 width: 160px;
1463 overflow: hidden;
1464 clear: left;
1465 text-align: right;
1466 text-overflow: ellipsis;
1467 white-space: nowrap;
1468 }
1469 .dl-horizontal dd {
1470 margin-left: 180px;
1471 }
1472 }
1473 abbr[title],
1474 abbr[data-original-title] {
1475 cursor: help;
1476 border-bottom: 1px dotted #777;
1477 }
1478 .initialism {
1479 font-size: 90%;
1480 text-transform: uppercase;
1481 }
1482 blockquote {
1483 padding: 10px 20px;
1484 margin: 0 0 20px;
1485 font-size: 17.5px;
1486 border-left: 5px solid #eee;
1487 }
1488 blockquote p:last-child,
1489 blockquote ul:last-child,
1490 blockquote ol:last-child {
1491 margin-bottom: 0;
1492 }
1493 blockquote footer,
1494 blockquote small,
1495 blockquote .small {
1496 display: block;
1497 font-size: 80%;
1498 line-height: 1.42857143;
1499 color: #777;
1500 }
1501 blockquote footer:before,
1502 blockquote small:before,
1503 blockquote .small:before {
1504 content: '\2014 \00A0';
1505 }
1506 .blockquote-reverse,
1507 blockquote.pull-right {
1508 padding-right: 15px;
1509 padding-left: 0;
1510 text-align: right;
1511 border-right: 5px solid #eee;
1512 border-left: 0;
1513 }
1514 .blockquote-reverse footer:before,
1515 blockquote.pull-right footer:before,
1516 .blockquote-reverse small:before,
1517 blockquote.pull-right small:before,
1518 .blockquote-reverse .small:before,
1519 blockquote.pull-right .small:before {
1520 content: '';
1521 }
1522 .blockquote-reverse footer:after,
1523 blockquote.pull-right footer:after,
1524 .blockquote-reverse small:after,
1525 blockquote.pull-right small:after,
1526 .blockquote-reverse .small:after,
1527 blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1529 }
1530 address {
1531 margin-bottom: 20px;
1532 font-style: normal;
1533 line-height: 1.42857143;
1534 }
1535 code,
1536 kbd,
1537 pre,
1538 samp {
1539 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1540 }
1541 code {
1542 padding: 2px 4px;
1543 font-size: 90%;
1544 color: #c7254e;
1545 background-color: #f9f2f4;
1546 border-radius: 4px;
1547 }
1548 kbd {
1549 padding: 2px 4px;
1550 font-size: 90%;
1551 color: #fff;
1552 background-color: #333;
1553 border-radius: 3px;
1554 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1555 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1556 }
1557 kbd kbd {
1558 padding: 0;
1559 font-size: 100%;
1560 font-weight: bold;
1561 -webkit-box-shadow: none;
1562 box-shadow: none;
1563 }
1564 pre {
1565 display: block;
1566 padding: 9.5px;
1567 margin: 0 0 10px;
1568 font-size: 13px;
1569 line-height: 1.42857143;
1570 color: #333;
1571 word-break: break-all;
1572 word-wrap: break-word;
1573 background-color: #f5f5f5;
1574 border: 1px solid #ccc;
1575 border-radius: 4px;
1576 }
1577 pre code {
1578 padding: 0;
1579 font-size: inherit;
1580 color: inherit;
1581 white-space: pre-wrap;
1582 background-color: transparent;
1583 border-radius: 0;
1584 }
1585 .pre-scrollable {
1586 max-height: 340px;
1587 overflow-y: scroll;
1588 }
1589 .container {
1590 padding-right: 15px;
1591 padding-left: 15px;
1592 margin-right: auto;
1593 margin-left: auto;
1594 }
1595 @media (min-width: 768px) {
1596 .container {
1597 width: 750px;
1598 }
1599 }
1600 @media (min-width: 992px) {
1601 .container {
1602 width: 970px;
1603 }
1604 }
1605 @media (min-width: 1200px) {
1606 .container {
1607 width: 1170px;
1608 }
1609 }
1610 .container-fluid {
1611 padding-right: 15px;
1612 padding-left: 15px;
1613 margin-right: auto;
1614 margin-left: auto;
1615 }
1616 .row {
1617 margin-right: -15px;
1618 margin-left: -15px;
1619 }
1620 .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 {
1621 position: relative;
1622 min-height: 1px;
1623 padding-right: 15px;
1624 padding-left: 15px;
1625 }
1626 .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 {
1627 float: left;
1628 }
1629 .col-xs-12 {
1630 width: 100%;
1631 }
1632 .col-xs-11 {
1633 width: 91.66666667%;
1634 }
1635 .col-xs-10 {
1636 width: 83.33333333%;
1637 }
1638 .col-xs-9 {
1639 width: 75%;
1640 }
1641 .col-xs-8 {
1642 width: 66.66666667%;
1643 }
1644 .col-xs-7 {
1645 width: 58.33333333%;
1646 }
1647 .col-xs-6 {
1648 width: 50%;
1649 }
1650 .col-xs-5 {
1651 width: 41.66666667%;
1652 }
1653 .col-xs-4 {
1654 width: 33.33333333%;
1655 }
1656 .col-xs-3 {
1657 width: 25%;
1658 }
1659 .col-xs-2 {
1660 width: 16.66666667%;
1661 }
1662 .col-xs-1 {
1663 width: 8.33333333%;
1664 }
1665 .col-xs-pull-12 {
1666 right: 100%;
1667 }
1668 .col-xs-pull-11 {
1669 right: 91.66666667%;
1670 }
1671 .col-xs-pull-10 {
1672 right: 83.33333333%;
1673 }
1674 .col-xs-pull-9 {
1675 right: 75%;
1676 }
1677 .col-xs-pull-8 {
1678 right: 66.66666667%;
1679 }
1680 .col-xs-pull-7 {
1681 right: 58.33333333%;
1682 }
1683 .col-xs-pull-6 {
1684 right: 50%;
1685 }
1686 .col-xs-pull-5 {
1687 right: 41.66666667%;
1688 }
1689 .col-xs-pull-4 {
1690 right: 33.33333333%;
1691 }
1692 .col-xs-pull-3 {
1693 right: 25%;
1694 }
1695 .col-xs-pull-2 {
1696 right: 16.66666667%;
1697 }
1698 .col-xs-pull-1 {
1699 right: 8.33333333%;
1700 }
1701 .col-xs-pull-0 {
1702 right: auto;
1703 }
1704 .col-xs-push-12 {
1705 left: 100%;
1706 }
1707 .col-xs-push-11 {
1708 left: 91.66666667%;
1709 }
1710 .col-xs-push-10 {
1711 left: 83.33333333%;
1712 }
1713 .col-xs-push-9 {
1714 left: 75%;
1715 }
1716 .col-xs-push-8 {
1717 left: 66.66666667%;
1718 }
1719 .col-xs-push-7 {
1720 left: 58.33333333%;
1721 }
1722 .col-xs-push-6 {
1723 left: 50%;
1724 }
1725 .col-xs-push-5 {
1726 left: 41.66666667%;
1727 }
1728 .col-xs-push-4 {
1729 left: 33.33333333%;
1730 }
1731 .col-xs-push-3 {
1732 left: 25%;
1733 }
1734 .col-xs-push-2 {
1735 left: 16.66666667%;
1736 }
1737 .col-xs-push-1 {
1738 left: 8.33333333%;
1739 }
1740 .col-xs-push-0 {
1741 left: auto;
1742 }
1743 .col-xs-offset-12 {
1744 margin-left: 100%;
1745 }
1746 .col-xs-offset-11 {
1747 margin-left: 91.66666667%;
1748 }
1749 .col-xs-offset-10 {
1750 margin-left: 83.33333333%;
1751 }
1752 .col-xs-offset-9 {
1753 margin-left: 75%;
1754 }
1755 .col-xs-offset-8 {
1756 margin-left: 66.66666667%;
1757 }
1758 .col-xs-offset-7 {
1759 margin-left: 58.33333333%;
1760 }
1761 .col-xs-offset-6 {
1762 margin-left: 50%;
1763 }
1764 .col-xs-offset-5 {
1765 margin-left: 41.66666667%;
1766 }
1767 .col-xs-offset-4 {
1768 margin-left: 33.33333333%;
1769 }
1770 .col-xs-offset-3 {
1771 margin-left: 25%;
1772 }
1773 .col-xs-offset-2 {
1774 margin-left: 16.66666667%;
1775 }
1776 .col-xs-offset-1 {
1777 margin-left: 8.33333333%;
1778 }
1779 .col-xs-offset-0 {
1780 margin-left: 0;
1781 }
1782 @media (min-width: 768px) {
1783 .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 {
1784 float: left;
1785 }
1786 .col-sm-12 {
1787 width: 100%;
1788 }
1789 .col-sm-11 {
1790 width: 91.66666667%;
1791 }
1792 .col-sm-10 {
1793 width: 83.33333333%;
1794 }
1795 .col-sm-9 {
1796 width: 75%;
1797 }
1798 .col-sm-8 {
1799 width: 66.66666667%;
1800 }
1801 .col-sm-7 {
1802 width: 58.33333333%;
1803 }
1804 .col-sm-6 {
1805 width: 50%;
1806 }
1807 .col-sm-5 {
1808 width: 41.66666667%;
1809 }
1810 .col-sm-4 {
1811 width: 33.33333333%;
1812 }
1813 .col-sm-3 {
1814 width: 25%;
1815 }
1816 .col-sm-2 {
1817 width: 16.66666667%;
1818 }
1819 .col-sm-1 {
1820 width: 8.33333333%;
1821 }
1822 .col-sm-pull-12 {
1823 right: 100%;
1824 }
1825 .col-sm-pull-11 {
1826 right: 91.66666667%;
1827 }
1828 .col-sm-pull-10 {
1829 right: 83.33333333%;
1830 }
1831 .col-sm-pull-9 {
1832 right: 75%;
1833 }
1834 .col-sm-pull-8 {
1835 right: 66.66666667%;
1836 }
1837 .col-sm-pull-7 {
1838 right: 58.33333333%;
1839 }
1840 .col-sm-pull-6 {
1841 right: 50%;
1842 }
1843 .col-sm-pull-5 {
1844 right: 41.66666667%;
1845 }
1846 .col-sm-pull-4 {
1847 right: 33.33333333%;
1848 }
1849 .col-sm-pull-3 {
1850 right: 25%;
1851 }
1852 .col-sm-pull-2 {
1853 right: 16.66666667%;
1854 }
1855 .col-sm-pull-1 {
1856 right: 8.33333333%;
1857 }
1858 .col-sm-pull-0 {
1859 right: auto;
1860 }
1861 .col-sm-push-12 {
1862 left: 100%;
1863 }
1864 .col-sm-push-11 {
1865 left: 91.66666667%;
1866 }
1867 .col-sm-push-10 {
1868 left: 83.33333333%;
1869 }
1870 .col-sm-push-9 {
1871 left: 75%;
1872 }
1873 .col-sm-push-8 {
1874 left: 66.66666667%;
1875 }
1876 .col-sm-push-7 {
1877 left: 58.33333333%;
1878 }
1879 .col-sm-push-6 {
1880 left: 50%;
1881 }
1882 .col-sm-push-5 {
1883 left: 41.66666667%;
1884 }
1885 .col-sm-push-4 {
1886 left: 33.33333333%;
1887 }
1888 .col-sm-push-3 {
1889 left: 25%;
1890 }
1891 .col-sm-push-2 {
1892 left: 16.66666667%;
1893 }
1894 .col-sm-push-1 {
1895 left: 8.33333333%;
1896 }
1897 .col-sm-push-0 {
1898 left: auto;
1899 }
1900 .col-sm-offset-12 {
1901 margin-left: 100%;
1902 }
1903 .col-sm-offset-11 {
1904 margin-left: 91.66666667%;
1905 }
1906 .col-sm-offset-10 {
1907 margin-left: 83.33333333%;
1908 }
1909 .col-sm-offset-9 {
1910 margin-left: 75%;
1911 }
1912 .col-sm-offset-8 {
1913 margin-left: 66.66666667%;
1914 }
1915 .col-sm-offset-7 {
1916 margin-left: 58.33333333%;
1917 }
1918 .col-sm-offset-6 {
1919 margin-left: 50%;
1920 }
1921 .col-sm-offset-5 {
1922 margin-left: 41.66666667%;
1923 }
1924 .col-sm-offset-4 {
1925 margin-left: 33.33333333%;
1926 }
1927 .col-sm-offset-3 {
1928 margin-left: 25%;
1929 }
1930 .col-sm-offset-2 {
1931 margin-left: 16.66666667%;
1932 }
1933 .col-sm-offset-1 {
1934 margin-left: 8.33333333%;
1935 }
1936 .col-sm-offset-0 {
1937 margin-left: 0;
1938 }
1939 }
1940 @media (min-width: 992px) {
1941 .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 {
1942 float: left;
1943 }
1944 .col-md-12 {
1945 width: 100%;
1946 }
1947 .col-md-11 {
1948 width: 91.66666667%;
1949 }
1950 .col-md-10 {
1951 width: 83.33333333%;
1952 }
1953 .col-md-9 {
1954 width: 75%;
1955 }
1956 .col-md-8 {
1957 width: 66.66666667%;
1958 }
1959 .col-md-7 {
1960 width: 58.33333333%;
1961 }
1962 .col-md-6 {
1963 width: 50%;
1964 }
1965 .col-md-5 {
1966 width: 41.66666667%;
1967 }
1968 .col-md-4 {
1969 width: 33.33333333%;
1970 }
1971 .col-md-3 {
1972 width: 25%;
1973 }
1974 .col-md-2 {
1975 width: 16.66666667%;
1976 }
1977 .col-md-1 {
1978 width: 8.33333333%;
1979 }
1980 .col-md-pull-12 {
1981 right: 100%;
1982 }
1983 .col-md-pull-11 {
1984 right: 91.66666667%;
1985 }
1986 .col-md-pull-10 {
1987 right: 83.33333333%;
1988 }
1989 .col-md-pull-9 {
1990 right: 75%;
1991 }
1992 .col-md-pull-8 {
1993 right: 66.66666667%;
1994 }
1995 .col-md-pull-7 {
1996 right: 58.33333333%;
1997 }
1998 .col-md-pull-6 {
1999 right: 50%;
2000 }
2001 .col-md-pull-5 {
2002 right: 41.66666667%;
2003 }
2004 .col-md-pull-4 {
2005 right: 33.33333333%;
2006 }
2007 .col-md-pull-3 {
2008 right: 25%;
2009 }
2010 .col-md-pull-2 {
2011 right: 16.66666667%;
2012 }
2013 .col-md-pull-1 {
2014 right: 8.33333333%;
2015 }
2016 .col-md-pull-0 {
2017 right: auto;
2018 }
2019 .col-md-push-12 {
2020 left: 100%;
2021 }
2022 .col-md-push-11 {
2023 left: 91.66666667%;
2024 }
2025 .col-md-push-10 {
2026 left: 83.33333333%;
2027 }
2028 .col-md-push-9 {
2029 left: 75%;
2030 }
2031 .col-md-push-8 {
2032 left: 66.66666667%;
2033 }
2034 .col-md-push-7 {
2035 left: 58.33333333%;
2036 }
2037 .col-md-push-6 {
2038 left: 50%;
2039 }
2040 .col-md-push-5 {
2041 left: 41.66666667%;
2042 }
2043 .col-md-push-4 {
2044 left: 33.33333333%;
2045 }
2046 .col-md-push-3 {
2047 left: 25%;
2048 }
2049 .col-md-push-2 {
2050 left: 16.66666667%;
2051 }
2052 .col-md-push-1 {
2053 left: 8.33333333%;
2054 }
2055 .col-md-push-0 {
2056 left: auto;
2057 }
2058 .col-md-offset-12 {
2059 margin-left: 100%;
2060 }
2061 .col-md-offset-11 {
2062 margin-left: 91.66666667%;
2063 }
2064 .col-md-offset-10 {
2065 margin-left: 83.33333333%;
2066 }
2067 .col-md-offset-9 {
2068 margin-left: 75%;
2069 }
2070 .col-md-offset-8 {
2071 margin-left: 66.66666667%;
2072 }
2073 .col-md-offset-7 {
2074 margin-left: 58.33333333%;
2075 }
2076 .col-md-offset-6 {
2077 margin-left: 50%;
2078 }
2079 .col-md-offset-5 {
2080 margin-left: 41.66666667%;
2081 }
2082 .col-md-offset-4 {
2083 margin-left: 33.33333333%;
2084 }
2085 .col-md-offset-3 {
2086 margin-left: 25%;
2087 }
2088 .col-md-offset-2 {
2089 margin-left: 16.66666667%;
2090 }
2091 .col-md-offset-1 {
2092 margin-left: 8.33333333%;
2093 }
2094 .col-md-offset-0 {
2095 margin-left: 0;
2096 }
2097 }
2098 @media (min-width: 1200px) {
2099 .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 {
2100 float: left;
2101 }
2102 .col-lg-12 {
2103 width: 100%;
2104 }
2105 .col-lg-11 {
2106 width: 91.66666667%;
2107 }
2108 .col-lg-10 {
2109 width: 83.33333333%;
2110 }
2111 .col-lg-9 {
2112 width: 75%;
2113 }
2114 .col-lg-8 {
2115 width: 66.66666667%;
2116 }
2117 .col-lg-7 {
2118 width: 58.33333333%;
2119 }
2120 .col-lg-6 {
2121 width: 50%;
2122 }
2123 .col-lg-5 {
2124 width: 41.66666667%;
2125 }
2126 .col-lg-4 {
2127 width: 33.33333333%;
2128 }
2129 .col-lg-3 {
2130 width: 25%;
2131 }
2132 .col-lg-2 {
2133 width: 16.66666667%;
2134 }
2135 .col-lg-1 {
2136 width: 8.33333333%;
2137 }
2138 .col-lg-pull-12 {
2139 right: 100%;
2140 }
2141 .col-lg-pull-11 {
2142 right: 91.66666667%;
2143 }
2144 .col-lg-pull-10 {
2145 right: 83.33333333%;
2146 }
2147 .col-lg-pull-9 {
2148 right: 75%;
2149 }
2150 .col-lg-pull-8 {
2151 right: 66.66666667%;
2152 }
2153 .col-lg-pull-7 {
2154 right: 58.33333333%;
2155 }
2156 .col-lg-pull-6 {
2157 right: 50%;
2158 }
2159 .col-lg-pull-5 {
2160 right: 41.66666667%;
2161 }
2162 .col-lg-pull-4 {
2163 right: 33.33333333%;
2164 }
2165 .col-lg-pull-3 {
2166 right: 25%;
2167 }
2168 .col-lg-pull-2 {
2169 right: 16.66666667%;
2170 }
2171 .col-lg-pull-1 {
2172 right: 8.33333333%;
2173 }
2174 .col-lg-pull-0 {
2175 right: auto;
2176 }
2177 .col-lg-push-12 {
2178 left: 100%;
2179 }
2180 .col-lg-push-11 {
2181 left: 91.66666667%;
2182 }
2183 .col-lg-push-10 {
2184 left: 83.33333333%;
2185 }
2186 .col-lg-push-9 {
2187 left: 75%;
2188 }
2189 .col-lg-push-8 {
2190 left: 66.66666667%;
2191 }
2192 .col-lg-push-7 {
2193 left: 58.33333333%;
2194 }
2195 .col-lg-push-6 {
2196 left: 50%;
2197 }
2198 .col-lg-push-5 {
2199 left: 41.66666667%;
2200 }
2201 .col-lg-push-4 {
2202 left: 33.33333333%;
2203 }
2204 .col-lg-push-3 {
2205 left: 25%;
2206 }
2207 .col-lg-push-2 {
2208 left: 16.66666667%;
2209 }
2210 .col-lg-push-1 {
2211 left: 8.33333333%;
2212 }
2213 .col-lg-push-0 {
2214 left: auto;
2215 }
2216 .col-lg-offset-12 {
2217 margin-left: 100%;
2218 }
2219 .col-lg-offset-11 {
2220 margin-left: 91.66666667%;
2221 }
2222 .col-lg-offset-10 {
2223 margin-left: 83.33333333%;
2224 }
2225 .col-lg-offset-9 {
2226 margin-left: 75%;
2227 }
2228 .col-lg-offset-8 {
2229 margin-left: 66.66666667%;
2230 }
2231 .col-lg-offset-7 {
2232 margin-left: 58.33333333%;
2233 }
2234 .col-lg-offset-6 {
2235 margin-left: 50%;
2236 }
2237 .col-lg-offset-5 {
2238 margin-left: 41.66666667%;
2239 }
2240 .col-lg-offset-4 {
2241 margin-left: 33.33333333%;
2242 }
2243 .col-lg-offset-3 {
2244 margin-left: 25%;
2245 }
2246 .col-lg-offset-2 {
2247 margin-left: 16.66666667%;
2248 }
2249 .col-lg-offset-1 {
2250 margin-left: 8.33333333%;
2251 }
2252 .col-lg-offset-0 {
2253 margin-left: 0;
2254 }
2255 }
2256 table {
2257 background-color: transparent;
2258 }
2259 caption {
2260 padding-top: 8px;
2261 padding-bottom: 8px;
2262 color: #777;
2263 text-align: left;
2264 }
2265 th {
2266 text-align: left;
2267 }
2268 .table {
2269 width: 100%;
2270 max-width: 100%;
2271 margin-bottom: 20px;
2272 }
2273 .table > thead > tr > th,
2274 .table > tbody > tr > th,
2275 .table > tfoot > tr > th,
2276 .table > thead > tr > td,
2277 .table > tbody > tr > td,
2278 .table > tfoot > tr > td {
2279 padding: 8px;
2280 line-height: 1.42857143;
2281 vertical-align: top;
2282 border-top: 1px solid #ddd;
2283 }
2284 .table > thead > tr > th {
2285 vertical-align: bottom;
2286 border-bottom: 2px solid #ddd;
2287 }
2288 .table > caption + thead > tr:first-child > th,
2289 .table > colgroup + thead > tr:first-child > th,
2290 .table > thead:first-child > tr:first-child > th,
2291 .table > caption + thead > tr:first-child > td,
2292 .table > colgroup + thead > tr:first-child > td,
2293 .table > thead:first-child > tr:first-child > td {
2294 border-top: 0;
2295 }
2296 .table > tbody + tbody {
2297 border-top: 2px solid #ddd;
2298 }
2299 .table .table {
2300 background-color: #fff;
2301 }
2302 .table-condensed > thead > tr > th,
2303 .table-condensed > tbody > tr > th,
2304 .table-condensed > tfoot > tr > th,
2305 .table-condensed > thead > tr > td,
2306 .table-condensed > tbody > tr > td,
2307 .table-condensed > tfoot > tr > td {
2308 padding: 5px;
2309 }
2310 .table-bordered {
2311 border: 1px solid #ddd;
2312 }
2313 .table-bordered > thead > tr > th,
2314 .table-bordered > tbody > tr > th,
2315 .table-bordered > tfoot > tr > th,
2316 .table-bordered > thead > tr > td,
2317 .table-bordered > tbody > tr > td,
2318 .table-bordered > tfoot > tr > td {
2319 border: 1px solid #ddd;
2320 }
2321 .table-bordered > thead > tr > th,
2322 .table-bordered > thead > tr > td {
2323 border-bottom-width: 2px;
2324 }
2325 .table-striped > tbody > tr:nth-of-type(odd) {
2326 background-color: #f9f9f9;
2327 }
2328 .table-hover > tbody > tr:hover {
2329 background-color: #f5f5f5;
2330 }
2331 table col[class*="col-"] {
2332 position: static;
2333 display: table-column;
2334 float: none;
2335 }
2336 table td[class*="col-"],
2337 table th[class*="col-"] {
2338 position: static;
2339 display: table-cell;
2340 float: none;
2341 }
2342 .table > thead > tr > td.active,
2343 .table > tbody > tr > td.active,
2344 .table > tfoot > tr > td.active,
2345 .table > thead > tr > th.active,
2346 .table > tbody > tr > th.active,
2347 .table > tfoot > tr > th.active,
2348 .table > thead > tr.active > td,
2349 .table > tbody > tr.active > td,
2350 .table > tfoot > tr.active > td,
2351 .table > thead > tr.active > th,
2352 .table > tbody > tr.active > th,
2353 .table > tfoot > tr.active > th {
2354 background-color: #f5f5f5;
2355 }
2356 .table-hover > tbody > tr > td.active:hover,
2357 .table-hover > tbody > tr > th.active:hover,
2358 .table-hover > tbody > tr.active:hover > td,
2359 .table-hover > tbody > tr:hover > .active,
2360 .table-hover > tbody > tr.active:hover > th {
2361 background-color: #e8e8e8;
2362 }
2363 .table > thead > tr > td.success,
2364 .table > tbody > tr > td.success,
2365 .table > tfoot > tr > td.success,
2366 .table > thead > tr > th.success,
2367 .table > tbody > tr > th.success,
2368 .table > tfoot > tr > th.success,
2369 .table > thead > tr.success > td,
2370 .table > tbody > tr.success > td,
2371 .table > tfoot > tr.success > td,
2372 .table > thead > tr.success > th,
2373 .table > tbody > tr.success > th,
2374 .table > tfoot > tr.success > th {
2375 background-color: #dff0d8;
2376 }
2377 .table-hover > tbody > tr > td.success:hover,
2378 .table-hover > tbody > tr > th.success:hover,
2379 .table-hover > tbody > tr.success:hover > td,
2380 .table-hover > tbody > tr:hover > .success,
2381 .table-hover > tbody > tr.success:hover > th {
2382 background-color: #d0e9c6;
2383 }
2384 .table > thead > tr > td.info,
2385 .table > tbody > tr > td.info,
2386 .table > tfoot > tr > td.info,
2387 .table > thead > tr > th.info,
2388 .table > tbody > tr > th.info,
2389 .table > tfoot > tr > th.info,
2390 .table > thead > tr.info > td,
2391 .table > tbody > tr.info > td,
2392 .table > tfoot > tr.info > td,
2393 .table > thead > tr.info > th,
2394 .table > tbody > tr.info > th,
2395 .table > tfoot > tr.info > th {
2396 background-color: #d9edf7;
2397 }
2398 .table-hover > tbody > tr > td.info:hover,
2399 .table-hover > tbody > tr > th.info:hover,
2400 .table-hover > tbody > tr.info:hover > td,
2401 .table-hover > tbody > tr:hover > .info,
2402 .table-hover > tbody > tr.info:hover > th {
2403 background-color: #c4e3f3;
2404 }
2405 .table > thead > tr > td.warning,
2406 .table > tbody > tr > td.warning,
2407 .table > tfoot > tr > td.warning,
2408 .table > thead > tr > th.warning,
2409 .table > tbody > tr > th.warning,
2410 .table > tfoot > tr > th.warning,
2411 .table > thead > tr.warning > td,
2412 .table > tbody > tr.warning > td,
2413 .table > tfoot > tr.warning > td,
2414 .table > thead > tr.warning > th,
2415 .table > tbody > tr.warning > th,
2416 .table > tfoot > tr.warning > th {
2417 background-color: #fcf8e3;
2418 }
2419 .table-hover > tbody > tr > td.warning:hover,
2420 .table-hover > tbody > tr > th.warning:hover,
2421 .table-hover > tbody > tr.warning:hover > td,
2422 .table-hover > tbody > tr:hover > .warning,
2423 .table-hover > tbody > tr.warning:hover > th {
2424 background-color: #faf2cc;
2425 }
2426 .table > thead > tr > td.danger,
2427 .table > tbody > tr > td.danger,
2428 .table > tfoot > tr > td.danger,
2429 .table > thead > tr > th.danger,
2430 .table > tbody > tr > th.danger,
2431 .table > tfoot > tr > th.danger,
2432 .table > thead > tr.danger > td,
2433 .table > tbody > tr.danger > td,
2434 .table > tfoot > tr.danger > td,
2435 .table > thead > tr.danger > th,
2436 .table > tbody > tr.danger > th,
2437 .table > tfoot > tr.danger > th {
2438 background-color: #f2dede;
2439 }
2440 .table-hover > tbody > tr > td.danger:hover,
2441 .table-hover > tbody > tr > th.danger:hover,
2442 .table-hover > tbody > tr.danger:hover > td,
2443 .table-hover > tbody > tr:hover > .danger,
2444 .table-hover > tbody > tr.danger:hover > th {
2445 background-color: #ebcccc;
2446 }
2447 .table-responsive {
2448 min-height: .01%;
2449 overflow-x: auto;
2450 }
2451 @media screen and (max-width: 767px) {
2452 .table-responsive {
2453 width: 100%;
2454 margin-bottom: 15px;
2455 overflow-y: hidden;
2456 -ms-overflow-style: -ms-autohiding-scrollbar;
2457 border: 1px solid #ddd;
2458 }
2459 .table-responsive > .table {
2460 margin-bottom: 0;
2461 }
2462 .table-responsive > .table > thead > tr > th,
2463 .table-responsive > .table > tbody > tr > th,
2464 .table-responsive > .table > tfoot > tr > th,
2465 .table-responsive > .table > thead > tr > td,
2466 .table-responsive > .table > tbody > tr > td,
2467 .table-responsive > .table > tfoot > tr > td {
2468 white-space: nowrap;
2469 }
2470 .table-responsive > .table-bordered {
2471 border: 0;
2472 }
2473 .table-responsive > .table-bordered > thead > tr > th:first-child,
2474 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2475 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2476 .table-responsive > .table-bordered > thead > tr > td:first-child,
2477 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2478 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2479 border-left: 0;
2480 }
2481 .table-responsive > .table-bordered > thead > tr > th:last-child,
2482 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2483 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2484 .table-responsive > .table-bordered > thead > tr > td:last-child,
2485 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2486 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2487 border-right: 0;
2488 }
2489 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2490 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2491 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2492 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2493 border-bottom: 0;
2494 }
2495 }
2496 fieldset {
2497 min-width: 0;
2498 padding: 0;
2499 margin: 0;
2500 border: 0;
2501 }
2502 legend {
2503 display: block;
2504 width: 100%;
2505 padding: 0;
2506 margin-bottom: 20px;
2507 font-size: 21px;
2508 line-height: inherit;
2509 color: #333;
2510 border: 0;
2511 border-bottom: 1px solid #e5e5e5;
2512 }
2513 label {
2514 display: inline-block;
2515 max-width: 100%;
2516 margin-bottom: 5px;
2517 font-weight: bold;
2518 }
2519 input[type="search"] {
2520 -webkit-box-sizing: border-box;
2521 -moz-box-sizing: border-box;
2522 box-sizing: border-box;
2523 }
2524 input[type="radio"],
2525 input[type="checkbox"] {
2526 margin: 4px 0 0;
2527 margin-top: 1px \9;
2528 line-height: normal;
2529 }
2530 input[type="file"] {
2531 display: block;
2532 }
2533 input[type="range"] {
2534 display: block;
2535 width: 100%;
2536 }
2537 select[multiple],
2538 select[size] {
2539 height: auto;
2540 }
2541 input[type="file"]:focus,
2542 input[type="radio"]:focus,
2543 input[type="checkbox"]:focus {
2544 outline: 5px auto -webkit-focus-ring-color;
2545 outline-offset: -2px;
2546 }
2547 output {
2548 display: block;
2549 padding-top: 7px;
2550 font-size: 14px;
2551 line-height: 1.42857143;
2552 color: #555;
2553 }
2554 .form-control {
2555 display: block;
2556 width: 100%;
2557 height: 34px;
2558 padding: 6px 12px;
2559 font-size: 14px;
2560 line-height: 1.42857143;
2561 color: #555;
2562 background-color: #fff;
2563 background-image: none;
2564 border: 1px solid #ccc;
2565 border-radius: 4px;
2566 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2567 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2568 -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2569 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2570 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2571 }
2572 .form-control:focus {
2573 border-color: #66afe9;
2574 outline: 0;
2575 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2576 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2577 }
2578 .form-control::-moz-placeholder {
2579 color: #999;
2580 opacity: 1;
2581 }
2582 .form-control:-ms-input-placeholder {
2583 color: #999;
2584 }
2585 .form-control::-webkit-input-placeholder {
2586 color: #999;
2587 }
2588 .form-control::-ms-expand {
2589 background-color: transparent;
2590 border: 0;
2591 }
2592 .form-control[disabled],
2593 .form-control[readonly],
2594 fieldset[disabled] .form-control {
2595 background-color: #eee;
2596 opacity: 1;
2597 }
2598 .form-control[disabled],
2599 fieldset[disabled] .form-control {
2600 cursor: not-allowed;
2601 }
2602 textarea.form-control {
2603 height: auto;
2604 }
2605 input[type="search"] {
2606 -webkit-appearance: none;
2607 }
2608 @media screen and (-webkit-min-device-pixel-ratio: 0) {
2609 input[type="date"].form-control,
2610 input[type="time"].form-control,
2611 input[type="datetime-local"].form-control,
2612 input[type="month"].form-control {
2613 line-height: 34px;
2614 }
2615 input[type="date"].input-sm,
2616 input[type="time"].input-sm,
2617 input[type="datetime-local"].input-sm,
2618 input[type="month"].input-sm,
2619 .input-group-sm input[type="date"],
2620 .input-group-sm input[type="time"],
2621 .input-group-sm input[type="datetime-local"],
2622 .input-group-sm input[type="month"] {
2623 line-height: 30px;
2624 }
2625 input[type="date"].input-lg,
2626 input[type="time"].input-lg,
2627 input[type="datetime-local"].input-lg,
2628 input[type="month"].input-lg,
2629 .input-group-lg input[type="date"],
2630 .input-group-lg input[type="time"],
2631 .input-group-lg input[type="datetime-local"],
2632 .input-group-lg input[type="month"] {
2633 line-height: 46px;
2634 }
2635 }
2636 .form-group {
2637 margin-bottom: 15px;
2638 }
2639 .radio,
2640 .checkbox {
2641 position: relative;
2642 display: block;
2643 margin-top: 10px;
2644 margin-bottom: 10px;
2645 }
2646 .radio label,
2647 .checkbox label {
2648 min-height: 20px;
2649 padding-left: 20px;
2650 margin-bottom: 0;
2651 font-weight: normal;
2652 cursor: pointer;
2653 }
2654 .radio input[type="radio"],
2655 .radio-inline input[type="radio"],
2656 .checkbox input[type="checkbox"],
2657 .checkbox-inline input[type="checkbox"] {
2658 position: absolute;
2659 margin-top: 4px \9;
2660 margin-left: -20px;
2661 }
2662 .radio + .radio,
2663 .checkbox + .checkbox {
2664 margin-top: -5px;
2665 }
2666 .radio-inline,
2667 .checkbox-inline {
2668 position: relative;
2669 display: inline-block;
2670 padding-left: 20px;
2671 margin-bottom: 0;
2672 font-weight: normal;
2673 vertical-align: middle;
2674 cursor: pointer;
2675 }
2676 .radio-inline + .radio-inline,
2677 .checkbox-inline + .checkbox-inline {
2678 margin-top: 0;
2679 margin-left: 10px;
2680 }
2681 input[type="radio"][disabled],
2682 input[type="checkbox"][disabled],
2683 input[type="radio"].disabled,
2684 input[type="checkbox"].disabled,
2685 fieldset[disabled] input[type="radio"],
2686 fieldset[disabled] input[type="checkbox"] {
2687 cursor: not-allowed;
2688 }
2689 .radio-inline.disabled,
2690 .checkbox-inline.disabled,
2691 fieldset[disabled] .radio-inline,
2692 fieldset[disabled] .checkbox-inline {
2693 cursor: not-allowed;
2694 }
2695 .radio.disabled label,
2696 .checkbox.disabled label,
2697 fieldset[disabled] .radio label,
2698 fieldset[disabled] .checkbox label {
2699 cursor: not-allowed;
2700 }
2701 .form-control-static {
2702 min-height: 34px;
2703 padding-top: 7px;
2704 padding-bottom: 7px;
2705 margin-bottom: 0;
2706 }
2707 .form-control-static.input-lg,
2708 .form-control-static.input-sm {
2709 padding-right: 0;
2710 padding-left: 0;
2711 }
2712 .input-sm {
2713 height: 30px;
2714 padding: 5px 10px;
2715 font-size: 12px;
2716 line-height: 1.5;
2717 border-radius: 3px;
2718 }
2719 select.input-sm {
2720 height: 30px;
2721 line-height: 30px;
2722 }
2723 textarea.input-sm,
2724 select[multiple].input-sm {
2725 height: auto;
2726 }
2727 .form-group-sm .form-control {
2728 height: 30px;
2729 padding: 5px 10px;
2730 font-size: 12px;
2731 line-height: 1.5;
2732 border-radius: 3px;
2733 }
2734 .form-group-sm select.form-control {
2735 height: 30px;
2736 line-height: 30px;
2737 }
2738 .form-group-sm textarea.form-control,
2739 .form-group-sm select[multiple].form-control {
2740 height: auto;
2741 }
2742 .form-group-sm .form-control-static {
2743 height: 30px;
2744 min-height: 32px;
2745 padding: 6px 10px;
2746 font-size: 12px;
2747 line-height: 1.5;
2748 }
2749 .input-lg {
2750 height: 46px;
2751 padding: 10px 16px;
2752 font-size: 18px;
2753 line-height: 1.3333333;
2754 border-radius: 6px;
2755 }
2756 select.input-lg {
2757 height: 46px;
2758 line-height: 46px;
2759 }
2760 textarea.input-lg,
2761 select[multiple].input-lg {
2762 height: auto;
2763 }
2764 .form-group-lg .form-control {
2765 height: 46px;
2766 padding: 10px 16px;
2767 font-size: 18px;
2768 line-height: 1.3333333;
2769 border-radius: 6px;
2770 }
2771 .form-group-lg select.form-control {
2772 height: 46px;
2773 line-height: 46px;
2774 }
2775 .form-group-lg textarea.form-control,
2776 .form-group-lg select[multiple].form-control {
2777 height: auto;
2778 }
2779 .form-group-lg .form-control-static {
2780 height: 46px;
2781 min-height: 38px;
2782 padding: 11px 16px;
2783 font-size: 18px;
2784 line-height: 1.3333333;
2785 }
2786 .has-feedback {
2787 position: relative;
2788 }
2789 .has-feedback .form-control {
2790 padding-right: 42.5px;
2791 }
2792 .form-control-feedback {
2793 position: absolute;
2794 top: 0;
2795 right: 0;
2796 z-index: 2;
2797 display: block;
2798 width: 34px;
2799 height: 34px;
2800 line-height: 34px;
2801 text-align: center;
2802 pointer-events: none;
2803 }
2804 .input-lg + .form-control-feedback,
2805 .input-group-lg + .form-control-feedback,
2806 .form-group-lg .form-control + .form-control-feedback {
2807 width: 46px;
2808 height: 46px;
2809 line-height: 46px;
2810 }
2811 .input-sm + .form-control-feedback,
2812 .input-group-sm + .form-control-feedback,
2813 .form-group-sm .form-control + .form-control-feedback {
2814 width: 30px;
2815 height: 30px;
2816 line-height: 30px;
2817 }
2818 .has-success .help-block,
2819 .has-success .control-label,
2820 .has-success .radio,
2821 .has-success .checkbox,
2822 .has-success .radio-inline,
2823 .has-success .checkbox-inline,
2824 .has-success.radio label,
2825 .has-success.checkbox label,
2826 .has-success.radio-inline label,
2827 .has-success.checkbox-inline label {
2828 color: #3c763d;
2829 }
2830 .has-success .form-control {
2831 border-color: #3c763d;
2832 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2833 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2834 }
2835 .has-success .form-control:focus {
2836 border-color: #2b542c;
2837 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2838 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2839 }
2840 .has-success .input-group-addon {
2841 color: #3c763d;
2842 background-color: #dff0d8;
2843 border-color: #3c763d;
2844 }
2845 .has-success .form-control-feedback {
2846 color: #3c763d;
2847 }
2848 .has-warning .help-block,
2849 .has-warning .control-label,
2850 .has-warning .radio,
2851 .has-warning .checkbox,
2852 .has-warning .radio-inline,
2853 .has-warning .checkbox-inline,
2854 .has-warning.radio label,
2855 .has-warning.checkbox label,
2856 .has-warning.radio-inline label,
2857 .has-warning.checkbox-inline label {
2858 color: #8a6d3b;
2859 }
2860 .has-warning .form-control {
2861 border-color: #8a6d3b;
2862 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2863 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2864 }
2865 .has-warning .form-control:focus {
2866 border-color: #66512c;
2867 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2868 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2869 }
2870 .has-warning .input-group-addon {
2871 color: #8a6d3b;
2872 background-color: #fcf8e3;
2873 border-color: #8a6d3b;
2874 }
2875 .has-warning .form-control-feedback {
2876 color: #8a6d3b;
2877 }
2878 .has-error .help-block,
2879 .has-error .control-label,
2880 .has-error .radio,
2881 .has-error .checkbox,
2882 .has-error .radio-inline,
2883 .has-error .checkbox-inline,
2884 .has-error.radio label,
2885 .has-error.checkbox label,
2886 .has-error.radio-inline label,
2887 .has-error.checkbox-inline label {
2888 color: #a94442;
2889 }
2890 .has-error .form-control {
2891 border-color: #a94442;
2892 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2893 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2894 }
2895 .has-error .form-control:focus {
2896 border-color: #843534;
2897 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2898 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2899 }
2900 .has-error .input-group-addon {
2901 color: #a94442;
2902 background-color: #f2dede;
2903 border-color: #a94442;
2904 }
2905 .has-error .form-control-feedback {
2906 color: #a94442;
2907 }
2908 .has-feedback label ~ .form-control-feedback {
2909 top: 25px;
2910 }
2911 .has-feedback label.sr-only ~ .form-control-feedback {
2912 top: 0;
2913 }
2914 .help-block {
2915 display: block;
2916 margin-top: 5px;
2917 margin-bottom: 10px;
2918 color: #737373;
2919 }
2920 @media (min-width: 768px) {
2921 .form-inline .form-group {
2922 display: inline-block;
2923 margin-bottom: 0;
2924 vertical-align: middle;
2925 }
2926 .form-inline .form-control {
2927 display: inline-block;
2928 width: auto;
2929 vertical-align: middle;
2930 }
2931 .form-inline .form-control-static {
2932 display: inline-block;
2933 }
2934 .form-inline .input-group {
2935 display: inline-table;
2936 vertical-align: middle;
2937 }
2938 .form-inline .input-group .input-group-addon,
2939 .form-inline .input-group .input-group-btn,
2940 .form-inline .input-group .form-control {
2941 width: auto;
2942 }
2943 .form-inline .input-group > .form-control {
2944 width: 100%;
2945 }
2946 .form-inline .control-label {
2947 margin-bottom: 0;
2948 vertical-align: middle;
2949 }
2950 .form-inline .radio,
2951 .form-inline .checkbox {
2952 display: inline-block;
2953 margin-top: 0;
2954 margin-bottom: 0;
2955 vertical-align: middle;
2956 }
2957 .form-inline .radio label,
2958 .form-inline .checkbox label {
2959 padding-left: 0;
2960 }
2961 .form-inline .radio input[type="radio"],
2962 .form-inline .checkbox input[type="checkbox"] {
2963 position: relative;
2964 margin-left: 0;
2965 }
2966 .form-inline .has-feedback .form-control-feedback {
2967 top: 0;
2968 }
2969 }
2970 .form-horizontal .radio,
2971 .form-horizontal .checkbox,
2972 .form-horizontal .radio-inline,
2973 .form-horizontal .checkbox-inline {
2974 padding-top: 7px;
2975 margin-top: 0;
2976 margin-bottom: 0;
2977 }
2978 .form-horizontal .radio,
2979 .form-horizontal .checkbox {
2980 min-height: 27px;
2981 }
2982 .form-horizontal .form-group {
2983 margin-right: -15px;
2984 margin-left: -15px;
2985 }
2986 @media (min-width: 768px) {
2987 .form-horizontal .control-label {
2988 padding-top: 7px;
2989 margin-bottom: 0;
2990 text-align: right;
2991 }
2992 }
2993 .form-horizontal .has-feedback .form-control-feedback {
2994 right: 15px;
2995 }
2996 @media (min-width: 768px) {
2997 .form-horizontal .form-group-lg .control-label {
2998 padding-top: 11px;
2999 font-size: 18px;
3000 }
3001 }
3002 @media (min-width: 768px) {
3003 .form-horizontal .form-group-sm .control-label {
3004 padding-top: 6px;
3005 font-size: 12px;
3006 }
3007 }
3008 .btn {
3009 display: inline-block;
3010 padding: 6px 12px;
3011 margin-bottom: 0;
3012 font-size: 14px;
3013 font-weight: normal;
3014 line-height: 1.42857143;
3015 text-align: center;
3016 white-space: nowrap;
3017 vertical-align: middle;
3018 -ms-touch-action: manipulation;
3019 touch-action: manipulation;
3020 cursor: pointer;
3021 -webkit-user-select: none;
3022 -moz-user-select: none;
3023 -ms-user-select: none;
3024 user-select: none;
3025 background-image: none;
3026 border: 1px solid transparent;
3027 border-radius: 4px;
3028 }
3029 .btn:focus,
3030 .btn:active:focus,
3031 .btn.active:focus,
3032 .btn.focus,
3033 .btn:active.focus,
3034 .btn.active.focus {
3035 outline: 5px auto -webkit-focus-ring-color;
3036 outline-offset: -2px;
3037 }
3038 .btn:hover,
3039 .btn:focus,
3040 .btn.focus {
3041 color: #333;
3042 text-decoration: none;
3043 }
3044 .btn:active,
3045 .btn.active {
3046 background-image: none;
3047 outline: 0;
3048 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3049 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3050 }
3051 .btn.disabled,
3052 .btn[disabled],
3053 fieldset[disabled] .btn {
3054 cursor: not-allowed;
3055 filter: alpha(opacity=65);
3056 -webkit-box-shadow: none;
3057 box-shadow: none;
3058 opacity: .65;
3059 }
3060 a.btn.disabled,
3061 fieldset[disabled] a.btn {
3062 pointer-events: none;
3063 }
3064 .btn-default {
3065 color: #333;
3066 background-color: #fff;
3067 border-color: #ccc;
3068 }
3069 .btn-default:focus,
3070 .btn-default.focus {
3071 color: #333;
3072 background-color: #e6e6e6;
3073 border-color: #8c8c8c;
3074 }
3075 .btn-default:hover {
3076 color: #333;
3077 background-color: #e6e6e6;
3078 border-color: #adadad;
3079 }
3080 .btn-default:active,
3081 .btn-default.active,
3082 .open > .dropdown-toggle.btn-default {
3083 color: #333;
3084 background-color: #e6e6e6;
3085 border-color: #adadad;
3086 }
3087 .btn-default:active:hover,
3088 .btn-default.active:hover,
3089 .open > .dropdown-toggle.btn-default:hover,
3090 .btn-default:active:focus,
3091 .btn-default.active:focus,
3092 .open > .dropdown-toggle.btn-default:focus,
3093 .btn-default:active.focus,
3094 .btn-default.active.focus,
3095 .open > .dropdown-toggle.btn-default.focus {
3096 color: #333;
3097 background-color: #d4d4d4;
3098 border-color: #8c8c8c;
3099 }
3100 .btn-default:active,
3101 .btn-default.active,
3102 .open > .dropdown-toggle.btn-default {
3103 background-image: none;
3104 }
3105 .btn-default.disabled:hover,
3106 .btn-default[disabled]:hover,
3107 fieldset[disabled] .btn-default:hover,
3108 .btn-default.disabled:focus,
3109 .btn-default[disabled]:focus,
3110 fieldset[disabled] .btn-default:focus,
3111 .btn-default.disabled.focus,
3112 .btn-default[disabled].focus,
3113 fieldset[disabled] .btn-default.focus {
3114 background-color: #fff;
3115 border-color: #ccc;
3116 }
3117 .btn-default .badge {
3118 color: #fff;
3119 background-color: #333;
3120 }
3121 .btn-primary {
3122 color: #fff;
3123 background-color: #337ab7;
3124 border-color: #2e6da4;
3125 }
3126 .btn-primary:focus,
3127 .btn-primary.focus {
3128 color: #fff;
3129 background-color: #286090;
3130 border-color: #122b40;
3131 }
3132 .btn-primary:hover {
3133 color: #fff;
3134 background-color: #286090;
3135 border-color: #204d74;
3136 }
3137 .btn-primary:active,
3138 .btn-primary.active,
3139 .open > .dropdown-toggle.btn-primary {
3140 color: #fff;
3141 background-color: #286090;
3142 border-color: #204d74;
3143 }
3144 .btn-primary:active:hover,
3145 .btn-primary.active:hover,
3146 .open > .dropdown-toggle.btn-primary:hover,
3147 .btn-primary:active:focus,
3148 .btn-primary.active:focus,
3149 .open > .dropdown-toggle.btn-primary:focus,
3150 .btn-primary:active.focus,
3151 .btn-primary.active.focus,
3152 .open > .dropdown-toggle.btn-primary.focus {
3153 color: #fff;
3154 background-color: #204d74;
3155 border-color: #122b40;
3156 }
3157 .btn-primary:active,
3158 .btn-primary.active,
3159 .open > .dropdown-toggle.btn-primary {
3160 background-image: none;
3161 }
3162 .btn-primary.disabled:hover,
3163 .btn-primary[disabled]:hover,
3164 fieldset[disabled] .btn-primary:hover,
3165 .btn-primary.disabled:focus,
3166 .btn-primary[disabled]:focus,
3167 fieldset[disabled] .btn-primary:focus,
3168 .btn-primary.disabled.focus,
3169 .btn-primary[disabled].focus,
3170 fieldset[disabled] .btn-primary.focus {
3171 background-color: #337ab7;
3172 border-color: #2e6da4;
3173 }
3174 .btn-primary .badge {
3175 color: #337ab7;
3176 background-color: #fff;
3177 }
3178 .btn-success {
3179 color: #fff;
3180 background-color: #5cb85c;
3181 border-color: #4cae4c;
3182 }
3183 .btn-success:focus,
3184 .btn-success.focus {
3185 color: #fff;
3186 background-color: #449d44;
3187 border-color: #255625;
3188 }
3189 .btn-success:hover {
3190 color: #fff;
3191 background-color: #449d44;
3192 border-color: #398439;
3193 }
3194 .btn-success:active,
3195 .btn-success.active,
3196 .open > .dropdown-toggle.btn-success {
3197 color: #fff;
3198 background-color: #449d44;
3199 border-color: #398439;
3200 }
3201 .btn-success:active:hover,
3202 .btn-success.active:hover,
3203 .open > .dropdown-toggle.btn-success:hover,
3204 .btn-success:active:focus,
3205 .btn-success.active:focus,
3206 .open > .dropdown-toggle.btn-success:focus,
3207 .btn-success:active.focus,
3208 .btn-success.active.focus,
3209 .open > .dropdown-toggle.btn-success.focus {
3210 color: #fff;
3211 background-color: #398439;
3212 border-color: #255625;
3213 }
3214 .btn-success:active,
3215 .btn-success.active,
3216 .open > .dropdown-toggle.btn-success {
3217 background-image: none;
3218 }
3219 .btn-success.disabled:hover,
3220 .btn-success[disabled]:hover,
3221 fieldset[disabled] .btn-success:hover,
3222 .btn-success.disabled:focus,
3223 .btn-success[disabled]:focus,
3224 fieldset[disabled] .btn-success:focus,
3225 .btn-success.disabled.focus,
3226 .btn-success[disabled].focus,
3227 fieldset[disabled] .btn-success.focus {
3228 background-color: #5cb85c;
3229 border-color: #4cae4c;
3230 }
3231 .btn-success .badge {
3232 color: #5cb85c;
3233 background-color: #fff;
3234 }
3235 .btn-info {
3236 color: #fff;
3237 background-color: #5bc0de;
3238 border-color: #46b8da;
3239 }
3240 .btn-info:focus,
3241 .btn-info.focus {
3242 color: #fff;
3243 background-color: #31b0d5;
3244 border-color: #1b6d85;
3245 }
3246 .btn-info:hover {
3247 color: #fff;
3248 background-color: #31b0d5;
3249 border-color: #269abc;
3250 }
3251 .btn-info:active,
3252 .btn-info.active,
3253 .open > .dropdown-toggle.btn-info {
3254 color: #fff;
3255 background-color: #31b0d5;
3256 border-color: #269abc;
3257 }
3258 .btn-info:active:hover,
3259 .btn-info.active:hover,
3260 .open > .dropdown-toggle.btn-info:hover,
3261 .btn-info:active:focus,
3262 .btn-info.active:focus,
3263 .open > .dropdown-toggle.btn-info:focus,
3264 .btn-info:active.focus,
3265 .btn-info.active.focus,
3266 .open > .dropdown-toggle.btn-info.focus {
3267 color: #fff;
3268 background-color: #269abc;
3269 border-color: #1b6d85;
3270 }
3271 .btn-info:active,
3272 .btn-info.active,
3273 .open > .dropdown-toggle.btn-info {
3274 background-image: none;
3275 }
3276 .btn-info.disabled:hover,
3277 .btn-info[disabled]:hover,
3278 fieldset[disabled] .btn-info:hover,
3279 .btn-info.disabled:focus,
3280 .btn-info[disabled]:focus,
3281 fieldset[disabled] .btn-info:focus,
3282 .btn-info.disabled.focus,
3283 .btn-info[disabled].focus,
3284 fieldset[disabled] .btn-info.focus {
3285 background-color: #5bc0de;
3286 border-color: #46b8da;
3287 }
3288 .btn-info .badge {
3289 color: #5bc0de;
3290 background-color: #fff;
3291 }
3292 .btn-warning {
3293 color: #fff;
3294 background-color: #f0ad4e;
3295 border-color: #eea236;
3296 }
3297 .btn-warning:focus,
3298 .btn-warning.focus {
3299 color: #fff;
3300 background-color: #ec971f;
3301 border-color: #985f0d;
3302 }
3303 .btn-warning:hover {
3304 color: #fff;
3305 background-color: #ec971f;
3306 border-color: #d58512;
3307 }
3308 .btn-warning:active,
3309 .btn-warning.active,
3310 .open > .dropdown-toggle.btn-warning {
3311 color: #fff;
3312 background-color: #ec971f;
3313 border-color: #d58512;
3314 }
3315 .btn-warning:active:hover,
3316 .btn-warning.active:hover,
3317 .open > .dropdown-toggle.btn-warning:hover,
3318 .btn-warning:active:focus,
3319 .btn-warning.active:focus,
3320 .open > .dropdown-toggle.btn-warning:focus,
3321 .btn-warning:active.focus,
3322 .btn-warning.active.focus,
3323 .open > .dropdown-toggle.btn-warning.focus {
3324 color: #fff;
3325 background-color: #d58512;
3326 border-color: #985f0d;
3327 }
3328 .btn-warning:active,
3329 .btn-warning.active,
3330 .open > .dropdown-toggle.btn-warning {
3331 background-image: none;
3332 }
3333 .btn-warning.disabled:hover,
3334 .btn-warning[disabled]:hover,
3335 fieldset[disabled] .btn-warning:hover,
3336 .btn-warning.disabled:focus,
3337 .btn-warning[disabled]:focus,
3338 fieldset[disabled] .btn-warning:focus,
3339 .btn-warning.disabled.focus,
3340 .btn-warning[disabled].focus,
3341 fieldset[disabled] .btn-warning.focus {
3342 background-color: #f0ad4e;
3343 border-color: #eea236;
3344 }
3345 .btn-warning .badge {
3346 color: #f0ad4e;
3347 background-color: #fff;
3348 }
3349 .btn-danger {
3350 color: #fff;
3351 background-color: #d9534f;
3352 border-color: #d43f3a;
3353 }
3354 .btn-danger:focus,
3355 .btn-danger.focus {
3356 color: #fff;
3357 background-color: #c9302c;
3358 border-color: #761c19;
3359 }
3360 .btn-danger:hover {
3361 color: #fff;
3362 background-color: #c9302c;
3363 border-color: #ac2925;
3364 }
3365 .btn-danger:active,
3366 .btn-danger.active,
3367 .open > .dropdown-toggle.btn-danger {
3368 color: #fff;
3369 background-color: #c9302c;
3370 border-color: #ac2925;
3371 }
3372 .btn-danger:active:hover,
3373 .btn-danger.active:hover,
3374 .open > .dropdown-toggle.btn-danger:hover,
3375 .btn-danger:active:focus,
3376 .btn-danger.active:focus,
3377 .open > .dropdown-toggle.btn-danger:focus,
3378 .btn-danger:active.focus,
3379 .btn-danger.active.focus,
3380 .open > .dropdown-toggle.btn-danger.focus {
3381 color: #fff;
3382 background-color: #ac2925;
3383 border-color: #761c19;
3384 }
3385 .btn-danger:active,
3386 .btn-danger.active,
3387 .open > .dropdown-toggle.btn-danger {
3388 background-image: none;
3389 }
3390 .btn-danger.disabled:hover,
3391 .btn-danger[disabled]:hover,
3392 fieldset[disabled] .btn-danger:hover,
3393 .btn-danger.disabled:focus,
3394 .btn-danger[disabled]:focus,
3395 fieldset[disabled] .btn-danger:focus,
3396 .btn-danger.disabled.focus,
3397 .btn-danger[disabled].focus,
3398 fieldset[disabled] .btn-danger.focus {
3399 background-color: #d9534f;
3400 border-color: #d43f3a;
3401 }
3402 .btn-danger .badge {
3403 color: #d9534f;
3404 background-color: #fff;
3405 }
3406 .btn-link {
3407 font-weight: normal;
3408 color: #337ab7;
3409 border-radius: 0;
3410 }
3411 .btn-link,
3412 .btn-link:active,
3413 .btn-link.active,
3414 .btn-link[disabled],
3415 fieldset[disabled] .btn-link {
3416 background-color: transparent;
3417 -webkit-box-shadow: none;
3418 box-shadow: none;
3419 }
3420 .btn-link,
3421 .btn-link:hover,
3422 .btn-link:focus,
3423 .btn-link:active {
3424 border-color: transparent;
3425 }
3426 .btn-link:hover,
3427 .btn-link:focus {
3428 color: #23527c;
3429 text-decoration: underline;
3430 background-color: transparent;
3431 }
3432 .btn-link[disabled]:hover,
3433 fieldset[disabled] .btn-link:hover,
3434 .btn-link[disabled]:focus,
3435 fieldset[disabled] .btn-link:focus {
3436 color: #777;
3437 text-decoration: none;
3438 }
3439 .btn-lg,
3440 .btn-group-lg > .btn {
3441 padding: 10px 16px;
3442 font-size: 18px;
3443 line-height: 1.3333333;
3444 border-radius: 6px;
3445 }
3446 .btn-sm,
3447 .btn-group-sm > .btn {
3448 padding: 5px 10px;
3449 font-size: 12px;
3450 line-height: 1.5;
3451 border-radius: 3px;
3452 }
3453 .btn-xs,
3454 .btn-group-xs > .btn {
3455 padding: 1px 5px;
3456 font-size: 12px;
3457 line-height: 1.5;
3458 border-radius: 3px;
3459 }
3460 .btn-block {
3461 display: block;
3462 width: 100%;
3463 }
3464 .btn-block + .btn-block {
3465 margin-top: 5px;
3466 }
3467 input[type="submit"].btn-block,
3468 input[type="reset"].btn-block,
3469 input[type="button"].btn-block {
3470 width: 100%;
3471 }
3472 .fade {
3473 opacity: 0;
3474 -webkit-transition: opacity .15s linear;
3475 -o-transition: opacity .15s linear;
3476 transition: opacity .15s linear;
3477 }
3478 .fade.in {
3479 opacity: 1;
3480 }
3481 .collapse {
3482 display: none;
3483 }
3484 .collapse.in {
3485 display: block;
3486 }
3487 tr.collapse.in {
3488 display: table-row;
3489 }
3490 tbody.collapse.in {
3491 display: table-row-group;
3492 }
3493 .collapsing {
3494 position: relative;
3495 height: 0;
3496 overflow: hidden;
3497 -webkit-transition-timing-function: ease;
3498 -o-transition-timing-function: ease;
3499 transition-timing-function: ease;
3500 -webkit-transition-duration: .35s;
3501 -o-transition-duration: .35s;
3502 transition-duration: .35s;
3503 -webkit-transition-property: height, visibility;
3504 -o-transition-property: height, visibility;
3505 transition-property: height, visibility;
3506 }
3507 .caret {
3508 display: inline-block;
3509 width: 0;
3510 height: 0;
3511 margin-left: 2px;
3512 vertical-align: middle;
3513 border-top: 4px dashed;
3514 border-top: 4px solid \9;
3515 border-right: 4px solid transparent;
3516 border-left: 4px solid transparent;
3517 }
3518 .dropup,
3519 .dropdown {
3520 position: relative;
3521 }
3522 .dropdown-toggle:focus {
3523 outline: 0;
3524 }
3525 .dropdown-menu {
3526 position: absolute;
3527 top: 100%;
3528 left: 0;
3529 z-index: 1000;
3530 display: none;
3531 float: left;
3532 min-width: 160px;
3533 padding: 5px 0;
3534 margin: 2px 0 0;
3535 font-size: 14px;
3536 text-align: left;
3537 list-style: none;
3538 background-color: #fff;
3539 -webkit-background-clip: padding-box;
3540 background-clip: padding-box;
3541 border: 1px solid #ccc;
3542 border: 1px solid rgba(0, 0, 0, .15);
3543 border-radius: 4px;
3544 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3545 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3546 }
3547 .dropdown-menu.pull-right {
3548 right: 0;
3549 left: auto;
3550 }
3551 .dropdown-menu .divider {
3552 height: 1px;
3553 margin: 9px 0;
3554 overflow: hidden;
3555 background-color: #e5e5e5;
3556 }
3557 .dropdown-menu > li > a {
3558 display: block;
3559 padding: 3px 20px;
3560 clear: both;
3561 font-weight: normal;
3562 line-height: 1.42857143;
3563 color: #333;
3564 white-space: nowrap;
3565 }
3566 .dropdown-menu > li > a:hover,
3567 .dropdown-menu > li > a:focus {
3568 color: #262626;
3569 text-decoration: none;
3570 background-color: #f5f5f5;
3571 }
3572 .dropdown-menu > .active > a,
3573 .dropdown-menu > .active > a:hover,
3574 .dropdown-menu > .active > a:focus {
3575 color: #fff;
3576 text-decoration: none;
3577 background-color: #337ab7;
3578 outline: 0;
3579 }
3580 .dropdown-menu > .disabled > a,
3581 .dropdown-menu > .disabled > a:hover,
3582 .dropdown-menu > .disabled > a:focus {
3583 color: #777;
3584 }
3585 .dropdown-menu > .disabled > a:hover,
3586 .dropdown-menu > .disabled > a:focus {
3587 text-decoration: none;
3588 cursor: not-allowed;
3589 background-color: transparent;
3590 background-image: none;
3591 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3592 }
3593 .open > .dropdown-menu {
3594 display: block;
3595 }
3596 .open > a {
3597 outline: 0;
3598 }
3599 .dropdown-menu-right {
3600 right: 0;
3601 left: auto;
3602 }
3603 .dropdown-menu-left {
3604 right: auto;
3605 left: 0;
3606 }
3607 .dropdown-header {
3608 display: block;
3609 padding: 3px 20px;
3610 font-size: 12px;
3611 line-height: 1.42857143;
3612 color: #777;
3613 white-space: nowrap;
3614 }
3615 .dropdown-backdrop {
3616 position: fixed;
3617 top: 0;
3618 right: 0;
3619 bottom: 0;
3620 left: 0;
3621 z-index: 990;
3622 }
3623 .pull-right > .dropdown-menu {
3624 right: 0;
3625 left: auto;
3626 }
3627 .dropup .caret,
3628 .navbar-fixed-bottom .dropdown .caret {
3629 content: "";
3630 border-top: 0;
3631 border-bottom: 4px dashed;
3632 border-bottom: 4px solid \9;
3633 }
3634 .dropup .dropdown-menu,
3635 .navbar-fixed-bottom .dropdown .dropdown-menu {
3636 top: auto;
3637 bottom: 100%;
3638 margin-bottom: 2px;
3639 }
3640 @media (min-width: 768px) {
3641 .navbar-right .dropdown-menu {
3642 right: 0;
3643 left: auto;
3644 }
3645 .navbar-right .dropdown-menu-left {
3646 right: auto;
3647 left: 0;
3648 }
3649 }
3650 .btn-group,
3651 .btn-group-vertical {
3652 position: relative;
3653 display: inline-block;
3654 vertical-align: middle;
3655 }
3656 .btn-group > .btn,
3657 .btn-group-vertical > .btn {
3658 position: relative;
3659 float: left;
3660 }
3661 .btn-group > .btn:hover,
3662 .btn-group-vertical > .btn:hover,
3663 .btn-group > .btn:focus,
3664 .btn-group-vertical > .btn:focus,
3665 .btn-group > .btn:active,
3666 .btn-group-vertical > .btn:active,
3667 .btn-group > .btn.active,
3668 .btn-group-vertical > .btn.active {
3669 z-index: 2;
3670 }
3671 .btn-group .btn + .btn,
3672 .btn-group .btn + .btn-group,
3673 .btn-group .btn-group + .btn,
3674 .btn-group .btn-group + .btn-group {
3675 margin-left: -1px;
3676 }
3677 .btn-toolbar {
3678 margin-left: -5px;
3679 }
3680 .btn-toolbar .btn,
3681 .btn-toolbar .btn-group,
3682 .btn-toolbar .input-group {
3683 float: left;
3684 }
3685 .btn-toolbar > .btn,
3686 .btn-toolbar > .btn-group,
3687 .btn-toolbar > .input-group {
3688 margin-left: 5px;
3689 }
3690 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3691 border-radius: 0;
3692 }
3693 .btn-group > .btn:first-child {
3694 margin-left: 0;
3695 }
3696 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3697 border-top-right-radius: 0;
3698 border-bottom-right-radius: 0;
3699 }
3700 .btn-group > .btn:last-child:not(:first-child),
3701 .btn-group > .dropdown-toggle:not(:first-child) {
3702 border-top-left-radius: 0;
3703 border-bottom-left-radius: 0;
3704 }
3705 .btn-group > .btn-group {
3706 float: left;
3707 }
3708 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3709 border-radius: 0;
3710 }
3711 .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3712 .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3713 border-top-right-radius: 0;
3714 border-bottom-right-radius: 0;
3715 }
3716 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3717 border-top-left-radius: 0;
3718 border-bottom-left-radius: 0;
3719 }
3720 .btn-group .dropdown-toggle:active,
3721 .btn-group.open .dropdown-toggle {
3722 outline: 0;
3723 }
3724 .btn-group > .btn + .dropdown-toggle {
3725 padding-right: 8px;
3726 padding-left: 8px;
3727 }
3728 .btn-group > .btn-lg + .dropdown-toggle {
3729 padding-right: 12px;
3730 padding-left: 12px;
3731 }
3732 .btn-group.open .dropdown-toggle {
3733 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3734 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3735 }
3736 .btn-group.open .dropdown-toggle.btn-link {
3737 -webkit-box-shadow: none;
3738 box-shadow: none;
3739 }
3740 .btn .caret {
3741 margin-left: 0;
3742 }
3743 .btn-lg .caret {
3744 border-width: 5px 5px 0;
3745 border-bottom-width: 0;
3746 }
3747 .dropup .btn-lg .caret {
3748 border-width: 0 5px 5px;
3749 }
3750 .btn-group-vertical > .btn,
3751 .btn-group-vertical > .btn-group,
3752 .btn-group-vertical > .btn-group > .btn {
3753 display: block;
3754 float: none;
3755 width: 100%;
3756 max-width: 100%;
3757 }
3758 .btn-group-vertical > .btn-group > .btn {
3759 float: none;
3760 }
3761 .btn-group-vertical > .btn + .btn,
3762 .btn-group-vertical > .btn + .btn-group,
3763 .btn-group-vertical > .btn-group + .btn,
3764 .btn-group-vertical > .btn-group + .btn-group {
3765 margin-top: -1px;
3766 margin-left: 0;
3767 }
3768 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3769 border-radius: 0;
3770 }
3771 .btn-group-vertical > .btn:first-child:not(:last-child) {
3772 border-top-left-radius: 4px;
3773 border-top-right-radius: 4px;
3774 border-bottom-right-radius: 0;
3775 border-bottom-left-radius: 0;
3776 }
3777 .btn-group-vertical > .btn:last-child:not(:first-child) {
3778 border-top-left-radius: 0;
3779 border-top-right-radius: 0;
3780 border-bottom-right-radius: 4px;
3781 border-bottom-left-radius: 4px;
3782 }
3783 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3784 border-radius: 0;
3785 }
3786 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3787 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3788 border-bottom-right-radius: 0;
3789 border-bottom-left-radius: 0;
3790 }
3791 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3792 border-top-left-radius: 0;
3793 border-top-right-radius: 0;
3794 }
3795 .btn-group-justified {
3796 display: table;
3797 width: 100%;
3798 table-layout: fixed;
3799 border-collapse: separate;
3800 }
3801 .btn-group-justified > .btn,
3802 .btn-group-justified > .btn-group {
3803 display: table-cell;
3804 float: none;
3805 width: 1%;
3806 }
3807 .btn-group-justified > .btn-group .btn {
3808 width: 100%;
3809 }
3810 .btn-group-justified > .btn-group .dropdown-menu {
3811 left: auto;
3812 }
3813 [data-toggle="buttons"] > .btn input[type="radio"],
3814 [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3815 [data-toggle="buttons"] > .btn input[type="checkbox"],
3816 [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3817 position: absolute;
3818 clip: rect(0, 0, 0, 0);
3819 pointer-events: none;
3820 }
3821 .input-group {
3822 position: relative;
3823 display: table;
3824 border-collapse: separate;
3825 }
3826 .input-group[class*="col-"] {
3827 float: none;
3828 padding-right: 0;
3829 padding-left: 0;
3830 }
3831 .input-group .form-control {
3832 position: relative;
3833 z-index: 2;
3834 float: left;
3835 width: 100%;
3836 margin-bottom: 0;
3837 }
3838 .input-group .form-control:focus {
3839 z-index: 3;
3840 }
3841 .input-group-lg > .form-control,
3842 .input-group-lg > .input-group-addon,
3843 .input-group-lg > .input-group-btn > .btn {
3844 height: 46px;
3845 padding: 10px 16px;
3846 font-size: 18px;
3847 line-height: 1.3333333;
3848 border-radius: 6px;
3849 }
3850 select.input-group-lg > .form-control,
3851 select.input-group-lg > .input-group-addon,
3852 select.input-group-lg > .input-group-btn > .btn {
3853 height: 46px;
3854 line-height: 46px;
3855 }
3856 textarea.input-group-lg > .form-control,
3857 textarea.input-group-lg > .input-group-addon,
3858 textarea.input-group-lg > .input-group-btn > .btn,
3859 select[multiple].input-group-lg > .form-control,
3860 select[multiple].input-group-lg > .input-group-addon,
3861 select[multiple].input-group-lg > .input-group-btn > .btn {
3862 height: auto;
3863 }
3864 .input-group-sm > .form-control,
3865 .input-group-sm > .input-group-addon,
3866 .input-group-sm > .input-group-btn > .btn {
3867 height: 30px;
3868 padding: 5px 10px;
3869 font-size: 12px;
3870 line-height: 1.5;
3871 border-radius: 3px;
3872 }
3873 select.input-group-sm > .form-control,
3874 select.input-group-sm > .input-group-addon,
3875 select.input-group-sm > .input-group-btn > .btn {
3876 height: 30px;
3877 line-height: 30px;
3878 }
3879 textarea.input-group-sm > .form-control,
3880 textarea.input-group-sm > .input-group-addon,
3881 textarea.input-group-sm > .input-group-btn > .btn,
3882 select[multiple].input-group-sm > .form-control,
3883 select[multiple].input-group-sm > .input-group-addon,
3884 select[multiple].input-group-sm > .input-group-btn > .btn {
3885 height: auto;
3886 }
3887 .input-group-addon,
3888 .input-group-btn,
3889 .input-group .form-control {
3890 display: table-cell;
3891 }
3892 .input-group-addon:not(:first-child):not(:last-child),
3893 .input-group-btn:not(:first-child):not(:last-child),
3894 .input-group .form-control:not(:first-child):not(:last-child) {
3895 border-radius: 0;
3896 }
3897 .input-group-addon,
3898 .input-group-btn {
3899 width: 1%;
3900 white-space: nowrap;
3901 vertical-align: middle;
3902 }
3903 .input-group-addon {
3904 padding: 6px 12px;
3905 font-size: 14px;
3906 font-weight: normal;
3907 line-height: 1;
3908 color: #555;
3909 text-align: center;
3910 background-color: #eee;
3911 border: 1px solid #ccc;
3912 border-radius: 4px;
3913 }
3914 .input-group-addon.input-sm {
3915 padding: 5px 10px;
3916 font-size: 12px;
3917 border-radius: 3px;
3918 }
3919 .input-group-addon.input-lg {
3920 padding: 10px 16px;
3921 font-size: 18px;
3922 border-radius: 6px;
3923 }
3924 .input-group-addon input[type="radio"],
3925 .input-group-addon input[type="checkbox"] {
3926 margin-top: 0;
3927 }
3928 .input-group .form-control:first-child,
3929 .input-group-addon:first-child,
3930 .input-group-btn:first-child > .btn,
3931 .input-group-btn:first-child > .btn-group > .btn,
3932 .input-group-btn:first-child > .dropdown-toggle,
3933 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3934 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3935 border-top-right-radius: 0;
3936 border-bottom-right-radius: 0;
3937 }
3938 .input-group-addon:first-child {
3939 border-right: 0;
3940 }
3941 .input-group .form-control:last-child,
3942 .input-group-addon:last-child,
3943 .input-group-btn:last-child > .btn,
3944 .input-group-btn:last-child > .btn-group > .btn,
3945 .input-group-btn:last-child > .dropdown-toggle,
3946 .input-group-btn:first-child > .btn:not(:first-child),
3947 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3948 border-top-left-radius: 0;
3949 border-bottom-left-radius: 0;
3950 }
3951 .input-group-addon:last-child {
3952 border-left: 0;
3953 }
3954 .input-group-btn {
3955 position: relative;
3956 font-size: 0;
3957 white-space: nowrap;
3958 }
3959 .input-group-btn > .btn {
3960 position: relative;
3961 }
3962 .input-group-btn > .btn + .btn {
3963 margin-left: -1px;
3964 }
3965 .input-group-btn > .btn:hover,
3966 .input-group-btn > .btn:focus,
3967 .input-group-btn > .btn:active {
3968 z-index: 2;
3969 }
3970 .input-group-btn:first-child > .btn,
3971 .input-group-btn:first-child > .btn-group {
3972 margin-right: -1px;
3973 }
3974 .input-group-btn:last-child > .btn,
3975 .input-group-btn:last-child > .btn-group {
3976 z-index: 2;
3977 margin-left: -1px;
3978 }
3979 .nav {
3980 padding-left: 0;
3981 margin-bottom: 0;
3982 list-style: none;
3983 }
3984 .nav > li {
3985 position: relative;
3986 display: block;
3987 }
3988 .nav > li > a {
3989 position: relative;
3990 display: block;
3991 padding: 10px 15px;
3992 }
3993 .nav > li > a:hover,
3994 .nav > li > a:focus {
3995 text-decoration: none;
3996 background-color: #eee;
3997 }
3998 .nav > li.disabled > a {
3999 color: #777;
4000 }
4001 .nav > li.disabled > a:hover,
4002 .nav > li.disabled > a:focus {
4003 color: #777;
4004 text-decoration: none;
4005 cursor: not-allowed;
4006 background-color: transparent;
4007 }
4008 .nav .open > a,
4009 .nav .open > a:hover,
4010 .nav .open > a:focus {
4011 background-color: #eee;
4012 border-color: #337ab7;
4013 }
4014 .nav .nav-divider {
4015 height: 1px;
4016 margin: 9px 0;
4017 overflow: hidden;
4018 background-color: #e5e5e5;
4019 }
4020 .nav > li > a > img {
4021 max-width: none;
4022 }
4023 .nav-tabs {
4024 border-bottom: 1px solid #ddd;
4025 }
4026 .nav-tabs > li {
4027 float: left;
4028 margin-bottom: -1px;
4029 }
4030 .nav-tabs > li > a {
4031 margin-right: 2px;
4032 line-height: 1.42857143;
4033 border: 1px solid transparent;
4034 border-radius: 4px 4px 0 0;
4035 }
4036 .nav-tabs > li > a:hover {
4037 border-color: #eee #eee #ddd;
4038 }
4039 .nav-tabs > li.active > a,
4040 .nav-tabs > li.active > a:hover,
4041 .nav-tabs > li.active > a:focus {
4042 color: #555;
4043 cursor: default;
4044 background-color: #fff;
4045 border: 1px solid #ddd;
4046 border-bottom-color: transparent;
4047 }
4048 .nav-tabs.nav-justified {
4049 width: 100%;
4050 border-bottom: 0;
4051 }
4052 .nav-tabs.nav-justified > li {
4053 float: none;
4054 }
4055 .nav-tabs.nav-justified > li > a {
4056 margin-bottom: 5px;
4057 text-align: center;
4058 }
4059 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4060 top: auto;
4061 left: auto;
4062 }
4063 @media (min-width: 768px) {
4064 .nav-tabs.nav-justified > li {
4065 display: table-cell;
4066 width: 1%;
4067 }
4068 .nav-tabs.nav-justified > li > a {
4069 margin-bottom: 0;
4070 }
4071 }
4072 .nav-tabs.nav-justified > li > a {
4073 margin-right: 0;
4074 border-radius: 4px;
4075 }
4076 .nav-tabs.nav-justified > .active > a,
4077 .nav-tabs.nav-justified > .active > a:hover,
4078 .nav-tabs.nav-justified > .active > a:focus {
4079 border: 1px solid #ddd;
4080 }
4081 @media (min-width: 768px) {
4082 .nav-tabs.nav-justified > li > a {
4083 border-bottom: 1px solid #ddd;
4084 border-radius: 4px 4px 0 0;
4085 }
4086 .nav-tabs.nav-justified > .active > a,
4087 .nav-tabs.nav-justified > .active > a:hover,
4088 .nav-tabs.nav-justified > .active > a:focus {
4089 border-bottom-color: #fff;
4090 }
4091 }
4092 .nav-pills > li {
4093 float: left;
4094 }
4095 .nav-pills > li > a {
4096 border-radius: 4px;
4097 }
4098 .nav-pills > li + li {
4099 margin-left: 2px;
4100 }
4101 .nav-pills > li.active > a,
4102 .nav-pills > li.active > a:hover,
4103 .nav-pills > li.active > a:focus {
4104 color: #fff;
4105 background-color: #337ab7;
4106 }
4107 .nav-stacked > li {
4108 float: none;
4109 }
4110 .nav-stacked > li + li {
4111 margin-top: 2px;
4112 margin-left: 0;
4113 }
4114 .nav-justified {
4115 width: 100%;
4116 }
4117 .nav-justified > li {
4118 float: none;
4119 }
4120 .nav-justified > li > a {
4121 margin-bottom: 5px;
4122 text-align: center;
4123 }
4124 .nav-justified > .dropdown .dropdown-menu {
4125 top: auto;
4126 left: auto;
4127 }
4128 @media (min-width: 768px) {
4129 .nav-justified > li {
4130 display: table-cell;
4131 width: 1%;
4132 }
4133 .nav-justified > li > a {
4134 margin-bottom: 0;
4135 }
4136 }
4137 .nav-tabs-justified {
4138 border-bottom: 0;
4139 }
4140 .nav-tabs-justified > li > a {
4141 margin-right: 0;
4142 border-radius: 4px;
4143 }
4144 .nav-tabs-justified > .active > a,
4145 .nav-tabs-justified > .active > a:hover,
4146 .nav-tabs-justified > .active > a:focus {
4147 border: 1px solid #ddd;
4148 }
4149 @media (min-width: 768px) {
4150 .nav-tabs-justified > li > a {
4151 border-bottom: 1px solid #ddd;
4152 border-radius: 4px 4px 0 0;
4153 }
4154 .nav-tabs-justified > .active > a,
4155 .nav-tabs-justified > .active > a:hover,
4156 .nav-tabs-justified > .active > a:focus {
4157 border-bottom-color: #fff;
4158 }
4159 }
4160 .tab-content > .tab-pane {
4161 display: none;
4162 }
4163 .tab-content > .active {
4164 display: block;
4165 }
4166 .nav-tabs .dropdown-menu {
4167 margin-top: -1px;
4168 border-top-left-radius: 0;
4169 border-top-right-radius: 0;
4170 }
4171 .navbar {
4172 position: relative;
4173 min-height: 50px;
4174 margin-bottom: 20px;
4175 border: 1px solid transparent;
4176 }
4177 @media (min-width: 768px) {
4178 .navbar {
4179 border-radius: 4px;
4180 }
4181 }
4182 @media (min-width: 768px) {
4183 .navbar-header {
4184 float: left;
4185 }
4186 }
4187 .navbar-collapse {
4188 padding-right: 15px;
4189 padding-left: 15px;
4190 overflow-x: visible;
4191 -webkit-overflow-scrolling: touch;
4192 border-top: 1px solid transparent;
4193 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4194 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4195 }
4196 .navbar-collapse.in {
4197 overflow-y: auto;
4198 }
4199 @media (min-width: 768px) {
4200 .navbar-collapse {
4201 width: auto;
4202 border-top: 0;
4203 -webkit-box-shadow: none;
4204 box-shadow: none;
4205 }
4206 .navbar-collapse.collapse {
4207 display: block !important;
4208 height: auto !important;
4209 padding-bottom: 0;
4210 overflow: visible !important;
4211 }
4212 .navbar-collapse.in {
4213 overflow-y: visible;
4214 }
4215 .navbar-fixed-top .navbar-collapse,
4216 .navbar-static-top .navbar-collapse,
4217 .navbar-fixed-bottom .navbar-collapse {
4218 padding-right: 0;
4219 padding-left: 0;
4220 }
4221 }
4222 .navbar-fixed-top .navbar-collapse,
4223 .navbar-fixed-bottom .navbar-collapse {
4224 max-height: 340px;
4225 }
4226 @media (max-device-width: 480px) and (orientation: landscape) {
4227 .navbar-fixed-top .navbar-collapse,
4228 .navbar-fixed-bottom .navbar-collapse {
4229 max-height: 200px;
4230 }
4231 }
4232 .container > .navbar-header,
4233 .container-fluid > .navbar-header,
4234 .container > .navbar-collapse,
4235 .container-fluid > .navbar-collapse {
4236 margin-right: -15px;
4237 margin-left: -15px;
4238 }
4239 @media (min-width: 768px) {
4240 .container > .navbar-header,
4241 .container-fluid > .navbar-header,
4242 .container > .navbar-collapse,
4243 .container-fluid > .navbar-collapse {
4244 margin-right: 0;
4245 margin-left: 0;
4246 }
4247 }
4248 .navbar-static-top {
4249 z-index: 1000;
4250 border-width: 0 0 1px;
4251 }
4252 @media (min-width: 768px) {
4253 .navbar-static-top {
4254 border-radius: 0;
4255 }
4256 }
4257 .navbar-fixed-top,
4258 .navbar-fixed-bottom {
4259 position: fixed;
4260 right: 0;
4261 left: 0;
4262 z-index: 1030;
4263 }
4264 @media (min-width: 768px) {
4265 .navbar-fixed-top,
4266 .navbar-fixed-bottom {
4267 border-radius: 0;
4268 }
4269 }
4270 .navbar-fixed-top {
4271 top: 0;
4272 border-width: 0 0 1px;
4273 }
4274 .navbar-fixed-bottom {
4275 bottom: 0;
4276 margin-bottom: 0;
4277 border-width: 1px 0 0;
4278 }
4279 .navbar-brand {
4280 float: left;
4281 height: 50px;
4282 padding: 15px 15px;
4283 font-size: 18px;
4284 line-height: 20px;
4285 }
4286 .navbar-brand:hover,
4287 .navbar-brand:focus {
4288 text-decoration: none;
4289 }
4290 .navbar-brand > img {
4291 display: block;
4292 }
4293 @media (min-width: 768px) {
4294 .navbar > .container .navbar-brand,
4295 .navbar > .container-fluid .navbar-brand {
4296 margin-left: -15px;
4297 }
4298 }
4299 .navbar-toggle {
4300 position: relative;
4301 float: right;
4302 padding: 9px 10px;
4303 margin-top: 8px;
4304 margin-right: 15px;
4305 margin-bottom: 8px;
4306 background-color: transparent;
4307 background-image: none;
4308 border: 1px solid transparent;
4309 border-radius: 4px;
4310 }
4311 .navbar-toggle:focus {
4312 outline: 0;
4313 }
4314 .navbar-toggle .icon-bar {
4315 display: block;
4316 width: 22px;
4317 height: 2px;
4318 border-radius: 1px;
4319 }
4320 .navbar-toggle .icon-bar + .icon-bar {
4321 margin-top: 4px;
4322 }
4323 @media (min-width: 768px) {
4324 .navbar-toggle {
4325 display: none;
4326 }
4327 }
4328 .navbar-nav {
4329 margin: 7.5px -15px;
4330 }
4331 .navbar-nav > li > a {
4332 padding-top: 10px;
4333 padding-bottom: 10px;
4334 line-height: 20px;
4335 }
4336 @media (max-width: 767px) {
4337 .navbar-nav .open .dropdown-menu {
4338 position: static;
4339 float: none;
4340 width: auto;
4341 margin-top: 0;
4342 background-color: transparent;
4343 border: 0;
4344 -webkit-box-shadow: none;
4345 box-shadow: none;
4346 }
4347 .navbar-nav .open .dropdown-menu > li > a,
4348 .navbar-nav .open .dropdown-menu .dropdown-header {
4349 padding: 5px 15px 5px 25px;
4350 }
4351 .navbar-nav .open .dropdown-menu > li > a {
4352 line-height: 20px;
4353 }
4354 .navbar-nav .open .dropdown-menu > li > a:hover,
4355 .navbar-nav .open .dropdown-menu > li > a:focus {
4356 background-image: none;
4357 }
4358 }
4359 @media (min-width: 768px) {
4360 .navbar-nav {
4361 float: left;
4362 margin: 0;
4363 }
4364 .navbar-nav > li {
4365 float: left;
4366 }
4367 .navbar-nav > li > a {
4368 padding-top: 15px;
4369 padding-bottom: 15px;
4370 }
4371 }
4372 .navbar-form {
4373 padding: 10px 15px;
4374 margin-top: 8px;
4375 margin-right: -15px;
4376 margin-bottom: 8px;
4377 margin-left: -15px;
4378 border-top: 1px solid transparent;
4379 border-bottom: 1px solid transparent;
4380 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4381 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4382 }
4383 @media (min-width: 768px) {
4384 .navbar-form .form-group {
4385 display: inline-block;
4386 margin-bottom: 0;
4387 vertical-align: middle;
4388 }
4389 .navbar-form .form-control {
4390 display: inline-block;
4391 width: auto;
4392 vertical-align: middle;
4393 }
4394 .navbar-form .form-control-static {
4395 display: inline-block;
4396 }
4397 .navbar-form .input-group {
4398 display: inline-table;
4399 vertical-align: middle;
4400 }
4401 .navbar-form .input-group .input-group-addon,
4402 .navbar-form .input-group .input-group-btn,
4403 .navbar-form .input-group .form-control {
4404 width: auto;
4405 }
4406 .navbar-form .input-group > .form-control {
4407 width: 100%;
4408 }
4409 .navbar-form .control-label {
4410 margin-bottom: 0;
4411 vertical-align: middle;
4412 }
4413 .navbar-form .radio,
4414 .navbar-form .checkbox {
4415 display: inline-block;
4416 margin-top: 0;
4417 margin-bottom: 0;
4418 vertical-align: middle;
4419 }
4420 .navbar-form .radio label,
4421 .navbar-form .checkbox label {
4422 padding-left: 0;
4423 }
4424 .navbar-form .radio input[type="radio"],
4425 .navbar-form .checkbox input[type="checkbox"] {
4426 position: relative;
4427 margin-left: 0;
4428 }
4429 .navbar-form .has-feedback .form-control-feedback {
4430 top: 0;
4431 }
4432 }
4433 @media (max-width: 767px) {
4434 .navbar-form .form-group {
4435 margin-bottom: 5px;
4436 }
4437 .navbar-form .form-group:last-child {
4438 margin-bottom: 0;
4439 }
4440 }
4441 @media (min-width: 768px) {
4442 .navbar-form {
4443 width: auto;
4444 padding-top: 0;
4445 padding-bottom: 0;
4446 margin-right: 0;
4447 margin-left: 0;
4448 border: 0;
4449 -webkit-box-shadow: none;
4450 box-shadow: none;
4451 }
4452 }
4453 .navbar-nav > li > .dropdown-menu {
4454 margin-top: 0;
4455 border-top-left-radius: 0;
4456 border-top-right-radius: 0;
4457 }
4458 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4459 margin-bottom: 0;
4460 border-top-left-radius: 4px;
4461 border-top-right-radius: 4px;
4462 border-bottom-right-radius: 0;
4463 border-bottom-left-radius: 0;
4464 }
4465 .navbar-btn {
4466 margin-top: 8px;
4467 margin-bottom: 8px;
4468 }
4469 .navbar-btn.btn-sm {
4470 margin-top: 10px;
4471 margin-bottom: 10px;
4472 }
4473 .navbar-btn.btn-xs {
4474 margin-top: 14px;
4475 margin-bottom: 14px;
4476 }
4477 .navbar-text {
4478 margin-top: 15px;
4479 margin-bottom: 15px;
4480 }
4481 @media (min-width: 768px) {
4482 .navbar-text {
4483 float: left;
4484 margin-right: 15px;
4485 margin-left: 15px;
4486 }
4487 }
4488 @media (min-width: 768px) {
4489 .navbar-left {
4490 float: left !important;
4491 }
4492 .navbar-right {
4493 float: right !important;
4494 margin-right: -15px;
4495 }
4496 .navbar-right ~ .navbar-right {
4497 margin-right: 0;
4498 }
4499 }
4500 .navbar-default {
4501 background-color: #f8f8f8;
4502 border-color: #e7e7e7;
4503 }
4504 .navbar-default .navbar-brand {
4505 color: #777;
4506 }
4507 .navbar-default .navbar-brand:hover,
4508 .navbar-default .navbar-brand:focus {
4509 color: #5e5e5e;
4510 background-color: transparent;
4511 }
4512 .navbar-default .navbar-text {
4513 color: #777;
4514 }
4515 .navbar-default .navbar-nav > li > a {
4516 color: #777;
4517 }
4518 .navbar-default .navbar-nav > li > a:hover,
4519 .navbar-default .navbar-nav > li > a:focus {
4520 color: #333;
4521 background-color: transparent;
4522 }
4523 .navbar-default .navbar-nav > .active > a,
4524 .navbar-default .navbar-nav > .active > a:hover,
4525 .navbar-default .navbar-nav > .active > a:focus {
4526 color: #555;
4527 background-color: #e7e7e7;
4528 }
4529 .navbar-default .navbar-nav > .disabled > a,
4530 .navbar-default .navbar-nav > .disabled > a:hover,
4531 .navbar-default .navbar-nav > .disabled > a:focus {
4532 color: #ccc;
4533 background-color: transparent;
4534 }
4535 .navbar-default .navbar-toggle {
4536 border-color: #ddd;
4537 }
4538 .navbar-default .navbar-toggle:hover,
4539 .navbar-default .navbar-toggle:focus {
4540 background-color: #ddd;
4541 }
4542 .navbar-default .navbar-toggle .icon-bar {
4543 background-color: #888;
4544 }
4545 .navbar-default .navbar-collapse,
4546 .navbar-default .navbar-form {
4547 border-color: #e7e7e7;
4548 }
4549 .navbar-default .navbar-nav > .open > a,
4550 .navbar-default .navbar-nav > .open > a:hover,
4551 .navbar-default .navbar-nav > .open > a:focus {
4552 color: #555;
4553 background-color: #e7e7e7;
4554 }
4555 @media (max-width: 767px) {
4556 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4557 color: #777;
4558 }
4559 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4560 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4561 color: #333;
4562 background-color: transparent;
4563 }
4564 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4565 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4566 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4567 color: #555;
4568 background-color: #e7e7e7;
4569 }
4570 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4571 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4572 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4573 color: #ccc;
4574 background-color: transparent;
4575 }
4576 }
4577 .navbar-default .navbar-link {
4578 color: #777;
4579 }
4580 .navbar-default .navbar-link:hover {
4581 color: #333;
4582 }
4583 .navbar-default .btn-link {
4584 color: #777;
4585 }
4586 .navbar-default .btn-link:hover,
4587 .navbar-default .btn-link:focus {
4588 color: #333;
4589 }
4590 .navbar-default .btn-link[disabled]:hover,
4591 fieldset[disabled] .navbar-default .btn-link:hover,
4592 .navbar-default .btn-link[disabled]:focus,
4593 fieldset[disabled] .navbar-default .btn-link:focus {
4594 color: #ccc;
4595 }
4596 .navbar-inverse {
4597 background-color: #222;
4598 border-color: #080808;
4599 }
4600 .navbar-inverse .navbar-brand {
4601 color: #9d9d9d;
4602 }
4603 .navbar-inverse .navbar-brand:hover,
4604 .navbar-inverse .navbar-brand:focus {
4605 color: #fff;
4606 background-color: transparent;
4607 }
4608 .navbar-inverse .navbar-text {
4609 color: #9d9d9d;
4610 }
4611 .navbar-inverse .navbar-nav > li > a {
4612 color: #9d9d9d;
4613 }
4614 .navbar-inverse .navbar-nav > li > a:hover,
4615 .navbar-inverse .navbar-nav > li > a:focus {
4616 color: #fff;
4617 background-color: transparent;
4618 }
4619 .navbar-inverse .navbar-nav > .active > a,
4620 .navbar-inverse .navbar-nav > .active > a:hover,
4621 .navbar-inverse .navbar-nav > .active > a:focus {
4622 color: #fff;
4623 background-color: #080808;
4624 }
4625 .navbar-inverse .navbar-nav > .disabled > a,
4626 .navbar-inverse .navbar-nav > .disabled > a:hover,
4627 .navbar-inverse .navbar-nav > .disabled > a:focus {
4628 color: #444;
4629 background-color: transparent;
4630 }
4631 .navbar-inverse .navbar-toggle {
4632 border-color: #333;
4633 }
4634 .navbar-inverse .navbar-toggle:hover,
4635 .navbar-inverse .navbar-toggle:focus {
4636 background-color: #333;
4637 }
4638 .navbar-inverse .navbar-toggle .icon-bar {
4639 background-color: #fff;
4640 }
4641 .navbar-inverse .navbar-collapse,
4642 .navbar-inverse .navbar-form {
4643 border-color: #101010;
4644 }
4645 .navbar-inverse .navbar-nav > .open > a,
4646 .navbar-inverse .navbar-nav > .open > a:hover,
4647 .navbar-inverse .navbar-nav > .open > a:focus {
4648 color: #fff;
4649 background-color: #080808;
4650 }
4651 @media (max-width: 767px) {
4652 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4653 border-color: #080808;
4654 }
4655 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4656 background-color: #080808;
4657 }
4658 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4659 color: #9d9d9d;
4660 }
4661 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4662 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4663 color: #fff;
4664 background-color: transparent;
4665 }
4666 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4667 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4668 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4669 color: #fff;
4670 background-color: #080808;
4671 }
4672 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4673 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4674 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4675 color: #444;
4676 background-color: transparent;
4677 }
4678 }
4679 .navbar-inverse .navbar-link {
4680 color: #9d9d9d;
4681 }
4682 .navbar-inverse .navbar-link:hover {
4683 color: #fff;
4684 }
4685 .navbar-inverse .btn-link {
4686 color: #9d9d9d;
4687 }
4688 .navbar-inverse .btn-link:hover,
4689 .navbar-inverse .btn-link:focus {
4690 color: #fff;
4691 }
4692 .navbar-inverse .btn-link[disabled]:hover,
4693 fieldset[disabled] .navbar-inverse .btn-link:hover,
4694 .navbar-inverse .btn-link[disabled]:focus,
4695 fieldset[disabled] .navbar-inverse .btn-link:focus {
4696 color: #444;
4697 }
4698 .breadcrumb {
4699 padding: 8px 15px;
4700 margin-bottom: 20px;
4701 list-style: none;
4702 background-color: #f5f5f5;
4703 border-radius: 4px;
4704 }
4705 .breadcrumb > li {
4706 display: inline-block;
4707 }
4708 .breadcrumb > li + li:before {
4709 padding: 0 5px;
4710 color: #ccc;
4711 content: "/\00a0";
4712 }
4713 .breadcrumb > .active {
4714 color: #777;
4715 }
4716 .pagination {
4717 display: inline-block;
4718 padding-left: 0;
4719 margin: 20px 0;
4720 border-radius: 4px;
4721 }
4722 .pagination > li {
4723 display: inline;
4724 }
4725 .pagination > li > a,
4726 .pagination > li > span {
4727 position: relative;
4728 float: left;
4729 padding: 6px 12px;
4730 margin-left: -1px;
4731 line-height: 1.42857143;
4732 color: #337ab7;
4733 text-decoration: none;
4734 background-color: #fff;
4735 border: 1px solid #ddd;
4736 }
4737 .pagination > li:first-child > a,
4738 .pagination > li:first-child > span {
4739 margin-left: 0;
4740 border-top-left-radius: 4px;
4741 border-bottom-left-radius: 4px;
4742 }
4743 .pagination > li:last-child > a,
4744 .pagination > li:last-child > span {
4745 border-top-right-radius: 4px;
4746 border-bottom-right-radius: 4px;
4747 }
4748 .pagination > li > a:hover,
4749 .pagination > li > span:hover,
4750 .pagination > li > a:focus,
4751 .pagination > li > span:focus {
4752 z-index: 2;
4753 color: #23527c;
4754 background-color: #eee;
4755 border-color: #ddd;
4756 }
4757 .pagination > .active > a,
4758 .pagination > .active > span,
4759 .pagination > .active > a:hover,
4760 .pagination > .active > span:hover,
4761 .pagination > .active > a:focus,
4762 .pagination > .active > span:focus {
4763 z-index: 3;
4764 color: #fff;
4765 cursor: default;
4766 background-color: #337ab7;
4767 border-color: #337ab7;
4768 }
4769 .pagination > .disabled > span,
4770 .pagination > .disabled > span:hover,
4771 .pagination > .disabled > span:focus,
4772 .pagination > .disabled > a,
4773 .pagination > .disabled > a:hover,
4774 .pagination > .disabled > a:focus {
4775 color: #777;
4776 cursor: not-allowed;
4777 background-color: #fff;
4778 border-color: #ddd;
4779 }
4780 .pagination-lg > li > a,
4781 .pagination-lg > li > span {
4782 padding: 10px 16px;
4783 font-size: 18px;
4784 line-height: 1.3333333;
4785 }
4786 .pagination-lg > li:first-child > a,
4787 .pagination-lg > li:first-child > span {
4788 border-top-left-radius: 6px;
4789 border-bottom-left-radius: 6px;
4790 }
4791 .pagination-lg > li:last-child > a,
4792 .pagination-lg > li:last-child > span {
4793 border-top-right-radius: 6px;
4794 border-bottom-right-radius: 6px;
4795 }
4796 .pagination-sm > li > a,
4797 .pagination-sm > li > span {
4798 padding: 5px 10px;
4799 font-size: 12px;
4800 line-height: 1.5;
4801 }
4802 .pagination-sm > li:first-child > a,
4803 .pagination-sm > li:first-child > span {
4804 border-top-left-radius: 3px;
4805 border-bottom-left-radius: 3px;
4806 }
4807 .pagination-sm > li:last-child > a,
4808 .pagination-sm > li:last-child > span {
4809 border-top-right-radius: 3px;
4810 border-bottom-right-radius: 3px;
4811 }
4812 .pager {
4813 padding-left: 0;
4814 margin: 20px 0;
4815 text-align: center;
4816 list-style: none;
4817 }
4818 .pager li {
4819 display: inline;
4820 }
4821 .pager li > a,
4822 .pager li > span {
4823 display: inline-block;
4824 padding: 5px 14px;
4825 background-color: #fff;
4826 border: 1px solid #ddd;
4827 border-radius: 15px;
4828 }
4829 .pager li > a:hover,
4830 .pager li > a:focus {
4831 text-decoration: none;
4832 background-color: #eee;
4833 }
4834 .pager .next > a,
4835 .pager .next > span {
4836 float: right;
4837 }
4838 .pager .previous > a,
4839 .pager .previous > span {
4840 float: left;
4841 }
4842 .pager .disabled > a,
4843 .pager .disabled > a:hover,
4844 .pager .disabled > a:focus,
4845 .pager .disabled > span {
4846 color: #777;
4847 cursor: not-allowed;
4848 background-color: #fff;
4849 }
4850 .label {
4851 display: inline;
4852 padding: .2em .6em .3em;
4853 font-size: 75%;
4854 font-weight: bold;
4855 line-height: 1;
4856 color: #fff;
4857 text-align: center;
4858 white-space: nowrap;
4859 vertical-align: baseline;
4860 border-radius: .25em;
4861 }
4862 a.label:hover,
4863 a.label:focus {
4864 color: #fff;
4865 text-decoration: none;
4866 cursor: pointer;
4867 }
4868 .label:empty {
4869 display: none;
4870 }
4871 .btn .label {
4872 position: relative;
4873 top: -1px;
4874 }
4875 .label-default {
4876 background-color: #777;
4877 }
4878 .label-default[href]:hover,
4879 .label-default[href]:focus {
4880 background-color: #5e5e5e;
4881 }
4882 .label-primary {
4883 background-color: #337ab7;
4884 }
4885 .label-primary[href]:hover,
4886 .label-primary[href]:focus {
4887 background-color: #286090;
4888 }
4889 .label-success {
4890 background-color: #5cb85c;
4891 }
4892 .label-success[href]:hover,
4893 .label-success[href]:focus {
4894 background-color: #449d44;
4895 }
4896 .label-info {
4897 background-color: #5bc0de;
4898 }
4899 .label-info[href]:hover,
4900 .label-info[href]:focus {
4901 background-color: #31b0d5;
4902 }
4903 .label-warning {
4904 background-color: #f0ad4e;
4905 }
4906 .label-warning[href]:hover,
4907 .label-warning[href]:focus {
4908 background-color: #ec971f;
4909 }
4910 .label-danger {
4911 background-color: #d9534f;
4912 }
4913 .label-danger[href]:hover,
4914 .label-danger[href]:focus {
4915 background-color: #c9302c;
4916 }
4917 .badge {
4918 display: inline-block;
4919 min-width: 10px;
4920 padding: 3px 7px;
4921 font-size: 12px;
4922 font-weight: bold;
4923 line-height: 1;
4924 color: #fff;
4925 text-align: center;
4926 white-space: nowrap;
4927 vertical-align: middle;
4928 background-color: #777;
4929 border-radius: 10px;
4930 }
4931 .badge:empty {
4932 display: none;
4933 }
4934 .btn .badge {
4935 position: relative;
4936 top: -1px;
4937 }
4938 .btn-xs .badge,
4939 .btn-group-xs > .btn .badge {
4940 top: 0;
4941 padding: 1px 5px;
4942 }
4943 a.badge:hover,
4944 a.badge:focus {
4945 color: #fff;
4946 text-decoration: none;
4947 cursor: pointer;
4948 }
4949 .list-group-item.active > .badge,
4950 .nav-pills > .active > a > .badge {
4951 color: #337ab7;
4952 background-color: #fff;
4953 }
4954 .list-group-item > .badge {
4955 float: right;
4956 }
4957 .list-group-item > .badge + .badge {
4958 margin-right: 5px;
4959 }
4960 .nav-pills > li > a > .badge {
4961 margin-left: 3px;
4962 }
4963 .jumbotron {
4964 padding-top: 30px;
4965 padding-bottom: 30px;
4966 margin-bottom: 30px;
4967 color: inherit;
4968 background-color: #eee;
4969 }
4970 .jumbotron h1,
4971 .jumbotron .h1 {
4972 color: inherit;
4973 }
4974 .jumbotron p {
4975 margin-bottom: 15px;
4976 font-size: 21px;
4977 font-weight: 200;
4978 }
4979 .jumbotron > hr {
4980 border-top-color: #d5d5d5;
4981 }
4982 .container .jumbotron,
4983 .container-fluid .jumbotron {
4984 padding-right: 15px;
4985 padding-left: 15px;
4986 border-radius: 6px;
4987 }
4988 .jumbotron .container {
4989 max-width: 100%;
4990 }
4991 @media screen and (min-width: 768px) {
4992 .jumbotron {
4993 padding-top: 48px;
4994 padding-bottom: 48px;
4995 }
4996 .container .jumbotron,
4997 .container-fluid .jumbotron {
4998 padding-right: 60px;
4999 padding-left: 60px;
5000 }
5001 .jumbotron h1,
5002 .jumbotron .h1 {
5003 font-size: 63px;
5004 }
5005 }
5006 .thumbnail {
5007 display: block;
5008 padding: 4px;
5009 margin-bottom: 20px;
5010 line-height: 1.42857143;
5011 background-color: #fff;
5012 border: 1px solid #ddd;
5013 border-radius: 4px;
5014 -webkit-transition: border .2s ease-in-out;
5015 -o-transition: border .2s ease-in-out;
5016 transition: border .2s ease-in-out;
5017 }
5018 .thumbnail > img,
5019 .thumbnail a > img {
5020 margin-right: auto;
5021 margin-left: auto;
5022 }
5023 a.thumbnail:hover,
5024 a.thumbnail:focus,
5025 a.thumbnail.active {
5026 border-color: #337ab7;
5027 }
5028 .thumbnail .caption {
5029 padding: 9px;
5030 color: #333;
5031 }
5032 .alert {
5033 padding: 15px;
5034 margin-bottom: 20px;
5035 border: 1px solid transparent;
5036 border-radius: 4px;
5037 }
5038 .alert h4 {
5039 margin-top: 0;
5040 color: inherit;
5041 }
5042 .alert .alert-link {
5043 font-weight: bold;
5044 }
5045 .alert > p,
5046 .alert > ul {
5047 margin-bottom: 0;
5048 }
5049 .alert > p + p {
5050 margin-top: 5px;
5051 }
5052 .alert-dismissable,
5053 .alert-dismissible {
5054 padding-right: 35px;
5055 }
5056 .alert-dismissable .close,
5057 .alert-dismissible .close {
5058 position: relative;
5059 top: -2px;
5060 right: -21px;
5061 color: inherit;
5062 }
5063 .alert-success {
5064 color: #3c763d;
5065 background-color: #dff0d8;
5066 border-color: #d6e9c6;
5067 }
5068 .alert-success hr {
5069 border-top-color: #c9e2b3;
5070 }
5071 .alert-success .alert-link {
5072 color: #2b542c;
5073 }
5074 .alert-info {
5075 color: #31708f;
5076 background-color: #d9edf7;
5077 border-color: #bce8f1;
5078 }
5079 .alert-info hr {
5080 border-top-color: #a6e1ec;
5081 }
5082 .alert-info .alert-link {
5083 color: #245269;
5084 }
5085 .alert-warning {
5086 color: #8a6d3b;
5087 background-color: #fcf8e3;
5088 border-color: #faebcc;
5089 }
5090 .alert-warning hr {
5091 border-top-color: #f7e1b5;
5092 }
5093 .alert-warning .alert-link {
5094 color: #66512c;
5095 }
5096 .alert-danger {
5097 color: #a94442;
5098 background-color: #f2dede;
5099 border-color: #ebccd1;
5100 }
5101 .alert-danger hr {
5102 border-top-color: #e4b9c0;
5103 }
5104 .alert-danger .alert-link {
5105 color: #843534;
5106 }
5107 @-webkit-keyframes progress-bar-stripes {
5108 from {
5109 background-position: 40px 0;
5110 }
5111 to {
5112 background-position: 0 0;
5113 }
5114 }
5115 @-o-keyframes progress-bar-stripes {
5116 from {
5117 background-position: 40px 0;
5118 }
5119 to {
5120 background-position: 0 0;
5121 }
5122 }
5123 @keyframes progress-bar-stripes {
5124 from {
5125 background-position: 40px 0;
5126 }
5127 to {
5128 background-position: 0 0;
5129 }
5130 }
5131 .progress {
5132 height: 20px;
5133 margin-bottom: 20px;
5134 overflow: hidden;
5135 background-color: #f5f5f5;
5136 border-radius: 4px;
5137 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5138 box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5139 }
5140 .progress-bar {
5141 float: left;
5142 width: 0;
5143 height: 100%;
5144 font-size: 12px;
5145 line-height: 20px;
5146 color: #fff;
5147 text-align: center;
5148 background-color: #337ab7;
5149 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5150 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5151 -webkit-transition: width .6s ease;
5152 -o-transition: width .6s ease;
5153 transition: width .6s ease;
5154 }
5155 .progress-striped .progress-bar,
5156 .progress-bar-striped {
5157 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);
5158 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);
5159 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);
5160 -webkit-background-size: 40px 40px;
5161 background-size: 40px 40px;
5162 }
5163 .progress.active .progress-bar,
5164 .progress-bar.active {
5165 -webkit-animation: progress-bar-stripes 2s linear infinite;
5166 -o-animation: progress-bar-stripes 2s linear infinite;
5167 animation: progress-bar-stripes 2s linear infinite;
5168 }
5169 .progress-bar-success {
5170 background-color: #5cb85c;
5171 }
5172 .progress-striped .progress-bar-success {
5173 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);
5174 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);
5175 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);
5176 }
5177 .progress-bar-info {
5178 background-color: #5bc0de;
5179 }
5180 .progress-striped .progress-bar-info {
5181 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);
5182 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);
5183 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);
5184 }
5185 .progress-bar-warning {
5186 background-color: #f0ad4e;
5187 }
5188 .progress-striped .progress-bar-warning {
5189 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);
5190 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);
5191 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);
5192 }
5193 .progress-bar-danger {
5194 background-color: #d9534f;
5195 }
5196 .progress-striped .progress-bar-danger {
5197 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);
5198 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);
5199 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);
5200 }
5201 .media {
5202 margin-top: 15px;
5203 }
5204 .media:first-child {
5205 margin-top: 0;
5206 }
5207 .media,
5208 .media-body {
5209 overflow: hidden;
5210 zoom: 1;
5211 }
5212 .media-body {
5213 width: 10000px;
5214 }
5215 .media-object {
5216 display: block;
5217 }
5218 .media-object.img-thumbnail {
5219 max-width: none;
5220 }
5221 .media-right,
5222 .media > .pull-right {
5223 padding-left: 10px;
5224 }
5225 .media-left,
5226 .media > .pull-left {
5227 padding-right: 10px;
5228 }
5229 .media-left,
5230 .media-right,
5231 .media-body {
5232 display: table-cell;
5233 vertical-align: top;
5234 }
5235 .media-middle {
5236 vertical-align: middle;
5237 }
5238 .media-bottom {
5239 vertical-align: bottom;
5240 }
5241 .media-heading {
5242 margin-top: 0;
5243 margin-bottom: 5px;
5244 }
5245 .media-list {
5246 padding-left: 0;
5247 list-style: none;
5248 }
5249 .list-group {
5250 padding-left: 0;
5251 margin-bottom: 20px;
5252 }
5253 .list-group-item {
5254 position: relative;
5255 display: block;
5256 padding: 10px 15px;
5257 margin-bottom: -1px;
5258 background-color: #fff;
5259 border: 1px solid #ddd;
5260 }
5261 .list-group-item:first-child {
5262 border-top-left-radius: 4px;
5263 border-top-right-radius: 4px;
5264 }
5265 .list-group-item:last-child {
5266 margin-bottom: 0;
5267 border-bottom-right-radius: 4px;
5268 border-bottom-left-radius: 4px;
5269 }
5270 a.list-group-item,
5271 button.list-group-item {
5272 color: #555;
5273 }
5274 a.list-group-item .list-group-item-heading,
5275 button.list-group-item .list-group-item-heading {
5276 color: #333;
5277 }
5278 a.list-group-item:hover,
5279 button.list-group-item:hover,
5280 a.list-group-item:focus,
5281 button.list-group-item:focus {
5282 color: #555;
5283 text-decoration: none;
5284 background-color: #f5f5f5;
5285 }
5286 button.list-group-item {
5287 width: 100%;
5288 text-align: left;
5289 }
5290 .list-group-item.disabled,
5291 .list-group-item.disabled:hover,
5292 .list-group-item.disabled:focus {
5293 color: #777;
5294 cursor: not-allowed;
5295 background-color: #eee;
5296 }
5297 .list-group-item.disabled .list-group-item-heading,
5298 .list-group-item.disabled:hover .list-group-item-heading,
5299 .list-group-item.disabled:focus .list-group-item-heading {
5300 color: inherit;
5301 }
5302 .list-group-item.disabled .list-group-item-text,
5303 .list-group-item.disabled:hover .list-group-item-text,
5304 .list-group-item.disabled:focus .list-group-item-text {
5305 color: #777;
5306 }
5307 .list-group-item.active,
5308 .list-group-item.active:hover,
5309 .list-group-item.active:focus {
5310 z-index: 2;
5311 color: #fff;
5312 background-color: #337ab7;
5313 border-color: #337ab7;
5314 }
5315 .list-group-item.active .list-group-item-heading,
5316 .list-group-item.active:hover .list-group-item-heading,
5317 .list-group-item.active:focus .list-group-item-heading,
5318 .list-group-item.active .list-group-item-heading > small,
5319 .list-group-item.active:hover .list-group-item-heading > small,
5320 .list-group-item.active:focus .list-group-item-heading > small,
5321 .list-group-item.active .list-group-item-heading > .small,
5322 .list-group-item.active:hover .list-group-item-heading > .small,
5323 .list-group-item.active:focus .list-group-item-heading > .small {
5324 color: inherit;
5325 }
5326 .list-group-item.active .list-group-item-text,
5327 .list-group-item.active:hover .list-group-item-text,
5328 .list-group-item.active:focus .list-group-item-text {
5329 color: #c7ddef;
5330 }
5331 .list-group-item-success {
5332 color: #3c763d;
5333 background-color: #dff0d8;
5334 }
5335 a.list-group-item-success,
5336 button.list-group-item-success {
5337 color: #3c763d;
5338 }
5339 a.list-group-item-success .list-group-item-heading,
5340 button.list-group-item-success .list-group-item-heading {
5341 color: inherit;
5342 }
5343 a.list-group-item-success:hover,
5344 button.list-group-item-success:hover,
5345 a.list-group-item-success:focus,
5346 button.list-group-item-success:focus {
5347 color: #3c763d;
5348 background-color: #d0e9c6;
5349 }
5350 a.list-group-item-success.active,
5351 button.list-group-item-success.active,
5352 a.list-group-item-success.active:hover,
5353 button.list-group-item-success.active:hover,
5354 a.list-group-item-success.active:focus,
5355 button.list-group-item-success.active:focus {
5356 color: #fff;
5357 background-color: #3c763d;
5358 border-color: #3c763d;
5359 }
5360 .list-group-item-info {
5361 color: #31708f;
5362 background-color: #d9edf7;
5363 }
5364 a.list-group-item-info,
5365 button.list-group-item-info {
5366 color: #31708f;
5367 }
5368 a.list-group-item-info .list-group-item-heading,
5369 button.list-group-item-info .list-group-item-heading {
5370 color: inherit;
5371 }
5372 a.list-group-item-info:hover,
5373 button.list-group-item-info:hover,
5374 a.list-group-item-info:focus,
5375 button.list-group-item-info:focus {
5376 color: #31708f;
5377 background-color: #c4e3f3;
5378 }
5379 a.list-group-item-info.active,
5380 button.list-group-item-info.active,
5381 a.list-group-item-info.active:hover,
5382 button.list-group-item-info.active:hover,
5383 a.list-group-item-info.active:focus,
5384 button.list-group-item-info.active:focus {
5385 color: #fff;
5386 background-color: #31708f;
5387 border-color: #31708f;
5388 }
5389 .list-group-item-warning {
5390 color: #8a6d3b;
5391 background-color: #fcf8e3;
5392 }
5393 a.list-group-item-warning,
5394 button.list-group-item-warning {
5395 color: #8a6d3b;
5396 }
5397 a.list-group-item-warning .list-group-item-heading,
5398 button.list-group-item-warning .list-group-item-heading {
5399 color: inherit;
5400 }
5401 a.list-group-item-warning:hover,
5402 button.list-group-item-warning:hover,
5403 a.list-group-item-warning:focus,
5404 button.list-group-item-warning:focus {
5405 color: #8a6d3b;
5406 background-color: #faf2cc;
5407 }
5408 a.list-group-item-warning.active,
5409 button.list-group-item-warning.active,
5410 a.list-group-item-warning.active:hover,
5411 button.list-group-item-warning.active:hover,
5412 a.list-group-item-warning.active:focus,
5413 button.list-group-item-warning.active:focus {
5414 color: #fff;
5415 background-color: #8a6d3b;
5416 border-color: #8a6d3b;
5417 }
5418 .list-group-item-danger {
5419 color: #a94442;
5420 background-color: #f2dede;
5421 }
5422 a.list-group-item-danger,
5423 button.list-group-item-danger {
5424 color: #a94442;
5425 }
5426 a.list-group-item-danger .list-group-item-heading,
5427 button.list-group-item-danger .list-group-item-heading {
5428 color: inherit;
5429 }
5430 a.list-group-item-danger:hover,
5431 button.list-group-item-danger:hover,
5432 a.list-group-item-danger:focus,
5433 button.list-group-item-danger:focus {
5434 color: #a94442;
5435 background-color: #ebcccc;
5436 }
5437 a.list-group-item-danger.active,
5438 button.list-group-item-danger.active,
5439 a.list-group-item-danger.active:hover,
5440 button.list-group-item-danger.active:hover,
5441 a.list-group-item-danger.active:focus,
5442 button.list-group-item-danger.active:focus {
5443 color: #fff;
5444 background-color: #a94442;
5445 border-color: #a94442;
5446 }
5447 .list-group-item-heading {
5448 margin-top: 0;
5449 margin-bottom: 5px;
5450 }
5451 .list-group-item-text {
5452 margin-bottom: 0;
5453 line-height: 1.3;
5454 }
5455 .panel {
5456 margin-bottom: 20px;
5457 background-color: #fff;
5458 border: 1px solid transparent;
5459 border-radius: 4px;
5460 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5461 box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5462 }
5463 .panel-body {
5464 padding: 15px;
5465 }
5466 .panel-heading {
5467 padding: 10px 15px;
5468 border-bottom: 1px solid transparent;
5469 border-top-left-radius: 3px;
5470 border-top-right-radius: 3px;
5471 }
5472 .panel-heading > .dropdown .dropdown-toggle {
5473 color: inherit;
5474 }
5475 .panel-title {
5476 margin-top: 0;
5477 margin-bottom: 0;
5478 font-size: 16px;
5479 color: inherit;
5480 }
5481 .panel-title > a,
5482 .panel-title > small,
5483 .panel-title > .small,
5484 .panel-title > small > a,
5485 .panel-title > .small > a {
5486 color: inherit;
5487 }
5488 .panel-footer {
5489 padding: 10px 15px;
5490 background-color: #f5f5f5;
5491 border-top: 1px solid #ddd;
5492 border-bottom-right-radius: 3px;
5493 border-bottom-left-radius: 3px;
5494 }
5495 .panel > .list-group,
5496 .panel > .panel-collapse > .list-group {
5497 margin-bottom: 0;
5498 }
5499 .panel > .list-group .list-group-item,
5500 .panel > .panel-collapse > .list-group .list-group-item {
5501 border-width: 1px 0;
5502 border-radius: 0;
5503 }
5504 .panel > .list-group:first-child .list-group-item:first-child,
5505 .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5506 border-top: 0;
5507 border-top-left-radius: 3px;
5508 border-top-right-radius: 3px;
5509 }
5510 .panel > .list-group:last-child .list-group-item:last-child,
5511 .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5512 border-bottom: 0;
5513 border-bottom-right-radius: 3px;
5514 border-bottom-left-radius: 3px;
5515 }
5516 .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
5517 border-top-left-radius: 0;
5518 border-top-right-radius: 0;
5519 }
5520 .panel-heading + .list-group .list-group-item:first-child {
5521 border-top-width: 0;
5522 }
5523 .list-group + .panel-footer {
5524 border-top-width: 0;
5525 }
5526 .panel > .table,
5527 .panel > .table-responsive > .table,
5528 .panel > .panel-collapse > .table {
5529 margin-bottom: 0;
5530 }
5531 .panel > .table caption,
5532 .panel > .table-responsive > .table caption,
5533 .panel > .panel-collapse > .table caption {
5534 padding-right: 15px;
5535 padding-left: 15px;
5536 }
5537 .panel > .table:first-child,
5538 .panel > .table-responsive:first-child > .table:first-child {
5539 border-top-left-radius: 3px;
5540 border-top-right-radius: 3px;
5541 }
5542 .panel > .table:first-child > thead:first-child > tr:first-child,
5543 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5544 .panel > .table:first-child > tbody:first-child > tr:first-child,
5545 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5546 border-top-left-radius: 3px;
5547 border-top-right-radius: 3px;
5548 }
5549 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5550 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5551 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5552 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5553 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5554 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5555 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5556 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5557 border-top-left-radius: 3px;
5558 }
5559 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5560 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5561 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5562 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5563 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5564 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5565 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5566 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5567 border-top-right-radius: 3px;
5568 }
5569 .panel > .table:last-child,
5570 .panel > .table-responsive:last-child > .table:last-child {
5571 border-bottom-right-radius: 3px;
5572 border-bottom-left-radius: 3px;
5573 }
5574 .panel > .table:last-child > tbody:last-child > tr:last-child,
5575 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5576 .panel > .table:last-child > tfoot:last-child > tr:last-child,
5577 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5578 border-bottom-right-radius: 3px;
5579 border-bottom-left-radius: 3px;
5580 }
5581 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5582 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5583 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5584 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5585 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5586 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5587 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5588 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5589 border-bottom-left-radius: 3px;
5590 }
5591 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5592 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5593 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5594 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5595 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5596 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5597 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5598 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5599 border-bottom-right-radius: 3px;
5600 }
5601 .panel > .panel-body + .table,
5602 .panel > .panel-body + .table-responsive,
5603 .panel > .table + .panel-body,
5604 .panel > .table-responsive + .panel-body {
5605 border-top: 1px solid #ddd;
5606 }
5607 .panel > .table > tbody:first-child > tr:first-child th,
5608 .panel > .table > tbody:first-child > tr:first-child td {
5609 border-top: 0;
5610 }
5611 .panel > .table-bordered,
5612 .panel > .table-responsive > .table-bordered {
5613 border: 0;
5614 }
5615 .panel > .table-bordered > thead > tr > th:first-child,
5616 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5617 .panel > .table-bordered > tbody > tr > th:first-child,
5618 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5619 .panel > .table-bordered > tfoot > tr > th:first-child,
5620 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5621 .panel > .table-bordered > thead > tr > td:first-child,
5622 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5623 .panel > .table-bordered > tbody > tr > td:first-child,
5624 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5625 .panel > .table-bordered > tfoot > tr > td:first-child,
5626 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5627 border-left: 0;
5628 }
5629 .panel > .table-bordered > thead > tr > th:last-child,
5630 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5631 .panel > .table-bordered > tbody > tr > th:last-child,
5632 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5633 .panel > .table-bordered > tfoot > tr > th:last-child,
5634 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5635 .panel > .table-bordered > thead > tr > td:last-child,
5636 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5637 .panel > .table-bordered > tbody > tr > td:last-child,
5638 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5639 .panel > .table-bordered > tfoot > tr > td:last-child,
5640 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5641 border-right: 0;
5642 }
5643 .panel > .table-bordered > thead > tr:first-child > td,
5644 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5645 .panel > .table-bordered > tbody > tr:first-child > td,
5646 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5647 .panel > .table-bordered > thead > tr:first-child > th,
5648 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5649 .panel > .table-bordered > tbody > tr:first-child > th,
5650 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5651 border-bottom: 0;
5652 }
5653 .panel > .table-bordered > tbody > tr:last-child > td,
5654 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5655 .panel > .table-bordered > tfoot > tr:last-child > td,
5656 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5657 .panel > .table-bordered > tbody > tr:last-child > th,
5658 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5659 .panel > .table-bordered > tfoot > tr:last-child > th,
5660 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5661 border-bottom: 0;
5662 }
5663 .panel > .table-responsive {
5664 margin-bottom: 0;
5665 border: 0;
5666 }
5667 .panel-group {
5668 margin-bottom: 20px;
5669 }
5670 .panel-group .panel {
5671 margin-bottom: 0;
5672 border-radius: 4px;
5673 }
5674 .panel-group .panel + .panel {
5675 margin-top: 5px;
5676 }
5677 .panel-group .panel-heading {
5678 border-bottom: 0;
5679 }
5680 .panel-group .panel-heading + .panel-collapse > .panel-body,
5681 .panel-group .panel-heading + .panel-collapse > .list-group {
5682 border-top: 1px solid #ddd;
5683 }
5684 .panel-group .panel-footer {
5685 border-top: 0;
5686 }
5687 .panel-group .panel-footer + .panel-collapse .panel-body {
5688 border-bottom: 1px solid #ddd;
5689 }
5690 .panel-default {
5691 border-color: #ddd;
5692 }
5693 .panel-default > .panel-heading {
5694 color: #333;
5695 background-color: #f5f5f5;
5696 border-color: #ddd;
5697 }
5698 .panel-default > .panel-heading + .panel-collapse > .panel-body {
5699 border-top-color: #ddd;
5700 }
5701 .panel-default > .panel-heading .badge {
5702 color: #f5f5f5;
5703 background-color: #333;
5704 }
5705 .panel-default > .panel-footer + .panel-collapse > .panel-body {
5706 border-bottom-color: #ddd;
5707 }
5708 .panel-primary {
5709 border-color: #337ab7;
5710 }
5711 .panel-primary > .panel-heading {
5712 color: #fff;
5713 background-color: #337ab7;
5714 border-color: #337ab7;
5715 }
5716 .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5717 border-top-color: #337ab7;
5718 }
5719 .panel-primary > .panel-heading .badge {
5720 color: #337ab7;
5721 background-color: #fff;
5722 }
5723 .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5724 border-bottom-color: #337ab7;
5725 }
5726 .panel-success {
5727 border-color: #d6e9c6;
5728 }
5729 .panel-success > .panel-heading {
5730 color: #3c763d;
5731 background-color: #dff0d8;
5732 border-color: #d6e9c6;
5733 }
5734 .panel-success > .panel-heading + .panel-collapse > .panel-body {
5735 border-top-color: #d6e9c6;
5736 }
5737 .panel-success > .panel-heading .badge {
5738 color: #dff0d8;
5739 background-color: #3c763d;
5740 }
5741 .panel-success > .panel-footer + .panel-collapse > .panel-body {
5742 border-bottom-color: #d6e9c6;
5743 }
5744 .panel-info {
5745 border-color: #bce8f1;
5746 }
5747 .panel-info > .panel-heading {
5748 color: #31708f;
5749 background-color: #d9edf7;
5750 border-color: #bce8f1;
5751 }
5752 .panel-info > .panel-heading + .panel-collapse > .panel-body {
5753 border-top-color: #bce8f1;
5754 }
5755 .panel-info > .panel-heading .badge {
5756 color: #d9edf7;
5757 background-color: #31708f;
5758 }
5759 .panel-info > .panel-footer + .panel-collapse > .panel-body {
5760 border-bottom-color: #bce8f1;
5761 }
5762 .panel-warning {
5763 border-color: #faebcc;
5764 }
5765 .panel-warning > .panel-heading {
5766 color: #8a6d3b;
5767 background-color: #fcf8e3;
5768 border-color: #faebcc;
5769 }
5770 .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5771 border-top-color: #faebcc;
5772 }
5773 .panel-warning > .panel-heading .badge {
5774 color: #fcf8e3;
5775 background-color: #8a6d3b;
5776 }
5777 .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5778 border-bottom-color: #faebcc;
5779 }
5780 .panel-danger {
5781 border-color: #ebccd1;
5782 }
5783 .panel-danger > .panel-heading {
5784 color: #a94442;
5785 background-color: #f2dede;
5786 border-color: #ebccd1;
5787 }
5788 .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5789 border-top-color: #ebccd1;
5790 }
5791 .panel-danger > .panel-heading .badge {
5792 color: #f2dede;
5793 background-color: #a94442;
5794 }
5795 .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5796 border-bottom-color: #ebccd1;
5797 }
5798 .embed-responsive {
5799 position: relative;
5800 display: block;
5801 height: 0;
5802 padding: 0;
5803 overflow: hidden;
5804 }
5805 .embed-responsive .embed-responsive-item,
5806 .embed-responsive iframe,
5807 .embed-responsive embed,
5808 .embed-responsive object,
5809 .embed-responsive video {
5810 position: absolute;
5811 top: 0;
5812 bottom: 0;
5813 left: 0;
5814 width: 100%;
5815 height: 100%;
5816 border: 0;
5817 }
5818 .embed-responsive-16by9 {
5819 padding-bottom: 56.25%;
5820 }
5821 .embed-responsive-4by3 {
5822 padding-bottom: 75%;
5823 }
5824 .well {
5825 min-height: 20px;
5826 padding: 19px;
5827 margin-bottom: 20px;
5828 background-color: #f5f5f5;
5829 border: 1px solid #e3e3e3;
5830 border-radius: 4px;
5831 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5832 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5833 }
5834 .well blockquote {
5835 border-color: #ddd;
5836 border-color: rgba(0, 0, 0, .15);
5837 }
5838 .well-lg {
5839 padding: 24px;
5840 border-radius: 6px;
5841 }
5842 .well-sm {
5843 padding: 9px;
5844 border-radius: 3px;
5845 }
5846 .close {
5847 float: right;
5848 font-size: 21px;
5849 font-weight: bold;
5850 line-height: 1;
5851 color: #000;
5852 text-shadow: 0 1px 0 #fff;
5853 filter: alpha(opacity=20);
5854 opacity: .2;
5855 }
5856 .close:hover,
5857 .close:focus {
5858 color: #000;
5859 text-decoration: none;
5860 cursor: pointer;
5861 filter: alpha(opacity=50);
5862 opacity: .5;
5863 }
5864 button.close {
5865 -webkit-appearance: none;
5866 padding: 0;
5867 cursor: pointer;
5868 background: transparent;
5869 border: 0;
5870 }
5871 .modal-open {
5872 overflow: hidden;
5873 }
5874 .modal {
5875 position: fixed;
5876 top: 0;
5877 right: 0;
5878 bottom: 0;
5879 left: 0;
5880 z-index: 1050;
5881 display: none;
5882 overflow: hidden;
5883 -webkit-overflow-scrolling: touch;
5884 outline: 0;
5885 }
5886 .modal.fade .modal-dialog {
5887 -webkit-transition: -webkit-transform .3s ease-out;
5888 -o-transition: -o-transform .3s ease-out;
5889 transition: transform .3s ease-out;
5890 -webkit-transform: translate(0, -25%);
5891 -ms-transform: translate(0, -25%);
5892 -o-transform: translate(0, -25%);
5893 transform: translate(0, -25%);
5894 }
5895 .modal.in .modal-dialog {
5896 -webkit-transform: translate(0, 0);
5897 -ms-transform: translate(0, 0);
5898 -o-transform: translate(0, 0);
5899 transform: translate(0, 0);
5900 }
5901 .modal-open .modal {
5902 overflow-x: hidden;
5903 overflow-y: auto;
5904 }
5905 .modal-dialog {
5906 position: relative;
5907 width: auto;
5908 margin: 10px;
5909 }
5910 .modal-content {
5911 position: relative;
5912 background-color: #fff;
5913 -webkit-background-clip: padding-box;
5914 background-clip: padding-box;
5915 border: 1px solid #999;
5916 border: 1px solid rgba(0, 0, 0, .2);
5917 border-radius: 6px;
5918 outline: 0;
5919 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5920 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5921 }
5922 .modal-backdrop {
5923 position: fixed;
5924 top: 0;
5925 right: 0;
5926 bottom: 0;
5927 left: 0;
5928 z-index: 1040;
5929 background-color: #000;
5930 }
5931 .modal-backdrop.fade {
5932 filter: alpha(opacity=0);
5933 opacity: 0;
5934 }
5935 .modal-backdrop.in {
5936 filter: alpha(opacity=50);
5937 opacity: .5;
5938 }
5939 .modal-header {
5940 padding: 15px;
5941 border-bottom: 1px solid #e5e5e5;
5942 }
5943 .modal-header .close {
5944 margin-top: -2px;
5945 }
5946 .modal-title {
5947 margin: 0;
5948 line-height: 1.42857143;
5949 }
5950 .modal-body {
5951 position: relative;
5952 padding: 15px;
5953 }
5954 .modal-footer {
5955 padding: 15px;
5956 text-align: right;
5957 border-top: 1px solid #e5e5e5;
5958 }
5959 .modal-footer .btn + .btn {
5960 margin-bottom: 0;
5961 margin-left: 5px;
5962 }
5963 .modal-footer .btn-group .btn + .btn {
5964 margin-left: -1px;
5965 }
5966 .modal-footer .btn-block + .btn-block {
5967 margin-left: 0;
5968 }
5969 .modal-scrollbar-measure {
5970 position: absolute;
5971 top: -9999px;
5972 width: 50px;
5973 height: 50px;
5974 overflow: scroll;
5975 }
5976 @media (min-width: 768px) {
5977 .modal-dialog {
5978 width: 600px;
5979 margin: 30px auto;
5980 }
5981 .modal-content {
5982 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5983 box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5984 }
5985 .modal-sm {
5986 width: 300px;
5987 }
5988 }
5989 @media (min-width: 992px) {
5990 .modal-lg {
5991 width: 900px;
5992 }
5993 }
5994 .tooltip {
5995 position: absolute;
5996 z-index: 1070;
5997 display: block;
5998 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
5999 font-size: 12px;
6000 font-style: normal;
6001 font-weight: normal;
6002 line-height: 1.42857143;
6003 text-align: left;
6004 text-align: start;
6005 text-decoration: none;
6006 text-shadow: none;
6007 text-transform: none;
6008 letter-spacing: normal;
6009 word-break: normal;
6010 word-spacing: normal;
6011 word-wrap: normal;
6012 white-space: normal;
6013 filter: alpha(opacity=0);
6014 opacity: 0;
6015
6016 line-break: auto;
6017 }
6018 .tooltip.in {
6019 filter: alpha(opacity=90);
6020 opacity: .9;
6021 }
6022 .tooltip.top {
6023 padding: 5px 0;
6024 margin-top: -3px;
6025 }
6026 .tooltip.right {
6027 padding: 0 5px;
6028 margin-left: 3px;
6029 }
6030 .tooltip.bottom {
6031 padding: 5px 0;
6032 margin-top: 3px;
6033 }
6034 .tooltip.left {
6035 padding: 0 5px;
6036 margin-left: -3px;
6037 }
6038 .tooltip-inner {
6039 max-width: 200px;
6040 padding: 3px 8px;
6041 color: #fff;
6042 text-align: center;
6043 background-color: #000;
6044 border-radius: 4px;
6045 }
6046 .tooltip-arrow {
6047 position: absolute;
6048 width: 0;
6049 height: 0;
6050 border-color: transparent;
6051 border-style: solid;
6052 }
6053 .tooltip.top .tooltip-arrow {
6054 bottom: 0;
6055 left: 50%;
6056 margin-left: -5px;
6057 border-width: 5px 5px 0;
6058 border-top-color: #000;
6059 }
6060 .tooltip.top-left .tooltip-arrow {
6061 right: 5px;
6062 bottom: 0;
6063 margin-bottom: -5px;
6064 border-width: 5px 5px 0;
6065 border-top-color: #000;
6066 }
6067 .tooltip.top-right .tooltip-arrow {
6068 bottom: 0;
6069 left: 5px;
6070 margin-bottom: -5px;
6071 border-width: 5px 5px 0;
6072 border-top-color: #000;
6073 }
6074 .tooltip.right .tooltip-arrow {
6075 top: 50%;
6076 left: 0;
6077 margin-top: -5px;
6078 border-width: 5px 5px 5px 0;
6079 border-right-color: #000;
6080 }
6081 .tooltip.left .tooltip-arrow {
6082 top: 50%;
6083 right: 0;
6084 margin-top: -5px;
6085 border-width: 5px 0 5px 5px;
6086 border-left-color: #000;
6087 }
6088 .tooltip.bottom .tooltip-arrow {
6089 top: 0;
6090 left: 50%;
6091 margin-left: -5px;
6092 border-width: 0 5px 5px;
6093 border-bottom-color: #000;
6094 }
6095 .tooltip.bottom-left .tooltip-arrow {
6096 top: 0;
6097 right: 5px;
6098 margin-top: -5px;
6099 border-width: 0 5px 5px;
6100 border-bottom-color: #000;
6101 }
6102 .tooltip.bottom-right .tooltip-arrow {
6103 top: 0;
6104 left: 5px;
6105 margin-top: -5px;
6106 border-width: 0 5px 5px;
6107 border-bottom-color: #000;
6108 }
6109 .popover {
6110 position: absolute;
6111 top: 0;
6112 left: 0;
6113 z-index: 1060;
6114 display: none;
6115 max-width: 276px;
6116 padding: 1px;
6117 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6118 font-size: 14px;
6119 font-style: normal;
6120 font-weight: normal;
6121 line-height: 1.42857143;
6122 text-align: left;
6123 text-align: start;
6124 text-decoration: none;
6125 text-shadow: none;
6126 text-transform: none;
6127 letter-spacing: normal;
6128 word-break: normal;
6129 word-spacing: normal;
6130 word-wrap: normal;
6131 white-space: normal;
6132 background-color: #fff;
6133 -webkit-background-clip: padding-box;
6134 background-clip: padding-box;
6135 border: 1px solid #ccc;
6136 border: 1px solid rgba(0, 0, 0, .2);
6137 border-radius: 6px;
6138 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6139 box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6140
6141 line-break: auto;
6142 }
6143 .popover.top {
6144 margin-top: -10px;
6145 }
6146 .popover.right {
6147 margin-left: 10px;
6148 }
6149 .popover.bottom {
6150 margin-top: 10px;
6151 }
6152 .popover.left {
6153 margin-left: -10px;
6154 }
6155 .popover-title {
6156 padding: 8px 14px;
6157 margin: 0;
6158 font-size: 14px;
6159 background-color: #f7f7f7;
6160 border-bottom: 1px solid #ebebeb;
6161 border-radius: 5px 5px 0 0;
6162 }
6163 .popover-content {
6164 padding: 9px 14px;
6165 }
6166 .popover > .arrow,
6167 .popover > .arrow:after {
6168 position: absolute;
6169 display: block;
6170 width: 0;
6171 height: 0;
6172 border-color: transparent;
6173 border-style: solid;
6174 }
6175 .popover > .arrow {
6176 border-width: 11px;
6177 }
6178 .popover > .arrow:after {
6179 content: "";
6180 border-width: 10px;
6181 }
6182 .popover.top > .arrow {
6183 bottom: -11px;
6184 left: 50%;
6185 margin-left: -11px;
6186 border-top-color: #999;
6187 border-top-color: rgba(0, 0, 0, .25);
6188 border-bottom-width: 0;
6189 }
6190 .popover.top > .arrow:after {
6191 bottom: 1px;
6192 margin-left: -10px;
6193 content: " ";
6194 border-top-color: #fff;
6195 border-bottom-width: 0;
6196 }
6197 .popover.right > .arrow {
6198 top: 50%;
6199 left: -11px;
6200 margin-top: -11px;
6201 border-right-color: #999;
6202 border-right-color: rgba(0, 0, 0, .25);
6203 border-left-width: 0;
6204 }
6205 .popover.right > .arrow:after {
6206 bottom: -10px;
6207 left: 1px;
6208 content: " ";
6209 border-right-color: #fff;
6210 border-left-width: 0;
6211 }
6212 .popover.bottom > .arrow {
6213 top: -11px;
6214 left: 50%;
6215 margin-left: -11px;
6216 border-top-width: 0;
6217 border-bottom-color: #999;
6218 border-bottom-color: rgba(0, 0, 0, .25);
6219 }
6220 .popover.bottom > .arrow:after {
6221 top: 1px;
6222 margin-left: -10px;
6223 content: " ";
6224 border-top-width: 0;
6225 border-bottom-color: #fff;
6226 }
6227 .popover.left > .arrow {
6228 top: 50%;
6229 right: -11px;
6230 margin-top: -11px;
6231 border-right-width: 0;
6232 border-left-color: #999;
6233 border-left-color: rgba(0, 0, 0, .25);
6234 }
6235 .popover.left > .arrow:after {
6236 right: 1px;
6237 bottom: -10px;
6238 content: " ";
6239 border-right-width: 0;
6240 border-left-color: #fff;
6241 }
6242 .carousel {
6243 position: relative;
6244 }
6245 .carousel-inner {
6246 position: relative;
6247 width: 100%;
6248 overflow: hidden;
6249 }
6250 .carousel-inner > .item {
6251 position: relative;
6252 display: none;
6253 -webkit-transition: .6s ease-in-out left;
6254 -o-transition: .6s ease-in-out left;
6255 transition: .6s ease-in-out left;
6256 }
6257 .carousel-inner > .item > img,
6258 .carousel-inner > .item > a > img {
6259 line-height: 1;
6260 }
6261 @media all and (transform-3d), (-webkit-transform-3d) {
6262 .carousel-inner > .item {
6263 -webkit-transition: -webkit-transform .6s ease-in-out;
6264 -o-transition: -o-transform .6s ease-in-out;
6265 transition: transform .6s ease-in-out;
6266
6267 -webkit-backface-visibility: hidden;
6268 backface-visibility: hidden;
6269 -webkit-perspective: 1000px;
6270 perspective: 1000px;
6271 }
6272 .carousel-inner > .item.next,
6273 .carousel-inner > .item.active.right {
6274 left: 0;
6275 -webkit-transform: translate3d(100%, 0, 0);
6276 transform: translate3d(100%, 0, 0);
6277 }
6278 .carousel-inner > .item.prev,
6279 .carousel-inner > .item.active.left {
6280 left: 0;
6281 -webkit-transform: translate3d(-100%, 0, 0);
6282 transform: translate3d(-100%, 0, 0);
6283 }
6284 .carousel-inner > .item.next.left,
6285 .carousel-inner > .item.prev.right,
6286 .carousel-inner > .item.active {
6287 left: 0;
6288 -webkit-transform: translate3d(0, 0, 0);
6289 transform: translate3d(0, 0, 0);
6290 }
6291 }
6292 .carousel-inner > .active,
6293 .carousel-inner > .next,
6294 .carousel-inner > .prev {
6295 display: block;
6296 }
6297 .carousel-inner > .active {
6298 left: 0;
6299 }
6300 .carousel-inner > .next,
6301 .carousel-inner > .prev {
6302 position: absolute;
6303 top: 0;
6304 width: 100%;
6305 }
6306 .carousel-inner > .next {
6307 left: 100%;
6308 }
6309 .carousel-inner > .prev {
6310 left: -100%;
6311 }
6312 .carousel-inner > .next.left,
6313 .carousel-inner > .prev.right {
6314 left: 0;
6315 }
6316 .carousel-inner > .active.left {
6317 left: -100%;
6318 }
6319 .carousel-inner > .active.right {
6320 left: 100%;
6321 }
6322 .carousel-control {
6323 position: absolute;
6324 top: 0;
6325 bottom: 0;
6326 left: 0;
6327 width: 15%;
6328 font-size: 20px;
6329 color: #fff;
6330 text-align: center;
6331 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6332 background-color: rgba(0, 0, 0, 0);
6333 filter: alpha(opacity=50);
6334 opacity: .5;
6335 }
6336 .carousel-control.left {
6337 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6338 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6339 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
6340 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6341 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6342 background-repeat: repeat-x;
6343 }
6344 .carousel-control.right {
6345 right: 0;
6346 left: auto;
6347 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6348 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6349 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
6350 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6351 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6352 background-repeat: repeat-x;
6353 }
6354 .carousel-control:hover,
6355 .carousel-control:focus {
6356 color: #fff;
6357 text-decoration: none;
6358 filter: alpha(opacity=90);
6359 outline: 0;
6360 opacity: .9;
6361 }
6362 .carousel-control .icon-prev,
6363 .carousel-control .icon-next,
6364 .carousel-control .glyphicon-chevron-left,
6365 .carousel-control .glyphicon-chevron-right {
6366 position: absolute;
6367 top: 50%;
6368 z-index: 5;
6369 display: inline-block;
6370 margin-top: -10px;
6371 }
6372 .carousel-control .icon-prev,
6373 .carousel-control .glyphicon-chevron-left {
6374 left: 50%;
6375 margin-left: -10px;
6376 }
6377 .carousel-control .icon-next,
6378 .carousel-control .glyphicon-chevron-right {
6379 right: 50%;
6380 margin-right: -10px;
6381 }
6382 .carousel-control .icon-prev,
6383 .carousel-control .icon-next {
6384 width: 20px;
6385 height: 20px;
6386 font-family: serif;
6387 line-height: 1;
6388 }
6389 .carousel-control .icon-prev:before {
6390 content: '\2039';
6391 }
6392 .carousel-control .icon-next:before {
6393 content: '\203a';
6394 }
6395 .carousel-indicators {
6396 position: absolute;
6397 bottom: 10px;
6398 left: 50%;
6399 z-index: 15;
6400 width: 60%;
6401 padding-left: 0;
6402 margin-left: -30%;
6403 text-align: center;
6404 list-style: none;
6405 }
6406 .carousel-indicators li {
6407 display: inline-block;
6408 width: 10px;
6409 height: 10px;
6410 margin: 1px;
6411 text-indent: -999px;
6412 cursor: pointer;
6413 background-color: #000 \9;
6414 background-color: rgba(0, 0, 0, 0);
6415 border: 1px solid #fff;
6416 border-radius: 10px;
6417 }
6418 .carousel-indicators .active {
6419 width: 12px;
6420 height: 12px;
6421 margin: 0;
6422 background-color: #fff;
6423 }
6424 .carousel-caption {
6425 position: absolute;
6426 right: 15%;
6427 bottom: 20px;
6428 left: 15%;
6429 z-index: 10;
6430 padding-top: 20px;
6431 padding-bottom: 20px;
6432 color: #fff;
6433 text-align: center;
6434 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6435 }
6436 .carousel-caption .btn {
6437 text-shadow: none;
6438 }
6439 @media screen and (min-width: 768px) {
6440 .carousel-control .glyphicon-chevron-left,
6441 .carousel-control .glyphicon-chevron-right,
6442 .carousel-control .icon-prev,
6443 .carousel-control .icon-next {
6444 width: 30px;
6445 height: 30px;
6446 margin-top: -10px;
6447 font-size: 30px;
6448 }
6449 .carousel-control .glyphicon-chevron-left,
6450 .carousel-control .icon-prev {
6451 margin-left: -10px;
6452 }
6453 .carousel-control .glyphicon-chevron-right,
6454 .carousel-control .icon-next {
6455 margin-right: -10px;
6456 }
6457 .carousel-caption {
6458 right: 20%;
6459 left: 20%;
6460 padding-bottom: 30px;
6461 }
6462 .carousel-indicators {
6463 bottom: 20px;
6464 }
6465 }
6466 .clearfix:before,
6467 .clearfix:after,
6468 .dl-horizontal dd:before,
6469 .dl-horizontal dd:after,
6470 .container:before,
6471 .container:after,
6472 .container-fluid:before,
6473 .container-fluid:after,
6474 .row:before,
6475 .row:after,
6476 .form-horizontal .form-group:before,
6477 .form-horizontal .form-group:after,
6478 .btn-toolbar:before,
6479 .btn-toolbar:after,
6480 .btn-group-vertical > .btn-group:before,
6481 .btn-group-vertical > .btn-group:after,
6482 .nav:before,
6483 .nav:after,
6484 .navbar:before,
6485 .navbar:after,
6486 .navbar-header:before,
6487 .navbar-header:after,
6488 .navbar-collapse:before,
6489 .navbar-collapse:after,
6490 .pager:before,
6491 .pager:after,
6492 .panel-body:before,
6493 .panel-body:after,
6494 .modal-header:before,
6495 .modal-header:after,
6496 .modal-footer:before,
6497 .modal-footer:after {
6498 display: table;
6499 content: " ";
6500 }
6501 .clearfix:after,
6502 .dl-horizontal dd:after,
6503 .container:after,
6504 .container-fluid:after,
6505 .row:after,
6506 .form-horizontal .form-group:after,
6507 .btn-toolbar:after,
6508 .btn-group-vertical > .btn-group:after,
6509 .nav:after,
6510 .navbar:after,
6511 .navbar-header:after,
6512 .navbar-collapse:after,
6513 .pager:after,
6514 .panel-body:after,
6515 .modal-header:after,
6516 .modal-footer:after {
6517 clear: both;
6518 }
6519 .center-block {
6520 display: block;
6521 margin-right: auto;
6522 margin-left: auto;
6523 }
6524 .pull-right {
6525 float: right !important;
6526 }
6527 .pull-left {
6528 float: left !important;
6529 }
6530 .hide {
6531 display: none !important;
6532 }
6533 .show {
6534 display: block !important;
6535 }
6536 .invisible {
6537 visibility: hidden;
6538 }
6539 .text-hide {
6540 font: 0/0 a;
6541 color: transparent;
6542 text-shadow: none;
6543 background-color: transparent;
6544 border: 0;
6545 }
6546 .hidden {
6547 display: none !important;
6548 }
6549 .affix {
6550 position: fixed;
6551 }
6552 @-ms-viewport {
6553 width: device-width;
6554 }
6555 .visible-xs,
6556 .visible-sm,
6557 .visible-md,
6558 .visible-lg {
6559 display: none !important;
6560 }
6561 .visible-xs-block,
6562 .visible-xs-inline,
6563 .visible-xs-inline-block,
6564 .visible-sm-block,
6565 .visible-sm-inline,
6566 .visible-sm-inline-block,
6567 .visible-md-block,
6568 .visible-md-inline,
6569 .visible-md-inline-block,
6570 .visible-lg-block,
6571 .visible-lg-inline,
6572 .visible-lg-inline-block {
6573 display: none !important;
6574 }
6575 @media (max-width: 767px) {
6576 .visible-xs {
6577 display: block !important;
6578 }
6579 table.visible-xs {
6580 display: table !important;
6581 }
6582 tr.visible-xs {
6583 display: table-row !important;
6584 }
6585 th.visible-xs,
6586 td.visible-xs {
6587 display: table-cell !important;
6588 }
6589 }
6590 @media (max-width: 767px) {
6591 .visible-xs-block {
6592 display: block !important;
6593 }
6594 }
6595 @media (max-width: 767px) {
6596 .visible-xs-inline {
6597 display: inline !important;
6598 }
6599 }
6600 @media (max-width: 767px) {
6601 .visible-xs-inline-block {
6602 display: inline-block !important;
6603 }
6604 }
6605 @media (min-width: 768px) and (max-width: 991px) {
6606 .visible-sm {
6607 display: block !important;
6608 }
6609 table.visible-sm {
6610 display: table !important;
6611 }
6612 tr.visible-sm {
6613 display: table-row !important;
6614 }
6615 th.visible-sm,
6616 td.visible-sm {
6617 display: table-cell !important;
6618 }
6619 }
6620 @media (min-width: 768px) and (max-width: 991px) {
6621 .visible-sm-block {
6622 display: block !important;
6623 }
6624 }
6625 @media (min-width: 768px) and (max-width: 991px) {
6626 .visible-sm-inline {
6627 display: inline !important;
6628 }
6629 }
6630 @media (min-width: 768px) and (max-width: 991px) {
6631 .visible-sm-inline-block {
6632 display: inline-block !important;
6633 }
6634 }
6635 @media (min-width: 992px) and (max-width: 1199px) {
6636 .visible-md {
6637 display: block !important;
6638 }
6639 table.visible-md {
6640 display: table !important;
6641 }
6642 tr.visible-md {
6643 display: table-row !important;
6644 }
6645 th.visible-md,
6646 td.visible-md {
6647 display: table-cell !important;
6648 }
6649 }
6650 @media (min-width: 992px) and (max-width: 1199px) {
6651 .visible-md-block {
6652 display: block !important;
6653 }
6654 }
6655 @media (min-width: 992px) and (max-width: 1199px) {
6656 .visible-md-inline {
6657 display: inline !important;
6658 }
6659 }
6660 @media (min-width: 992px) and (max-width: 1199px) {
6661 .visible-md-inline-block {
6662 display: inline-block !important;
6663 }
6664 }
6665 @media (min-width: 1200px) {
6666 .visible-lg {
6667 display: block !important;
6668 }
6669 table.visible-lg {
6670 display: table !important;
6671 }
6672 tr.visible-lg {
6673 display: table-row !important;
6674 }
6675 th.visible-lg,
6676 td.visible-lg {
6677 display: table-cell !important;
6678 }
6679 }
6680 @media (min-width: 1200px) {
6681 .visible-lg-block {
6682 display: block !important;
6683 }
6684 }
6685 @media (min-width: 1200px) {
6686 .visible-lg-inline {
6687 display: inline !important;
6688 }
6689 }
6690 @media (min-width: 1200px) {
6691 .visible-lg-inline-block {
6692 display: inline-block !important;
6693 }
6694 }
6695 @media (max-width: 767px) {
6696 .hidden-xs {
6697 display: none !important;
6698 }
6699 }
6700 @media (min-width: 768px) and (max-width: 991px) {
6701 .hidden-sm {
6702 display: none !important;
6703 }
6704 }
6705 @media (min-width: 992px) and (max-width: 1199px) {
6706 .hidden-md {
6707 display: none !important;
6708 }
6709 }
6710 @media (min-width: 1200px) {
6711 .hidden-lg {
6712 display: none !important;
6713 }
6714 }
6715 .visible-print {
6716 display: none !important;
6717 }
6718 @media print {
6719 .visible-print {
6720 display: block !important;
6721 }
6722 table.visible-print {
6723 display: table !important;
6724 }
6725 tr.visible-print {
6726 display: table-row !important;
6727 }
6728 th.visible-print,
6729 td.visible-print {
6730 display: table-cell !important;
6731 }
6732 }
6733 .visible-print-block {
6734 display: none !important;
6735 }
6736 @media print {
6737 .visible-print-block {
6738 display: block !important;
6739 }
6740 }
6741 .visible-print-inline {
6742 display: none !important;
6743 }
6744 @media print {
6745 .visible-print-inline {
6746 display: inline !important;
6747 }
6748 }
6749 .visible-print-inline-block {
6750 display: none !important;
6751 }
6752 @media print {
6753 .visible-print-inline-block {
6754 display: inline-block !important;
6755 }
6756 }
6757 @media print {
6758 .hidden-print {
6759 display: none !important;
6760 }
6761 }
6762 /*# sourceMappingURL=bootstrap.css.map */
6763 </style>
6764 <style>body {
6765 padding-bottom: 32px;
6766 }
6767 .form-control[readonly] {
6768 cursor: text;
6769 }
6770 .feedback-container {
6771 position: fixed;
6772 top: 0;
6773 width: 100%;
6774 text-align: center;
6775 z-index: 4;
6776 }
6777 .feedback {
6778 display: table;
6779 padding: 0.5em 1em;
6780 background-color: orange;
6781 margin: 0 auto;
6782 font-size: 2em;
6783 color: #444;
6784 border: 2px solid #555;
6785 border-top: 0;
6786 border-bottom-left-radius: 20px 20px;
6787 border-bottom-right-radius: 20px 20px;
6788 }
6789 .no-border {
6790 border: 0;
6791 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6792 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6793 }
6794 .phrase {
6795 word-break: keep-all;
6796 }
6797 .generate-container .strength {
6798 /* override mobile width from bootstrap */
6799 width: auto!important;
6800 display: inline-block;
6801 }
6802 .languages a {
6803 padding-left: 10px;
6804 }
6805 .languages a:nth-of-type(1) {
6806 margin-left: -12px;
6807 padding-left: 0;
6808 }
6809 .monospace {
6810 font-family: monospace;
6811 }
6812 .entropy-container .filtered,
6813 .entropy-container .binary {
6814 word-wrap: break-word;
6815 }
6816 .entropy-container li {
6817 padding-bottom: 5px;
6818 }
6819 .card-suit {
6820 font-size: 19px;
6821 line-height: 0;
6822 }
6823 .card-suit.club {
6824 color: #009F00;
6825 }
6826 .card-suit.diamond {
6827 color: #3D5DC4;
6828 }
6829 .card-suit.heart {
6830 color: #F00;
6831 }
6832 .card-suit.spade {
6833 color: #000;
6834 }
6835 .qr-container {
6836 position: fixed;
6837 top: 0;
6838 right: 0;
6839 text-align: center;
6840 background-color: #FFF;
6841 border: 1px solid #CCC;
6842 }
6843 .qr-image {
6844 margin: 5px;
6845 }
6846 .qr-hint,
6847 .qr-warning {
6848 padding: 2px;
6849 max-width: 320px;
6850 }
6851 .more-info {
6852 cursor: help;
6853 border-bottom: 1px dashed #000;
6854 text-decoration: none;
6855 }
6856 .version {
6857 position: absolute;
6858 top: 5px;
6859 right: 5px;
6860 }
6861 .csv {
6862 margin-top: 20px;
6863 margin-bottom: 20px;
6864 white-space: pre;
6865 overflow-wrap: normal;
6866 overflow-x: scroll;
6867 font-family: monospace;
6868 }
6869 </style>
6870 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6871 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6872 <meta content="bitcoin mnemonic converter" name="description" />
6873 <meta content="Ian Coleman" name="author" />
6874 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6875 </head>
6876 <body>
6877 <div class="container">
6878
6879 <h1 class="text-center">Mnemonic Code Converter</h1>
6880 <p class="version">v0.3.6</p>
6881 <hr>
6882 <div class="row">
6883 <div class="col-md-12">
6884 <h2>Mnemonic</h2>
6885 <form class="form-horizontal" role="form">
6886 <div class="form-group">
6887 <div class="col-sm-2"></div>
6888 <div class="col-sm-10">
6889 <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>
6890 <p>
6891 For more info see the
6892 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6893 </p>
6894 </div>
6895 </div>
6896 <div class="form-group generate-container">
6897 <label class="col-sm-2 control-label"></label>
6898 <div class="col-sm-10">
6899 <div class="form-inline">
6900 <div class="input-group-inline">
6901 <span>Generate a random mnemonic, or enter your own below</span>:
6902 <button class="btn generate">Generate</button>
6903 <select id="strength" class="strength form-control">
6904 <option value="3">3</option>
6905 <option value="6">6</option>
6906 <option value="9">9</option>
6907 <option value="12">12</option>
6908 <option value="15" selected>15</option>
6909 <option value="18">18</option>
6910 <option value="21">21</option>
6911 <option value="24">24</option>
6912 </select>
6913 <span>words</span>.
6914 <p class="warning help-block hidden">
6915 <span class="text-danger">
6916 Mnemonics with less than 12 words have low entropy and may be guessed by an attacker.
6917 </span>
6918 </p>
6919 </div>
6920 </div>
6921 </div>
6922 </div>
6923 <div class="entropy-container hidden">
6924 <div class="form-group text-danger">
6925 <label class="col-sm-2 control-label">Warning</label>
6926 <div class="col-sm-10 form-control-static">
6927 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6928 <a href="#entropy-notes">Read more</a>
6929 </div>
6930 </div>
6931 <div class="form-group">
6932 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6933 <div class="col-sm-7">
6934 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6935 <div class="row filter-warning text-danger hidden">
6936 <p class="col-sm-12">
6937 <strong>
6938 Some characters have been discarded
6939 </strong>
6940 </p>
6941 </div>
6942 <div class="row">
6943 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
6944 <div class="crack-time col-sm-3 form-control-static"></div>
6945 <label class="col-sm-3 control-label">Event Count</label>
6946 <div class="event-count col-sm-3 form-control-static"></div>
6947 </div>
6948 <div class="row">
6949 <label class="col-sm-3 control-label">Entropy Type</label>
6950 <div class="type col-sm-3 form-control-static"></div>
6951 <label class="col-sm-3 control-label">Bits Per Event</label>
6952 <div class="bits-per-event col-sm-3 form-control-static"></div>
6953 </div>
6954 <div class="row">
6955 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6956 <div class="word-count col-sm-3 form-control-static"></div>
6957 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
6958 <div class="bits col-sm-3 form-control-static"></div>
6959 </div>
6960 <label class="col-sm-3 control-label">Filtered Entropy</label>
6961 <div class="filtered col-sm-9 form-control-static"></div>
6962 <label class="col-sm-3 control-label">Raw Binary</label>
6963 <div class="binary col-sm-9 form-control-static"></div>
6964 <label class="col-sm-3 control-label">Binary Checksum</label>
6965 <div class="checksum col-sm-9 form-control-static">&nbsp;</div>
6966 <label class="col-sm-3 control-label">Word Indexes</label>
6967 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6968 <label class="col-sm-3 control-label">Mnemonic Length</label>
6969 <div class="col-sm-9">
6970 <select class="mnemonic-length form-control">
6971 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6972 <option value="12">12 <span>Words</span></option>
6973 <option value="15">15 <span>Words</option>
6974 <option value="18">18 <span>Words</span></option>
6975 <option value="21">21 <span>Words</span></option>
6976 <option value="24">24 <span>Words</span></option>
6977 </select>
6978 <p class="weak-entropy-override-warning hidden">
6979 <span class="text-danger">
6980 The mnemonic will appear more secure than it really is.
6981 </span>
6982 </p>
6983 </div>
6984 </div>
6985 <div class="col-sm-3">
6986 <p>Valid entropy values include:</p>
6987 <ul>
6988 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6989 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6990 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6991 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6992 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6993 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6994 </ul>
6995 </div>
6996 </div>
6997 </div>
6998 <div class="form-group">
6999 <div class="col-sm-2"></div>
7000 <div class="col-sm-10 checkbox">
7001 <label>
7002 <input type="checkbox" class="use-entropy">
7003 <span>Show entropy details</span>
7004 </label>
7005 </div>
7006 </div>
7007 <div class="form-group">
7008 <label class="col-sm-2 control-label">Mnemonic Language</label>
7009 <div class="col-sm-10 languages">
7010 <div class="form-control no-border">
7011 <a href="#english">English</a>
7012 <a href="#japanese" title="Japanese">日本語</a>
7013 <a href="#spanish" title="Spanish">Español</a>
7014 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7015 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7016 <a href="#french" title="French">Français</a>
7017 <a href="#italian" title="Italian">Italiano</a>
7018 <a href="#korean" title="Korean">한국어</a>
7019 </div>
7020 </div>
7021 </div>
7022 <div class="form-group">
7023 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7024 <div class="col-sm-10">
7025 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7026 </div>
7027 </div>
7028 <div class="form-group">
7029 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7030 <div class="col-sm-10">
7031 <textarea id="passphrase" class="passphrase form-control"></textarea>
7032 </div>
7033 </div>
7034 <div class="form-group">
7035 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7036 <div class="col-sm-10">
7037 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7038 </div>
7039 </div>
7040 <div class="form-group">
7041 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7042 <div class="col-sm-10">
7043 <select id="network-phrase" class="network form-control">
7044 <!-- populated by javascript -->
7045 </select>
7046 </div>
7047 </div>
7048 <div class="form-group">
7049 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7050 <div class="col-sm-10">
7051 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7052 </div>
7053 </div>
7054 <div class="form-group litecoin-ltub-container hidden">
7055 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7056 <div class="col-sm-10 checkbox">
7057 <label>
7058 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7059 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7060 </label>
7061 </div>
7062 </div>
7063 </form>
7064 </div>
7065 </div>
7066
7067 <hr>
7068
7069 <div class="row">
7070 <div class="col-md-12">
7071 <h2>Derivation Path</h2>
7072 <ul class="derivation-type nav nav-tabs" role="tablist">
7073 <li id="bip32-tab">
7074 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7075 </li>
7076 <li id="bip44-tab" class="active">
7077 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7078 </li>
7079 <li id="bip49-tab">
7080 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7081 </li>
7082 <li id="bip84-tab">
7083 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7084 </li>
7085 <li id="bip141-tab">
7086 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7087 </li>
7088 </ul>
7089 <div class="derivation-type tab-content">
7090 <div id="bip44" class="tab-pane active">
7091 <form class="form-horizontal" role="form">
7092 <br>
7093 <div class="col-sm-2"></div>
7094 <div class="col-sm-10">
7095 <p>
7096 For more info see the
7097 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7098 </p>
7099 </div>
7100 <div class="form-group">
7101 <label for="purpose" class="col-sm-2 control-label">
7102 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7103 </label>
7104 <div class="col-sm-10">
7105 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7106 </div>
7107 </div>
7108 <div class="form-group">
7109 <label for="coin" class="col-sm-2 control-label">
7110 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7111 </label>
7112 <div class="col-sm-10">
7113 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7114 </div>
7115 </div>
7116 <div class="form-group">
7117 <label for="account" class="col-sm-2 control-label">
7118 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7119 </label>
7120 <div class="col-sm-10">
7121 <input id="account" type="text" class="account form-control" value="0">
7122 </div>
7123 </div>
7124 <div class="form-group">
7125 <label for="change" class="col-sm-2 control-label">
7126 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7127 </label>
7128 <div class="col-sm-10">
7129 <input id="change" type="text" class="change form-control" value="0">
7130 </div>
7131 </div>
7132 <div class="form-group">
7133 <label class="col-sm-2 control-label">
7134 </label>
7135 <div class="col-sm-10">
7136 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7137 </div>
7138 </div>
7139 <div class="form-group">
7140 <label for="account-xprv" class="col-sm-2 control-label">
7141 <span>Account Extended Private Key</span>
7142 </label>
7143 <div class="col-sm-10">
7144 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7145 </div>
7146 </div>
7147 <div class="form-group">
7148 <label for="account-xpub" class="col-sm-2 control-label">
7149 <span>Account Extended Public Key</span>
7150 </label>
7151 <div class="col-sm-10">
7152 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7153 </div>
7154 </div>
7155 <div class="form-group">
7156 <label class="col-sm-2 control-label">
7157 </label>
7158 <div class="col-sm-10">
7159 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7160 </div>
7161 </div>
7162 <div class="form-group">
7163 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7164 <div class="col-sm-10">
7165 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7166 </div>
7167 </div>
7168 </form>
7169 </div>
7170 <div id="bip32" class="tab-pane">
7171 <form class="form-horizontal" role="form">
7172 <br>
7173 <div class="col-sm-2"></div>
7174 <div class="col-sm-10">
7175 <p>
7176 For more info see the
7177 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7178 </p>
7179 </div>
7180 <div class="form-group">
7181 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7182 <div class="col-sm-10">
7183 <select id="bip32-client" class="client form-control">
7184 <option value="custom">Custom derivation path</option>
7185 <!-- populated by javascript -->
7186 </select>
7187 </div>
7188 </div>
7189 <div class="form-group">
7190 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7191 <div class="col-sm-10">
7192 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7193 </div>
7194 </div>
7195 <div class="form-group">
7196 <div class="col-sm-2"></div>
7197 <label class="col-sm-10">
7198 <input class="hardened-addresses" type="checkbox">
7199 <span>Use hardened addresses</span>
7200 </label>
7201 </div>
7202 <div class="form-group">
7203 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7204 <div class="col-sm-10">
7205 <p class="form-control no-border">
7206 Use path <code>m/0'/0'</code> with hardened addresses.
7207 </p>
7208 <p class="form-control no-border">
7209 For more info see the
7210 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7211 </p>
7212 </div>
7213 </div>
7214 <div class="form-group">
7215 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7216 <div class="col-sm-10">
7217 <p class="form-control no-border">
7218 <span>Use path <code>m/0'/0</code>.</span>
7219 </p>
7220 <p class="form-control no-border">
7221 <span>For more info see</span>
7222 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7223 </p>
7224 </div>
7225 </div>
7226 <div class="form-group">
7227 <label class="col-sm-2 control-label">Block Explorers</label>
7228 <div class="col-sm-10">
7229 <p class="form-control no-border">
7230 <span>Use path <code>m/44'/0'/0'</code>.</span>
7231 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7232 </p>
7233 <p class="form-control no-border">
7234 <span>Can be used with</span>:
7235 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7236 </p>
7237 </div>
7238 </div>
7239 </form>
7240 </div>
7241 <div id="bip49" class="tab-pane">
7242 <form class="form-horizontal" role="form">
7243 <br>
7244 <div class="unavailable hidden">
7245 <div class="form-group">
7246 <div class="col-sm-2"></div>
7247 <div class="col-sm-10">
7248 <p>BIP49 is unavailable for this coin.</p>
7249 </div>
7250 </div>
7251 </div>
7252 <div class="available">
7253 <div class="col-sm-2"></div>
7254 <div class="col-sm-10">
7255 <p>
7256 For more info see the
7257 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7258 </p>
7259 </div>
7260 <div class="form-group">
7261 <label for="purpose" class="col-sm-2 control-label">
7262 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7263 </label>
7264 <div class="col-sm-10">
7265 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7266 </div>
7267 </div>
7268 <div class="form-group">
7269 <label for="coin" class="col-sm-2 control-label">
7270 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7271 </label>
7272 <div class="col-sm-10">
7273 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7274 </div>
7275 </div>
7276 <div class="form-group">
7277 <label for="account" class="col-sm-2 control-label">
7278 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7279 </label>
7280 <div class="col-sm-10">
7281 <input id="account" type="text" class="account form-control" value="0">
7282 </div>
7283 </div>
7284 <div class="form-group">
7285 <label for="change" class="col-sm-2 control-label">
7286 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7287 </label>
7288 <div class="col-sm-10">
7289 <input id="change" type="text" class="change form-control" value="0">
7290 </div>
7291 </div>
7292 <div class="form-group">
7293 <label class="col-sm-2 control-label">
7294 </label>
7295 <div class="col-sm-10">
7296 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7297 </div>
7298 </div>
7299 <div class="form-group">
7300 <label for="account-xprv" class="col-sm-2 control-label">
7301 <span>Account Extended Private Key</span>
7302 </label>
7303 <div class="col-sm-10">
7304 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7305 </div>
7306 </div>
7307 <div class="form-group">
7308 <label for="account-xpub" class="col-sm-2 control-label">
7309 <span>Account Extended Public Key</span>
7310 </label>
7311 <div class="col-sm-10">
7312 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7313 </div>
7314 </div>
7315 <div class="form-group">
7316 <label class="col-sm-2 control-label">
7317 </label>
7318 <div class="col-sm-10">
7319 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7320 </div>
7321 </div>
7322 <div class="form-group">
7323 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7324 <div class="col-sm-10">
7325 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7326 </div>
7327 </div>
7328 </div>
7329 </form>
7330 </div>
7331 <div id="bip141" class="tab-pane">
7332 <form class="form-horizontal" role="form">
7333 <br>
7334 <div class="unavailable hidden">
7335 <div class="form-group">
7336 <div class="col-sm-2"></div>
7337 <div class="col-sm-10">
7338 <p>BIP141 is unavailable for this coin.</p>
7339 </div>
7340 </div>
7341 </div>
7342 <div class="available">
7343 <div class="col-sm-2"></div>
7344 <div class="col-sm-10">
7345 <p>
7346 For more info see the
7347 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7348 </p>
7349 </div>
7350 <div class="form-group">
7351 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7352 <div class="col-sm-10">
7353 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7354 </div>
7355 </div>
7356 <div class="form-group">
7357 <label class="col-sm-2 control-label">Script Semantics</label>
7358 <div class="col-sm-10">
7359 <select class="form-control bip141-semantics">
7360 <option value="p2wpkh">P2WPKH</option>
7361 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7362 </select>
7363 </div>
7364 </div>
7365 </div>
7366 </form>
7367 </div>
7368 <div id="bip84" class="tab-pane">
7369 <form class="form-horizontal" role="form">
7370 <br>
7371 <div class="col-sm-2"></div>
7372 <div class="col-sm-10">
7373 <p>
7374 For more info see the
7375 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7376 </p>
7377 </div>
7378 <div class="form-group">
7379 <label for="purpose" class="col-sm-2 control-label">
7380 Purpose
7381 </label>
7382 <div class="col-sm-10">
7383 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7384 </div>
7385 </div>
7386 <div class="form-group">
7387 <label for="coin" class="col-sm-2 control-label">
7388 Coin
7389 </label>
7390 <div class="col-sm-10">
7391 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7392 </div>
7393 </div>
7394 <div class="form-group">
7395 <label for="account" class="col-sm-2 control-label">
7396 Account
7397 </label>
7398 <div class="col-sm-10">
7399 <input id="account" type="text" class="account form-control" value="0">
7400 </div>
7401 </div>
7402 <div class="form-group">
7403 <label for="change" class="col-sm-2 control-label">
7404 External / Internal
7405 </label>
7406 <div class="col-sm-10">
7407 <input id="change" type="text" class="change form-control" value="0">
7408 </div>
7409 </div>
7410 <div class="form-group">
7411 <label class="col-sm-2 control-label">
7412 </label>
7413 <div class="col-sm-10">
7414 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7415 </div>
7416 </div>
7417 <div class="form-group">
7418 <label for="account-xprv" class="col-sm-2 control-label">
7419 <span>Account Extended Private Key</span>
7420 </label>
7421 <div class="col-sm-10">
7422 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7423 </div>
7424 </div>
7425 <div class="form-group">
7426 <label for="account-xpub" class="col-sm-2 control-label">
7427 <span>Account Extended Public Key</span>
7428 </label>
7429 <div class="col-sm-10">
7430 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7431 </div>
7432 </div>
7433 <div class="form-group">
7434 <label class="col-sm-2 control-label">
7435 </label>
7436 <div class="col-sm-10">
7437 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7438 </div>
7439 </div>
7440 <div class="form-group">
7441 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7442 <div class="col-sm-10">
7443 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7444 </div>
7445 </div>
7446 </form>
7447 </div>
7448 </div>
7449 <form class="form-horizontal" role="form">
7450 <div class="form-group">
7451 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7452 <div class="col-sm-10">
7453 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7454 </div>
7455 </div>
7456 <div class="form-group">
7457 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7458 <div class="col-sm-10">
7459 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7460 </div>
7461 </div>
7462 </form>
7463 </div>
7464 </div>
7465
7466 <hr>
7467
7468 <div class="row">
7469 <div class="col-md-12">
7470 <h2>Derived Addresses</h2>
7471 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7472 </div>
7473 <div class="col-md-12 bch-addr-type-container hidden">
7474 <div class="radio">
7475 <label>
7476 <input type="radio" value="cashaddr" name="bch-addr-type" class="use-bch-cashaddr-addresses" checked="checked">
7477 <span>Use CashAddr addresses for Bitcoin Cash (ie starting with 'q' instead of '1')</span>
7478 </label>
7479 </div>
7480 <div class="radio">
7481 <label>
7482 <input type="radio" value="bitpay" name="bch-addr-type" class="use-bch-bitpay-addresses">
7483 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7484 </label>
7485 </div>
7486 <div class="radio">
7487 <label>
7488 <input type="radio" value="legacy" name="bch-addr-type" class="use-bch-legacy-addresses">
7489 <span>Use legacy addresses for Bitcoin Cash (ie starting with '1')</span>
7490 </label>
7491 </div>
7492 </div>
7493 <div class="col-md-12">
7494 <div class="checkbox">
7495 <label>
7496 <input type="checkbox" class="use-bip38">
7497 <span>Encrypt private keys using BIP38 and this password:</span>
7498 </label>
7499 <input class="bip38-password">
7500 <span>Enabling BIP38 means each key will take several minutes to generate.</span>
7501 </div>
7502 </div>
7503 <ul class="addresses-type nav nav-tabs" role="tablist">
7504 <li id="table-tab" class="active">
7505 <a href="#table" role="tab" data-toggle="tab">Table</a>
7506 </li>
7507 <li id="csv-tab">
7508 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7509 </li>
7510 </ul>
7511 <div class="addresses-type tab-content">
7512 <div id="table" class="tab-pane active">
7513 <div class="col-md-12">
7514 <table class="table table-striped">
7515 <thead>
7516 <th>
7517 <div class="input-group">
7518 <span>Path</span>&nbsp;&nbsp;
7519 <button class="index-toggle">Toggle</button>
7520 </div>
7521 </th>
7522 <th>
7523 <div class="input-group">
7524 <span>Address</span>&nbsp;&nbsp;
7525 <button class="address-toggle">Toggle</button>
7526 </div>
7527 </th>
7528 <th>
7529 <div class="input-group">
7530 <span>Public Key</span>&nbsp;&nbsp;
7531 <button class="public-key-toggle">Toggle</button>
7532 </div>
7533 </th>
7534 <th>
7535 <div class="input-group">
7536 <span>Private Key</span>&nbsp;&nbsp;
7537 <button class="private-key-toggle">Toggle</button>
7538 </div>
7539 </th>
7540 </thead>
7541 <tbody class="addresses monospace">
7542 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7543 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7544 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7545 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7546 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7547 </tbody>
7548 </table>
7549 </div>
7550 </div>
7551 <div id="csv" class="tab-pane">
7552 <div class="col-md-12">
7553 <textarea class="csv form-control" rows="25" readonly></textarea>
7554 </div>
7555 </div>
7556 </div>
7557 </div>
7558 <span>Show</span>
7559 <input type="number" class="rows-to-add" value="20">
7560 <button class="more">more rows</button>
7561 <span>starting from index</span>
7562 <input type="number" class="more-rows-start-index">
7563 <span>(leave blank to generate from next index)</span>
7564
7565 <hr>
7566
7567 <div class="row">
7568 <div class="col-md-12">
7569 <h2>More info</h2>
7570 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7571 <p>
7572 Read more at the
7573 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7574 </p>
7575 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7576 <p>
7577 Read more at the
7578 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7579 </p>
7580 <p>
7581 See the demo at
7582 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7583 </p>
7584 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7585 <p>
7586 Read more at the
7587 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7588 </p>
7589 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7590 <p>
7591 Read more at the
7592 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7593 </p>
7594 <h3>Private Keys</h3>
7595 <p>
7596 <span>
7597 Use private keys at
7598 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7599 </span>
7600 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7601 </p>
7602 <h3 id="entropy-notes">Entropy</h3>
7603 <p>
7604 <span>Entropy values should not include the BIP39 checksum. This is automatically added by the tool.</span>
7605 </p>
7606 <p>
7607 <span>
7608 Entropy values must be sourced from a
7609 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7610 </span>
7611 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7612 <span>
7613 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7614 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7615 random enough for the needs of this tool.
7616 </span>
7617 </p>
7618 <p>
7619 <strong><span>Do not store entropy.</span></strong>
7620 </p>
7621 <p>
7622 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7623 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7624 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7625 </p>
7626 <p>
7627 <span>
7628 The random mnemonic generator on this page uses a
7629 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7630 </span>
7631 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7632 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7633 <span>In that case you might choose to use your own source of entropy.</span>
7634 </p>
7635 <p>
7636 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7637 </p>
7638 <h3>License</h3>
7639 <p>
7640 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7641 </span>
7642 </p>
7643 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
7644 </div>
7645 </div>
7646
7647 <hr>
7648
7649 <div class="row">
7650 <div class="col-md-12">
7651 <h2>Alternative Tools</h2>
7652 <p>This tool is interoperable with any BIP39 wallet.</p>
7653 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7654 <p>
7655 <a href="https://bip32jp.github.io/english/">
7656 https://bip32jp.github.io/english/
7657 </a>
7658 </p>
7659 </div>
7660 </div>
7661
7662 <hr>
7663
7664 <div class="row">
7665 <div class="col-md-12">
7666
7667 <h2>Offline Usage</h2>
7668
7669 <p>
7670 You can use this tool without having to be online.
7671 </p>
7672 <p>
7673 In your browser, select file save-as, and save this page
7674 as a file.
7675 </p>
7676 <p>
7677 Double-click that file to open it in a browser
7678 on any offline computer.
7679 </p>
7680 <p>
7681 <span>Alternatively, download the file from the repository</span>
7682 -
7683 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7684 </p>
7685
7686 </div>
7687 </div>
7688
7689 <hr>
7690
7691 <div class="row">
7692 <div class="col-md-12">
7693
7694 <h2>This project is 100% open-source code</h2>
7695
7696 <p>
7697 <span>Get the source code from the repository</span>
7698 -
7699 <a href="https://github.com/iancoleman/bip39" target="_blank">
7700 https://github.com/iancoleman/bip39
7701 </a>
7702 </p>
7703
7704 <h3>Libraries</h3>
7705
7706 <p>
7707 <span>BitcoinJS - </span>
7708 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7709 https://github.com/bitcoinjs/bitcoinjs-lib
7710 </a>
7711 </p>
7712
7713 <p>
7714 <span>jsBIP39 - </span>
7715 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7716 https://github.com/iancoleman/jsbip39
7717 </a>
7718 </p>
7719
7720 <p>
7721 <span>sjcl - </span>
7722 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7723 https://github.com/bitwiseshiftleft/sjcl
7724 </a>
7725 </p>
7726
7727 <p>
7728 <span>jQuery - </span>
7729 <a href="https://jquery.com/" target="_blank">
7730 https://jquery.com/
7731 </a>
7732 </p>
7733
7734 <p>
7735 <span>Twitter Bootstrap - </span>
7736 <a href="http://getbootstrap.com/" target="_blank">
7737 http://getbootstrap.com/
7738 </a>
7739 </p>
7740
7741 </div>
7742 </div>
7743
7744 </div>
7745
7746 <div class="qr-container hidden">
7747 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7748 <div class="qr-hint bg-primary">Click field to show QR</div>
7749 <div class="qr-hider hidden">
7750 <div class="qr-image"></div>
7751 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7752 </div>
7753 </div>
7754
7755 <div class="feedback-container">
7756 <div class="feedback">Loading...</div>
7757 </div>
7758
7759 <script type="text/template" id="address-row-template">
7760 <tr>
7761 <td class="index"><span></span></td>
7762 <td class="address"><span data-show-qr></span></td>
7763 <td class="pubkey"><span data-show-qr></span></td>
7764 <td class="privkey"><span data-show-qr></span></td>
7765 </tr>
7766 </script>
7767 <script>// From
7768 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7769 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7770 // but is not required in any modern browsers.
7771 // For more information, see
7772 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7773
7774 //----------------------------------------------------------------------
7775 //
7776 // ECMAScript 2015 Polyfills
7777 //
7778 //----------------------------------------------------------------------
7779
7780 (function (global) {
7781 "use strict";
7782
7783 // Set this to always override native implementations, for testing
7784 // the polyfill in browsers with partial/full ES2015 support.
7785 var OVERRIDE_NATIVE_FOR_TESTING = false;
7786
7787 var undefined = (void 0); // Paranoia
7788
7789 // Helpers
7790
7791 function strict(o) {
7792 return o === global ? undefined : o;
7793 }
7794
7795 function hook(o, p, f) {
7796 var op = o[p];
7797 console.assert(typeof op === 'function', 'Hooking a non-function');
7798 o[p] = function() {
7799 var o = strict(this);
7800 var r = f.apply(o, arguments);
7801 return r !== undefined ? r : op.apply(o, arguments);
7802 };
7803 }
7804
7805 function isSymbol(s) {
7806 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7807 }
7808
7809 function getPropertyDescriptor(target, name) {
7810 var desc = Object.getOwnPropertyDescriptor(target, name);
7811 var proto = Object.getPrototypeOf(target);
7812 while (!desc && proto) {
7813 desc = Object.getOwnPropertyDescriptor(proto, name);
7814 proto = Object.getPrototypeOf(proto);
7815 }
7816 return desc;
7817 }
7818
7819 var enqueue = (function(nativePromise, nativeSetImmediate) {
7820 if (nativePromise)
7821 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7822 if (nativeSetImmediate)
7823 return function(job) { nativeSetImmediate(job); };
7824 return function(job) { setTimeout(job, 0); };
7825 }(global['Promise'], global['setImmediate']));
7826
7827 function define(o, p, v, override) {
7828 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7829 return;
7830
7831 if (typeof v === 'function') {
7832 // Sanity check that functions are appropriately named (where possible)
7833 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7834 Object.defineProperty(o, p, {
7835 value: v,
7836 configurable: true,
7837 enumerable: false,
7838 writable: true
7839 });
7840 } else {
7841 Object.defineProperty(o, p, {
7842 value: v,
7843 configurable: false,
7844 enumerable: false,
7845 writable: false
7846 });
7847 }
7848 }
7849
7850 function set_internal(o, p, v) {
7851 Object.defineProperty(o, p, {
7852 value: v,
7853 configurable: false,
7854 enumerable: false,
7855 writable: true
7856 });
7857 }
7858
7859 // Snapshot intrinsic functions
7860 var $isNaN = global.isNaN,
7861 $parseInt = global.parseInt,
7862 $parseFloat = global.parseFloat;
7863
7864 var E = Math.E,
7865 LOG10E = Math.LOG10E,
7866 LOG2E = Math.LOG2E,
7867 abs = Math.abs,
7868 ceil = Math.ceil,
7869 exp = Math.exp,
7870 floor = Math.floor,
7871 log = Math.log,
7872 max = Math.max,
7873 min = Math.min,
7874 pow = Math.pow,
7875 random = Math.random,
7876 sqrt = Math.sqrt;
7877
7878 var orig_match = String.prototype.match,
7879 orig_replace = String.prototype.replace,
7880 orig_search = String.prototype.search,
7881 orig_split = String.prototype.split;
7882
7883 // These are used for implementing the polyfills, but not exported.
7884
7885 // Inspired by https://gist.github.com/1638059
7886 /** @constructor */
7887 function EphemeronTable() {
7888 var secretKey = ObjectCreate(null);
7889
7890 function conceal(o) {
7891 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7892 Object.defineProperty(o, 'valueOf', {
7893 value: (function(secretKey) {
7894 return function (k) {
7895 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7896 };
7897 }(secretKey)),
7898 configurable: true,
7899 writeable: true,
7900 enumerable: false
7901 });
7902 return secrets;
7903 }
7904
7905 function reveal(o) {
7906 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7907 return v === o ? null : v;
7908 }
7909
7910 return {
7911 clear: function() {
7912 secretKey = ObjectCreate(null);
7913 },
7914 remove: function(key) {
7915 var secrets = reveal(key);
7916 if (secrets && HasOwnProperty(secrets, 'value')) {
7917 delete secrets.value;
7918 return true;
7919 }
7920 return false;
7921 },
7922 get: function(key, defaultValue) {
7923 var secrets = reveal(key);
7924 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7925 },
7926 has: function(key) {
7927 var secrets = reveal(key);
7928 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7929 },
7930 set: function(key, value) {
7931 var secrets = reveal(key) || conceal(key);
7932 secrets.value = value;
7933 }
7934 };
7935 }
7936
7937 var empty = Object.create(null);
7938
7939 //----------------------------------------------------------------------
7940 //
7941 // ECMAScript 2015
7942 // http://www.ecma-international.org/ecma-262/6.0/
7943 //
7944 //----------------------------------------------------------------------
7945
7946 // ---------------------------------------
7947 // 19.4 Symbol Objects
7948 // ---------------------------------------
7949
7950 // NOTE: Symbols are defined here - out of spec order - since we need the
7951 // properties and prototype to be populated for other polyfills.
7952
7953 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7954
7955 var symbolForKey;
7956 (function() {
7957 var secret = Object.create(null);
7958 var symbolMap = {};
7959 symbolForKey = function(k) {
7960 return symbolMap[k];
7961 };
7962
7963 var GlobalSymbolRegistry = [];
7964
7965 function unique(bits) {
7966 return Array(bits + 1).join('x').replace(/x/g, function() {
7967 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7968 });
7969 }
7970
7971 // 19.4.1 The Symbol Constructor
7972 // 19.4.1.1 Symbol ( description=undefined )
7973 function Symbol(description) {
7974 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7975 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7976
7977 var descString = description === undefined ? undefined : String(description);
7978
7979 set_internal(this, '[[SymbolData]]', unique(128));
7980 set_internal(this, '[[Description]]', descString);
7981
7982 symbolMap[this] = this;
7983 return this;
7984 }
7985
7986 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7987 global.Symbol = Symbol;
7988
7989 // 19.4.2 Properties of the Symbol Constructor
7990
7991 // 19.4.2.1 Symbol.for (key)
7992 define(Symbol, 'for', function for_(key) {
7993 var stringKey = String(key);
7994 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7995 var e = GlobalSymbolRegistry[i];
7996 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7997 }
7998 var newSymbol = Symbol(key);
7999 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
8000 return newSymbol;
8001 });
8002
8003 // 19.4.2.2 Symbol.hasInstance
8004 // 19.4.2.3 Symbol.isConcatSpreadable
8005
8006 // 19.4.2.4 Symbol.iterator
8007 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
8008
8009 // 19.4.2.5 Symbol.keyFor (sym)
8010 define(Symbol, 'keyFor', function keyFor(sym) {
8011 if (!(sym instanceof Symbol)) throw TypeError();
8012 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
8013 var e = GlobalSymbolRegistry[i];
8014 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
8015 }
8016 return undefined;
8017 });
8018
8019 // 19.4.2.6 Symbol.match
8020 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
8021
8022 // 19.4.2.7 Symbol.prototype
8023
8024 // 19.4.2.8 Symbol.replace
8025 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
8026
8027 // 19.4.2.9 Symbol.search
8028 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8029
8030 // 19.4.2.10 Symbol.species
8031
8032 // 19.4.2.11 Symbol.search
8033 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8034
8035 // 19.4.2.12 Symbol.toPrimitive
8036
8037 // 19.4.2.13 Symbol.toStringTag
8038 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8039
8040 // 19.4.2.14 Symbol.unscopables
8041
8042 // 19.4.3 Properties of the Symbol Prototype Object
8043 // 19.4.3.1 Symbol.prototype.constructor
8044
8045 // 19.4.3.2 Symbol.prototype.toString ( )
8046 Object.defineProperty(Symbol.prototype, 'toString', {
8047 value: function toString() {
8048 var s = strict(this);
8049 var desc = s['[[Description]]'];
8050 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8051 },
8052 configurable: true, writeable: true, enumerable: false });
8053
8054 // 19.4.3.3 Symbol.prototype.valueOf ( )
8055 Object.defineProperty(Symbol.prototype, 'valueOf', {
8056 value: function valueOf() {
8057 // To prevent automatic string conversion:
8058 throw TypeError();
8059
8060 // Spec has approximately the following:
8061 //var s = strict(this);
8062 //if (Type(s) === 'symbol') return s;
8063 //if (Type(s) !== 'object') throw TypeError();
8064 //if (!('[[SymbolData]]' in s)) throw TypeError();
8065 //return s['[[SymbolData]]'];
8066 },
8067 configurable: true, writeable: true, enumerable: false });
8068
8069 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8070 // (Done later to polyfill partial implementations)
8071
8072 // 19.4.4 Properties of Symbol Instances
8073 }());
8074
8075 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8076
8077 // Defined here so that other prototypes can reference it
8078 // 25.1.2 The %IteratorPrototype% Object
8079 var $IteratorPrototype$ = {};
8080
8081 //----------------------------------------
8082 // 6 ECMAScript Data Types and Values
8083 //----------------------------------------
8084
8085 // 6.1 ECMAScript Language Types
8086
8087 // "Type(x)" is used as shorthand for "the type of x"...
8088 function Type(v) {
8089 switch (typeof v) {
8090 case 'undefined': return 'undefined';
8091 case 'boolean': return 'boolean';
8092 case 'number': return 'number';
8093 case 'string': return 'string';
8094 case 'symbol': return 'symbol';
8095 default:
8096 if (v === null) return 'null';
8097 if (v instanceof global.Symbol) return 'symbol';
8098 return 'object';
8099 }
8100 }
8101
8102 // 6.1.5.1 Well-Known Symbols
8103 var $$iterator = global.Symbol.iterator,
8104 $$match = global.Symbol.match,
8105 $$replace = global.Symbol.replace,
8106 $$search = global.Symbol.search,
8107 $$split = global.Symbol.split,
8108 $$toStringTag = global.Symbol.toStringTag;
8109
8110 //----------------------------------------
8111 // 7 Abstract Operations
8112 //----------------------------------------
8113
8114 //----------------------------------------
8115 // 7.1 Type Conversion
8116 //----------------------------------------
8117
8118 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8119 // just use valueOf()
8120
8121 // 7.1.2 ToBoolean ( argument )
8122 // just use Boolean()
8123
8124 // 7.1.3 ToNumber ( argument )
8125 // just use Number()
8126
8127 // 7.1.4 ToInteger ( argument )
8128 function ToInteger(n) {
8129 n = Number(n);
8130 if ($isNaN(n)) return 0;
8131 if (n === 0 || n === Infinity || n === -Infinity) return n;
8132 return ((n < 0) ? -1 : 1) * floor(abs(n));
8133 }
8134
8135 // 7.1.5 ToInt32 ( argument )
8136 function ToInt32(v) { return v >> 0; }
8137
8138 // 7.1.6 ToUint32 ( argument )
8139 function ToUint32(v) { return v >>> 0; }
8140
8141 // 7.1.7 ToInt16 ( argument )
8142 function ToInt16(v) { return (v << 16) >> 16; }
8143
8144 // 7.1.8 ToUint16 ( argument )
8145 function ToUint16(v) { return v & 0xFFFF; }
8146
8147 // 7.1.9 ToInt8 ( argument )
8148 function ToInt8(v) { return (v << 24) >> 24; }
8149
8150 // 7.1.10 ToUint8 ( argument )
8151 function ToUint8(v) { return v & 0xFF; }
8152
8153 // 7.1.11 ToUint8Clamp ( argument )
8154 function ToUint8Clamp(argument) {
8155 var number = Number(argument);
8156 if ($isNaN(number)) return 0;
8157 if (number <= 0) return 0;
8158 if (number >= 255) return 255;
8159 var f = floor(number);
8160 if ((f + 0.5) < number) return f + 1;
8161 if (number < (f + 0.5)) return f;
8162 if (f % 2) return f + 1;
8163 return f;
8164 }
8165
8166 // 7.1.12 ToString ( argument )
8167 // just use String()
8168
8169 // 7.1.13 ToObject ( argument )
8170 function ToObject(v) {
8171 if (v === null || v === undefined) throw TypeError();
8172 return Object(v);
8173 }
8174
8175 // 7.1.14 ToPropertyKey ( argument )
8176 function ToPropertyKey(v) {
8177 return String(v);
8178 }
8179
8180 // 7.1.15 ToLength ( argument )
8181 function ToLength(v) {
8182 var len = ToInteger(v);
8183 if (len <= 0) return 0;
8184 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8185 return min(len, 0x20000000000000 - 1); // 2^53-1
8186 }
8187
8188 // 7.1.16 CanonicalNumericIndexString ( argument )
8189
8190 //----------------------------------------
8191 // 7.2 Testing and Comparison Operations
8192 //----------------------------------------
8193
8194 // 7.2.1 RequireObjectCoercible ( argument )
8195 // 7.2.2 IsArray ( argument )
8196
8197 // 7.2.3 IsCallable ( argument )
8198 function IsCallable(o) { return typeof o === 'function'; }
8199
8200 // 7.2.4 IsConstructor ( argument )
8201 function IsConstructor(o) {
8202 // Hacks for Safari 7 TypedArray XXXConstructor objects
8203 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8204 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8205 // TODO: Can this be improved on?
8206 return typeof o === 'function';
8207 }
8208
8209 // 7.2.5 IsExtensible (O)
8210 // 7.2.6 IsInteger ( argument )
8211
8212 // 7.2.7 IsPropertyKey ( argument )
8213 function IsPropertyKey(argument) {
8214 if (Type(argument) === 'string') return true;
8215 if (Type(argument) === 'symbol') return true;
8216 return false;
8217 }
8218
8219 // 7.2.8 IsRegExp ( argument )
8220 // 7.2.5 IsConstructor ( argument )
8221
8222 // 7.2.9 SameValue(x, y)
8223 function SameValue(x, y) {
8224 if (typeof x !== typeof y) return false;
8225 switch (typeof x) {
8226 case 'undefined':
8227 return true;
8228 case 'number':
8229 if (x !== x && y !== y) return true;
8230 if (x === 0 && y === 0) return 1/x === 1/y;
8231 return x === y;
8232 case 'boolean':
8233 case 'string':
8234 case 'object':
8235 default:
8236 return x === y;
8237 }
8238 }
8239
8240 // 7.2.10 SameValueZero(x, y)
8241 function SameValueZero(x, y) {
8242 if (typeof x !== typeof y) return false;
8243 switch (typeof x) {
8244 case 'undefined':
8245 return true;
8246 case 'number':
8247 if (x !== x && y !== y) return true;
8248 return x === y;
8249 case 'boolean':
8250 case 'string':
8251 case 'object':
8252 default:
8253 return x === y;
8254 }
8255 }
8256
8257 //----------------------------------------
8258 // 7.3 Operations on Objects
8259 //----------------------------------------
8260
8261 // 7.3.1 Get (O, P)
8262 // - just use o.p or o[p]
8263
8264 // 7.3.2 GetV (V, P)
8265 function GetV(v, p) {
8266 var o = ToObject(v);
8267 return o[p];
8268 }
8269
8270 // 7.3.3 Set (O, P, V, Throw)
8271 // - just use o.p = v or o[p] = v
8272
8273
8274
8275
8276 // 7.3.9 GetMethod (O, P)
8277 function GetMethod(o, p) {
8278 var func = GetV(o, p);
8279 if (func === undefined || func === null) return undefined;
8280 if (!IsCallable(func)) throw TypeError();
8281 return func;
8282 }
8283
8284 // 7.3.10 HasProperty (O, P)
8285 function HasProperty(o, p) {
8286 while (o) {
8287 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8288 if (Type(o) !== 'object') return false;
8289 o = Object.getPrototypeOf(o);
8290 }
8291 return false;
8292 }
8293
8294 // 7.3.11 HasOwnProperty (O, P)
8295 function HasOwnProperty(o, p) {
8296 return Object.prototype.hasOwnProperty.call(o, p);
8297 }
8298
8299 //----------------------------------------
8300 // 7.4 Operations on Iterator Objects
8301 //----------------------------------------
8302
8303 // 7.4.1 GetIterator ( obj, method )
8304 function GetIterator(obj, method) {
8305 if (arguments.length < 2)
8306 method = GetMethod(obj, $$iterator);
8307 var iterator = method.call(obj);
8308 if (Type(iterator) !== 'object') throw TypeError();
8309 return iterator;
8310 }
8311
8312 // 7.4.2 IteratorNext ( iterator, value )
8313 function IteratorNext(iterator, value) {
8314 if (arguments.length < 2)
8315 var result = iterator.next();
8316 else
8317 result = iterator.next(value);
8318 if (Type(result) !== 'object') throw TypeError();
8319 return result;
8320 }
8321
8322 // 7.4.3 IteratorComplete ( iterResult )
8323 function IteratorComplete(iterResult) {
8324 console.assert(Type(iterResult) === 'object');
8325 return Boolean(iterResult.done);
8326 }
8327
8328 // 7.4.4 IteratorValue ( iterResult )
8329 function IteratorValue(iterResult) {
8330 console.assert(Type(iterResult) === 'object');
8331 return iterResult.value;
8332 }
8333
8334 // 7.4.5 IteratorStep ( iterator )
8335 function IteratorStep( iterator, value ) {
8336 var result = IteratorNext(iterator, value);
8337 var done = result['done'];
8338 if (Boolean(done) === true) return false;
8339 return result;
8340 }
8341
8342 // 7.4.6 IteratorClose( iterator, completion )
8343 function IteratorClose( iterator, completion ) {
8344 console.assert(Type(iterator) === 'object');
8345 var _return = GetMethod(iterator, 'return');
8346 if (_return === undefined) return completion;
8347 try {
8348 var innerResult = _return[iterator]();
8349 } catch (result) {
8350 // TODO: If completion.[[type]] is throw, return completion
8351 return result;
8352 }
8353 if (Type(innerResult) !== 'object') throw TypeError();
8354 return completion;
8355 }
8356
8357 // 7.4.7 CreateIterResultObject (value, done)
8358 function CreateIterResultObject(value, done) {
8359 console.assert(Type(done) === 'boolean');
8360 var obj = {};
8361 obj["value"] = value;
8362 obj["done"] = done;
8363 return obj;
8364 }
8365
8366 // 7.4.8 CreateListIterator (list)
8367 // 7.4.8.1 ListIterator next( )
8368 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8369 // 7.4.9.1 CompoundIterator next( )
8370
8371 //----------------------------------------
8372 // 8 Executable Code and Execution Contexts
8373 //----------------------------------------
8374
8375 //----------------------------------------
8376 // 8.4 Jobs and Job Queues
8377 //----------------------------------------
8378
8379 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8380 function EnqueueJob(queueName, job, args) {
8381 var fn = function() { job.apply(undefined, args); };
8382 enqueue(fn);
8383 }
8384
8385 // 8.4.2 NextJob result
8386 function NextJob(result) {
8387 // no-op
8388 }
8389
8390 //----------------------------------------
8391 // 9 Ordinary and Exotic Objects Behaviors
8392 //----------------------------------------
8393
8394 // 9.1.11 [[Enumerate]] ()
8395 function Enumerate(obj) {
8396 var e = [];
8397 if (Object(obj) !== obj) return e;
8398 var visited = new Set;
8399 while (obj !== null) {
8400 Object.getOwnPropertyNames(obj).forEach(function(name) {
8401 if (!visited.has(name)) {
8402 var desc = Object.getOwnPropertyDescriptor(obj, name);
8403 if (desc) {
8404 visited.add(name);
8405 if (desc.enumerable) e.push(name);
8406 }
8407 }
8408 });
8409 obj = Object.getPrototypeOf(obj);
8410 }
8411 return e[$$iterator]();
8412 }
8413
8414 // 9.1.12 [[OwnPropertyKeys]] ( )
8415 function OwnPropertyKeys(o) {
8416 return Object.getOwnPropertyNames(o);
8417 }
8418
8419 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8420 function ObjectCreate(proto, internalSlotsList) {
8421 return Object.create(proto, internalSlotsList);
8422 }
8423
8424 // ---------------------------------------
8425 // 19 Fundamental Objects
8426 // ---------------------------------------
8427
8428 // ---------------------------------------
8429 // 19.1 Object Objects
8430 // ---------------------------------------
8431
8432 // 19.1.1 The Object Constructor
8433 // 19.1.1.1 Object ( [ value ] )
8434 // 19.1.2 Properties of the Object Constructor
8435 // 19.1.2.1 Object.assign ( target, ...sources )
8436 define(
8437 Object, 'assign',
8438 function assign(target, /*...*/sources) {
8439 var to = ToObject(target);
8440 if (arguments.length < 2) return to;
8441
8442 var sourcesIndex = 1;
8443 while (sourcesIndex < arguments.length) {
8444 var nextSource = arguments[sourcesIndex++];
8445 if (nextSource === undefined || nextSource === null) {
8446 var keys = [];
8447 } else {
8448 var from = ToObject(nextSource);
8449 keys = OwnPropertyKeys(from);
8450 }
8451 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8452 var nextKey = keys[keysIndex];
8453 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8454 if (desc !== undefined && desc.enumerable) {
8455 var propValue = from[nextKey];
8456 to[nextKey] = propValue;
8457 }
8458 }
8459 }
8460 return to;
8461 });
8462
8463 // 19.1.2.2 Object.create ( O [ , Properties ] )
8464 // 19.1.2.3 Object.defineProperties ( O, Properties )
8465 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8466 // 19.1.2.5 Object.freeze ( O )
8467 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8468
8469 (function() {
8470 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8471 $getOwnPropertyNames = Object.getOwnPropertyNames,
8472 $keys = Object.keys,
8473 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8474
8475 function isStringKey(k) { return !symbolForKey(k); }
8476
8477 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8478 define(
8479 Object, 'getOwnPropertyNames',
8480 function getOwnPropertyNames(o) {
8481 if (Object.prototype.toString.call(o) === '[object Window]') {
8482 // Workaround for cross-realm calling by IE itself.
8483 // https://github.com/inexorabletash/polyfill/issues/96
8484 try {
8485 return $getOwnPropertyNames(o).filter(isStringKey);
8486 } catch (_) {
8487 return $window_names.slice();
8488 }
8489 }
8490 return $getOwnPropertyNames(o).filter(isStringKey);
8491 }, !nativeSymbols);
8492
8493 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8494 define(
8495 Object, 'getOwnPropertySymbols',
8496 function getOwnPropertySymbols(o) {
8497 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8498 }, !nativeSymbols);
8499
8500 // 19.1.2.14 Object.keys ( O )
8501 define(
8502 Object, 'keys',
8503 function keys(o) {
8504 return $keys(o).filter(isStringKey);
8505 }, !nativeSymbols);
8506 }());
8507
8508 // 19.1.2.9 Object.getPrototypeOf ( O )
8509 // 19.1.2.10 Object.is ( value1, value2 )
8510 define(
8511 Object, 'is',
8512 function is(value1, value2) {
8513 return SameValue(value1, value2);
8514 });
8515
8516 // 19.1.2.11 Object.isExtensible ( O )
8517 // 19.1.2.12 Object.isFrozen ( O )
8518 // 19.1.2.13 Object.isSealed ( O )
8519
8520 // 19.1.2.14 Object.keys ( O )
8521 // see above
8522
8523 // 19.1.2.15 Object.preventExtensions ( O )
8524 // 19.1.2.16 Object.prototype
8525 // 19.1.2.17 Object.seal ( O )
8526
8527 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8528 define(
8529 Object, 'setPrototypeOf',
8530 function setPrototypeOf(o, proto) {
8531 if (Type(o) !== 'object') throw TypeError();
8532 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8533 o.__proto__ = proto;
8534 return o;
8535 }
8536 );
8537
8538 // 19.1.3 Properties of the Object Prototype Object
8539 // 19.1.3.1 Object.prototype.constructor
8540 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8541 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8542 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8543 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8544 // 19.1.3.6 Object.prototype.toString ( )
8545 hook(Object.prototype, 'toString',
8546 function() {
8547 var o = strict(this);
8548 if (o === Object(o) && $$toStringTag in o) {
8549 return '[object ' + o[$$toStringTag] + ']';
8550 }
8551 return undefined;
8552 });
8553
8554 // 19.1.3.7 Object.prototype.valueOf ( )
8555 // 19.1.4 Properties of Object Instances
8556
8557 // ---------------------------------------
8558 // 19.2 Function Objects
8559 // ---------------------------------------
8560
8561 // 19.2.1 The Function Constructor
8562 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8563 // 19.2.2 Properties of the Function Constructor
8564 // 19.2.2.1 Function.length
8565 // 19.2.2.2 Function.prototype
8566 // 19.2.3 Properties of the Function Prototype Object
8567 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8568 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8569 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8570 // 19.2.3.4 Function.prototype.constructor
8571 // 19.2.3.5 Function.prototype.toString ( )
8572 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8573 // 19.2.4 Function Instances
8574 // 19.2.4.1 length
8575 // 19.2.4.2 name
8576 // 19.2.4.3 prototype
8577
8578 // (No polyfillable changes from ES5)
8579
8580 // ---------------------------------------
8581 // 19.3 Boolean Objects
8582 // ---------------------------------------
8583
8584 // 19.3.1 The Boolean Constructor
8585 // 19.3.1.1 Boolean ( value )
8586 // 19.3.2 Properties of the Boolean Constructor
8587 // 19.3.2.1 Boolean.prototype
8588 // 19.3.3 Properties of the Boolean Prototype Object
8589 // 19.3.3.1 Boolean.prototype.constructor
8590 // 19.3.3.2 Boolean.prototype.toString ( )
8591 // 19.3.3.3 Boolean.prototype.valueOf ( )
8592 // 19.3.4 Properties of Boolean Instances
8593
8594 // (No polyfillable changes from ES5)
8595
8596 // ---------------------------------------
8597 // 19.4 Symbol Objects
8598 // ---------------------------------------
8599
8600 // Moved earlier in this script, so that other polyfills can depend on them.
8601
8602 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8603 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8604
8605 // ---------------------------------------
8606 // 19.5 Error Objects
8607 // ---------------------------------------
8608
8609 // 19.5.1 The Error Constructor
8610 // 19.5.1.1 Error ( message )
8611 // 19.5.1.2 new Error( ...argumentsList )
8612 // 19.5.2 Properties of the Error Constructor
8613 // 19.5.2.1 Error.prototype
8614 // 19.5.3 Properties of the Error Prototype Object
8615 // 19.5.3.1 Error.prototype.constructor
8616 // 19.5.3.2 Error.prototype.message
8617 // 19.5.3.3 Error.prototype.name
8618 // 19.5.3.4 Error.prototype.toString ( )
8619 // 19.5.4 Properties of Error Instances
8620 // 19.5.5 Native Error Types Used in This Standard
8621 // 19.5.5.1 EvalError
8622 // 19.5.5.2 RangeError
8623 // 19.5.5.3 ReferenceError
8624 // 19.5.5.4 SyntaxError
8625 // 19.5.5.5 TypeError
8626 // 19.5.5.6 URIError
8627 // 19.5.6 NativeError Object Structure
8628 // 19.5.6.1 NativeError Constructors
8629 // 19.5.6.1.1 NativeError ( message )
8630 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8631 // 19.5.6.2 Properties of the NativeError Constructors
8632 // 19.5.6.2.1 NativeError.prototype
8633 // 19.5.6.3 Properties of the NativeError Prototype Objects
8634 // 19.5.6.4 Properties of NativeError Instances
8635
8636 // (No polyfillable changes from ES5)
8637
8638 // ---------------------------------------
8639 // 20 Numbers and Dates
8640 // ---------------------------------------
8641
8642 // ---------------------------------------
8643 // 20.1 Number Objects
8644 // ---------------------------------------
8645
8646 // 20.1.1 The Number Constructor
8647 // 20.1.1.1 Number ( [ value ] )
8648 // 20.1.1.2 new Number ( ...argumentsList )
8649 // 20.1.2 Properties of the Number Constructor
8650
8651 // 20.1.2.1 Number.EPSILON
8652 define(
8653 Number, 'EPSILON',
8654 (function () {
8655 var next, result;
8656 for (next = 1; 1 + next !== 1; next = next / 2)
8657 result = next;
8658 return result;
8659 }()));
8660
8661 // 20.1.2.2 Number.isFinite ( number )
8662 define(
8663 Number, 'isFinite',
8664 function isFinite(number) {
8665 if (Type(number) !== 'number') return false;
8666 if (number !== number || number === +Infinity || number === -Infinity) return false;
8667 return true;
8668 });
8669
8670 // 20.1.2.3 Number.isInteger ( number )
8671 define(
8672 Number, 'isInteger',
8673 function isInteger(number) {
8674 if (Type(number) !== 'number') return false;
8675 if (number !== number || number === +Infinity || number === -Infinity) return false;
8676 var integer = ToInteger(number);
8677 if (integer !== number) return false;
8678 return true;
8679 });
8680
8681 // 20.1.2.4 Number.isNaN ( number )
8682 define(
8683 Number, 'isNaN',
8684 function isNaN(number) {
8685 if (Type(number) !== 'number') return false;
8686 if (number !== number) return true;
8687 return false;
8688 });
8689
8690 // 20.1.2.5 Number.isSafeInteger ( number )
8691 define(
8692 Number, 'isSafeInteger',
8693 function isSafeInteger(number) {
8694 if (Type(number) !== 'number') return false;
8695 if (number !== number || number === +Infinity || number === -Infinity) return false;
8696 var integer = ToInteger(number);
8697 if (integer !== number) return false;
8698 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8699 return true;
8700 return false;
8701 });
8702
8703 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8704 define(
8705 Number, 'MAX_SAFE_INTEGER',
8706 9007199254740991); // 2^53-1
8707
8708 // 20.1.2.7 Number.MAX_VALUE
8709
8710 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8711 define(
8712 Number, 'MIN_SAFE_INTEGER',
8713 -9007199254740991); // -2^53+1
8714
8715 // 20.1.2.9 Number.MIN_VALUE
8716 // 20.1.2.10 Number.NaN
8717 // 20.1.2.11 Number.NEGATIVE_INFINITY
8718
8719 // 20.1.2.12 Number.parseFloat ( string )
8720 define(Number, 'parseFloat', $parseFloat);
8721
8722 // 20.1.2.13 Number.parseInt ( string, radix )
8723 define(Number, 'parseInt', $parseInt);
8724
8725 // 20.1.2.14 Number.POSITIVE_INFINITY
8726 // 20.1.2.15 Number.prototype
8727
8728 // 20.1.3 Properties of the Number Prototype Object
8729 // 20.1.3.1 Number.prototype.constructor
8730 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8731 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8732 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8733 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8734 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8735 // 20.1.3.7 Number.prototype.valueOf ( )
8736 // 20.1.4 Properties of Number Instances
8737
8738 // ---------------------------------------
8739 // 20.2 The Math Object
8740 // ---------------------------------------
8741
8742 // 20.2.1 Value Properties of the Math Object
8743 // 20.2.1.1 Math.E
8744 // 20.2.1.2 Math.LN10
8745 // 20.2.1.3 Math.LN2
8746 // 20.2.1.4 Math.LOG10E
8747 // 20.2.1.5 Math.LOG2E
8748 // 20.2.1.6 Math.PI
8749 // 20.2.1.7 Math.SQRT1_2
8750 // 20.2.1.8 Math.SQRT2
8751
8752 // 20.2.1.9 Math [ @@toStringTag ]
8753 define(Math, $$toStringTag, 'Math');
8754
8755 // 20.2.2 Function Properties of the Math Object
8756 // 20.2.2.1 Math.abs ( x )
8757 // 20.2.2.2 Math.acos ( x )
8758
8759 // 20.2.2.3 Math.acosh(x)
8760 define(
8761 Math, 'acosh',
8762 function acosh(x) {
8763 x = Number(x);
8764 return log(x + sqrt(x * x - 1));
8765 });
8766
8767 // 20.2.2.4 Math.asin ( x )
8768
8769 // 20.2.2.5 Math.asinh( x )
8770 define(
8771 Math, 'asinh',
8772 function asinh(x) {
8773 x = Number(x);
8774 if (SameValue(x, -0)) {
8775 return x;
8776 }
8777 var s = sqrt(x * x + 1);
8778 return (s === -x) ? log(0) : log(x + s);
8779 });
8780
8781 // 20.2.2.6 Math.atan ( x )
8782
8783 // 20.2.2.7 Math.atanh( x )
8784 define(
8785 Math, 'atanh',
8786 function atanh(x) {
8787 x = Number(x);
8788 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8789 });
8790
8791 // 20.2.2.8 Math.atan2 ( y, x )
8792
8793 // 20.2.2.9 Math.cbrt ( x )
8794 define(
8795 Math, 'cbrt',
8796 function cbrt(x) {
8797 x = Number(x);
8798 if ($isNaN(x/x)) {
8799 return x;
8800 }
8801 var r = pow(abs(x), 1/3);
8802 var t = x/r/r;
8803 return r + (r * (t-r) / (2*r + t));
8804 });
8805
8806 // 20.2.2.10 Math.ceil ( x )
8807
8808 // 20.2.2.11 Math.clz32 ( x )
8809 define(
8810 Math, 'clz32',
8811 function clz32(x) {
8812 function clz8(x) {
8813 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8814 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8815 }
8816 x = ToUint32(x);
8817 return x & 0xff000000 ? clz8(x >> 24) :
8818 x & 0xff0000 ? clz8(x >> 16) + 8 :
8819 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8820 });
8821
8822
8823
8824 // 20.2.2.12 Math.cos ( x )
8825
8826 // 20.2.2.13 Math.cosh ( x )
8827 define(
8828 Math, 'cosh',
8829 function cosh(x) {
8830 x = Number(x);
8831 return (pow(E, x) + pow(E, -x)) / 2;
8832 });
8833
8834 // 20.2.2.14 Math.exp ( x )
8835
8836 // 20.2.2.15 Math.expm1 ( x )
8837 define(
8838 Math, 'expm1',
8839 function expm1(x) {
8840 x = Number(x);
8841 // from: http://www.johndcook.com/cpp_log1p.html
8842 if (SameValue(x, -0)) {
8843 return -0;
8844 } else if (abs(x) < 1e-5) {
8845 return x + 0.5 * x * x; // two terms of Taylor expansion
8846 } else {
8847 return exp(x) - 1;
8848 }
8849 });
8850
8851 // 20.2.2.16 Math.floor ( x )
8852
8853 // 20.2.2.17 Math.fround ( x )
8854 define(
8855 Math, 'fround',
8856 function fround(x) {
8857 if ($isNaN(x)) {
8858 return NaN;
8859 }
8860 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8861 return x;
8862 }
8863 return (new Float32Array([x]))[0];
8864 });
8865
8866 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8867 define(
8868 Math, 'hypot',
8869 function hypot() {
8870 var values = [];
8871 var m = 0, sawNaN = false;
8872 for (var i = 0; i < arguments.length; ++i) {
8873 var n = abs(Number(arguments[i]));
8874 if (n === Infinity) return n;
8875 if (n !== n) sawNaN = true;
8876 if (n > m) m = n;
8877 values[i] = n;
8878 }
8879 if (sawNaN) return NaN;
8880 if (m === 0) return +0;
8881 var sum = +0;
8882 for (i = 0; i < values.length; ++i) {
8883 var r = values[i] / m;
8884 sum = sum + r * r;
8885 }
8886 return m * sqrt(sum);
8887 });
8888
8889 // 20.2.2.19 Math.imul ( x, y )
8890 define(
8891 Math, 'imul',
8892 function imul(x, y) {
8893 var a = ToUint32(x);
8894 var b = ToUint32(y);
8895 // (slow but accurate)
8896 var ah = (a >>> 16) & 0xffff;
8897 var al = a & 0xffff;
8898 var bh = (b >>> 16) & 0xffff;
8899 var bl = b & 0xffff;
8900 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8901 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8902 );
8903
8904 // 20.2.2.20 Math.log ( x )
8905
8906 // 20.2.2.21 Math.log1p ( x )
8907 define(
8908 Math, 'log1p',
8909 function log1p(x) {
8910 x = Number(x);
8911 // from: http://www.johndcook.com/cpp_expm1.html
8912 if (x < -1) {
8913 return NaN;
8914 } else if (SameValue(x, -0)) {
8915 return -0;
8916 } else if (abs(x) > 1e-4) {
8917 return log(1 + x);
8918 } else {
8919 return (-0.5 * x + 1) * x;
8920 }
8921 });
8922
8923 // 20.2.2.22 Math.log10 ( x )
8924 define(
8925 Math, 'log10',
8926 function log10(x) {
8927 x = Number(x);
8928 return log(x) * LOG10E;
8929 });
8930
8931 // 20.2.2.23 Math.log2 ( x )
8932 define(
8933 Math, 'log2',
8934 function log2(x) {
8935 x = Number(x);
8936 return log(x) * LOG2E;
8937 });
8938
8939 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8940 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8941 // 20.2.2.26 Math.pow ( x, y )
8942 // 20.2.2.27 Math.random ( )
8943 // 20.2.2.28 Math.round ( x )
8944
8945 // 20.2.2.29 Math.sign(x)
8946 define(
8947 Math, 'sign',
8948 function sign(x) {
8949 x = Number(x);
8950 return x < 0 ? -1 : x > 0 ? 1 : x;
8951 });
8952
8953 // 20.2.2.30 Math.sin ( x )
8954
8955 // 20.2.2.31 Math.sinh( x )
8956 define(
8957 Math, 'sinh',
8958 function sinh(x) {
8959 x = Number(x);
8960 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8961 });
8962
8963 // 20.2.2.32 Math.sqrt ( x )
8964 // 20.2.2.33 Math.tan ( x )
8965
8966 // 20.2.2.34 Math.tanh ( x )
8967 define(
8968 Math, 'tanh',
8969 function tanh(x) {
8970 x = Number(x);
8971 var n = pow(E, 2 * x) - 1,
8972 d = pow(E, 2 * x) + 1;
8973 if (SameValue(x, -0))
8974 return x;
8975 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8976 });
8977
8978 // 20.2.2.35 Math.trunc ( x )
8979 define(
8980 Math, 'trunc',
8981 function trunc(x) {
8982 x = Number(x);
8983 return $isNaN(x) ? NaN :
8984 x < 0 ? ceil(x) : floor(x);
8985 });
8986
8987 // ---------------------------------------
8988 // 20.3 Date Objects
8989 // ---------------------------------------
8990
8991 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8992 // 20.3.1.1 Time Values and Time Range
8993 // 20.3.1.2 Day Number and Time within Day
8994 // 20.3.1.3 Year Number
8995 // 20.3.1.4 Month Number
8996 // 20.3.1.5 Date Number
8997 // 20.3.1.6 Week Day
8998 // 20.3.1.7 Local Time Zone Adjustment
8999 // 20.3.1.8 Daylight Saving Time Adjustment
9000 // 20.3.1.9 Local Time
9001 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
9002 // 20.3.1.11 MakeTime (hour, min, sec, ms)
9003 // 20.3.1.12 MakeDay (year, month, date)
9004 // 20.3.1.13 MakeDate (day, time)
9005 // 20.3.1.14 TimeClip (time)
9006 // 20.3.1.15 Date Time String Format
9007 // 20.3.1.15.1 Extended years
9008 // 20.3.2 The Date Constructor
9009 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
9010 // 20.3.2.2 Date ( value )
9011 // 20.3.2.3 Date ( )
9012 // 20.3.3 Properties of the Date Constructor
9013 // 20.3.3.1 Date.now ( )
9014 // 20.3.3.2 Date.parse (string)
9015 // 20.3.3.3 Date.prototype
9016 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
9017 // 20.3.4 Properties of the Date Prototype Object
9018 // 20.3.4.1 Date.prototype.constructor
9019 // 20.3.4.2 Date.prototype.getDate ( )
9020 // 20.3.4.3 Date.prototype.getDay ( )
9021 // 20.3.4.4 Date.prototype.getFullYear ( )
9022 // 20.3.4.5 Date.prototype.getHours ( )
9023 // 20.3.4.6 Date.prototype.getMilliseconds ( )
9024 // 20.3.4.7 Date.prototype.getMinutes ( )
9025 // 20.3.4.8 Date.prototype.getMonth ( )
9026 // 20.3.4.9 Date.prototype.getSeconds ( )
9027 // 20.3.4.10 Date.prototype.getTime ( )
9028 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9029 // 20.3.4.12 Date.prototype.getUTCDate ( )
9030 // 20.3.4.13 Date.prototype.getUTCDay ( )
9031 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9032 // 20.3.4.15 Date.prototype.getUTCHours ( )
9033 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9034 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9035 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9036 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9037 // 20.3.4.20 Date.prototype.setDate ( date )
9038 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9039 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9040 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9041 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9042 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9043 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9044 // 20.3.4.27 Date.prototype.setTime ( time )
9045 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9046 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9047 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9048 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9049 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9050 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9051 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9052 // 20.3.4.35 Date.prototype.toDateString ( )
9053 // 20.3.4.36 Date.prototype.toISOString ( )
9054 // 20.3.4.37 Date.prototype.toJSON ( key )
9055 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9056 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9057 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9058 // 20.3.4.41 Date.prototype.toString ( )
9059 // 20.3.4.42 Date.prototype.toTimeString ( )
9060 // 20.3.4.43 Date.prototype.toUTCString ( )
9061 // 20.3.4.44 Date.prototype.valueOf ( )
9062 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9063 // 20.3.5 Properties of Date Instances
9064
9065 // (No polyfillable changes from ES5)
9066
9067 // ---------------------------------------
9068 // 21 Text Processing
9069 // ---------------------------------------
9070
9071 var string_regexp_dispatch = (function() {
9072 var faux = {}, secret = Symbol();
9073 faux[Symbol.match] = function() { return secret; };
9074 return ("").match(faux) === secret;
9075 }());
9076
9077 // 21.1 String Objects
9078 // 21.1.1 The String Constructor
9079 // 21.1.1.1 String ( value )
9080 // 21.1.2 Properties of the String Constructor
9081 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9082
9083 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9084 define(
9085 String, 'fromCodePoint',
9086 function fromCodePoint(/*...codePoints*/) {
9087 var codePoints = arguments,
9088 length = codePoints.length,
9089 elements = [],
9090 nextIndex = 0;
9091 while (nextIndex < length) {
9092 var next = codePoints[nextIndex];
9093 var nextCP = Number(next);
9094 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9095 nextCP < 0 || nextCP > 0x10FFFF) {
9096 throw RangeError('Invalid code point ' + nextCP);
9097 }
9098 if (nextCP < 0x10000) {
9099 elements.push(String.fromCharCode(nextCP));
9100 } else {
9101 nextCP -= 0x10000;
9102 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9103 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9104 }
9105 nextIndex += 1;
9106 }
9107 return elements.join('');
9108 });
9109
9110 // 21.1.2.3 String.prototype
9111
9112 // 21.1.2.4 String.raw ( template , ...substitutions )
9113 define(
9114 String, 'raw',
9115 function raw(template /*, ...substitutions*/) {
9116 var substitutions = [].slice.call(arguments, 1);
9117
9118 var cooked = Object(template);
9119 var rawValue = cooked['raw'];
9120 var raw = Object(rawValue);
9121 var len = raw['length'];
9122 var literalSegments = ToLength(len);
9123 if (literalSegments <= 0) return '';
9124 var stringElements = [];
9125 var nextIndex = 0;
9126 while (true) {
9127 var next = raw[nextIndex];
9128 var nextSeg = String(next);
9129 stringElements.push(nextSeg);
9130 if (nextIndex + 1 === literalSegments)
9131 return stringElements.join('');
9132 next = substitutions[nextIndex];
9133 var nextSub = String(next);
9134 stringElements.push(nextSub);
9135 nextIndex = nextIndex + 1;
9136 }
9137 });
9138
9139 // See https://githib.com/inexorabletash/uate for a more useful version.
9140
9141 // 21.1.3 Properties of the String Prototype Object
9142 // 21.1.3.1 String.prototype.charAt ( pos )
9143 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9144
9145 // 21.1.3.3 String.prototype.codePointAt ( pos )
9146 define(
9147 String.prototype, 'codePointAt',
9148 function codePointAt(pos) {
9149 var o = strict(this);
9150 var s = String(o);
9151 var position = ToInteger(pos);
9152 var size = s.length;
9153 if (position < 0 || position >= size) return undefined;
9154 var first = s.charCodeAt(position);
9155 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9156 var second = s.charCodeAt(position + 1);
9157 if (second < 0xDC00 || second > 0xDFFF) return first;
9158 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9159 });
9160
9161 // 21.1.3.4 String.prototype.concat ( ...args )
9162 // 21.1.3.5 String.prototype.constructor
9163
9164 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9165 define(
9166 String.prototype, 'endsWith',
9167 function endsWith(searchString) {
9168 var endPosition = arguments[1];
9169
9170 var o = strict(this);
9171 var s = String(o);
9172 var searchStr = String(searchString);
9173 var len = s.length;
9174 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9175 var end = min(max(pos, 0), len);
9176 var searchLength = searchStr.length;
9177 var start = end - searchLength;
9178 if (start < 0) return false;
9179 if (s.substring(start, start + searchLength) === searchStr) return true;
9180 return false;
9181 });
9182
9183 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9184 define(
9185 String.prototype, 'includes',
9186 function includes(searchString) {
9187 var position = arguments[1];
9188
9189 var o = strict(this);
9190 var s = String(o);
9191 var searchStr = String(searchString);
9192 var pos = ToInteger(position);
9193 var len = s.length;
9194 var start = min(max(pos, 0), len);
9195 return s.indexOf(searchStr, start) !== -1;
9196 });
9197
9198 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9199 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9200 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9201 // 21.1.3.11 String.prototype.match ( regexp )
9202 define(
9203 String.prototype, 'match',
9204 function match(regexp) {
9205 var o = strict(this);
9206 var s = String(o);
9207 if (HasProperty(regexp, $$match)) var rx = regexp;
9208 else rx = new RegExp(regexp);
9209 return rx[$$match](s);
9210 }, !string_regexp_dispatch);
9211
9212 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9213
9214 // Not practical due to table sizes; if needed, pull in:
9215 // https://github.com/walling/unorm/
9216
9217 // 21.1.3.13 String.prototype.repeat ( count )
9218 define(
9219 String.prototype, 'repeat',
9220 function repeat(count) {
9221 var o = strict(this);
9222 var s = String(o);
9223 var n = ToInteger(count);
9224 if (n < 0) throw RangeError();
9225 if (n === Infinity) throw RangeError();
9226 var t = new Array(n + 1).join(s);
9227 return t;
9228 });
9229
9230 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9231 define(
9232 String.prototype, 'replace',
9233 function replace(searchValue, replaceValue) {
9234 var o = strict(this);
9235 if (HasProperty(searchValue, $$replace))
9236 return searchValue[$$replace](o, replaceValue);
9237 return orig_replace.call(o, searchValue, replaceValue);
9238 }, !string_regexp_dispatch);
9239
9240 // 21.1.3.15 String.prototype.search ( regexp )
9241 define(
9242 String.prototype, 'search',
9243 function search(regexp) {
9244 var o = strict(this);
9245 var string = String(o);
9246 if (HasProperty(regexp, $$search)) var rx = regexp;
9247 else rx = new RegExp(regexp);
9248 return rx[$$search](string);
9249 }, !string_regexp_dispatch);
9250
9251 // 21.1.3.16 String.prototype.slice ( start, end )
9252 // 21.1.3.17 String.prototype.split ( separator, limit )
9253 define(
9254 String.prototype, 'split',
9255 function split(separator, limit) {
9256 var o = strict(this);
9257 if (HasProperty(separator, $$split))
9258 return separator[$$split](o, limit);
9259 return orig_split.call(o, separator, limit);
9260 }, !string_regexp_dispatch);
9261
9262 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9263 define(
9264 String.prototype, 'startsWith',
9265 function startsWith(searchString) {
9266 var position = arguments[1];
9267
9268 var o = strict(this);
9269 var s = String(o);
9270 var searchStr = String(searchString);
9271 var pos = ToInteger(position);
9272 var len = s.length;
9273 var start = min(max(pos, 0), len);
9274 var searchLength = searchStr.length;
9275 if (searchLength + start > len) return false;
9276 if (s.substring(start, start + searchLength) === searchStr) return true;
9277 return false;
9278 });
9279
9280 // 21.1.3.19 String.prototype.substring ( start, end )
9281 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9282 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9283 // 21.1.3.22 String.prototype.toLowerCase ( )
9284 // 21.1.3.23 String.prototype.toString ( )
9285 // 21.1.3.24 String.prototype.toUpperCase ( )
9286 // 21.1.3.25 String.prototype.trim ( )
9287 // 21.1.3.26 String.prototype.valueOf ( )
9288
9289 // 21.1.3.27 String.prototype [ @@iterator ]( )
9290 define(
9291 String.prototype, $$iterator,
9292 function entries() {
9293 return CreateStringIterator(this, 'value');
9294 });
9295
9296 // 21.1.4 Properties of String Instances
9297 // 21.1.4.1 length
9298
9299 // 21.1.5 String Iterator Objects
9300 /** @constructor */
9301 function StringIterator() {}
9302
9303 // 21.1.5.1 CreateStringIterator Abstract Operation
9304 function CreateStringIterator(string, kind) {
9305 var s = String(string);
9306 var iterator = new StringIterator;
9307 set_internal(iterator, '[[IteratedString]]', s);
9308 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9309 set_internal(iterator, '[[StringIterationKind]]', kind);
9310 return iterator;
9311 }
9312
9313 // 21.1.5.2 The %StringIteratorPrototype% Object
9314 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9315 StringIterator.prototype = $StringIteratorPrototype$;
9316
9317 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9318 define(
9319 $StringIteratorPrototype$, 'next',
9320 function next() {
9321 var o = ToObject(this);
9322 var s = String(o['[[IteratedString]]']),
9323 index = o['[[StringIteratorNextIndex]]'],
9324 len = s.length;
9325 if (index >= len) {
9326 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9327 return CreateIterResultObject(undefined, true);
9328 }
9329 var cp = s.codePointAt(index);
9330 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9331 return CreateIterResultObject(String.fromCodePoint(cp), false);
9332 });
9333
9334 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9335 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9336
9337 // 21.1.5.3 Properties of String Iterator Instances
9338
9339 // ---------------------------------------
9340 // 21.2 RegExp (Regular Expression) Objects
9341 // ---------------------------------------
9342
9343 // 21.2.1 Patterns
9344 // 21.2.2 Pattern Semantics
9345 // 21.2.2.1 Notation
9346 // 21.2.2.2 Pattern
9347 // 21.2.2.3 Disjunction
9348 // 21.2.2.4 Alternative
9349 // 21.2.2.5 Term
9350 // 21.2.2.6 Assertion
9351 // 21.2.2.7 Quantifier
9352 // 21.2.2.8 Atom
9353 // 21.2.2.9 AtomEscape
9354 // 21.2.2.10 CharacterEscape
9355 // 21.2.2.11 DecimalEscape
9356 // 21.2.2.12 CharacterClassEscape
9357 // 21.2.2.13 CharacterClass
9358 // 21.2.2.14 ClassRanges
9359 // 21.2.2.15 NonemptyClassRanges
9360 // 21.2.2.16 NonemptyClassRangesNoDash
9361 // 21.2.2.17 ClassAtom
9362 // 21.2.2.18 ClassAtomNoDash
9363 // 21.2.2.19 ClassEscape
9364 // 21.2.3 The RegExp Constructor
9365 // 21.2.3.1 RegExp ( pattern, flags )
9366 // 21.2.3.2 new RegExp( ...argumentsList )
9367 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9368 // 21.2.4 Properties of the RegExp Constructor
9369 // 21.2.4.1 RegExp.prototype
9370 // 21.2.5 Properties of the RegExp Prototype Object
9371 // 21.2.5.1 RegExp.prototype.constructor
9372 // 21.2.5.2 RegExp.prototype.exec ( string )
9373
9374 // 21.2.5.3 get RegExp.prototype.flags
9375 if (!('flags' in RegExp.prototype)) {
9376 Object.defineProperty(
9377 RegExp.prototype, 'flags', {
9378 get: function() {
9379 var s = String(this);
9380 return s.substring(s.lastIndexOf('/') + 1);
9381 }
9382 });
9383 }
9384
9385 // 21.2.5.4 get RegExp.prototype.global
9386 // 21.2.5.5 get RegExp.prototype.ignoreCase
9387
9388 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9389 define(RegExp.prototype, $$match, function(string) {
9390 var o = strict(this);
9391 return orig_match.call(string, o);
9392 });
9393
9394 // 21.2.5.7 get RegExp.prototype.multiline
9395
9396 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9397 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9398 var o = strict(this);
9399 return orig_replace.call(string, o, replaceValue);
9400 });
9401
9402 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9403 define(RegExp.prototype, $$search, function(string) {
9404 var o = strict(this);
9405 return orig_search.call(string, o);
9406 });
9407
9408 // 21.2.5.10 get RegExp.prototype.source
9409
9410 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9411 define(RegExp.prototype, $$split, function(string, limit) {
9412 var o = strict(this);
9413 return orig_split.call(string, o, limit);
9414 });
9415
9416 // 21.2.5.12 get RegExp.prototype.sticky
9417 // 21.2.5.13 RegExp.prototype.test( S )
9418 // 21.2.5.14 RegExp.prototype.toString ( )
9419 // 21.2.5.15 get RegExp.prototype.unicode
9420
9421 // 21.2.6 Properties of RegExp Instances
9422 // 21.2.6.1 lastIndex
9423
9424 // (No polyfillable changes from ES5)
9425
9426 // ---------------------------------------
9427 // 22 Indexed Collections
9428 // ---------------------------------------
9429
9430 // ---------------------------------------
9431 // 22.1 Array Objects
9432 // ---------------------------------------
9433
9434 // 22.1.1 The Array Constructor
9435 // 22.1.1.1 Array ( )
9436 // 22.1.1.2 Array (len)
9437 // 22.1.1.3 Array (...items )
9438
9439 // 22.1.2 Properties of the Array Constructor
9440
9441 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9442 define(
9443 Array, 'from',
9444 function from(items) {
9445 var mapfn = arguments[1];
9446 var thisArg = arguments[2];
9447
9448 var c = strict(this);
9449 if (mapfn === undefined) {
9450 var mapping = false;
9451 } else {
9452 if (!IsCallable(mapfn)) throw TypeError();
9453 var t = thisArg;
9454 mapping = true;
9455 }
9456 var usingIterator = GetMethod(items, $$iterator);
9457 if (usingIterator !== undefined) {
9458 if (IsConstructor(c)) {
9459 var a = new c();
9460 } else {
9461 a = new Array(0);
9462 }
9463 var iterator = GetIterator(items, usingIterator);
9464 var k = 0;
9465 while (true) {
9466 var next = IteratorStep(iterator);
9467 if (next === false) {
9468 a.length = k;
9469 return a;
9470 }
9471 var nextValue = IteratorValue(next);
9472 if (mapping)
9473 var mappedValue = mapfn.call(t, nextValue);
9474 else
9475 mappedValue = nextValue;
9476 a[k] = mappedValue;
9477 k += 1;
9478 }
9479 }
9480 var arrayLike = ToObject(items);
9481 var lenValue = arrayLike.length;
9482 var len = ToLength(lenValue);
9483 if (IsConstructor(c)) {
9484 a = new c(len);
9485 } else {
9486 a = new Array(len);
9487 }
9488 k = 0;
9489 while (k < len) {
9490 var kValue = arrayLike[k];
9491 if (mapping)
9492 mappedValue = mapfn.call(t, kValue, k);
9493 else
9494 mappedValue = kValue;
9495 a[k] = mappedValue;
9496 k += 1;
9497 }
9498 a.length = len;
9499 return a;
9500 });
9501
9502 // 22.1.2.2 Array.isArray ( arg )
9503
9504 // 22.1.2.3 Array.of ( ...items )
9505 define(
9506 Array, 'of',
9507 function of() {
9508 var items = arguments;
9509
9510 var lenValue = items.length;
9511 var len = ToUint32(lenValue);
9512 var c = strict(this), a;
9513 if (IsConstructor(c)) {
9514 a = new c(len);
9515 a = ToObject(a);
9516 } else {
9517 a = new Array(len);
9518 }
9519 var k = 0;
9520 while (k < len) {
9521 a[k] = items[k];
9522 k += 1;
9523 }
9524 a.length = len;
9525 return a;
9526 });
9527
9528 // 22.1.2.4 Array.prototype
9529 // 22.1.2.5 get Array [ @@species ]
9530 // 22.1.3 Properties of the Array Prototype Object
9531 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9532 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9533 // 22.1.3.2 Array.prototype.constructor
9534 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9535 define(
9536 Array.prototype, 'copyWithin',
9537 function copyWithin(target, start/*, end*/) {
9538 var end = arguments[2];
9539
9540 var o = ToObject(this);
9541 var lenVal = o.length;
9542 var len = ToLength(lenVal);
9543 len = max(len, 0);
9544 var relativeTarget = ToInteger(target);
9545 var to;
9546 if (relativeTarget < 0)
9547 to = max(len + relativeTarget, 0);
9548 else
9549 to = min(relativeTarget, len);
9550 var relativeStart = ToInteger(start);
9551 var from;
9552 if (relativeStart < 0)
9553 from = max(len + relativeStart, 0);
9554 else
9555 from = min(relativeStart, len);
9556 var relativeEnd;
9557 if (end === undefined)
9558 relativeEnd = len;
9559 else
9560 relativeEnd = ToInteger(end);
9561 var final;
9562 if (relativeEnd < 0)
9563 final = max(len + relativeEnd, 0);
9564 else
9565 final = min(relativeEnd, len);
9566 var count = min(final - from, len - to);
9567 var direction;
9568 if (from < to && to < from + count) {
9569 direction = -1;
9570 from = from + count - 1;
9571 to = to + count - 1;
9572 } else {
9573 direction = 1;
9574 }
9575 while (count > 0) {
9576 var fromKey = String(from);
9577 var toKey = String(to);
9578 var fromPresent = HasProperty(o, fromKey);
9579 if (fromPresent) {
9580 var fromVal = o[fromKey];
9581 o[toKey] = fromVal;
9582 } else {
9583 delete o[toKey];
9584 }
9585 from = from + direction;
9586 to = to + direction;
9587 count = count - 1;
9588 }
9589 return o;
9590 });
9591
9592 // 22.1.3.4 Array.prototype.entries ( )
9593 var nativeArrayIteratorMethods =
9594 ('entries' in Array.prototype && 'next' in [].entries());
9595
9596 define(
9597 Array.prototype, 'entries',
9598 function entries() {
9599 return CreateArrayIterator(this, 'key+value');
9600 }, !nativeArrayIteratorMethods);
9601
9602 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9603
9604 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9605 define(
9606 Array.prototype, 'fill',
9607 function fill(value/*, start, end*/) {
9608 var start = arguments[1],
9609 end = arguments[2];
9610
9611 var o = ToObject(this);
9612 var lenVal = o.length;
9613 var len = ToLength(lenVal);
9614 len = max(len, 0);
9615 var relativeStart = ToInteger(start);
9616 var k;
9617 if (relativeStart < 0)
9618 k = max((len + relativeStart), 0);
9619 else
9620 k = min(relativeStart, len);
9621 var relativeEnd;
9622 if (end === undefined)
9623 relativeEnd = len;
9624 else
9625 relativeEnd = ToInteger(end);
9626 var final;
9627 if (relativeEnd < 0)
9628 final = max((len + relativeEnd), 0);
9629 else
9630 final = min(relativeEnd, len);
9631 while (k < final) {
9632 var pk = String(k);
9633 o[pk] = value;
9634 k += 1;
9635 }
9636 return o;
9637 });
9638
9639 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9640
9641 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9642 define(
9643 Array.prototype, 'find',
9644 function find(predicate) {
9645 var o = ToObject(this);
9646 var lenValue = o.length;
9647 var len = ToInteger(lenValue);
9648 if (!IsCallable(predicate)) throw TypeError();
9649 var t = arguments.length > 1 ? arguments[1] : undefined;
9650 var k = 0;
9651 while (k < len) {
9652 var pk = String(k);
9653 var kPresent = HasProperty(o, pk);
9654 if (kPresent) {
9655 var kValue = o[pk];
9656 var testResult = predicate.call(t, kValue, k, o);
9657 if (Boolean(testResult)) {
9658 return kValue;
9659 }
9660 }
9661 ++k;
9662 }
9663 return undefined;
9664 });
9665
9666 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9667 define(
9668 Array.prototype, 'findIndex',
9669 function findIndex(predicate) {
9670 var o = ToObject(this);
9671 var lenValue = o.length;
9672 var len = ToLength(lenValue);
9673 if (!IsCallable(predicate)) throw TypeError();
9674 var t = arguments.length > 1 ? arguments[1] : undefined;
9675 var k = 0;
9676 while (k < len) {
9677 var pk = String(k);
9678 var kPresent = HasProperty(o, pk);
9679 if (kPresent) {
9680 var kValue = o[pk];
9681 var testResult = predicate.call(t, kValue, k, o);
9682 if (Boolean(testResult)) {
9683 return k;
9684 }
9685 }
9686 ++k;
9687 }
9688 return -1;
9689 });
9690
9691 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9692 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9693 // 22.1.3.12 Array.prototype.join (separator)
9694
9695 // 22.1.3.13 Array.prototype.keys ( )
9696 define(
9697 Array.prototype, 'keys',
9698 function keys() {
9699 return CreateArrayIterator(this, 'key');
9700 }, !nativeArrayIteratorMethods);
9701
9702 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9703 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9704 // 22.1.3.16 Array.prototype.pop ( )
9705 // 22.1.3.17 Array.prototype.push ( ...items )
9706 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9707 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9708 // 22.1.3.20 Array.prototype.reverse ( )
9709 // 22.1.3.21 Array.prototype.shift ( )
9710 // 22.1.3.22 Array.prototype.slice (start, end)
9711 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9712 // 22.1.3.24 Array.prototype.sort (comparefn)
9713 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9714 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9715 // 22.1.3.27 Array.prototype.toString ( )
9716 // 22.1.3.28 Array.prototype.unshift ( ...items )
9717
9718 // 22.1.3.29 Array.prototype.values ( )
9719 define(
9720 Array.prototype, 'values',
9721 function values() {
9722 return CreateArrayIterator(this, 'value');
9723 }, !nativeArrayIteratorMethods);
9724
9725 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9726 define(
9727 Array.prototype, $$iterator,
9728 Array.prototype.values
9729 );
9730
9731 // 22.1.3.31 Array.prototype [ @@unscopables ]
9732 // 22.1.4 Properties of Array Instances
9733 // 22.1.4.1 length
9734
9735 // 22.1.5 Array Iterator Objects
9736 function ArrayIterator() {}
9737
9738 // 22.1.5.1 CreateArrayIterator Abstract Operation
9739 function CreateArrayIterator(array, kind) {
9740 var o = ToObject(array);
9741 var iterator = new ArrayIterator;
9742 set_internal(iterator, '[[IteratedObject]]', o);
9743 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9744 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9745 return iterator;
9746 }
9747
9748 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9749 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9750 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9751
9752 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9753 define(
9754 $ArrayIteratorPrototype$, 'next',
9755 function next() {
9756 var o = strict(this);
9757 if (Type(o) !== 'object') throw TypeError();
9758 var a = o['[[IteratedObject]]'],
9759 index = o['[[ArrayIteratorNextIndex]]'],
9760 itemKind = o['[[ArrayIterationKind]]'],
9761 lenValue = a.length,
9762 len = ToUint32(lenValue),
9763 elementKey,
9764 elementValue;
9765 if (itemKind.indexOf('sparse') !== -1) {
9766 var found = false;
9767 while (!found && index < len) {
9768 elementKey = String(index);
9769 found = HasProperty(a, elementKey);
9770 if (!found) {
9771 index += 1;
9772 }
9773 }
9774 }
9775 if (index >= len) {
9776 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9777 return CreateIterResultObject(undefined, true);
9778 }
9779 elementKey = index;
9780 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9781 if (itemKind.indexOf('value') !== -1)
9782 elementValue = a[elementKey];
9783 if (itemKind.indexOf('key+value') !== -1)
9784 return CreateIterResultObject([elementKey, elementValue], false);
9785 if (itemKind.indexOf('key') !== -1)
9786 return CreateIterResultObject(elementKey, false);
9787 if (itemKind === 'value')
9788 return CreateIterResultObject(elementValue, false);
9789 throw Error('Internal error');
9790 });
9791
9792 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9793 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9794
9795 // 22.1.5.3 Properties of Array Iterator Instances
9796
9797
9798 // ---------------------------------------
9799 // 22.2 TypedArray Objects
9800 // ---------------------------------------
9801
9802 // See typedarray.js for TypedArray polyfill
9803
9804 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9805 'Int16Array', 'Uint16Array',
9806 'Int32Array', 'Uint32Array',
9807 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9808 if (!($TypedArrayName$ in global))
9809 return;
9810 var $TypedArray$ = global[$TypedArrayName$];
9811
9812 // 22.2.1 The %TypedArray% Intrinsic Object
9813 // 22.2.1.1 %TypedArray% ( length )
9814 // 22.2.1.2 %TypedArray% ( typedArray )
9815 // 22.2.1.3 %TypedArray% ( object )
9816 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9817 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9818 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9819
9820 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9821 define(
9822 $TypedArray$, 'from',
9823 function from(source) {
9824 var mapfn = arguments[1];
9825 var thisArg = arguments[2];
9826
9827 var c = strict(this);
9828 if (!IsConstructor(c)) throw TypeError();
9829 if (mapfn === undefined) {
9830 var mapping = false;
9831 } else {
9832 if (IsCallable(mapfn)) throw TypeError();
9833 var t = thisArg;
9834 mapping = true;
9835 }
9836 var usingIterator = GetMethod(source, $$iterator);
9837 if (usingIterator !== undefined) {
9838 var iterator = GetIterator(source, usingIterator);
9839 var values = [];
9840 var next = true;
9841 while (next !== false) {
9842 next = IteratorStep(iterator);
9843 if (next !== false) {
9844 var nextValue = IteratorValue(next);
9845 values.push(nextValue);
9846 }
9847 }
9848 var len = values.length;
9849 var newObj = new c(len);
9850 var k = 0;
9851 while (k < len) {
9852 var kValue = values.shift();
9853 if (mapping) {
9854 var mappedValue = mapfn.call(t, kValue);
9855 } else {
9856 mappedValue = kValue;
9857 }
9858 newObj[k] = mappedValue;
9859 ++k;
9860 }
9861 console.assert(values.length === 0);
9862 return newObj;
9863 }
9864 var arrayLike = ToObject(source);
9865 var lenValue = arrayLike.length;
9866 len = ToLength(lenValue);
9867 newObj = new c(len);
9868 k = 0;
9869 while (k < len) {
9870 kValue = arrayLike[k];
9871 if (mapping) {
9872 mappedValue = mapfn.call(t, kValue, k);
9873 } else {
9874 mappedValue = kValue;
9875 }
9876 newObj[k] = mappedValue;
9877 ++k;
9878 }
9879 return newObj;
9880 });
9881
9882 // 22.2.2.2 %TypedArray%.of ( ...items )
9883 define(
9884 $TypedArray$, 'of',
9885 function of() {
9886 var items = arguments;
9887
9888 var len = items.length;
9889 var c = strict(this);
9890 var newObj = new c(len);
9891 var k = 0;
9892 while (k < len) {
9893 newObj[k] = items[k];
9894 ++k;
9895 }
9896 return newObj;
9897 });
9898
9899 // 22.2.2.3 %TypedArray%.prototype
9900 // 22.2.2.4 get %TypedArray% [ @@species ]
9901 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9902 // 22.2.3.1 get %TypedArray%.prototype.buffer
9903 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9904 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9905 // 22.2.3.4 %TypedArray%.prototype.constructor
9906
9907 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9908 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9909
9910 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9911 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9912
9913 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9914 define($TypedArray$.prototype, 'every', Array.prototype.every);
9915
9916 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9917 define(
9918 $TypedArray$.prototype, 'fill',
9919 //Array.prototype.fill // Doesn't work in Safari 7
9920 function fill(value/*, start, end*/) {
9921 var start = arguments[1],
9922 end = arguments[2];
9923
9924 var o = ToObject(this);
9925 var lenVal = o.length;
9926 var len = ToLength(lenVal);
9927 len = max(len, 0);
9928 var relativeStart = ToInteger(start);
9929 var k;
9930 if (relativeStart < 0) k = max((len + relativeStart), 0);
9931 else k = min(relativeStart, len);
9932 var relativeEnd;
9933 if (end === undefined) relativeEnd = len;
9934 else relativeEnd = ToInteger(end);
9935 var final;
9936 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9937 else final = min(relativeEnd, len);
9938 while (k < final) {
9939 var pk = String(k);
9940 o[pk] = value;
9941 k += 1;
9942 }
9943 return o;
9944 });
9945
9946 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9947 define(
9948 $TypedArray$.prototype, 'filter',
9949 function filter(callbackfn) {
9950 var thisArg = arguments[1];
9951
9952 var o = ToObject(this);
9953 var lenVal = o.length;
9954 var len = ToLength(lenVal);
9955 if (!IsCallable(callbackfn)) throw TypeError();
9956 var t = thisArg;
9957 var c = o.constructor;
9958 var kept = [];
9959 var k = 0;
9960 var captured = 0;
9961 while (k < len) {
9962 var kValue = o[k];
9963 var selected = callbackfn.call(t, kValue, k, o);
9964 if (selected) {
9965 kept.push(kValue);
9966 ++captured;
9967 }
9968 ++k;
9969 }
9970 var a = new c(captured);
9971 var n = 0;
9972 for (var i = 0; i < kept.length; ++i) {
9973 var e = kept[i];
9974 a[n] = e;
9975 ++n;
9976 }
9977 return a;
9978 });
9979
9980 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9981 define($TypedArray$.prototype, 'find', Array.prototype.find);
9982
9983 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9984 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9985
9986 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9987 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9988
9989 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9990 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9991
9992 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9993 define($TypedArray$.prototype, 'join', Array.prototype.join);
9994
9995 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9996 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9997
9998 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9999 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
10000
10001 // 22.2.3.17 get %TypedArray%.prototype.length
10002
10003 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
10004 define(
10005 $TypedArray$.prototype, 'map',
10006 function map(callbackfn) {
10007 var thisArg = arguments[1];
10008
10009 var o = ToObject(this);
10010 var lenValue = o.length;
10011 var len = ToLength(lenValue);
10012 if (!IsCallable(callbackfn)) throw TypeError();
10013 var t = thisArg;
10014 var a = undefined;
10015 var c = o.constructor;
10016 if (IsConstructor(c))
10017 a = new c(len);
10018 if (a === undefined)
10019 a = new Array(len);
10020 var k = 0;
10021 while (k < len) {
10022 var kPresent = HasProperty(o, k);
10023 if (kPresent) {
10024 var kValue = o[k];
10025 var mappedValue = callbackfn.call(t, kValue, k, o);
10026 a[k] = mappedValue;
10027 }
10028 ++k;
10029 }
10030 return a;
10031 });
10032
10033 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10034 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10035
10036 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10037 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10038
10039 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10040 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10041
10042 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10043 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10044 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10045
10046 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10047 define(
10048 $TypedArray$.prototype, 'slice',
10049 function slice(start, end) {
10050 var o = ToObject(this);
10051 var lenVal = o.length;
10052 var len = ToLength(lenVal);
10053 var relativeStart = ToInteger(start);
10054 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10055 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10056 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10057 var count = final - k;
10058 var c = o.constructor;
10059 if (IsConstructor(c)) {
10060 var a = new c(count);
10061 } else {
10062 throw TypeError();
10063 }
10064 var n = 0;
10065 while (k < final) {
10066 var kValue = o[k];
10067 a[n] = kValue;
10068 ++k;
10069 ++n;
10070 }
10071 return a;
10072 });
10073
10074 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10075 define($TypedArray$.prototype, 'some', Array.prototype.some);
10076
10077 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10078 define(
10079 $TypedArray$.prototype, 'sort',
10080 function sort() {
10081 var comparefn = arguments[0];
10082
10083 function sortCompare(x, y) {
10084 console.assert(Type(x) === 'number' && Type(y) === 'number');
10085 if (x !== x && y !== y) return +0;
10086 if (x !== x) return 1;
10087 if (y !== y) return -1;
10088 if (comparefn !== undefined) {
10089 return comparefn(x, y);
10090 }
10091 if (x < y) return -1;
10092 if (x > y) return 1;
10093 return +0;
10094 }
10095 return Array.prototype.sort.call(this, sortCompare);
10096 });
10097
10098 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10099 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10100 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10101
10102 // 22.2.3.29 %TypedArray%.prototype.values ( )
10103 define($TypedArray$.prototype, 'values', Array.prototype.values);
10104
10105 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10106 define(
10107 $TypedArray$.prototype, $$iterator,
10108 $TypedArray$.prototype.values
10109 );
10110
10111 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10112 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10113
10114 // 22.2.4 The TypedArray Constructors
10115 // 22.2.4.1TypedArray( ... argumentsList)
10116 // 22.2.5 Properties of the TypedArray Constructors
10117 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10118 // 22.2.5.2 TypedArray.prototype
10119 // 22.2.6 Properties of TypedArray Prototype Objects
10120 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10121 // 22.2.6.2 TypedArray.prototype.constructor
10122 // 22.2.7 Properties of TypedArray Instances
10123 });
10124
10125 // ---------------------------------------
10126 // 23 Keyed Collection
10127 // ---------------------------------------
10128
10129 // ---------------------------------------
10130 // 23.1 Map Objects
10131 // ---------------------------------------
10132
10133 (function() {
10134 // 23.1.1 The Map Constructor
10135
10136 // 23.1.1.1 Map ( [ iterable ] )
10137 /** @constructor */
10138 function Map(/*iterable*/) {
10139 var map = strict(this);
10140 var iterable = arguments[0];
10141
10142 if (Type(map) !== 'object') throw TypeError();
10143 if ('[[MapData]]' in map) throw TypeError();
10144
10145 if (iterable !== undefined) {
10146 var adder = map['set'];
10147 if (!IsCallable(adder)) throw TypeError();
10148 var iter = GetIterator(ToObject(iterable));
10149 }
10150 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10151 if (iter === undefined) return map;
10152 while (true) {
10153 var next = IteratorStep(iter);
10154 if (next === false)
10155 return map;
10156 var nextItem = IteratorValue(next);
10157 if (Type(nextItem) !== 'object') throw TypeError();
10158 var k = nextItem[0];
10159 var v = nextItem[1];
10160 adder.call(map, k, v);
10161 }
10162
10163 return map;
10164 }
10165
10166 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10167 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10168 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10169 (new global.Map([['a', 1]]).size !== 1))
10170 global.Map = Map;
10171
10172
10173 function MapDataIndexOf(mapData, key) {
10174 var i;
10175 if (key === key) return mapData.keys.indexOf(key);
10176 // Slow case for NaN
10177 for (i = 0; i < mapData.keys.length; i += 1)
10178 if (SameValueZero(mapData.keys[i], key)) return i;
10179 return -1;
10180 }
10181
10182 // 23.1.1.2 new Map ( ... argumentsList )
10183 // 23.1.2 Properties of the Map Constructor
10184 // 23.1.2.1 Map.prototype
10185 var $MapPrototype$ = {};
10186 Map.prototype = $MapPrototype$;
10187
10188 // 23.1.2.2 get Map [ @@species ]
10189
10190 // 23.1.3 Properties of the Map Prototype Object
10191 // 23.1.3.1 Map.prototype.clear ()
10192 define(
10193 Map.prototype, 'clear',
10194 function clear() {
10195 var m = strict(this);
10196 if (Type(m) !== 'object') throw TypeError();
10197 if (!('[[MapData]]' in m)) throw TypeError();
10198 if (m['[[MapData]]'] === undefined) throw TypeError();
10199 var entries = m['[[MapData]]'];
10200 entries.keys.length = 0;
10201 entries.values.length = 0;
10202 return undefined;
10203 });
10204
10205 // 23.1.3.2 Map.prototype.constructor
10206
10207 // 23.1.3.3 Map.prototype.delete ( key )
10208 define(
10209 Map.prototype, 'delete',
10210 function delete_(key) {
10211 var m = strict(this);
10212 if (Type(m) !== 'object') throw TypeError();
10213 if (!('[[MapData]]' in m)) throw TypeError();
10214 if (m['[[MapData]]'] === undefined) throw TypeError();
10215 var entries = m['[[MapData]]'];
10216 var i = MapDataIndexOf(entries, key);
10217 if (i < 0) return false;
10218 entries.keys[i] = empty;
10219 entries.values[i] = empty;
10220 return true;
10221 });
10222
10223 // 23.1.3.4 Map.prototype.entries ( )
10224 define(
10225 Map.prototype, 'entries',
10226 function entries() {
10227 var m = strict(this);
10228 if (Type(m) !== 'object') throw TypeError();
10229 return CreateMapIterator(m, 'key+value');
10230 });
10231
10232 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10233 define(
10234 Map.prototype, 'forEach',
10235 function forEach(callbackfn /*, thisArg*/) {
10236 var thisArg = arguments[1];
10237
10238 var m = strict(this);
10239 if (Type(m) !== 'object') throw TypeError();
10240 if (!('[[MapData]]' in m)) throw TypeError();
10241 if (m['[[MapData]]'] === undefined) throw TypeError();
10242 var entries = m['[[MapData]]'];
10243
10244 if (!IsCallable(callbackfn)) {
10245 throw TypeError('First argument to forEach is not callable.');
10246 }
10247 for (var i = 0; i < entries.keys.length; ++i) {
10248 if (entries.keys[i] !== empty) {
10249 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10250 }
10251 }
10252 return undefined;
10253 });
10254
10255 // 23.1.3.6 Map.prototype.get ( key )
10256 define(
10257 Map.prototype, 'get',
10258 function get(key) {
10259 var m = strict(this);
10260 if (Type(m) !== 'object') throw TypeError();
10261 if (!('[[MapData]]' in m)) throw TypeError();
10262 if (m['[[MapData]]'] === undefined) throw TypeError();
10263 var entries = m['[[MapData]]'];
10264 var i = MapDataIndexOf(entries, key);
10265 if (i >= 0) return entries.values[i];
10266 return undefined;
10267 });
10268
10269 // 23.1.3.7 Map.prototype.has ( key )
10270 define(
10271 Map.prototype, 'has',
10272 function has(key) {
10273 var m = strict(this);
10274 if (Type(m) !== 'object') throw TypeError();
10275 if (!('[[MapData]]' in m)) throw TypeError();
10276 if (m['[[MapData]]'] === undefined) throw TypeError();
10277 var entries = m['[[MapData]]'];
10278 if (MapDataIndexOf(entries, key) >= 0) return true;
10279 return false;
10280 });
10281
10282 // 23.1.3.8 Map.prototype.keys ( )
10283 define(
10284 Map.prototype, 'keys',
10285 function keys() {
10286 var m = strict(this);
10287 if (Type(m) !== 'object') throw TypeError();
10288 return CreateMapIterator(m, 'key');
10289 });
10290
10291 // 23.1.3.9 Map.prototype.set ( key , value )
10292 define(
10293 Map.prototype, 'set',
10294 function set(key, value) {
10295 var m = strict(this);
10296 if (Type(m) !== 'object') throw TypeError();
10297 if (!('[[MapData]]' in m)) throw TypeError();
10298 if (m['[[MapData]]'] === undefined) throw TypeError();
10299 var entries = m['[[MapData]]'];
10300 var i = MapDataIndexOf(entries, key);
10301 if (i < 0) i = entries.keys.length;
10302 if (SameValue(key, -0)) key = 0;
10303 entries.keys[i] = key;
10304 entries.values[i] = value;
10305 return m;
10306 });
10307
10308 // 23.1.3.10 get Map.prototype.size
10309 Object.defineProperty(
10310 Map.prototype, 'size', {
10311 get: function() {
10312 var m = strict(this);
10313 if (Type(m) !== 'object') throw TypeError();
10314 if (!('[[MapData]]' in m)) throw TypeError();
10315 if (m['[[MapData]]'] === undefined) throw TypeError();
10316 var entries = m['[[MapData]]'];
10317 var count = 0;
10318 for (var i = 0; i < entries.keys.length; ++i) {
10319 if (entries.keys[i] !== empty)
10320 count = count + 1;
10321 }
10322 return count;
10323 }
10324 });
10325
10326 // 23.1.3.11 Map.prototype.values ( )
10327 define(
10328 Map.prototype, 'values',
10329 function values() {
10330 var m = strict(this);
10331 if (Type(m) !== 'object') throw TypeError();
10332 return CreateMapIterator(m, 'value');
10333 });
10334
10335 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10336 define(
10337 Map.prototype, $$iterator,
10338 function() {
10339 var m = strict(this);
10340 if (Type(m) !== 'object') throw TypeError();
10341 return CreateMapIterator(m, 'key+value');
10342 });
10343
10344 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10345 define(global.Map.prototype, $$toStringTag, 'Map');
10346
10347 // 23.1.4 Properties of Map Instances
10348 // 23.1.5 Map Iterator Objects
10349
10350 /** @constructor */
10351 function MapIterator() {}
10352
10353 // 23.1.5.1 CreateMapIterator Abstract Operation
10354 function CreateMapIterator(map, kind) {
10355 if (Type(map) !== 'object') throw TypeError();
10356 if (!('[[MapData]]' in map)) throw TypeError();
10357 if (map['[[MapData]]'] === undefined) throw TypeError();
10358 var iterator = new MapIterator;
10359 set_internal(iterator, '[[Map]]', map);
10360 set_internal(iterator, '[[MapNextIndex]]', 0);
10361 set_internal(iterator, '[[MapIterationKind]]', kind);
10362 return iterator;
10363 }
10364
10365 // 23.1.5.2 The %MapIteratorPrototype% Object
10366 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10367 MapIterator.prototype = $MapIteratorPrototype$;
10368
10369 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10370 define(
10371 $MapIteratorPrototype$, 'next',
10372 function next() {
10373 var o = strict(this);
10374 if (Type(o) !== 'object') throw TypeError();
10375 var m = o['[[Map]]'],
10376 index = o['[[MapNextIndex]]'],
10377 itemKind = o['[[MapIterationKind]]'],
10378 entries = m['[[MapData]]'];
10379 while (index < entries.keys.length) {
10380 var e = {key: entries.keys[index], value: entries.values[index]};
10381 index = index += 1;
10382 set_internal(o, '[[MapNextIndex]]', index);
10383 if (e.key !== empty) {
10384 if (itemKind === 'key') {
10385 return CreateIterResultObject(e.key, false);
10386 } else if (itemKind === 'value') {
10387 return CreateIterResultObject(e.value, false);
10388 } else {
10389 return CreateIterResultObject([e.key, e.value], false);
10390 }
10391 }
10392 }
10393 return CreateIterResultObject(undefined, true);
10394 });
10395
10396 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10397 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10398
10399 // 23.1.5.3 Properties of Map Iterator Instances
10400 }());
10401
10402 // ---------------------------------------
10403 // 23.2 Set Objects
10404 // ---------------------------------------
10405
10406 (function() {
10407 // 23.2.1 The Set Constructor
10408 // 23.2.1.1 Set ( [ iterable ] )
10409
10410 /** @constructor */
10411 function Set(/*iterable*/) {
10412 var set = strict(this);
10413 var iterable = arguments[0];
10414
10415 if (Type(set) !== 'object') throw TypeError();
10416 if ('[[SetData]]' in set) throw TypeError();
10417
10418 if (iterable !== undefined) {
10419 var adder = set['add'];
10420 if (!IsCallable(adder)) throw TypeError();
10421 var iter = GetIterator(ToObject(iterable));
10422 }
10423 set_internal(set, '[[SetData]]', []);
10424 if (iter === undefined) return set;
10425 while (true) {
10426 var next = IteratorStep(iter);
10427 if (next === false)
10428 return set;
10429 var nextValue = IteratorValue(next);
10430 adder.call(set, nextValue);
10431 }
10432
10433 return set;
10434 }
10435
10436 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10437 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10438 (new global.Set([1]).size !== 1))
10439 global.Set = Set;
10440
10441 function SetDataIndexOf(setData, key) {
10442 var i;
10443 if (key === key)
10444 return setData.indexOf(key);
10445 // Slow case for NaN
10446 for (i = 0; i < setData.length; i += 1)
10447 if (SameValueZero(setData[i], key)) return i;
10448 return -1;
10449 }
10450
10451 // 23.2.1.2 new Set ( ...argumentsList )
10452 // 23.2.2 Properties of the Set Constructor
10453
10454 // 23.2.2.1 Set.prototype
10455 var $SetPrototype$ = {};
10456 Set.prototype = $SetPrototype$;
10457
10458 // 23.2.2.2 get Set [ @@species ]
10459 // 23.2.3 Properties of the Set Prototype Object
10460
10461 // 23.2.3.1 Set.prototype.add (value )
10462 define(
10463 Set.prototype, 'add',
10464 function add(value) {
10465 var s = strict(this);
10466 if (Type(s) !== 'object') throw TypeError();
10467 if (!('[[SetData]]' in s)) throw TypeError();
10468 if (s['[[SetData]]'] === undefined) throw TypeError();
10469 if (SameValue(value, -0)) value = 0;
10470 var entries = s['[[SetData]]'];
10471 var i = SetDataIndexOf(entries, value);
10472 if (i < 0) i = s['[[SetData]]'].length;
10473 s['[[SetData]]'][i] = value;
10474
10475 return s;
10476 });
10477
10478 // 23.2.3.2 Set.prototype.clear ()
10479 define(
10480 Set.prototype, 'clear',
10481 function clear() {
10482 var s = strict(this);
10483 if (Type(s) !== 'object') throw TypeError();
10484 if (!('[[SetData]]' in s)) throw TypeError();
10485 if (s['[[SetData]]'] === undefined) throw TypeError();
10486 var entries = s['[[SetData]]'];
10487 entries.length = 0;
10488 return undefined;
10489 });
10490
10491 // 23.2.3.3 Set.prototype.constructor
10492 // 23.2.3.4 Set.prototype.delete ( value )
10493 define(
10494 Set.prototype, 'delete',
10495 function delete_(value) {
10496 var s = strict(this);
10497 if (Type(s) !== 'object') throw TypeError();
10498 if (!('[[SetData]]' in s)) throw TypeError();
10499 if (s['[[SetData]]'] === undefined) throw TypeError();
10500 var entries = s['[[SetData]]'];
10501 var i = SetDataIndexOf(entries, value);
10502 if (i < 0) return false;
10503 entries[i] = empty;
10504 return true;
10505 });
10506
10507 // 23.2.3.5 Set.prototype.entries ( )
10508 define(
10509 Set.prototype, 'entries',
10510 function entries() {
10511 var s = strict(this);
10512 if (Type(s) !== 'object') throw TypeError();
10513 return CreateSetIterator(s, 'key+value');
10514 });
10515
10516 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10517 define(
10518 Set.prototype, 'forEach',
10519 function forEach(callbackfn/*, thisArg*/) {
10520 var thisArg = arguments[1];
10521
10522 var s = strict(this);
10523 if (Type(s) !== 'object') throw TypeError();
10524 if (!('[[SetData]]' in s)) throw TypeError();
10525 if (s['[[SetData]]'] === undefined) throw TypeError();
10526 var entries = s['[[SetData]]'];
10527
10528 if (!IsCallable(callbackfn)) {
10529 throw TypeError('First argument to forEach is not callable.');
10530 }
10531 for (var i = 0; i < entries.length; ++i) {
10532 if (entries[i] !== empty) {
10533 callbackfn.call(thisArg, entries[i], entries[i], s);
10534 }
10535 }
10536 });
10537
10538 // 23.2.3.7 Set.prototype.has ( value )
10539 define(
10540 Set.prototype, 'has',
10541 function has(key) {
10542 var s = strict(this);
10543 if (Type(s) !== 'object') throw TypeError();
10544 if (!('[[SetData]]' in s)) throw TypeError();
10545 if (s['[[SetData]]'] === undefined) throw TypeError();
10546 var entries = s['[[SetData]]'];
10547 return SetDataIndexOf(entries, key) !== -1;
10548 });
10549
10550 // 23.2.3.8 Set.prototype.keys ( )
10551 // See Set.prototype.values
10552
10553 // 23.2.3.9 get Set.prototype.size
10554 Object.defineProperty(
10555 Set.prototype, 'size', {
10556 get: function() {
10557 var s = strict(this);
10558 if (Type(s) !== 'object') throw TypeError();
10559 if (!('[[SetData]]' in s)) throw TypeError();
10560 if (s['[[SetData]]'] === undefined) throw TypeError();
10561 var entries = s['[[SetData]]'];
10562 var count = 0;
10563 for (var i = 0; i < entries.length; ++i) {
10564 if (entries[i] !== empty)
10565 count = count + 1;
10566 }
10567 return count;
10568 }
10569 });
10570
10571 // 23.2.3.10 Set.prototype.values ( )
10572 define(
10573 Set.prototype, 'values',
10574 function values() {
10575 var s = strict(this);
10576 if (Type(s) !== 'object') throw TypeError();
10577 return CreateSetIterator(s, 'value');
10578 });
10579 // NOTE: function name is still 'values':
10580 Set.prototype.keys = Set.prototype.values;
10581
10582 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10583 define(
10584 Set.prototype, $$iterator,
10585 function() {
10586 var s = strict(this);
10587 if (Type(s) !== 'object') throw TypeError();
10588 return CreateSetIterator(s);
10589 });
10590
10591 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10592 define(global.Set.prototype, $$toStringTag, 'Set');
10593
10594 // 23.2.4 Properties of Set Instances
10595 // 23.2.5 Set Iterator Objects
10596 /** @constructor */
10597 function SetIterator() {}
10598
10599 // 23.2.5.1 CreateSetIterator Abstract Operation
10600 function CreateSetIterator(set, kind) {
10601 if (Type(set) !== 'object') throw TypeError();
10602 if (!('[[SetData]]' in set)) throw TypeError();
10603 if (set['[[SetData]]'] === undefined) throw TypeError();
10604 var iterator = new SetIterator;
10605 set_internal(iterator, '[[IteratedSet]]', set);
10606 set_internal(iterator, '[[SetNextIndex]]', 0);
10607 set_internal(iterator, '[[SetIterationKind]]', kind);
10608 return iterator;
10609 }
10610
10611 // 23.2.5.2 The %SetIteratorPrototype% Object
10612 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10613 SetIterator.prototype = $SetIteratorPrototype$;
10614
10615 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10616 define(
10617 $SetIteratorPrototype$, 'next',
10618 function next() {
10619 var o = strict(this);
10620 if (Type(o) !== 'object') throw TypeError();
10621 var s = o['[[IteratedSet]]'],
10622 index = o['[[SetNextIndex]]'],
10623 itemKind = o['[[SetIterationKind]]'],
10624 entries = s['[[SetData]]'];
10625 while (index < entries.length) {
10626 var e = entries[index];
10627 index = index += 1;
10628 set_internal(o, '[[SetNextIndex]]', index);
10629 if (e !== empty) {
10630 if (itemKind === 'key+value')
10631 return CreateIterResultObject([e, e], false);
10632 return CreateIterResultObject(e, false);
10633 }
10634 }
10635 return CreateIterResultObject(undefined, true);
10636 });
10637
10638 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10639 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10640
10641 // 23.2.5.3 Properties of Set Iterator Instances
10642
10643 }());
10644
10645 // ---------------------------------------
10646 // 23.3 WeakMap Objects
10647 // ---------------------------------------
10648
10649 (function() {
10650 // 23.3.1 The WeakMap Constructor
10651 // 23.3.1.1 WeakMap ( [ iterable ] )
10652 /** @constructor */
10653 function WeakMap(/*iterable*/) {
10654 var map = strict(this);
10655 var iterable = arguments[0];
10656
10657 if (Type(map) !== 'object') throw TypeError();
10658 if ('[[WeakMapData]]' in map) throw TypeError();
10659
10660 if (iterable !== undefined) {
10661 var adder = map['set'];
10662 if (!IsCallable(adder)) throw TypeError();
10663 var iter = GetIterator(ToObject(iterable));
10664 }
10665 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10666 if (iter === undefined) return map;
10667 while (true) {
10668 var next = IteratorStep(iter);
10669 if (next === false)
10670 return map;
10671 var nextValue = IteratorValue(next);
10672 if (Type(nextValue) !== 'object') throw TypeError();
10673 var k = nextValue[0];
10674 var v = nextValue[1];
10675 adder.call(map, k, v);
10676 }
10677
10678 return map;
10679 }
10680
10681 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10682 global.WeakMap = WeakMap;
10683
10684 // 23.3.2 Properties of the WeakMap Constructor
10685 // 23.3.2.1 WeakMap.prototype
10686 var $WeakMapPrototype$ = {};
10687 WeakMap.prototype = $WeakMapPrototype$;
10688
10689
10690
10691 // 23.3.2.2 WeakMap[ @@create ] ( )
10692 // 23.3.3 Properties of the WeakMap Prototype Object
10693
10694 // 23.3.3.1 WeakMap.prototype.constructor
10695
10696 // 23.3.3.2 WeakMap.prototype.delete ( key )
10697 define(
10698 WeakMap.prototype, 'delete',
10699 function delete_(key) {
10700 var M = strict(this);
10701 if (Type(M) !== 'object') throw TypeError();
10702 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10703 if (Type(key) !== 'object') throw TypeError('Expected object');
10704 return M['[[WeakMapData]]'].remove(key);
10705 });
10706
10707 // 23.3.3.3 WeakMap.prototype.get ( key )
10708 define(
10709 WeakMap.prototype, 'get',
10710 function get(key, defaultValue) {
10711 var M = strict(this);
10712 if (Type(M) !== 'object') throw TypeError();
10713 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10714 if (Type(key) !== 'object') throw TypeError('Expected object');
10715 return M['[[WeakMapData]]'].get(key, defaultValue);
10716 });
10717
10718 // 23.3.3.4 WeakMap.prototype.has ( key )
10719 define(
10720 WeakMap.prototype, 'has',
10721 function has(key) {
10722 var M = strict(this);
10723 if (Type(M) !== 'object') throw TypeError();
10724 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10725 if (Type(key) !== 'object') throw TypeError('Expected object');
10726 return M['[[WeakMapData]]'].has(key);
10727 });
10728
10729 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10730 define(
10731 WeakMap.prototype, 'set',
10732 function set(key, value) {
10733 var M = strict(this);
10734 if (Type(M) !== 'object') throw TypeError();
10735 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10736 if (Type(key) !== 'object') throw TypeError('Expected object');
10737 M['[[WeakMapData]]'].set(key, value);
10738 return M;
10739 });
10740
10741 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10742 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10743
10744 // 23.3.4 Properties of WeakMap Instances
10745
10746 // Polyfills for incomplete native implementations:
10747 (function() {
10748 var wm = new global.WeakMap();
10749 var orig = global.WeakMap.prototype.set;
10750 define(global.WeakMap.prototype, 'set', function set() {
10751 orig.apply(this, arguments);
10752 return this;
10753 }, wm.set({}, 0) !== wm);
10754 }());
10755 }());
10756
10757 // ---------------------------------------
10758 // 23.4 WeakSet Objects
10759 // ---------------------------------------
10760
10761 (function() {
10762 // 23.4.1 The WeakSet Constructor
10763 // 23.4.1.1 WeakSet ( [ iterable ] )
10764 /** @constructor */
10765 function WeakSet(/*iterable*/) {
10766 var set = strict(this);
10767 var iterable = arguments[0];
10768
10769 if (Type(set) !== 'object') throw TypeError();
10770 if ('[[WeakSetData]]' in set) throw TypeError();
10771
10772 if (iterable !== undefined) {
10773 var adder = set['add'];
10774 if (!IsCallable(adder)) throw TypeError();
10775 var iter = GetIterator(ToObject(iterable));
10776 }
10777 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10778 if (iter === undefined) return set;
10779 while (true) {
10780 var next = IteratorStep(iter);
10781 if (next === false)
10782 return set;
10783 var nextValue = IteratorValue(next);
10784 adder.call(set, nextValue);
10785 }
10786
10787 return set;
10788 }
10789
10790 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10791 global.WeakSet = WeakSet;
10792
10793 // 23.4.2 Properties of the WeakSet Constructor
10794 // 23.4.2.1 WeakSet.prototype
10795 var $WeakSetPrototype$ = {};
10796 WeakSet.prototype = $WeakSetPrototype$;
10797
10798 // 23.4.3 Properties of the WeakSet Prototype Object
10799 // 23.4.3.1 WeakSet.prototype.add (value )
10800 define(
10801 WeakSet.prototype, 'add',
10802 function add(value) {
10803 var S = strict(this);
10804 if (Type(S) !== 'object') throw TypeError();
10805 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10806 if (Type(value) !== 'object') throw TypeError('Expected object');
10807 S['[[WeakSetData]]'].set(value, true);
10808 return S;
10809 });
10810
10811 // 23.4.3.2 WeakSet.prototype.constructor
10812 // 23.4.3.3 WeakSet.prototype.delete ( value )
10813 define(
10814 WeakSet.prototype, 'delete',
10815 function delete_(value) {
10816 var S = strict(this);
10817 if (Type(S) !== 'object') throw TypeError();
10818 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10819 if (Type(value) !== 'object') throw TypeError('Expected object');
10820 return S['[[WeakSetData]]'].remove(value);
10821 });
10822
10823 // 23.4.3.4 WeakSet.prototype.has ( value )
10824 define(
10825 WeakSet.prototype, 'has',
10826 function has(key) {
10827 var S = strict(this);
10828 if (Type(S) !== 'object') throw TypeError();
10829 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10830 if (Type(key) !== 'object') throw TypeError('Expected object');
10831 return S['[[WeakSetData]]'].has(key);
10832 });
10833
10834 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10835 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10836
10837 // 23.4.4 Properties of WeakSet Instances
10838
10839 // Polyfills for incomplete native implementations:
10840 (function() {
10841 var ws = new global.WeakSet();
10842 var orig = global.WeakSet.prototype.add;
10843 define(global.WeakSet.prototype, 'add', function add() {
10844 orig.apply(this, arguments);
10845 return this;
10846 }, ws.add({}) !== ws);
10847 }());
10848 }());
10849
10850 // ---------------------------------------
10851 // 24 Structured Data
10852 // ---------------------------------------
10853
10854 // ---------------------------------------
10855 // 24.1 ArrayBuffer Objects
10856 // ---------------------------------------
10857
10858 // See typedarray.js for TypedArray polyfill
10859
10860 (function() {
10861 if (!('ArrayBuffer' in global))
10862 return;
10863
10864 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10865 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10866 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10867 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10868 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10869 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10870 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10871 // 24.1.2 The ArrayBuffer Constructor
10872 // 24.1.2.1 ArrayBuffer( length )
10873 // 24.1.3 Properties of the ArrayBuffer Constructor
10874
10875 // 24.1.3.1 ArrayBuffer.isView ( arg )
10876 define(
10877 ArrayBuffer, 'isView',
10878 function isView(arg) {
10879 if (Type(arg) !== 'object') return false;
10880 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10881 return false;
10882 });
10883
10884 // 24.1.3.2 ArrayBuffer.prototype
10885 // 24.1.3.3 get ArrayBuffer [ @@species ]
10886 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10887 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10888 // 24.1.4.2 ArrayBuffer.prototype.constructor
10889 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10890
10891 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10892 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10893
10894 // 24.1.5 Properties of the ArrayBuffer Instances
10895 }());
10896
10897 // ---------------------------------------
10898 // 24.2 DataView Objects
10899 // ---------------------------------------
10900
10901 // See typedarray.js for TypedArray polyfill
10902
10903 (function() {
10904 if (!('DataView' in global))
10905 return;
10906
10907 // 24.2.1 Abstract Operations For DataView Objects
10908 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10909 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10910 // 24.2.2 The DataView Constructor
10911 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10912 // 24.2.3 Properties of the DataView Constructor
10913 // 24.2.3.1 DataView.prototype
10914 // 24.2.4 Properties of the DataView Prototype Object
10915 // 24.2.4.1 get DataView.prototype.buffer
10916 // 24.2.4.2 get DataView.prototype.byteLength
10917 // 24.2.4.3 get DataView.prototype.byteOffset
10918 // 24.2.4.4 DataView.prototype.constructor
10919 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10920 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10921 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10922 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10923 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10924 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10925 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10926 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10927 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10928 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10929 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10930 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10931 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10932 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10933 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10934 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10935
10936 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10937 define(DataView.prototype, $$toStringTag, 'DataView');
10938
10939 // 24.2.5 Properties of DataView Instances
10940 }());
10941
10942 // ---------------------------------------
10943 // 24.3 The JSON Object
10944 // ---------------------------------------
10945
10946 // 24.3.1 JSON.parse ( text [ , reviver ] )
10947 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10948 // 24.3.3 JSON [ @@toStringTag ]
10949 define(JSON, $$toStringTag, 'JSON');
10950
10951 // ---------------------------------------
10952 // 25.1 Iteration
10953 // ---------------------------------------
10954
10955 // 25.1.1 Common Iteration Interfaces
10956 // 25.1.1.1 The Iterable Interface
10957 // 25.1.1.2 The Iterator Interface
10958 // 25.1.1.3 The IteratorResult Interface
10959
10960 // 25.1.2 The %IteratorPrototype% Object
10961 // Defined earlier, so other prototypes can reference it.
10962 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10963 define($IteratorPrototype$, $$iterator, function() {
10964 return this;
10965 });
10966
10967
10968 // ---------------------------------------
10969 // 25.4 Promise Objects
10970 // ---------------------------------------
10971
10972 (function() {
10973 // 25.4 Promise Objects
10974
10975 // 25.4.1 Promise Abstract Operations
10976
10977 // 25.4.1.1 PromiseCapability Records
10978 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10979
10980 function IfAbruptRejectPromise(value, capability) {
10981 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10982 return capability['[[Promise]]'];
10983 }
10984
10985 // 25.4.1.2 PromiseReaction Records
10986
10987 // 25.4.1.3 CreateResolvingFunctions ( promise )
10988
10989 function CreateResolvingFunctions(promise) {
10990 var alreadyResolved = {'[[value]]': false};
10991 var resolve = PromiseResolveFunction();
10992 set_internal(resolve, '[[Promise]]', promise);
10993 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10994 var reject = PromiseRejectFunction();
10995 set_internal(reject, '[[Promise]]', promise);
10996 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10997 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10998 }
10999
11000 // 25.4.1.3.1 Promise Reject Functions
11001
11002 function PromiseRejectFunction() {
11003 var F = function(reason) {
11004 console.assert(Type(F['[[Promise]]']) === 'object');
11005 var promise = F['[[Promise]]'];
11006 var alreadyResolved = F['[[AlreadyResolved]]'];
11007 if (alreadyResolved['[[value]]']) return undefined;
11008 set_internal(alreadyResolved, '[[value]]', true);
11009 return RejectPromise(promise, reason);
11010 };
11011 return F;
11012 }
11013
11014 // 25.4.1.3.2 Promise Resolve Functions
11015
11016 function PromiseResolveFunction() {
11017 var F = function(resolution) {
11018 console.assert(Type(F['[[Promise]]']) === 'object');
11019 var promise = F['[[Promise]]'];
11020 var alreadyResolved = F['[[AlreadyResolved]]'];
11021 if (alreadyResolved['[[value]]']) return undefined;
11022 set_internal(alreadyResolved, '[[value]]', true);
11023
11024 if (SameValue(resolution, promise)) {
11025 var selfResolutionError = TypeError();
11026 return RejectPromise(promise, selfResolutionError);
11027 }
11028 if (Type(resolution) !== 'object')
11029 return FulfillPromise(promise, resolution);
11030 try {
11031 var then = resolution['then'];
11032 } catch(then) {
11033 return RejectPromise(promise, then);
11034 }
11035 if (!IsCallable(then))
11036 return FulfillPromise(promise, resolution);
11037 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11038 return undefined;
11039 };
11040 return F;
11041 }
11042
11043 // 25.4.1.4 FulfillPromise ( promise, value )
11044
11045 function FulfillPromise(promise, value) {
11046 console.assert(promise['[[PromiseState]]'] === 'pending');
11047 var reactions = promise['[[PromiseFulfillReactions]]'];
11048 set_internal(promise, '[[PromiseResult]]', value);
11049 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11050 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11051 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11052 return TriggerPromiseReactions(reactions, value);
11053 }
11054
11055 // 25.4.1.5 NewPromiseCapability ( C )
11056
11057 function NewPromiseCapability(c) {
11058 // To keep Promise hermetic, this doesn't look much like the spec.
11059 return CreatePromiseCapabilityRecord(undefined, c);
11060 }
11061
11062 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11063
11064 function CreatePromiseCapabilityRecord(promise, constructor) {
11065 // To keep Promise hermetic, this doesn't look much like the spec.
11066 console.assert(IsConstructor(constructor));
11067 var promiseCapability = {};
11068 set_internal(promiseCapability, '[[Promise]]', promise);
11069 set_internal(promiseCapability, '[[Resolve]]', undefined);
11070 set_internal(promiseCapability, '[[Reject]]', undefined);
11071 var executor = GetCapabilitiesExecutor();
11072 set_internal(executor, '[[Capability]]', promiseCapability);
11073
11074 // NOTE: Differs from spec; object is constructed here
11075 var constructorResult = promise = new constructor(executor);
11076 set_internal(promiseCapability, '[[Promise]]', promise);
11077
11078 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11079 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11080 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11081 return promiseCapability;
11082 }
11083
11084 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11085
11086 function GetCapabilitiesExecutor() {
11087 var F = function(resolve, reject) {
11088 console.assert(F['[[Capability]]']);
11089 var promiseCapability = F['[[Capability]]'];
11090 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11091 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11092 set_internal(promiseCapability, '[[Resolve]]', resolve);
11093 set_internal(promiseCapability, '[[Reject]]', reject);
11094 return undefined;
11095 };
11096 return F;
11097 }
11098
11099 // 25.4.1.6 IsPromise ( x )
11100
11101 function IsPromise(x) {
11102 if (Type(x) !== 'object') return false;
11103 if (!('[[PromiseState]]' in x)) return false;
11104 if (x['[[PromiseState]]'] === undefined) return false;
11105 return true;
11106 }
11107
11108 // 25.4.1.7 RejectPromise ( promise, reason )
11109
11110 function RejectPromise(promise, reason) {
11111 console.assert(promise['[[PromiseState]]'] === 'pending');
11112 var reactions = promise['[[PromiseRejectReactions]]'];
11113 set_internal(promise, '[[PromiseResult]]', reason);
11114 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11115 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11116 set_internal(promise, '[[PromiseState]]', 'rejected');
11117 return TriggerPromiseReactions(reactions, reason);
11118 }
11119
11120 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11121
11122 function TriggerPromiseReactions(reactions, argument) {
11123 for (var i = 0, len = reactions.length; i < len; ++i)
11124 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11125 return undefined;
11126 }
11127
11128 // 25.4.2 Promise Jobs
11129
11130 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11131
11132 function PromiseReactionJob(reaction, argument) {
11133 var promiseCapability = reaction['[[Capabilities]]'];
11134 var handler = reaction['[[Handler]]'];
11135 var handlerResult, status;
11136 try {
11137 if (handler === 'Identity') handlerResult = argument;
11138 else if (handler === 'Thrower') throw argument;
11139 else handlerResult = handler.call(undefined, argument);
11140 } catch (handlerResult) {
11141 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11142 NextJob(status); return;
11143 }
11144 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11145 NextJob(status);
11146 }
11147
11148 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11149
11150 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11151 // SPEC BUG: promise vs. promiseToResolve
11152 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11153 try {
11154 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11155 resolvingFunctions['[[Reject]]']);
11156 } catch (thenCallResult) {
11157 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11158 NextJob(status); return;
11159 }
11160 NextJob(thenCallResult);
11161 }
11162
11163 // 25.4.3 The Promise Constructor
11164
11165 // 25.4.3.1 Promise ( executor )
11166
11167 function Promise(executor) {
11168 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11169 Object.defineProperty(this, '[[PromiseState]]', config);
11170 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11171 Object.defineProperty(this, '[[PromiseResult]]', config);
11172 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11173 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11174
11175 var promise = this;
11176 if (Type(promise) !== 'object') throw new TypeError();
11177 if (!('[[PromiseState]]' in promise)) throw TypeError();
11178 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11179 if (!IsCallable(executor)) throw TypeError();
11180
11181 set_internal(promise, '[[PromiseConstructor]]', Promise);
11182
11183 return InitializePromise(promise, executor);
11184 }
11185
11186 // 25.4.3.1.1 InitializePromise ( promise, executor )
11187
11188 function InitializePromise(promise, executor) {
11189 console.assert('[[PromiseState]]' in promise);
11190 console.assert(IsCallable(executor));
11191 set_internal(promise, '[[PromiseState]]', 'pending');
11192 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11193 set_internal(promise, '[[PromiseRejectReactions]]', []);
11194 var resolvingFunctions = CreateResolvingFunctions(promise);
11195 try {
11196 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11197 resolvingFunctions['[[Reject]]']);
11198 } catch (completion) {
11199 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11200 }
11201 return promise;
11202 }
11203
11204 // 25.4.4 Properties of the Promise Constructor
11205 // 25.4.4.1 Promise.all ( iterable )
11206
11207 define(Promise, 'all', function all(iterable) {
11208 var c = strict(this);
11209 var promiseCapability = NewPromiseCapability(c);
11210 try {
11211 var iterator = GetIterator(iterable);
11212 } catch (value) {
11213 promiseCapability['[[Reject]]'].call(undefined, value);
11214 return promiseCapability['[[Promise]]'];
11215 }
11216 var values = [];
11217 var remainingElementsCount = { value: 1 };
11218 var index = 0;
11219 while (true) {
11220 try {
11221 var next = IteratorStep(iterator);
11222 } catch (value) {
11223 promiseCapability['[[Reject]]'].call(undefined, value);
11224 return promiseCapability['[[Promise]]'];
11225 }
11226 if (!next) {
11227 remainingElementsCount.value -= 1;
11228 if (remainingElementsCount.value === 0) {
11229 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11230
11231
11232 }
11233 return promiseCapability['[[Promise]]'];
11234 }
11235 try {
11236 var nextValue = IteratorValue(next);
11237 } catch (value) {
11238 promiseCapability['[[Reject]]'].call(undefined, value);
11239 return promiseCapability['[[Promise]]'];
11240 }
11241 try {
11242 var nextPromise = c.resolve(nextValue);
11243 } catch (value) {
11244 promiseCapability['[[Reject]]'].call(undefined, value);
11245 return promiseCapability['[[Promise]]'];
11246 }
11247 var resolveElement = PromiseAllResolveElementFunction();
11248 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11249 set_internal(resolveElement, '[[Index]]', index);
11250 set_internal(resolveElement, '[[Values]]', values);
11251 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11252 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11253 remainingElementsCount.value += 1;
11254 try {
11255 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11256 } catch (value) {
11257 promiseCapability['[[Reject]]'].call(undefined, value);
11258 return promiseCapability['[[Promise]]'];
11259 }
11260 index += 1;
11261 }
11262 });
11263
11264 // 25.4.4.1.1 Promise.all Resolve Element Functions
11265
11266 function PromiseAllResolveElementFunction() {
11267 var F = function(x) {
11268 var alreadyCalled = F['[[AlreadyCalled]]'];
11269 if (alreadyCalled.value) return undefined;
11270 alreadyCalled.value = true;
11271 var index = F['[[Index]]'];
11272 var values = F['[[Values]]'];
11273 var promiseCapability = F['[[Capabilities]]'];
11274 var remainingElementsCount = F['[[RemainingElements]]'];
11275 try {
11276 values[index] = x;
11277 } catch (result) {
11278 promiseCapability['[[Reject]]'].call(undefined, result);
11279 return promiseCapability['[[Promise]]'];
11280 }
11281 remainingElementsCount.value -= 1;
11282 if (remainingElementsCount.value === 0)
11283 return promiseCapability['[[Resolve]]'].call(undefined, values);
11284 return undefined;
11285 };
11286 return F;
11287 }
11288
11289 // 25.4.4.2 Promise.prototype
11290
11291 Promise.prototype = {};
11292
11293 // 25.4.4.3 Promise.race ( iterable )
11294
11295 define(Promise, 'race', function race(iterable) {
11296 var c = strict(this);
11297 var promiseCapability = NewPromiseCapability(c);
11298 try {
11299 var iterator = GetIterator(iterable);
11300 } catch (value) {
11301 promiseCapability['[[Reject]]'].call(undefined, value);
11302 return promiseCapability['[[Promise]]'];
11303 }
11304 while (true) {
11305 try {
11306 var next = IteratorStep(iterator);
11307 } catch (value) {
11308 promiseCapability['[[Reject]]'].call(undefined, value);
11309 return promiseCapability['[[Promise]]'];
11310 }
11311 if (!next) return promiseCapability['[[Promise]]'];
11312 try {
11313 var nextValue = IteratorValue(next);
11314 } catch (value) {
11315 promiseCapability['[[Reject]]'].call(undefined, value);
11316 return promiseCapability['[[Promise]]'];
11317 }
11318 try {
11319 var nextPromise = c.resolve(nextValue);
11320 } catch (value) {
11321 promiseCapability['[[Reject]]'].call(undefined, value);
11322 return promiseCapability['[[Promise]]'];
11323 }
11324 try {
11325 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11326 } catch (value) {
11327 promiseCapability['[[Reject]]'].call(undefined, value);
11328 return promiseCapability['[[Promise]]'];
11329 }
11330 }
11331 });
11332
11333 // 25.4.4.4 Promise.reject ( r )
11334
11335 define(Promise, 'reject', function reject(r) {
11336 var c = strict(this);
11337 var promiseCapability = NewPromiseCapability(c);
11338 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11339 return promiseCapability['[[Promise]]'];
11340 });
11341
11342 // 25.4.4.5 Promise.resolve ( x )
11343
11344 define(Promise, 'resolve', function resolve(x) {
11345 var c = strict(this);
11346 if (IsPromise(x)) {
11347 var constructor = x['[[PromiseConstructor]]'];
11348 if (SameValue(constructor, c)) return x;
11349 }
11350 var promiseCapability = NewPromiseCapability(c);
11351 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11352 return promiseCapability['[[Promise]]'];
11353 });
11354
11355 // 25.4.4.6 Promise [ @@create ] ( )
11356 // 25.4.4.6.1 AllocatePromise ( constructor )
11357 // 25.4.5 Properties of the Promise Prototype Object
11358 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11359
11360 define(Promise.prototype, 'catch', function catch_(onRejected) {
11361 var promise = this;
11362 return promise.then(undefined, onRejected);
11363 });
11364
11365 // 25.4.5.2 Promise.prototype.constructor
11366
11367 Promise.prototype.constructor = Promise;
11368
11369 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11370
11371 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11372 var promise = this;
11373 if (!IsPromise(promise)) throw TypeError();
11374 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11375 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11376 var c = promise.constructor;
11377 var promiseCapability = NewPromiseCapability(c);
11378 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11379 '[[Handler]]': onFulfilled };
11380 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11381 '[[Handler]]': onRejected };
11382 if (promise['[[PromiseState]]'] === 'pending') {
11383 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11384 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11385 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11386 var value = promise['[[PromiseResult]]'];
11387 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11388 } else if (promise['[[PromiseState]]'] === 'rejected') {
11389 var reason = promise['[[PromiseResult]]'];
11390 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11391 }
11392 return promiseCapability['[[Promise]]'];
11393 });
11394
11395 // 25.4.6 Properties of Promise Instances
11396
11397 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11398 global.Promise = Promise;
11399
11400 // Patch early Promise.cast vs. Promise.resolve implementations
11401 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11402 }());
11403
11404 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11405 define(Promise.prototype, $$toStringTag, 'Promise');
11406
11407 // ---------------------------------------
11408 // 26 Reflection
11409 // ---------------------------------------
11410
11411 (function() {
11412 // 26.1 The Reflect Object
11413 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11414 global.Reflect = {};
11415
11416 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11417 define(
11418 Reflect, 'apply',
11419 function apply(target, thisArgument, argumentsList) {
11420 if (!IsCallable(target)) throw TypeError();
11421 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11422 });
11423
11424 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11425 define(
11426 Reflect, 'construct',
11427 function construct(target, argumentsList) {
11428 return __cons(target, argumentsList);
11429 });
11430
11431 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11432 define(
11433 Reflect, 'defineProperty',
11434 function defineProperty(target, propertyKey, attributes) {
11435 try {
11436 Object.defineProperty(target, propertyKey, attributes);
11437 return true;
11438 } catch (_) {
11439 return false;
11440 }
11441 });
11442
11443 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11444 define(
11445 Reflect, 'deleteProperty',
11446 function deleteProperty(target,name) {
11447 try {
11448 delete target[name];
11449 return !HasOwnProperty(target, name);
11450 } catch (_) {
11451 return false;
11452 }
11453 });
11454
11455 // 26.1.5 Reflect.enumerate ( target )
11456 define(
11457 Reflect, 'enumerate',
11458 function enumerate(target) {
11459 target = ToObject(target);
11460 var iterator = Enumerate(target);
11461 return iterator;
11462 });
11463
11464 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11465 define(
11466 Reflect, 'get',
11467 function get(target, name, receiver) {
11468 target = ToObject(target);
11469 name = String(name);
11470 receiver = (receiver === undefined) ? target : ToObject(receiver);
11471 var desc = getPropertyDescriptor(target, name);
11472 if (desc && 'get' in desc)
11473 return Function.prototype.call.call(desc['get'], receiver);
11474 return target[name];
11475 });
11476
11477 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11478 define(
11479 Reflect, 'getOwnPropertyDescriptor',
11480 Object.getOwnPropertyDescriptor);
11481
11482 // 26.1.8 Reflect.getPrototypeOf ( target )
11483 define(
11484 Reflect, 'getPrototypeOf',
11485 Object.getPrototypeOf);
11486
11487 // 26.1.9 Reflect.has ( target, propertyKey )
11488 define(
11489 Reflect, 'has',
11490 function has(target,name) {
11491 return String(name) in ToObject(target);
11492 });
11493
11494 // 26.1.10 Reflect.isExtensible (target)
11495 define(
11496 Reflect, 'isExtensible',
11497 Object.isExtensible);
11498
11499 // 26.1.11 Reflect.ownKeys ( target )
11500 define(
11501 Reflect, 'ownKeys',
11502 function ownKeys(target) {
11503 var obj = ToObject(target);
11504 return Object.getOwnPropertyNames(obj);
11505 });
11506
11507 // 26.1.12 Reflect.preventExtensions ( target )
11508 define(
11509 Reflect, 'preventExtensions',
11510 function preventExtensions(target) {
11511 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11512 });
11513
11514 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11515 define(
11516 Reflect, 'set',
11517 function set(target, name, value, receiver) {
11518 target = ToObject(target);
11519 name = String(name);
11520 receiver = (receiver === undefined) ? target : ToObject(receiver);
11521 var desc = getPropertyDescriptor(target, name);
11522 try {
11523 if (desc && 'set' in desc)
11524 Function.prototype.call.call(desc['set'], receiver, value);
11525 else
11526 target[name] = value;
11527 return true;
11528 } catch (_) {
11529 return false;
11530 }
11531 });
11532
11533 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11534 define(
11535 Reflect, 'setPrototypeOf',
11536 function setPrototypeOf(target, proto) {
11537 try {
11538 target.__proto__ = proto;
11539 return Reflect.getPrototypeOf(target) === proto;
11540 } catch(_) {
11541 return false;
11542 }
11543 });
11544
11545 }());
11546
11547 // ---------------------------------------
11548 // 26.2 Proxy Objects
11549 // ---------------------------------------
11550
11551 // Not polyfillable.
11552
11553 }(self));
11554
11555 // This helper is defined outside the main scope so that the use of
11556 // 'eval' does not taint the scope for minifiers.
11557 function __cons(t, a) {
11558 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11559 }
11560 </script>
11561 <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.foo = 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){
11562 'use strict'
11563
11564 exports.byteLength = byteLength
11565 exports.toByteArray = toByteArray
11566 exports.fromByteArray = fromByteArray
11567
11568 var lookup = []
11569 var revLookup = []
11570 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11571
11572 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11573 for (var i = 0, len = code.length; i < len; ++i) {
11574 lookup[i] = code[i]
11575 revLookup[code.charCodeAt(i)] = i
11576 }
11577
11578 revLookup['-'.charCodeAt(0)] = 62
11579 revLookup['_'.charCodeAt(0)] = 63
11580
11581 function placeHoldersCount (b64) {
11582 var len = b64.length
11583 if (len % 4 > 0) {
11584 throw new Error('Invalid string. Length must be a multiple of 4')
11585 }
11586
11587 // the number of equal signs (place holders)
11588 // if there are two placeholders, than the two characters before it
11589 // represent one byte
11590 // if there is only one, then the three characters before it represent 2 bytes
11591 // this is just a cheap hack to not do indexOf twice
11592 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11593 }
11594
11595 function byteLength (b64) {
11596 // base64 is 4/3 + up to two characters of the original data
11597 return b64.length * 3 / 4 - placeHoldersCount(b64)
11598 }
11599
11600 function toByteArray (b64) {
11601 var i, j, l, tmp, placeHolders, arr
11602 var len = b64.length
11603 placeHolders = placeHoldersCount(b64)
11604
11605 arr = new Arr(len * 3 / 4 - placeHolders)
11606
11607 // if there are placeholders, only get up to the last complete 4 chars
11608 l = placeHolders > 0 ? len - 4 : len
11609
11610 var L = 0
11611
11612 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11613 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11614 arr[L++] = (tmp >> 16) & 0xFF
11615 arr[L++] = (tmp >> 8) & 0xFF
11616 arr[L++] = tmp & 0xFF
11617 }
11618
11619 if (placeHolders === 2) {
11620 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11621 arr[L++] = tmp & 0xFF
11622 } else if (placeHolders === 1) {
11623 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11624 arr[L++] = (tmp >> 8) & 0xFF
11625 arr[L++] = tmp & 0xFF
11626 }
11627
11628 return arr
11629 }
11630
11631 function tripletToBase64 (num) {
11632 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11633 }
11634
11635 function encodeChunk (uint8, start, end) {
11636 var tmp
11637 var output = []
11638 for (var i = start; i < end; i += 3) {
11639 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11640 output.push(tripletToBase64(tmp))
11641 }
11642 return output.join('')
11643 }
11644
11645 function fromByteArray (uint8) {
11646 var tmp
11647 var len = uint8.length
11648 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11649 var output = ''
11650 var parts = []
11651 var maxChunkLength = 16383 // must be multiple of 3
11652
11653 // go through the array every three bytes, we'll deal with trailing stuff later
11654 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11655 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11656 }
11657
11658 // pad the end with zeros, but make sure to not forget the extra bytes
11659 if (extraBytes === 1) {
11660 tmp = uint8[len - 1]
11661 output += lookup[tmp >> 2]
11662 output += lookup[(tmp << 4) & 0x3F]
11663 output += '=='
11664 } else if (extraBytes === 2) {
11665 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11666 output += lookup[tmp >> 10]
11667 output += lookup[(tmp >> 4) & 0x3F]
11668 output += lookup[(tmp << 2) & 0x3F]
11669 output += '='
11670 }
11671
11672 parts.push(output)
11673
11674 return parts.join('')
11675 }
11676
11677 },{}],2:[function(require,module,exports){
11678 /*!
11679 * The buffer module from node.js, for the browser.
11680 *
11681 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11682 * @license MIT
11683 */
11684 /* eslint-disable no-proto */
11685
11686 'use strict'
11687
11688 var base64 = require('base64-js')
11689 var ieee754 = require('ieee754')
11690
11691 exports.Buffer = Buffer
11692 exports.SlowBuffer = SlowBuffer
11693 exports.INSPECT_MAX_BYTES = 50
11694
11695 var K_MAX_LENGTH = 0x7fffffff
11696 exports.kMaxLength = K_MAX_LENGTH
11697
11698 /**
11699 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11700 * === true Use Uint8Array implementation (fastest)
11701 * === false Print warning and recommend using `buffer` v4.x which has an Object
11702 * implementation (most compatible, even IE6)
11703 *
11704 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11705 * Opera 11.6+, iOS 4.2+.
11706 *
11707 * We report that the browser does not support typed arrays if the are not subclassable
11708 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11709 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11710 * for __proto__ and has a buggy typed array implementation.
11711 */
11712 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11713
11714 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11715 typeof console.error === 'function') {
11716 console.error(
11717 'This browser lacks typed array (Uint8Array) support which is required by ' +
11718 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11719 )
11720 }
11721
11722 function typedArraySupport () {
11723 // Can typed array instances can be augmented?
11724 try {
11725 var arr = new Uint8Array(1)
11726 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11727 return arr.foo() === 42
11728 } catch (e) {
11729 return false
11730 }
11731 }
11732
11733 function createBuffer (length) {
11734 if (length > K_MAX_LENGTH) {
11735 throw new RangeError('Invalid typed array length')
11736 }
11737 // Return an augmented `Uint8Array` instance
11738 var buf = new Uint8Array(length)
11739 buf.__proto__ = Buffer.prototype
11740 return buf
11741 }
11742
11743 /**
11744 * The Buffer constructor returns instances of `Uint8Array` that have their
11745 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11746 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11747 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11748 * returns a single octet.
11749 *
11750 * The `Uint8Array` prototype remains unmodified.
11751 */
11752
11753 function Buffer (arg, encodingOrOffset, length) {
11754 // Common case.
11755 if (typeof arg === 'number') {
11756 if (typeof encodingOrOffset === 'string') {
11757 throw new Error(
11758 'If encoding is specified then the first argument must be a string'
11759 )
11760 }
11761 return allocUnsafe(arg)
11762 }
11763 return from(arg, encodingOrOffset, length)
11764 }
11765
11766 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11767 if (typeof Symbol !== 'undefined' && Symbol.species &&
11768 Buffer[Symbol.species] === Buffer) {
11769 Object.defineProperty(Buffer, Symbol.species, {
11770 value: null,
11771 configurable: true,
11772 enumerable: false,
11773 writable: false
11774 })
11775 }
11776
11777 Buffer.poolSize = 8192 // not used by this implementation
11778
11779 function from (value, encodingOrOffset, length) {
11780 if (typeof value === 'number') {
11781 throw new TypeError('"value" argument must not be a number')
11782 }
11783
11784 if (value instanceof ArrayBuffer) {
11785 return fromArrayBuffer(value, encodingOrOffset, length)
11786 }
11787
11788 if (typeof value === 'string') {
11789 return fromString(value, encodingOrOffset)
11790 }
11791
11792 return fromObject(value)
11793 }
11794
11795 /**
11796 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11797 * if value is a number.
11798 * Buffer.from(str[, encoding])
11799 * Buffer.from(array)
11800 * Buffer.from(buffer)
11801 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11802 **/
11803 Buffer.from = function (value, encodingOrOffset, length) {
11804 return from(value, encodingOrOffset, length)
11805 }
11806
11807 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11808 // https://github.com/feross/buffer/pull/148
11809 Buffer.prototype.__proto__ = Uint8Array.prototype
11810 Buffer.__proto__ = Uint8Array
11811
11812 function assertSize (size) {
11813 if (typeof size !== 'number') {
11814 throw new TypeError('"size" argument must be a number')
11815 } else if (size < 0) {
11816 throw new RangeError('"size" argument must not be negative')
11817 }
11818 }
11819
11820 function alloc (size, fill, encoding) {
11821 assertSize(size)
11822 if (size <= 0) {
11823 return createBuffer(size)
11824 }
11825 if (fill !== undefined) {
11826 // Only pay attention to encoding if it's a string. This
11827 // prevents accidentally sending in a number that would
11828 // be interpretted as a start offset.
11829 return typeof encoding === 'string'
11830 ? createBuffer(size).fill(fill, encoding)
11831 : createBuffer(size).fill(fill)
11832 }
11833 return createBuffer(size)
11834 }
11835
11836 /**
11837 * Creates a new filled Buffer instance.
11838 * alloc(size[, fill[, encoding]])
11839 **/
11840 Buffer.alloc = function (size, fill, encoding) {
11841 return alloc(size, fill, encoding)
11842 }
11843
11844 function allocUnsafe (size) {
11845 assertSize(size)
11846 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11847 }
11848
11849 /**
11850 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11851 * */
11852 Buffer.allocUnsafe = function (size) {
11853 return allocUnsafe(size)
11854 }
11855 /**
11856 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11857 */
11858 Buffer.allocUnsafeSlow = function (size) {
11859 return allocUnsafe(size)
11860 }
11861
11862 function fromString (string, encoding) {
11863 if (typeof encoding !== 'string' || encoding === '') {
11864 encoding = 'utf8'
11865 }
11866
11867 if (!Buffer.isEncoding(encoding)) {
11868 throw new TypeError('"encoding" must be a valid string encoding')
11869 }
11870
11871 var length = byteLength(string, encoding) | 0
11872 var buf = createBuffer(length)
11873
11874 var actual = buf.write(string, encoding)
11875
11876 if (actual !== length) {
11877 // Writing a hex string, for example, that contains invalid characters will
11878 // cause everything after the first invalid character to be ignored. (e.g.
11879 // 'abxxcd' will be treated as 'ab')
11880 buf = buf.slice(0, actual)
11881 }
11882
11883 return buf
11884 }
11885
11886 function fromArrayLike (array) {
11887 var length = array.length < 0 ? 0 : checked(array.length) | 0
11888 var buf = createBuffer(length)
11889 for (var i = 0; i < length; i += 1) {
11890 buf[i] = array[i] & 255
11891 }
11892 return buf
11893 }
11894
11895 function fromArrayBuffer (array, byteOffset, length) {
11896 if (byteOffset < 0 || array.byteLength < byteOffset) {
11897 throw new RangeError('\'offset\' is out of bounds')
11898 }
11899
11900 if (array.byteLength < byteOffset + (length || 0)) {
11901 throw new RangeError('\'length\' is out of bounds')
11902 }
11903
11904 var buf
11905 if (byteOffset === undefined && length === undefined) {
11906 buf = new Uint8Array(array)
11907 } else if (length === undefined) {
11908 buf = new Uint8Array(array, byteOffset)
11909 } else {
11910 buf = new Uint8Array(array, byteOffset, length)
11911 }
11912
11913 // Return an augmented `Uint8Array` instance
11914 buf.__proto__ = Buffer.prototype
11915 return buf
11916 }
11917
11918 function fromObject (obj) {
11919 if (Buffer.isBuffer(obj)) {
11920 var len = checked(obj.length) | 0
11921 var buf = createBuffer(len)
11922
11923 if (buf.length === 0) {
11924 return buf
11925 }
11926
11927 obj.copy(buf, 0, 0, len)
11928 return buf
11929 }
11930
11931 if (obj) {
11932 if (isArrayBufferView(obj) || 'length' in obj) {
11933 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11934 return createBuffer(0)
11935 }
11936 return fromArrayLike(obj)
11937 }
11938
11939 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11940 return fromArrayLike(obj.data)
11941 }
11942 }
11943
11944 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11945 }
11946
11947 function checked (length) {
11948 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11949 // length is NaN (which is otherwise coerced to zero.)
11950 if (length >= K_MAX_LENGTH) {
11951 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11952 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11953 }
11954 return length | 0
11955 }
11956
11957 function SlowBuffer (length) {
11958 if (+length != length) { // eslint-disable-line eqeqeq
11959 length = 0
11960 }
11961 return Buffer.alloc(+length)
11962 }
11963
11964 Buffer.isBuffer = function isBuffer (b) {
11965 return b != null && b._isBuffer === true
11966 }
11967
11968 Buffer.compare = function compare (a, b) {
11969 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11970 throw new TypeError('Arguments must be Buffers')
11971 }
11972
11973 if (a === b) return 0
11974
11975 var x = a.length
11976 var y = b.length
11977
11978 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11979 if (a[i] !== b[i]) {
11980 x = a[i]
11981 y = b[i]
11982 break
11983 }
11984 }
11985
11986 if (x < y) return -1
11987 if (y < x) return 1
11988 return 0
11989 }
11990
11991 Buffer.isEncoding = function isEncoding (encoding) {
11992 switch (String(encoding).toLowerCase()) {
11993 case 'hex':
11994 case 'utf8':
11995 case 'utf-8':
11996 case 'ascii':
11997 case 'latin1':
11998 case 'binary':
11999 case 'base64':
12000 case 'ucs2':
12001 case 'ucs-2':
12002 case 'utf16le':
12003 case 'utf-16le':
12004 return true
12005 default:
12006 return false
12007 }
12008 }
12009
12010 Buffer.concat = function concat (list, length) {
12011 if (!Array.isArray(list)) {
12012 throw new TypeError('"list" argument must be an Array of Buffers')
12013 }
12014
12015 if (list.length === 0) {
12016 return Buffer.alloc(0)
12017 }
12018
12019 var i
12020 if (length === undefined) {
12021 length = 0
12022 for (i = 0; i < list.length; ++i) {
12023 length += list[i].length
12024 }
12025 }
12026
12027 var buffer = Buffer.allocUnsafe(length)
12028 var pos = 0
12029 for (i = 0; i < list.length; ++i) {
12030 var buf = list[i]
12031 if (!Buffer.isBuffer(buf)) {
12032 throw new TypeError('"list" argument must be an Array of Buffers')
12033 }
12034 buf.copy(buffer, pos)
12035 pos += buf.length
12036 }
12037 return buffer
12038 }
12039
12040 function byteLength (string, encoding) {
12041 if (Buffer.isBuffer(string)) {
12042 return string.length
12043 }
12044 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12045 return string.byteLength
12046 }
12047 if (typeof string !== 'string') {
12048 string = '' + string
12049 }
12050
12051 var len = string.length
12052 if (len === 0) return 0
12053
12054 // Use a for loop to avoid recursion
12055 var loweredCase = false
12056 for (;;) {
12057 switch (encoding) {
12058 case 'ascii':
12059 case 'latin1':
12060 case 'binary':
12061 return len
12062 case 'utf8':
12063 case 'utf-8':
12064 case undefined:
12065 return utf8ToBytes(string).length
12066 case 'ucs2':
12067 case 'ucs-2':
12068 case 'utf16le':
12069 case 'utf-16le':
12070 return len * 2
12071 case 'hex':
12072 return len >>> 1
12073 case 'base64':
12074 return base64ToBytes(string).length
12075 default:
12076 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12077 encoding = ('' + encoding).toLowerCase()
12078 loweredCase = true
12079 }
12080 }
12081 }
12082 Buffer.byteLength = byteLength
12083
12084 function slowToString (encoding, start, end) {
12085 var loweredCase = false
12086
12087 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12088 // property of a typed array.
12089
12090 // This behaves neither like String nor Uint8Array in that we set start/end
12091 // to their upper/lower bounds if the value passed is out of range.
12092 // undefined is handled specially as per ECMA-262 6th Edition,
12093 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12094 if (start === undefined || start < 0) {
12095 start = 0
12096 }
12097 // Return early if start > this.length. Done here to prevent potential uint32
12098 // coercion fail below.
12099 if (start > this.length) {
12100 return ''
12101 }
12102
12103 if (end === undefined || end > this.length) {
12104 end = this.length
12105 }
12106
12107 if (end <= 0) {
12108 return ''
12109 }
12110
12111 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12112 end >>>= 0
12113 start >>>= 0
12114
12115 if (end <= start) {
12116 return ''
12117 }
12118
12119 if (!encoding) encoding = 'utf8'
12120
12121 while (true) {
12122 switch (encoding) {
12123 case 'hex':
12124 return hexSlice(this, start, end)
12125
12126 case 'utf8':
12127 case 'utf-8':
12128 return utf8Slice(this, start, end)
12129
12130 case 'ascii':
12131 return asciiSlice(this, start, end)
12132
12133 case 'latin1':
12134 case 'binary':
12135 return latin1Slice(this, start, end)
12136
12137 case 'base64':
12138 return base64Slice(this, start, end)
12139
12140 case 'ucs2':
12141 case 'ucs-2':
12142 case 'utf16le':
12143 case 'utf-16le':
12144 return utf16leSlice(this, start, end)
12145
12146 default:
12147 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12148 encoding = (encoding + '').toLowerCase()
12149 loweredCase = true
12150 }
12151 }
12152 }
12153
12154 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12155 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12156 // reliably in a browserify context because there could be multiple different
12157 // copies of the 'buffer' package in use. This method works even for Buffer
12158 // instances that were created from another copy of the `buffer` package.
12159 // See: https://github.com/feross/buffer/issues/154
12160 Buffer.prototype._isBuffer = true
12161
12162 function swap (b, n, m) {
12163 var i = b[n]
12164 b[n] = b[m]
12165 b[m] = i
12166 }
12167
12168 Buffer.prototype.swap16 = function swap16 () {
12169 var len = this.length
12170 if (len % 2 !== 0) {
12171 throw new RangeError('Buffer size must be a multiple of 16-bits')
12172 }
12173 for (var i = 0; i < len; i += 2) {
12174 swap(this, i, i + 1)
12175 }
12176 return this
12177 }
12178
12179 Buffer.prototype.swap32 = function swap32 () {
12180 var len = this.length
12181 if (len % 4 !== 0) {
12182 throw new RangeError('Buffer size must be a multiple of 32-bits')
12183 }
12184 for (var i = 0; i < len; i += 4) {
12185 swap(this, i, i + 3)
12186 swap(this, i + 1, i + 2)
12187 }
12188 return this
12189 }
12190
12191 Buffer.prototype.swap64 = function swap64 () {
12192 var len = this.length
12193 if (len % 8 !== 0) {
12194 throw new RangeError('Buffer size must be a multiple of 64-bits')
12195 }
12196 for (var i = 0; i < len; i += 8) {
12197 swap(this, i, i + 7)
12198 swap(this, i + 1, i + 6)
12199 swap(this, i + 2, i + 5)
12200 swap(this, i + 3, i + 4)
12201 }
12202 return this
12203 }
12204
12205 Buffer.prototype.toString = function toString () {
12206 var length = this.length
12207 if (length === 0) return ''
12208 if (arguments.length === 0) return utf8Slice(this, 0, length)
12209 return slowToString.apply(this, arguments)
12210 }
12211
12212 Buffer.prototype.equals = function equals (b) {
12213 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12214 if (this === b) return true
12215 return Buffer.compare(this, b) === 0
12216 }
12217
12218 Buffer.prototype.inspect = function inspect () {
12219 var str = ''
12220 var max = exports.INSPECT_MAX_BYTES
12221 if (this.length > 0) {
12222 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12223 if (this.length > max) str += ' ... '
12224 }
12225 return '<Buffer ' + str + '>'
12226 }
12227
12228 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12229 if (!Buffer.isBuffer(target)) {
12230 throw new TypeError('Argument must be a Buffer')
12231 }
12232
12233 if (start === undefined) {
12234 start = 0
12235 }
12236 if (end === undefined) {
12237 end = target ? target.length : 0
12238 }
12239 if (thisStart === undefined) {
12240 thisStart = 0
12241 }
12242 if (thisEnd === undefined) {
12243 thisEnd = this.length
12244 }
12245
12246 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12247 throw new RangeError('out of range index')
12248 }
12249
12250 if (thisStart >= thisEnd && start >= end) {
12251 return 0
12252 }
12253 if (thisStart >= thisEnd) {
12254 return -1
12255 }
12256 if (start >= end) {
12257 return 1
12258 }
12259
12260 start >>>= 0
12261 end >>>= 0
12262 thisStart >>>= 0
12263 thisEnd >>>= 0
12264
12265 if (this === target) return 0
12266
12267 var x = thisEnd - thisStart
12268 var y = end - start
12269 var len = Math.min(x, y)
12270
12271 var thisCopy = this.slice(thisStart, thisEnd)
12272 var targetCopy = target.slice(start, end)
12273
12274 for (var i = 0; i < len; ++i) {
12275 if (thisCopy[i] !== targetCopy[i]) {
12276 x = thisCopy[i]
12277 y = targetCopy[i]
12278 break
12279 }
12280 }
12281
12282 if (x < y) return -1
12283 if (y < x) return 1
12284 return 0
12285 }
12286
12287 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12288 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12289 //
12290 // Arguments:
12291 // - buffer - a Buffer to search
12292 // - val - a string, Buffer, or number
12293 // - byteOffset - an index into `buffer`; will be clamped to an int32
12294 // - encoding - an optional encoding, relevant is val is a string
12295 // - dir - true for indexOf, false for lastIndexOf
12296 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12297 // Empty buffer means no match
12298 if (buffer.length === 0) return -1
12299
12300 // Normalize byteOffset
12301 if (typeof byteOffset === 'string') {
12302 encoding = byteOffset
12303 byteOffset = 0
12304 } else if (byteOffset > 0x7fffffff) {
12305 byteOffset = 0x7fffffff
12306 } else if (byteOffset < -0x80000000) {
12307 byteOffset = -0x80000000
12308 }
12309 byteOffset = +byteOffset // Coerce to Number.
12310 if (numberIsNaN(byteOffset)) {
12311 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12312 byteOffset = dir ? 0 : (buffer.length - 1)
12313 }
12314
12315 // Normalize byteOffset: negative offsets start from the end of the buffer
12316 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12317 if (byteOffset >= buffer.length) {
12318 if (dir) return -1
12319 else byteOffset = buffer.length - 1
12320 } else if (byteOffset < 0) {
12321 if (dir) byteOffset = 0
12322 else return -1
12323 }
12324
12325 // Normalize val
12326 if (typeof val === 'string') {
12327 val = Buffer.from(val, encoding)
12328 }
12329
12330 // Finally, search either indexOf (if dir is true) or lastIndexOf
12331 if (Buffer.isBuffer(val)) {
12332 // Special case: looking for empty string/buffer always fails
12333 if (val.length === 0) {
12334 return -1
12335 }
12336 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12337 } else if (typeof val === 'number') {
12338 val = val & 0xFF // Search for a byte value [0-255]
12339 if (typeof Uint8Array.prototype.indexOf === 'function') {
12340 if (dir) {
12341 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12342 } else {
12343 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12344 }
12345 }
12346 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12347 }
12348
12349 throw new TypeError('val must be string, number or Buffer')
12350 }
12351
12352 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12353 var indexSize = 1
12354 var arrLength = arr.length
12355 var valLength = val.length
12356
12357 if (encoding !== undefined) {
12358 encoding = String(encoding).toLowerCase()
12359 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12360 encoding === 'utf16le' || encoding === 'utf-16le') {
12361 if (arr.length < 2 || val.length < 2) {
12362 return -1
12363 }
12364 indexSize = 2
12365 arrLength /= 2
12366 valLength /= 2
12367 byteOffset /= 2
12368 }
12369 }
12370
12371 function read (buf, i) {
12372 if (indexSize === 1) {
12373 return buf[i]
12374 } else {
12375 return buf.readUInt16BE(i * indexSize)
12376 }
12377 }
12378
12379 var i
12380 if (dir) {
12381 var foundIndex = -1
12382 for (i = byteOffset; i < arrLength; i++) {
12383 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12384 if (foundIndex === -1) foundIndex = i
12385 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12386 } else {
12387 if (foundIndex !== -1) i -= i - foundIndex
12388 foundIndex = -1
12389 }
12390 }
12391 } else {
12392 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12393 for (i = byteOffset; i >= 0; i--) {
12394 var found = true
12395 for (var j = 0; j < valLength; j++) {
12396 if (read(arr, i + j) !== read(val, j)) {
12397 found = false
12398 break
12399 }
12400 }
12401 if (found) return i
12402 }
12403 }
12404
12405 return -1
12406 }
12407
12408 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12409 return this.indexOf(val, byteOffset, encoding) !== -1
12410 }
12411
12412 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12413 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12414 }
12415
12416 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12417 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12418 }
12419
12420 function hexWrite (buf, string, offset, length) {
12421 offset = Number(offset) || 0
12422 var remaining = buf.length - offset
12423 if (!length) {
12424 length = remaining
12425 } else {
12426 length = Number(length)
12427 if (length > remaining) {
12428 length = remaining
12429 }
12430 }
12431
12432 // must be an even number of digits
12433 var strLen = string.length
12434 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12435
12436 if (length > strLen / 2) {
12437 length = strLen / 2
12438 }
12439 for (var i = 0; i < length; ++i) {
12440 var parsed = parseInt(string.substr(i * 2, 2), 16)
12441 if (numberIsNaN(parsed)) return i
12442 buf[offset + i] = parsed
12443 }
12444 return i
12445 }
12446
12447 function utf8Write (buf, string, offset, length) {
12448 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12449 }
12450
12451 function asciiWrite (buf, string, offset, length) {
12452 return blitBuffer(asciiToBytes(string), buf, offset, length)
12453 }
12454
12455 function latin1Write (buf, string, offset, length) {
12456 return asciiWrite(buf, string, offset, length)
12457 }
12458
12459 function base64Write (buf, string, offset, length) {
12460 return blitBuffer(base64ToBytes(string), buf, offset, length)
12461 }
12462
12463 function ucs2Write (buf, string, offset, length) {
12464 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12465 }
12466
12467 Buffer.prototype.write = function write (string, offset, length, encoding) {
12468 // Buffer#write(string)
12469 if (offset === undefined) {
12470 encoding = 'utf8'
12471 length = this.length
12472 offset = 0
12473 // Buffer#write(string, encoding)
12474 } else if (length === undefined && typeof offset === 'string') {
12475 encoding = offset
12476 length = this.length
12477 offset = 0
12478 // Buffer#write(string, offset[, length][, encoding])
12479 } else if (isFinite(offset)) {
12480 offset = offset >>> 0
12481 if (isFinite(length)) {
12482 length = length >>> 0
12483 if (encoding === undefined) encoding = 'utf8'
12484 } else {
12485 encoding = length
12486 length = undefined
12487 }
12488 } else {
12489 throw new Error(
12490 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12491 )
12492 }
12493
12494 var remaining = this.length - offset
12495 if (length === undefined || length > remaining) length = remaining
12496
12497 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12498 throw new RangeError('Attempt to write outside buffer bounds')
12499 }
12500
12501 if (!encoding) encoding = 'utf8'
12502
12503 var loweredCase = false
12504 for (;;) {
12505 switch (encoding) {
12506 case 'hex':
12507 return hexWrite(this, string, offset, length)
12508
12509 case 'utf8':
12510 case 'utf-8':
12511 return utf8Write(this, string, offset, length)
12512
12513 case 'ascii':
12514 return asciiWrite(this, string, offset, length)
12515
12516 case 'latin1':
12517 case 'binary':
12518 return latin1Write(this, string, offset, length)
12519
12520 case 'base64':
12521 // Warning: maxLength not taken into account in base64Write
12522 return base64Write(this, string, offset, length)
12523
12524 case 'ucs2':
12525 case 'ucs-2':
12526 case 'utf16le':
12527 case 'utf-16le':
12528 return ucs2Write(this, string, offset, length)
12529
12530 default:
12531 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12532 encoding = ('' + encoding).toLowerCase()
12533 loweredCase = true
12534 }
12535 }
12536 }
12537
12538 Buffer.prototype.toJSON = function toJSON () {
12539 return {
12540 type: 'Buffer',
12541 data: Array.prototype.slice.call(this._arr || this, 0)
12542 }
12543 }
12544
12545 function base64Slice (buf, start, end) {
12546 if (start === 0 && end === buf.length) {
12547 return base64.fromByteArray(buf)
12548 } else {
12549 return base64.fromByteArray(buf.slice(start, end))
12550 }
12551 }
12552
12553 function utf8Slice (buf, start, end) {
12554 end = Math.min(buf.length, end)
12555 var res = []
12556
12557 var i = start
12558 while (i < end) {
12559 var firstByte = buf[i]
12560 var codePoint = null
12561 var bytesPerSequence = (firstByte > 0xEF) ? 4
12562 : (firstByte > 0xDF) ? 3
12563 : (firstByte > 0xBF) ? 2
12564 : 1
12565
12566 if (i + bytesPerSequence <= end) {
12567 var secondByte, thirdByte, fourthByte, tempCodePoint
12568
12569 switch (bytesPerSequence) {
12570 case 1:
12571 if (firstByte < 0x80) {
12572 codePoint = firstByte
12573 }
12574 break
12575 case 2:
12576 secondByte = buf[i + 1]
12577 if ((secondByte & 0xC0) === 0x80) {
12578 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12579 if (tempCodePoint > 0x7F) {
12580 codePoint = tempCodePoint
12581 }
12582 }
12583 break
12584 case 3:
12585 secondByte = buf[i + 1]
12586 thirdByte = buf[i + 2]
12587 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12588 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12589 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12590 codePoint = tempCodePoint
12591 }
12592 }
12593 break
12594 case 4:
12595 secondByte = buf[i + 1]
12596 thirdByte = buf[i + 2]
12597 fourthByte = buf[i + 3]
12598 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12599 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12600 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12601 codePoint = tempCodePoint
12602 }
12603 }
12604 }
12605 }
12606
12607 if (codePoint === null) {
12608 // we did not generate a valid codePoint so insert a
12609 // replacement char (U+FFFD) and advance only 1 byte
12610 codePoint = 0xFFFD
12611 bytesPerSequence = 1
12612 } else if (codePoint > 0xFFFF) {
12613 // encode to utf16 (surrogate pair dance)
12614 codePoint -= 0x10000
12615 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12616 codePoint = 0xDC00 | codePoint & 0x3FF
12617 }
12618
12619 res.push(codePoint)
12620 i += bytesPerSequence
12621 }
12622
12623 return decodeCodePointsArray(res)
12624 }
12625
12626 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12627 // the lowest limit is Chrome, with 0x10000 args.
12628 // We go 1 magnitude less, for safety
12629 var MAX_ARGUMENTS_LENGTH = 0x1000
12630
12631 function decodeCodePointsArray (codePoints) {
12632 var len = codePoints.length
12633 if (len <= MAX_ARGUMENTS_LENGTH) {
12634 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12635 }
12636
12637 // Decode in chunks to avoid "call stack size exceeded".
12638 var res = ''
12639 var i = 0
12640 while (i < len) {
12641 res += String.fromCharCode.apply(
12642 String,
12643 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12644 )
12645 }
12646 return res
12647 }
12648
12649 function asciiSlice (buf, start, end) {
12650 var ret = ''
12651 end = Math.min(buf.length, end)
12652
12653 for (var i = start; i < end; ++i) {
12654 ret += String.fromCharCode(buf[i] & 0x7F)
12655 }
12656 return ret
12657 }
12658
12659 function latin1Slice (buf, start, end) {
12660 var ret = ''
12661 end = Math.min(buf.length, end)
12662
12663 for (var i = start; i < end; ++i) {
12664 ret += String.fromCharCode(buf[i])
12665 }
12666 return ret
12667 }
12668
12669 function hexSlice (buf, start, end) {
12670 var len = buf.length
12671
12672 if (!start || start < 0) start = 0
12673 if (!end || end < 0 || end > len) end = len
12674
12675 var out = ''
12676 for (var i = start; i < end; ++i) {
12677 out += toHex(buf[i])
12678 }
12679 return out
12680 }
12681
12682 function utf16leSlice (buf, start, end) {
12683 var bytes = buf.slice(start, end)
12684 var res = ''
12685 for (var i = 0; i < bytes.length; i += 2) {
12686 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12687 }
12688 return res
12689 }
12690
12691 Buffer.prototype.slice = function slice (start, end) {
12692 var len = this.length
12693 start = ~~start
12694 end = end === undefined ? len : ~~end
12695
12696 if (start < 0) {
12697 start += len
12698 if (start < 0) start = 0
12699 } else if (start > len) {
12700 start = len
12701 }
12702
12703 if (end < 0) {
12704 end += len
12705 if (end < 0) end = 0
12706 } else if (end > len) {
12707 end = len
12708 }
12709
12710 if (end < start) end = start
12711
12712 var newBuf = this.subarray(start, end)
12713 // Return an augmented `Uint8Array` instance
12714 newBuf.__proto__ = Buffer.prototype
12715 return newBuf
12716 }
12717
12718 /*
12719 * Need to make sure that buffer isn't trying to write out of bounds.
12720 */
12721 function checkOffset (offset, ext, length) {
12722 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12723 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12724 }
12725
12726 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12727 offset = offset >>> 0
12728 byteLength = byteLength >>> 0
12729 if (!noAssert) checkOffset(offset, byteLength, this.length)
12730
12731 var val = this[offset]
12732 var mul = 1
12733 var i = 0
12734 while (++i < byteLength && (mul *= 0x100)) {
12735 val += this[offset + i] * mul
12736 }
12737
12738 return val
12739 }
12740
12741 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12742 offset = offset >>> 0
12743 byteLength = byteLength >>> 0
12744 if (!noAssert) {
12745 checkOffset(offset, byteLength, this.length)
12746 }
12747
12748 var val = this[offset + --byteLength]
12749 var mul = 1
12750 while (byteLength > 0 && (mul *= 0x100)) {
12751 val += this[offset + --byteLength] * mul
12752 }
12753
12754 return val
12755 }
12756
12757 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12758 offset = offset >>> 0
12759 if (!noAssert) checkOffset(offset, 1, this.length)
12760 return this[offset]
12761 }
12762
12763 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12764 offset = offset >>> 0
12765 if (!noAssert) checkOffset(offset, 2, this.length)
12766 return this[offset] | (this[offset + 1] << 8)
12767 }
12768
12769 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12770 offset = offset >>> 0
12771 if (!noAssert) checkOffset(offset, 2, this.length)
12772 return (this[offset] << 8) | this[offset + 1]
12773 }
12774
12775 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12776 offset = offset >>> 0
12777 if (!noAssert) checkOffset(offset, 4, this.length)
12778
12779 return ((this[offset]) |
12780 (this[offset + 1] << 8) |
12781 (this[offset + 2] << 16)) +
12782 (this[offset + 3] * 0x1000000)
12783 }
12784
12785 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12786 offset = offset >>> 0
12787 if (!noAssert) checkOffset(offset, 4, this.length)
12788
12789 return (this[offset] * 0x1000000) +
12790 ((this[offset + 1] << 16) |
12791 (this[offset + 2] << 8) |
12792 this[offset + 3])
12793 }
12794
12795 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12796 offset = offset >>> 0
12797 byteLength = byteLength >>> 0
12798 if (!noAssert) checkOffset(offset, byteLength, this.length)
12799
12800 var val = this[offset]
12801 var mul = 1
12802 var i = 0
12803 while (++i < byteLength && (mul *= 0x100)) {
12804 val += this[offset + i] * mul
12805 }
12806 mul *= 0x80
12807
12808 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12809
12810 return val
12811 }
12812
12813 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12814 offset = offset >>> 0
12815 byteLength = byteLength >>> 0
12816 if (!noAssert) checkOffset(offset, byteLength, this.length)
12817
12818 var i = byteLength
12819 var mul = 1
12820 var val = this[offset + --i]
12821 while (i > 0 && (mul *= 0x100)) {
12822 val += this[offset + --i] * mul
12823 }
12824 mul *= 0x80
12825
12826 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12827
12828 return val
12829 }
12830
12831 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12832 offset = offset >>> 0
12833 if (!noAssert) checkOffset(offset, 1, this.length)
12834 if (!(this[offset] & 0x80)) return (this[offset])
12835 return ((0xff - this[offset] + 1) * -1)
12836 }
12837
12838 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12839 offset = offset >>> 0
12840 if (!noAssert) checkOffset(offset, 2, this.length)
12841 var val = this[offset] | (this[offset + 1] << 8)
12842 return (val & 0x8000) ? val | 0xFFFF0000 : val
12843 }
12844
12845 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12846 offset = offset >>> 0
12847 if (!noAssert) checkOffset(offset, 2, this.length)
12848 var val = this[offset + 1] | (this[offset] << 8)
12849 return (val & 0x8000) ? val | 0xFFFF0000 : val
12850 }
12851
12852 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12853 offset = offset >>> 0
12854 if (!noAssert) checkOffset(offset, 4, this.length)
12855
12856 return (this[offset]) |
12857 (this[offset + 1] << 8) |
12858 (this[offset + 2] << 16) |
12859 (this[offset + 3] << 24)
12860 }
12861
12862 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12863 offset = offset >>> 0
12864 if (!noAssert) checkOffset(offset, 4, this.length)
12865
12866 return (this[offset] << 24) |
12867 (this[offset + 1] << 16) |
12868 (this[offset + 2] << 8) |
12869 (this[offset + 3])
12870 }
12871
12872 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12873 offset = offset >>> 0
12874 if (!noAssert) checkOffset(offset, 4, this.length)
12875 return ieee754.read(this, offset, true, 23, 4)
12876 }
12877
12878 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12879 offset = offset >>> 0
12880 if (!noAssert) checkOffset(offset, 4, this.length)
12881 return ieee754.read(this, offset, false, 23, 4)
12882 }
12883
12884 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12885 offset = offset >>> 0
12886 if (!noAssert) checkOffset(offset, 8, this.length)
12887 return ieee754.read(this, offset, true, 52, 8)
12888 }
12889
12890 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12891 offset = offset >>> 0
12892 if (!noAssert) checkOffset(offset, 8, this.length)
12893 return ieee754.read(this, offset, false, 52, 8)
12894 }
12895
12896 function checkInt (buf, value, offset, ext, max, min) {
12897 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12898 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12899 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12900 }
12901
12902 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12903 value = +value
12904 offset = offset >>> 0
12905 byteLength = byteLength >>> 0
12906 if (!noAssert) {
12907 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12908 checkInt(this, value, offset, byteLength, maxBytes, 0)
12909 }
12910
12911 var mul = 1
12912 var i = 0
12913 this[offset] = value & 0xFF
12914 while (++i < byteLength && (mul *= 0x100)) {
12915 this[offset + i] = (value / mul) & 0xFF
12916 }
12917
12918 return offset + byteLength
12919 }
12920
12921 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12922 value = +value
12923 offset = offset >>> 0
12924 byteLength = byteLength >>> 0
12925 if (!noAssert) {
12926 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12927 checkInt(this, value, offset, byteLength, maxBytes, 0)
12928 }
12929
12930 var i = byteLength - 1
12931 var mul = 1
12932 this[offset + i] = value & 0xFF
12933 while (--i >= 0 && (mul *= 0x100)) {
12934 this[offset + i] = (value / mul) & 0xFF
12935 }
12936
12937 return offset + byteLength
12938 }
12939
12940 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12941 value = +value
12942 offset = offset >>> 0
12943 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12944 this[offset] = (value & 0xff)
12945 return offset + 1
12946 }
12947
12948 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12949 value = +value
12950 offset = offset >>> 0
12951 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12952 this[offset] = (value & 0xff)
12953 this[offset + 1] = (value >>> 8)
12954 return offset + 2
12955 }
12956
12957 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12958 value = +value
12959 offset = offset >>> 0
12960 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12961 this[offset] = (value >>> 8)
12962 this[offset + 1] = (value & 0xff)
12963 return offset + 2
12964 }
12965
12966 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12967 value = +value
12968 offset = offset >>> 0
12969 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12970 this[offset + 3] = (value >>> 24)
12971 this[offset + 2] = (value >>> 16)
12972 this[offset + 1] = (value >>> 8)
12973 this[offset] = (value & 0xff)
12974 return offset + 4
12975 }
12976
12977 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12978 value = +value
12979 offset = offset >>> 0
12980 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12981 this[offset] = (value >>> 24)
12982 this[offset + 1] = (value >>> 16)
12983 this[offset + 2] = (value >>> 8)
12984 this[offset + 3] = (value & 0xff)
12985 return offset + 4
12986 }
12987
12988 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12989 value = +value
12990 offset = offset >>> 0
12991 if (!noAssert) {
12992 var limit = Math.pow(2, (8 * byteLength) - 1)
12993
12994 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12995 }
12996
12997 var i = 0
12998 var mul = 1
12999 var sub = 0
13000 this[offset] = value & 0xFF
13001 while (++i < byteLength && (mul *= 0x100)) {
13002 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
13003 sub = 1
13004 }
13005 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13006 }
13007
13008 return offset + byteLength
13009 }
13010
13011 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
13012 value = +value
13013 offset = offset >>> 0
13014 if (!noAssert) {
13015 var limit = Math.pow(2, (8 * byteLength) - 1)
13016
13017 checkInt(this, value, offset, byteLength, limit - 1, -limit)
13018 }
13019
13020 var i = byteLength - 1
13021 var mul = 1
13022 var sub = 0
13023 this[offset + i] = value & 0xFF
13024 while (--i >= 0 && (mul *= 0x100)) {
13025 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
13026 sub = 1
13027 }
13028 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13029 }
13030
13031 return offset + byteLength
13032 }
13033
13034 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13035 value = +value
13036 offset = offset >>> 0
13037 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13038 if (value < 0) value = 0xff + value + 1
13039 this[offset] = (value & 0xff)
13040 return offset + 1
13041 }
13042
13043 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13044 value = +value
13045 offset = offset >>> 0
13046 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13047 this[offset] = (value & 0xff)
13048 this[offset + 1] = (value >>> 8)
13049 return offset + 2
13050 }
13051
13052 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13053 value = +value
13054 offset = offset >>> 0
13055 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13056 this[offset] = (value >>> 8)
13057 this[offset + 1] = (value & 0xff)
13058 return offset + 2
13059 }
13060
13061 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13062 value = +value
13063 offset = offset >>> 0
13064 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13065 this[offset] = (value & 0xff)
13066 this[offset + 1] = (value >>> 8)
13067 this[offset + 2] = (value >>> 16)
13068 this[offset + 3] = (value >>> 24)
13069 return offset + 4
13070 }
13071
13072 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13073 value = +value
13074 offset = offset >>> 0
13075 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13076 if (value < 0) value = 0xffffffff + value + 1
13077 this[offset] = (value >>> 24)
13078 this[offset + 1] = (value >>> 16)
13079 this[offset + 2] = (value >>> 8)
13080 this[offset + 3] = (value & 0xff)
13081 return offset + 4
13082 }
13083
13084 function checkIEEE754 (buf, value, offset, ext, max, min) {
13085 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13086 if (offset < 0) throw new RangeError('Index out of range')
13087 }
13088
13089 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13090 value = +value
13091 offset = offset >>> 0
13092 if (!noAssert) {
13093 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13094 }
13095 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13096 return offset + 4
13097 }
13098
13099 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13100 return writeFloat(this, value, offset, true, noAssert)
13101 }
13102
13103 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13104 return writeFloat(this, value, offset, false, noAssert)
13105 }
13106
13107 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13108 value = +value
13109 offset = offset >>> 0
13110 if (!noAssert) {
13111 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13112 }
13113 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13114 return offset + 8
13115 }
13116
13117 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13118 return writeDouble(this, value, offset, true, noAssert)
13119 }
13120
13121 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13122 return writeDouble(this, value, offset, false, noAssert)
13123 }
13124
13125 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13126 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13127 if (!start) start = 0
13128 if (!end && end !== 0) end = this.length
13129 if (targetStart >= target.length) targetStart = target.length
13130 if (!targetStart) targetStart = 0
13131 if (end > 0 && end < start) end = start
13132
13133 // Copy 0 bytes; we're done
13134 if (end === start) return 0
13135 if (target.length === 0 || this.length === 0) return 0
13136
13137 // Fatal error conditions
13138 if (targetStart < 0) {
13139 throw new RangeError('targetStart out of bounds')
13140 }
13141 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13142 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13143
13144 // Are we oob?
13145 if (end > this.length) end = this.length
13146 if (target.length - targetStart < end - start) {
13147 end = target.length - targetStart + start
13148 }
13149
13150 var len = end - start
13151 var i
13152
13153 if (this === target && start < targetStart && targetStart < end) {
13154 // descending copy from end
13155 for (i = len - 1; i >= 0; --i) {
13156 target[i + targetStart] = this[i + start]
13157 }
13158 } else if (len < 1000) {
13159 // ascending copy from start
13160 for (i = 0; i < len; ++i) {
13161 target[i + targetStart] = this[i + start]
13162 }
13163 } else {
13164 Uint8Array.prototype.set.call(
13165 target,
13166 this.subarray(start, start + len),
13167 targetStart
13168 )
13169 }
13170
13171 return len
13172 }
13173
13174 // Usage:
13175 // buffer.fill(number[, offset[, end]])
13176 // buffer.fill(buffer[, offset[, end]])
13177 // buffer.fill(string[, offset[, end]][, encoding])
13178 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13179 // Handle string cases:
13180 if (typeof val === 'string') {
13181 if (typeof start === 'string') {
13182 encoding = start
13183 start = 0
13184 end = this.length
13185 } else if (typeof end === 'string') {
13186 encoding = end
13187 end = this.length
13188 }
13189 if (val.length === 1) {
13190 var code = val.charCodeAt(0)
13191 if (code < 256) {
13192 val = code
13193 }
13194 }
13195 if (encoding !== undefined && typeof encoding !== 'string') {
13196 throw new TypeError('encoding must be a string')
13197 }
13198 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13199 throw new TypeError('Unknown encoding: ' + encoding)
13200 }
13201 } else if (typeof val === 'number') {
13202 val = val & 255
13203 }
13204
13205 // Invalid ranges are not set to a default, so can range check early.
13206 if (start < 0 || this.length < start || this.length < end) {
13207 throw new RangeError('Out of range index')
13208 }
13209
13210 if (end <= start) {
13211 return this
13212 }
13213
13214 start = start >>> 0
13215 end = end === undefined ? this.length : end >>> 0
13216
13217 if (!val) val = 0
13218
13219 var i
13220 if (typeof val === 'number') {
13221 for (i = start; i < end; ++i) {
13222 this[i] = val
13223 }
13224 } else {
13225 var bytes = Buffer.isBuffer(val)
13226 ? val
13227 : new Buffer(val, encoding)
13228 var len = bytes.length
13229 for (i = 0; i < end - start; ++i) {
13230 this[i + start] = bytes[i % len]
13231 }
13232 }
13233
13234 return this
13235 }
13236
13237 // HELPER FUNCTIONS
13238 // ================
13239
13240 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13241
13242 function base64clean (str) {
13243 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13244 str = str.trim().replace(INVALID_BASE64_RE, '')
13245 // Node converts strings with length < 2 to ''
13246 if (str.length < 2) return ''
13247 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13248 while (str.length % 4 !== 0) {
13249 str = str + '='
13250 }
13251 return str
13252 }
13253
13254 function toHex (n) {
13255 if (n < 16) return '0' + n.toString(16)
13256 return n.toString(16)
13257 }
13258
13259 function utf8ToBytes (string, units) {
13260 units = units || Infinity
13261 var codePoint
13262 var length = string.length
13263 var leadSurrogate = null
13264 var bytes = []
13265
13266 for (var i = 0; i < length; ++i) {
13267 codePoint = string.charCodeAt(i)
13268
13269 // is surrogate component
13270 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13271 // last char was a lead
13272 if (!leadSurrogate) {
13273 // no lead yet
13274 if (codePoint > 0xDBFF) {
13275 // unexpected trail
13276 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13277 continue
13278 } else if (i + 1 === length) {
13279 // unpaired lead
13280 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13281 continue
13282 }
13283
13284 // valid lead
13285 leadSurrogate = codePoint
13286
13287 continue
13288 }
13289
13290 // 2 leads in a row
13291 if (codePoint < 0xDC00) {
13292 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13293 leadSurrogate = codePoint
13294 continue
13295 }
13296
13297 // valid surrogate pair
13298 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13299 } else if (leadSurrogate) {
13300 // valid bmp char, but last char was a lead
13301 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13302 }
13303
13304 leadSurrogate = null
13305
13306 // encode utf8
13307 if (codePoint < 0x80) {
13308 if ((units -= 1) < 0) break
13309 bytes.push(codePoint)
13310 } else if (codePoint < 0x800) {
13311 if ((units -= 2) < 0) break
13312 bytes.push(
13313 codePoint >> 0x6 | 0xC0,
13314 codePoint & 0x3F | 0x80
13315 )
13316 } else if (codePoint < 0x10000) {
13317 if ((units -= 3) < 0) break
13318 bytes.push(
13319 codePoint >> 0xC | 0xE0,
13320 codePoint >> 0x6 & 0x3F | 0x80,
13321 codePoint & 0x3F | 0x80
13322 )
13323 } else if (codePoint < 0x110000) {
13324 if ((units -= 4) < 0) break
13325 bytes.push(
13326 codePoint >> 0x12 | 0xF0,
13327 codePoint >> 0xC & 0x3F | 0x80,
13328 codePoint >> 0x6 & 0x3F | 0x80,
13329 codePoint & 0x3F | 0x80
13330 )
13331 } else {
13332 throw new Error('Invalid code point')
13333 }
13334 }
13335
13336 return bytes
13337 }
13338
13339 function asciiToBytes (str) {
13340 var byteArray = []
13341 for (var i = 0; i < str.length; ++i) {
13342 // Node's code seems to be doing this and not & 0x7F..
13343 byteArray.push(str.charCodeAt(i) & 0xFF)
13344 }
13345 return byteArray
13346 }
13347
13348 function utf16leToBytes (str, units) {
13349 var c, hi, lo
13350 var byteArray = []
13351 for (var i = 0; i < str.length; ++i) {
13352 if ((units -= 2) < 0) break
13353
13354 c = str.charCodeAt(i)
13355 hi = c >> 8
13356 lo = c % 256
13357 byteArray.push(lo)
13358 byteArray.push(hi)
13359 }
13360
13361 return byteArray
13362 }
13363
13364 function base64ToBytes (str) {
13365 return base64.toByteArray(base64clean(str))
13366 }
13367
13368 function blitBuffer (src, dst, offset, length) {
13369 for (var i = 0; i < length; ++i) {
13370 if ((i + offset >= dst.length) || (i >= src.length)) break
13371 dst[i + offset] = src[i]
13372 }
13373 return i
13374 }
13375
13376 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13377 function isArrayBufferView (obj) {
13378 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13379 }
13380
13381 function numberIsNaN (obj) {
13382 return obj !== obj // eslint-disable-line no-self-compare
13383 }
13384
13385 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13386 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13387 var e, m
13388 var eLen = nBytes * 8 - mLen - 1
13389 var eMax = (1 << eLen) - 1
13390 var eBias = eMax >> 1
13391 var nBits = -7
13392 var i = isLE ? (nBytes - 1) : 0
13393 var d = isLE ? -1 : 1
13394 var s = buffer[offset + i]
13395
13396 i += d
13397
13398 e = s & ((1 << (-nBits)) - 1)
13399 s >>= (-nBits)
13400 nBits += eLen
13401 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13402
13403 m = e & ((1 << (-nBits)) - 1)
13404 e >>= (-nBits)
13405 nBits += mLen
13406 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13407
13408 if (e === 0) {
13409 e = 1 - eBias
13410 } else if (e === eMax) {
13411 return m ? NaN : ((s ? -1 : 1) * Infinity)
13412 } else {
13413 m = m + Math.pow(2, mLen)
13414 e = e - eBias
13415 }
13416 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13417 }
13418
13419 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13420 var e, m, c
13421 var eLen = nBytes * 8 - mLen - 1
13422 var eMax = (1 << eLen) - 1
13423 var eBias = eMax >> 1
13424 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13425 var i = isLE ? 0 : (nBytes - 1)
13426 var d = isLE ? 1 : -1
13427 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13428
13429 value = Math.abs(value)
13430
13431 if (isNaN(value) || value === Infinity) {
13432 m = isNaN(value) ? 1 : 0
13433 e = eMax
13434 } else {
13435 e = Math.floor(Math.log(value) / Math.LN2)
13436 if (value * (c = Math.pow(2, -e)) < 1) {
13437 e--
13438 c *= 2
13439 }
13440 if (e + eBias >= 1) {
13441 value += rt / c
13442 } else {
13443 value += rt * Math.pow(2, 1 - eBias)
13444 }
13445 if (value * c >= 2) {
13446 e++
13447 c /= 2
13448 }
13449
13450 if (e + eBias >= eMax) {
13451 m = 0
13452 e = eMax
13453 } else if (e + eBias >= 1) {
13454 m = (value * c - 1) * Math.pow(2, mLen)
13455 e = e + eBias
13456 } else {
13457 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13458 e = 0
13459 }
13460 }
13461
13462 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13463
13464 e = (e << mLen) | m
13465 eLen += mLen
13466 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13467
13468 buffer[offset + i - d] |= s * 128
13469 }
13470
13471 },{}],4:[function(require,module,exports){
13472 window.basex = require('base-x')
13473 },{"base-x":5}],5:[function(require,module,exports){
13474 // base-x encoding
13475 // Forked from https://github.com/cryptocoinjs/bs58
13476 // Originally written by Mike Hearn for BitcoinJ
13477 // Copyright (c) 2011 Google Inc
13478 // Ported to JavaScript by Stefan Thomas
13479 // Merged Buffer refactorings from base58-native by Stephen Pair
13480 // Copyright (c) 2013 BitPay Inc
13481
13482 var Buffer = require('safe-buffer').Buffer
13483
13484 module.exports = function base (ALPHABET) {
13485 var ALPHABET_MAP = {}
13486 var BASE = ALPHABET.length
13487 var LEADER = ALPHABET.charAt(0)
13488
13489 // pre-compute lookup table
13490 for (var z = 0; z < ALPHABET.length; z++) {
13491 var x = ALPHABET.charAt(z)
13492
13493 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13494 ALPHABET_MAP[x] = z
13495 }
13496
13497 function encode (source) {
13498 if (source.length === 0) return ''
13499
13500 var digits = [0]
13501 for (var i = 0; i < source.length; ++i) {
13502 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13503 carry += digits[j] << 8
13504 digits[j] = carry % BASE
13505 carry = (carry / BASE) | 0
13506 }
13507
13508 while (carry > 0) {
13509 digits.push(carry % BASE)
13510 carry = (carry / BASE) | 0
13511 }
13512 }
13513
13514 var string = ''
13515
13516 // deal with leading zeros
13517 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13518 // convert digits to a string
13519 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13520
13521 return string
13522 }
13523
13524 function decodeUnsafe (string) {
13525 if (string.length === 0) return Buffer.allocUnsafe(0)
13526
13527 var bytes = [0]
13528 for (var i = 0; i < string.length; i++) {
13529 var value = ALPHABET_MAP[string[i]]
13530 if (value === undefined) return
13531
13532 for (var j = 0, carry = value; j < bytes.length; ++j) {
13533 carry += bytes[j] * BASE
13534 bytes[j] = carry & 0xff
13535 carry >>= 8
13536 }
13537
13538 while (carry > 0) {
13539 bytes.push(carry & 0xff)
13540 carry >>= 8
13541 }
13542 }
13543
13544 // deal with leading zeros
13545 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13546 bytes.push(0)
13547 }
13548
13549 return Buffer.from(bytes.reverse())
13550 }
13551
13552 function decode (string) {
13553 var buffer = decodeUnsafe(string)
13554 if (buffer) return buffer
13555
13556 throw new Error('Non-base' + BASE + ' character')
13557 }
13558
13559 return {
13560 encode: encode,
13561 decodeUnsafe: decodeUnsafe,
13562 decode: decode
13563 }
13564 }
13565
13566 },{"safe-buffer":6}],6:[function(require,module,exports){
13567 module.exports = require('buffer')
13568
13569 },{"buffer":2}]},{},[4])(4)
13570 });</script>
13571 <script>// Polyfill for NFKD normalization
13572 // See https://github.com/walling/unorm
13573
13574 (function (root) {
13575 "use strict";
13576
13577 /***** unorm.js *****/
13578
13579 /*
13580 * UnicodeNormalizer 1.0.0
13581 * Copyright (c) 2008 Matsuza
13582 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13583 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13584 * $Rev: 13309 $
13585 */
13586
13587 var DEFAULT_FEATURE = [null, 0, {}];
13588 var CACHE_THRESHOLD = 10;
13589 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13590 var NCount = VCount * TCount; // 588
13591 var SCount = LCount * NCount; // 11172
13592
13593 var UChar = function(cp, feature){
13594 this.codepoint = cp;
13595 this.feature = feature;
13596 };
13597
13598 // Strategies
13599 var cache = {};
13600 var cacheCounter = [];
13601 for (var i = 0; i <= 0xFF; ++i){
13602 cacheCounter[i] = 0;
13603 }
13604
13605 function fromCache(next, cp, needFeature){
13606 var ret = cache[cp];
13607 if(!ret){
13608 ret = next(cp, needFeature);
13609 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13610 cache[cp] = ret;
13611 }
13612 }
13613 return ret;
13614 }
13615
13616 function fromData(next, cp, needFeature){
13617 var hash = cp & 0xFF00;
13618 var dunit = UChar.udata[hash] || {};
13619 var f = dunit[cp];
13620 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13621 }
13622 function fromCpOnly(next, cp, needFeature){
13623 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13624 }
13625 function fromRuleBasedJamo(next, cp, needFeature){
13626 var j;
13627 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13628 return next(cp, needFeature);
13629 }
13630 if(LBase <= cp && cp < LBase + LCount){
13631 var c = {};
13632 var base = (cp - LBase) * VCount;
13633 for (j = 0; j < VCount; ++j){
13634 c[VBase + j] = SBase + TCount * (j + base);
13635 }
13636 return new UChar(cp, [,,c]);
13637 }
13638
13639 var SIndex = cp - SBase;
13640 var TIndex = SIndex % TCount;
13641 var feature = [];
13642 if(TIndex !== 0){
13643 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13644 } else {
13645 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13646 feature[2] = {};
13647 for (j = 1; j < TCount; ++j){
13648 feature[2][TBase + j] = cp + j;
13649 }
13650 }
13651 return new UChar(cp, feature);
13652 }
13653 function fromCpFilter(next, cp, needFeature){
13654 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13655 }
13656
13657 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13658
13659 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13660 return function (cp, needFeature) {
13661 return strategy(next, cp, needFeature);
13662 };
13663 }, null);
13664
13665 UChar.isHighSurrogate = function(cp){
13666 return cp >= 0xD800 && cp <= 0xDBFF;
13667 };
13668 UChar.isLowSurrogate = function(cp){
13669 return cp >= 0xDC00 && cp <= 0xDFFF;
13670 };
13671
13672 UChar.prototype.prepFeature = function(){
13673 if(!this.feature){
13674 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13675 }
13676 };
13677
13678 UChar.prototype.toString = function(){
13679 if(this.codepoint < 0x10000){
13680 return String.fromCharCode(this.codepoint);
13681 } else {
13682 var x = this.codepoint - 0x10000;
13683 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13684 }
13685 };
13686
13687 UChar.prototype.getDecomp = function(){
13688 this.prepFeature();
13689 return this.feature[0] || null;
13690 };
13691
13692 UChar.prototype.isCompatibility = function(){
13693 this.prepFeature();
13694 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13695 };
13696 UChar.prototype.isExclude = function(){
13697 this.prepFeature();
13698 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13699 };
13700 UChar.prototype.getCanonicalClass = function(){
13701 this.prepFeature();
13702 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13703 };
13704 UChar.prototype.getComposite = function(following){
13705 this.prepFeature();
13706 if(!this.feature[2]){
13707 return null;
13708 }
13709 var cp = this.feature[2][following.codepoint];
13710 return cp ? UChar.fromCharCode(cp) : null;
13711 };
13712
13713 var UCharIterator = function(str){
13714 this.str = str;
13715 this.cursor = 0;
13716 };
13717 UCharIterator.prototype.next = function(){
13718 if(!!this.str && this.cursor < this.str.length){
13719 var cp = this.str.charCodeAt(this.cursor++);
13720 var d;
13721 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13722 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13723 ++this.cursor;
13724 }
13725 return UChar.fromCharCode(cp);
13726 } else {
13727 this.str = null;
13728 return null;
13729 }
13730 };
13731
13732 var RecursDecompIterator = function(it, cano){
13733 this.it = it;
13734 this.canonical = cano;
13735 this.resBuf = [];
13736 };
13737
13738 RecursDecompIterator.prototype.next = function(){
13739 function recursiveDecomp(cano, uchar){
13740 var decomp = uchar.getDecomp();
13741 if(!!decomp && !(cano && uchar.isCompatibility())){
13742 var ret = [];
13743 for(var i = 0; i < decomp.length; ++i){
13744 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13745 ret = ret.concat(a);
13746 }
13747 return ret;
13748 } else {
13749 return [uchar];
13750 }
13751 }
13752 if(this.resBuf.length === 0){
13753 var uchar = this.it.next();
13754 if(!uchar){
13755 return null;
13756 }
13757 this.resBuf = recursiveDecomp(this.canonical, uchar);
13758 }
13759 return this.resBuf.shift();
13760 };
13761
13762 var DecompIterator = function(it){
13763 this.it = it;
13764 this.resBuf = [];
13765 };
13766
13767 DecompIterator.prototype.next = function(){
13768 var cc;
13769 if(this.resBuf.length === 0){
13770 do{
13771 var uchar = this.it.next();
13772 if(!uchar){
13773 break;
13774 }
13775 cc = uchar.getCanonicalClass();
13776 var inspt = this.resBuf.length;
13777 if(cc !== 0){
13778 for(; inspt > 0; --inspt){
13779 var uchar2 = this.resBuf[inspt - 1];
13780 var cc2 = uchar2.getCanonicalClass();
13781 if(cc2 <= cc){
13782 break;
13783 }
13784 }
13785 }
13786 this.resBuf.splice(inspt, 0, uchar);
13787 } while(cc !== 0);
13788 }
13789 return this.resBuf.shift();
13790 };
13791
13792 var CompIterator = function(it){
13793 this.it = it;
13794 this.procBuf = [];
13795 this.resBuf = [];
13796 this.lastClass = null;
13797 };
13798
13799 CompIterator.prototype.next = function(){
13800 while(this.resBuf.length === 0){
13801 var uchar = this.it.next();
13802 if(!uchar){
13803 this.resBuf = this.procBuf;
13804 this.procBuf = [];
13805 break;
13806 }
13807 if(this.procBuf.length === 0){
13808 this.lastClass = uchar.getCanonicalClass();
13809 this.procBuf.push(uchar);
13810 } else {
13811 var starter = this.procBuf[0];
13812 var composite = starter.getComposite(uchar);
13813 var cc = uchar.getCanonicalClass();
13814 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13815 this.procBuf[0] = composite;
13816 } else {
13817 if(cc === 0){
13818 this.resBuf = this.procBuf;
13819 this.procBuf = [];
13820 }
13821 this.lastClass = cc;
13822 this.procBuf.push(uchar);
13823 }
13824 }
13825 }
13826 return this.resBuf.shift();
13827 };
13828
13829 var createIterator = function(mode, str){
13830 switch(mode){
13831 case "NFD":
13832 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13833 case "NFKD":
13834 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13835 case "NFC":
13836 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13837 case "NFKC":
13838 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13839 }
13840 throw mode + " is invalid";
13841 };
13842 var normalize = function(mode, str){
13843 var it = createIterator(mode, str);
13844 var ret = "";
13845 var uchar;
13846 while(!!(uchar = it.next())){
13847 ret += uchar.toString();
13848 }
13849 return ret;
13850 };
13851
13852 /* API functions */
13853 function nfd(str){
13854 return normalize("NFD", str);
13855 }
13856
13857 function nfkd(str){
13858 return normalize("NFKD", str);
13859 }
13860
13861 function nfc(str){
13862 return normalize("NFC", str);
13863 }
13864
13865 function nfkc(str){
13866 return normalize("NFKC", str);
13867 }
13868
13869 /* Unicode data */
13870 UChar.udata={
13871 0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
13872 256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
13873 512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
13874 768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
13875 1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
13876 1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
13877 1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
13878 1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
13879 2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
13880 2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
13881 2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
13882 2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
13883 3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
13884 3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
13885 3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
13886 3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
13887 4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
13888 4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
13889 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13890 4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
13891 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13892 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13893 5632:{71231:[,9],71350:[,9],71351:[,7]},
13894 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13895 6144:{6313:[,228]},
13896 6400:{6457:[,222],6458:[,230],6459:[,220]},
13897 6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
13898 6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
13899 7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
13900 7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
13901 7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
13902 7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
13903 8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
13904 8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
13905 8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
13906 8960:{9001:[[12296]],9002:[[12297]]},
13907 9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
13908 10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
13909 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13910 11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
13911 11776:{11935:[[27597],256],12019:[[40863],256]},
13912 12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
13913 12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
13914 12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
13915 12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
13916 13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
13917 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13918 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13919 42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
13920 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13921 43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
13922 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13923 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13924 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13925 48128:{113822:[,1]},
13926 53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
13927 53760:{119362:[,230],119363:[,230],119364:[,230]},
13928 54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
13929 54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
13930 54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
13931 55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
13932 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13933 60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
13934 61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
13935 61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
13936 63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
13937 63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
13938 64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
13939 64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
13940 64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
13941 64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
13942 65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
13943 65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
13944
13945 };
13946
13947 /***** Module to export */
13948 var unorm = {
13949 nfc: nfc,
13950 nfd: nfd,
13951 nfkc: nfkc,
13952 nfkd: nfkd
13953 };
13954
13955 /*globals module:true,define:true*/
13956
13957 // CommonJS
13958 if (typeof module === "object") {
13959 module.exports = unorm;
13960
13961 // AMD
13962 } else if (typeof define === "function" && define.amd) {
13963 define("unorm", function () {
13964 return unorm;
13965 });
13966
13967 // Global
13968 } else {
13969 root.unorm = unorm;
13970 }
13971
13972 /***** Export as shim for String::normalize method *****/
13973 /*
13974 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13975
13976 21.1.3.12 String.prototype.normalize(form="NFC")
13977 When the normalize method is called with one argument form, the following steps are taken:
13978
13979 1. Let O be CheckObjectCoercible(this value).
13980 2. Let S be ToString(O).
13981 3. ReturnIfAbrupt(S).
13982 4. If form is not provided or undefined let form be "NFC".
13983 5. Let f be ToString(form).
13984 6. ReturnIfAbrupt(f).
13985 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13986 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
13987 9. Return ns.
13988
13989 The length property of the normalize method is 0.
13990
13991 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
13992 */
13993 unorm.shimApplied = false;
13994
13995 if (!String.prototype.normalize) {
13996 String.prototype.normalize = function(form) {
13997 var str = "" + this;
13998 form = form === undefined ? "NFC" : form;
13999
14000 if (form === "NFC") {
14001 return unorm.nfc(str);
14002 } else if (form === "NFD") {
14003 return unorm.nfd(str);
14004 } else if (form === "NFKC") {
14005 return unorm.nfkc(str);
14006 } else if (form === "NFKD") {
14007 return unorm.nfkd(str);
14008 } else {
14009 throw new RangeError("Invalid normalization form: " + form);
14010 }
14011 };
14012
14013 unorm.shimApplied = true;
14014 }
14015 }(this));
14016 </script>
14017 <script>/*!
14018 * jQuery JavaScript Library v3.2.1
14019 * https://jquery.com/
14020 *
14021 * Includes Sizzle.js
14022 * https://sizzlejs.com/
14023 *
14024 * Copyright JS Foundation and other contributors
14025 * Released under the MIT license
14026 * https://jquery.org/license
14027 *
14028 * Date: 2017-03-20T18:59Z
14029 */
14030 ( function( global, factory ) {
14031
14032 "use strict";
14033
14034 if ( typeof module === "object" && typeof module.exports === "object" ) {
14035
14036 // For CommonJS and CommonJS-like environments where a proper `window`
14037 // is present, execute the factory and get jQuery.
14038 // For environments that do not have a `window` with a `document`
14039 // (such as Node.js), expose a factory as module.exports.
14040 // This accentuates the need for the creation of a real `window`.
14041 // e.g. var jQuery = require("jquery")(window);
14042 // See ticket #14549 for more info.
14043 module.exports = global.document ?
14044 factory( global, true ) :
14045 function( w ) {
14046 if ( !w.document ) {
14047 throw new Error( "jQuery requires a window with a document" );
14048 }
14049 return factory( w );
14050 };
14051 } else {
14052 factory( global );
14053 }
14054
14055 // Pass this if window is not defined yet
14056 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14057
14058 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14059 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14060 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14061 // enough that all such attempts are guarded in a try block.
14062 "use strict";
14063
14064 var arr = [];
14065
14066 var document = window.document;
14067
14068 var getProto = Object.getPrototypeOf;
14069
14070 var slice = arr.slice;
14071
14072 var concat = arr.concat;
14073
14074 var push = arr.push;
14075
14076 var indexOf = arr.indexOf;
14077
14078 var class2type = {};
14079
14080 var toString = class2type.toString;
14081
14082 var hasOwn = class2type.hasOwnProperty;
14083
14084 var fnToString = hasOwn.toString;
14085
14086 var ObjectFunctionString = fnToString.call( Object );
14087
14088 var support = {};
14089
14090
14091
14092 function DOMEval( code, doc ) {
14093 doc = doc || document;
14094
14095 var script = doc.createElement( "script" );
14096
14097 script.text = code;
14098 doc.head.appendChild( script ).parentNode.removeChild( script );
14099 }
14100 /* global Symbol */
14101 // Defining this global in .eslintrc.json would create a danger of using the global
14102 // unguarded in another place, it seems safer to define global only for this module
14103
14104
14105
14106 var
14107 version = "3.2.1",
14108
14109 // Define a local copy of jQuery
14110 jQuery = function( selector, context ) {
14111
14112 // The jQuery object is actually just the init constructor 'enhanced'
14113 // Need init if jQuery is called (just allow error to be thrown if not included)
14114 return new jQuery.fn.init( selector, context );
14115 },
14116
14117 // Support: Android <=4.0 only
14118 // Make sure we trim BOM and NBSP
14119 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14120
14121 // Matches dashed string for camelizing
14122 rmsPrefix = /^-ms-/,
14123 rdashAlpha = /-([a-z])/g,
14124
14125 // Used by jQuery.camelCase as callback to replace()
14126 fcamelCase = function( all, letter ) {
14127 return letter.toUpperCase();
14128 };
14129
14130 jQuery.fn = jQuery.prototype = {
14131
14132 // The current version of jQuery being used
14133 jquery: version,
14134
14135 constructor: jQuery,
14136
14137 // The default length of a jQuery object is 0
14138 length: 0,
14139
14140 toArray: function() {
14141 return slice.call( this );
14142 },
14143
14144 // Get the Nth element in the matched element set OR
14145 // Get the whole matched element set as a clean array
14146 get: function( num ) {
14147
14148 // Return all the elements in a clean array
14149 if ( num == null ) {
14150 return slice.call( this );
14151 }
14152
14153 // Return just the one element from the set
14154 return num < 0 ? this[ num + this.length ] : this[ num ];
14155 },
14156
14157 // Take an array of elements and push it onto the stack
14158 // (returning the new matched element set)
14159 pushStack: function( elems ) {
14160
14161 // Build a new jQuery matched element set
14162 var ret = jQuery.merge( this.constructor(), elems );
14163
14164 // Add the old object onto the stack (as a reference)
14165 ret.prevObject = this;
14166
14167 // Return the newly-formed element set
14168 return ret;
14169 },
14170
14171 // Execute a callback for every element in the matched set.
14172 each: function( callback ) {
14173 return jQuery.each( this, callback );
14174 },
14175
14176 map: function( callback ) {
14177 return this.pushStack( jQuery.map( this, function( elem, i ) {
14178 return callback.call( elem, i, elem );
14179 } ) );
14180 },
14181
14182 slice: function() {
14183 return this.pushStack( slice.apply( this, arguments ) );
14184 },
14185
14186 first: function() {
14187 return this.eq( 0 );
14188 },
14189
14190 last: function() {
14191 return this.eq( -1 );
14192 },
14193
14194 eq: function( i ) {
14195 var len = this.length,
14196 j = +i + ( i < 0 ? len : 0 );
14197 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14198 },
14199
14200 end: function() {
14201 return this.prevObject || this.constructor();
14202 },
14203
14204 // For internal use only.
14205 // Behaves like an Array's method, not like a jQuery method.
14206 push: push,
14207 sort: arr.sort,
14208 splice: arr.splice
14209 };
14210
14211 jQuery.extend = jQuery.fn.extend = function() {
14212 var options, name, src, copy, copyIsArray, clone,
14213 target = arguments[ 0 ] || {},
14214 i = 1,
14215 length = arguments.length,
14216 deep = false;
14217
14218 // Handle a deep copy situation
14219 if ( typeof target === "boolean" ) {
14220 deep = target;
14221
14222 // Skip the boolean and the target
14223 target = arguments[ i ] || {};
14224 i++;
14225 }
14226
14227 // Handle case when target is a string or something (possible in deep copy)
14228 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14229 target = {};
14230 }
14231
14232 // Extend jQuery itself if only one argument is passed
14233 if ( i === length ) {
14234 target = this;
14235 i--;
14236 }
14237
14238 for ( ; i < length; i++ ) {
14239
14240 // Only deal with non-null/undefined values
14241 if ( ( options = arguments[ i ] ) != null ) {
14242
14243 // Extend the base object
14244 for ( name in options ) {
14245 src = target[ name ];
14246 copy = options[ name ];
14247
14248 // Prevent never-ending loop
14249 if ( target === copy ) {
14250 continue;
14251 }
14252
14253 // Recurse if we're merging plain objects or arrays
14254 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14255 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14256
14257 if ( copyIsArray ) {
14258 copyIsArray = false;
14259 clone = src && Array.isArray( src ) ? src : [];
14260
14261 } else {
14262 clone = src && jQuery.isPlainObject( src ) ? src : {};
14263 }
14264
14265 // Never move original objects, clone them
14266 target[ name ] = jQuery.extend( deep, clone, copy );
14267
14268 // Don't bring in undefined values
14269 } else if ( copy !== undefined ) {
14270 target[ name ] = copy;
14271 }
14272 }
14273 }
14274 }
14275
14276 // Return the modified object
14277 return target;
14278 };
14279
14280 jQuery.extend( {
14281
14282 // Unique for each copy of jQuery on the page
14283 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14284
14285 // Assume jQuery is ready without the ready module
14286 isReady: true,
14287
14288 error: function( msg ) {
14289 throw new Error( msg );
14290 },
14291
14292 noop: function() {},
14293
14294 isFunction: function( obj ) {
14295 return jQuery.type( obj ) === "function";
14296 },
14297
14298 isWindow: function( obj ) {
14299 return obj != null && obj === obj.window;
14300 },
14301
14302 isNumeric: function( obj ) {
14303
14304 // As of jQuery 3.0, isNumeric is limited to
14305 // strings and numbers (primitives or objects)
14306 // that can be coerced to finite numbers (gh-2662)
14307 var type = jQuery.type( obj );
14308 return ( type === "number" || type === "string" ) &&
14309
14310 // parseFloat NaNs numeric-cast false positives ("")
14311 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14312 // subtraction forces infinities to NaN
14313 !isNaN( obj - parseFloat( obj ) );
14314 },
14315
14316 isPlainObject: function( obj ) {
14317 var proto, Ctor;
14318
14319 // Detect obvious negatives
14320 // Use toString instead of jQuery.type to catch host objects
14321 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14322 return false;
14323 }
14324
14325 proto = getProto( obj );
14326
14327 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14328 if ( !proto ) {
14329 return true;
14330 }
14331
14332 // Objects with prototype are plain iff they were constructed by a global Object function
14333 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14334 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14335 },
14336
14337 isEmptyObject: function( obj ) {
14338
14339 /* eslint-disable no-unused-vars */
14340 // See https://github.com/eslint/eslint/issues/6125
14341 var name;
14342
14343 for ( name in obj ) {
14344 return false;
14345 }
14346 return true;
14347 },
14348
14349 type: function( obj ) {
14350 if ( obj == null ) {
14351 return obj + "";
14352 }
14353
14354 // Support: Android <=2.3 only (functionish RegExp)
14355 return typeof obj === "object" || typeof obj === "function" ?
14356 class2type[ toString.call( obj ) ] || "object" :
14357 typeof obj;
14358 },
14359
14360 // Evaluates a script in a global context
14361 globalEval: function( code ) {
14362 DOMEval( code );
14363 },
14364
14365 // Convert dashed to camelCase; used by the css and data modules
14366 // Support: IE <=9 - 11, Edge 12 - 13
14367 // Microsoft forgot to hump their vendor prefix (#9572)
14368 camelCase: function( string ) {
14369 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14370 },
14371
14372 each: function( obj, callback ) {
14373 var length, i = 0;
14374
14375 if ( isArrayLike( obj ) ) {
14376 length = obj.length;
14377 for ( ; i < length; i++ ) {
14378 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14379 break;
14380 }
14381 }
14382 } else {
14383 for ( i in obj ) {
14384 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14385 break;
14386 }
14387 }
14388 }
14389
14390 return obj;
14391 },
14392
14393 // Support: Android <=4.0 only
14394 trim: function( text ) {
14395 return text == null ?
14396 "" :
14397 ( text + "" ).replace( rtrim, "" );
14398 },
14399
14400 // results is for internal usage only
14401 makeArray: function( arr, results ) {
14402 var ret = results || [];
14403
14404 if ( arr != null ) {
14405 if ( isArrayLike( Object( arr ) ) ) {
14406 jQuery.merge( ret,
14407 typeof arr === "string" ?
14408 [ arr ] : arr
14409 );
14410 } else {
14411 push.call( ret, arr );
14412 }
14413 }
14414
14415 return ret;
14416 },
14417
14418 inArray: function( elem, arr, i ) {
14419 return arr == null ? -1 : indexOf.call( arr, elem, i );
14420 },
14421
14422 // Support: Android <=4.0 only, PhantomJS 1 only
14423 // push.apply(_, arraylike) throws on ancient WebKit
14424 merge: function( first, second ) {
14425 var len = +second.length,
14426 j = 0,
14427 i = first.length;
14428
14429 for ( ; j < len; j++ ) {
14430 first[ i++ ] = second[ j ];
14431 }
14432
14433 first.length = i;
14434
14435 return first;
14436 },
14437
14438 grep: function( elems, callback, invert ) {
14439 var callbackInverse,
14440 matches = [],
14441 i = 0,
14442 length = elems.length,
14443 callbackExpect = !invert;
14444
14445 // Go through the array, only saving the items
14446 // that pass the validator function
14447 for ( ; i < length; i++ ) {
14448 callbackInverse = !callback( elems[ i ], i );
14449 if ( callbackInverse !== callbackExpect ) {
14450 matches.push( elems[ i ] );
14451 }
14452 }
14453
14454 return matches;
14455 },
14456
14457 // arg is for internal usage only
14458 map: function( elems, callback, arg ) {
14459 var length, value,
14460 i = 0,
14461 ret = [];
14462
14463 // Go through the array, translating each of the items to their new values
14464 if ( isArrayLike( elems ) ) {
14465 length = elems.length;
14466 for ( ; i < length; i++ ) {
14467 value = callback( elems[ i ], i, arg );
14468
14469 if ( value != null ) {
14470 ret.push( value );
14471 }
14472 }
14473
14474 // Go through every key on the object,
14475 } else {
14476 for ( i in elems ) {
14477 value = callback( elems[ i ], i, arg );
14478
14479 if ( value != null ) {
14480 ret.push( value );
14481 }
14482 }
14483 }
14484
14485 // Flatten any nested arrays
14486 return concat.apply( [], ret );
14487 },
14488
14489 // A global GUID counter for objects
14490 guid: 1,
14491
14492 // Bind a function to a context, optionally partially applying any
14493 // arguments.
14494 proxy: function( fn, context ) {
14495 var tmp, args, proxy;
14496
14497 if ( typeof context === "string" ) {
14498 tmp = fn[ context ];
14499 context = fn;
14500 fn = tmp;
14501 }
14502
14503 // Quick check to determine if target is callable, in the spec
14504 // this throws a TypeError, but we will just return undefined.
14505 if ( !jQuery.isFunction( fn ) ) {
14506 return undefined;
14507 }
14508
14509 // Simulated bind
14510 args = slice.call( arguments, 2 );
14511 proxy = function() {
14512 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14513 };
14514
14515 // Set the guid of unique handler to the same of original handler, so it can be removed
14516 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14517
14518 return proxy;
14519 },
14520
14521 now: Date.now,
14522
14523 // jQuery.support is not used in Core but other projects attach their
14524 // properties to it so it needs to exist.
14525 support: support
14526 } );
14527
14528 if ( typeof Symbol === "function" ) {
14529 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14530 }
14531
14532 // Populate the class2type map
14533 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14534 function( i, name ) {
14535 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14536 } );
14537
14538 function isArrayLike( obj ) {
14539
14540 // Support: real iOS 8.2 only (not reproducible in simulator)
14541 // `in` check used to prevent JIT error (gh-2145)
14542 // hasOwn isn't used here due to false negatives
14543 // regarding Nodelist length in IE
14544 var length = !!obj && "length" in obj && obj.length,
14545 type = jQuery.type( obj );
14546
14547 if ( type === "function" || jQuery.isWindow( obj ) ) {
14548 return false;
14549 }
14550
14551 return type === "array" || length === 0 ||
14552 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14553 }
14554 var Sizzle =
14555 /*!
14556 * Sizzle CSS Selector Engine v2.3.3
14557 * https://sizzlejs.com/
14558 *
14559 * Copyright jQuery Foundation and other contributors
14560 * Released under the MIT license
14561 * http://jquery.org/license
14562 *
14563 * Date: 2016-08-08
14564 */
14565 (function( window ) {
14566
14567 var i,
14568 support,
14569 Expr,
14570 getText,
14571 isXML,
14572 tokenize,
14573 compile,
14574 select,
14575 outermostContext,
14576 sortInput,
14577 hasDuplicate,
14578
14579 // Local document vars
14580 setDocument,
14581 document,
14582 docElem,
14583 documentIsHTML,
14584 rbuggyQSA,
14585 rbuggyMatches,
14586 matches,
14587 contains,
14588
14589 // Instance-specific data
14590 expando = "sizzle" + 1 * new Date(),
14591 preferredDoc = window.document,
14592 dirruns = 0,
14593 done = 0,
14594 classCache = createCache(),
14595 tokenCache = createCache(),
14596 compilerCache = createCache(),
14597 sortOrder = function( a, b ) {
14598 if ( a === b ) {
14599 hasDuplicate = true;
14600 }
14601 return 0;
14602 },
14603
14604 // Instance methods
14605 hasOwn = ({}).hasOwnProperty,
14606 arr = [],
14607 pop = arr.pop,
14608 push_native = arr.push,
14609 push = arr.push,
14610 slice = arr.slice,
14611 // Use a stripped-down indexOf as it's faster than native
14612 // https://jsperf.com/thor-indexof-vs-for/5
14613 indexOf = function( list, elem ) {
14614 var i = 0,
14615 len = list.length;
14616 for ( ; i < len; i++ ) {
14617 if ( list[i] === elem ) {
14618 return i;
14619 }
14620 }
14621 return -1;
14622 },
14623
14624 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14625
14626 // Regular expressions
14627
14628 // http://www.w3.org/TR/css3-selectors/#whitespace
14629 whitespace = "[\\x20\\t\\r\\n\\f]",
14630
14631 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14632 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14633
14634 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14635 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14636 // Operator (capture 2)
14637 "*([*^$|!~]?=)" + whitespace +
14638 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14639 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14640 "*\\]",
14641
14642 pseudos = ":(" + identifier + ")(?:\\((" +
14643 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14644 // 1. quoted (capture 3; capture 4 or capture 5)
14645 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14646 // 2. simple (capture 6)
14647 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14648 // 3. anything else (capture 2)
14649 ".*" +
14650 ")\\)|)",
14651
14652 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14653 rwhitespace = new RegExp( whitespace + "+", "g" ),
14654 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14655
14656 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14657 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14658
14659 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14660
14661 rpseudo = new RegExp( pseudos ),
14662 ridentifier = new RegExp( "^" + identifier + "$" ),
14663
14664 matchExpr = {
14665 "ID": new RegExp( "^#(" + identifier + ")" ),
14666 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14667 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14668 "ATTR": new RegExp( "^" + attributes ),
14669 "PSEUDO": new RegExp( "^" + pseudos ),
14670 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14671 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14672 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14673 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14674 // For use in libraries implementing .is()
14675 // We use this for POS matching in `select`
14676 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14677 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14678 },
14679
14680 rinputs = /^(?:input|select|textarea|button)$/i,
14681 rheader = /^h\d$/i,
14682
14683 rnative = /^[^{]+\{\s*\[native \w/,
14684
14685 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14686 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14687
14688 rsibling = /[+~]/,
14689
14690 // CSS escapes
14691 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14692 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14693 funescape = function( _, escaped, escapedWhitespace ) {
14694 var high = "0x" + escaped - 0x10000;
14695 // NaN means non-codepoint
14696 // Support: Firefox<24
14697 // Workaround erroneous numeric interpretation of +"0x"
14698 return high !== high || escapedWhitespace ?
14699 escaped :
14700 high < 0 ?
14701 // BMP codepoint
14702 String.fromCharCode( high + 0x10000 ) :
14703 // Supplemental Plane codepoint (surrogate pair)
14704 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14705 },
14706
14707 // CSS string/identifier serialization
14708 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14709 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14710 fcssescape = function( ch, asCodePoint ) {
14711 if ( asCodePoint ) {
14712
14713 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14714 if ( ch === "\0" ) {
14715 return "\uFFFD";
14716 }
14717
14718 // Control characters and (dependent upon position) numbers get escaped as code points
14719 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14720 }
14721
14722 // Other potentially-special ASCII characters get backslash-escaped
14723 return "\\" + ch;
14724 },
14725
14726 // Used for iframes
14727 // See setDocument()
14728 // Removing the function wrapper causes a "Permission Denied"
14729 // error in IE
14730 unloadHandler = function() {
14731 setDocument();
14732 },
14733
14734 disabledAncestor = addCombinator(
14735 function( elem ) {
14736 return elem.disabled === true && ("form" in elem || "label" in elem);
14737 },
14738 { dir: "parentNode", next: "legend" }
14739 );
14740
14741 // Optimize for push.apply( _, NodeList )
14742 try {
14743 push.apply(
14744 (arr = slice.call( preferredDoc.childNodes )),
14745 preferredDoc.childNodes
14746 );
14747 // Support: Android<4.0
14748 // Detect silently failing push.apply
14749 arr[ preferredDoc.childNodes.length ].nodeType;
14750 } catch ( e ) {
14751 push = { apply: arr.length ?
14752
14753 // Leverage slice if possible
14754 function( target, els ) {
14755 push_native.apply( target, slice.call(els) );
14756 } :
14757
14758 // Support: IE<9
14759 // Otherwise append directly
14760 function( target, els ) {
14761 var j = target.length,
14762 i = 0;
14763 // Can't trust NodeList.length
14764 while ( (target[j++] = els[i++]) ) {}
14765 target.length = j - 1;
14766 }
14767 };
14768 }
14769
14770 function Sizzle( selector, context, results, seed ) {
14771 var m, i, elem, nid, match, groups, newSelector,
14772 newContext = context && context.ownerDocument,
14773
14774 // nodeType defaults to 9, since context defaults to document
14775 nodeType = context ? context.nodeType : 9;
14776
14777 results = results || [];
14778
14779 // Return early from calls with invalid selector or context
14780 if ( typeof selector !== "string" || !selector ||
14781 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14782
14783 return results;
14784 }
14785
14786 // Try to shortcut find operations (as opposed to filters) in HTML documents
14787 if ( !seed ) {
14788
14789 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14790 setDocument( context );
14791 }
14792 context = context || document;
14793
14794 if ( documentIsHTML ) {
14795
14796 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14797 // (excepting DocumentFragment context, where the methods don't exist)
14798 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14799
14800 // ID selector
14801 if ( (m = match[1]) ) {
14802
14803 // Document context
14804 if ( nodeType === 9 ) {
14805 if ( (elem = context.getElementById( m )) ) {
14806
14807 // Support: IE, Opera, Webkit
14808 // TODO: identify versions
14809 // getElementById can match elements by name instead of ID
14810 if ( elem.id === m ) {
14811 results.push( elem );
14812 return results;
14813 }
14814 } else {
14815 return results;
14816 }
14817
14818 // Element context
14819 } else {
14820
14821 // Support: IE, Opera, Webkit
14822 // TODO: identify versions
14823 // getElementById can match elements by name instead of ID
14824 if ( newContext && (elem = newContext.getElementById( m )) &&
14825 contains( context, elem ) &&
14826 elem.id === m ) {
14827
14828 results.push( elem );
14829 return results;
14830 }
14831 }
14832
14833 // Type selector
14834 } else if ( match[2] ) {
14835 push.apply( results, context.getElementsByTagName( selector ) );
14836 return results;
14837
14838 // Class selector
14839 } else if ( (m = match[3]) && support.getElementsByClassName &&
14840 context.getElementsByClassName ) {
14841
14842 push.apply( results, context.getElementsByClassName( m ) );
14843 return results;
14844 }
14845 }
14846
14847 // Take advantage of querySelectorAll
14848 if ( support.qsa &&
14849 !compilerCache[ selector + " " ] &&
14850 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14851
14852 if ( nodeType !== 1 ) {
14853 newContext = context;
14854 newSelector = selector;
14855
14856 // qSA looks outside Element context, which is not what we want
14857 // Thanks to Andrew Dupont for this workaround technique
14858 // Support: IE <=8
14859 // Exclude object elements
14860 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14861
14862 // Capture the context ID, setting it first if necessary
14863 if ( (nid = context.getAttribute( "id" )) ) {
14864 nid = nid.replace( rcssescape, fcssescape );
14865 } else {
14866 context.setAttribute( "id", (nid = expando) );
14867 }
14868
14869 // Prefix every selector in the list
14870 groups = tokenize( selector );
14871 i = groups.length;
14872 while ( i-- ) {
14873 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14874 }
14875 newSelector = groups.join( "," );
14876
14877 // Expand context for sibling selectors
14878 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14879 context;
14880 }
14881
14882 if ( newSelector ) {
14883 try {
14884 push.apply( results,
14885 newContext.querySelectorAll( newSelector )
14886 );
14887 return results;
14888 } catch ( qsaError ) {
14889 } finally {
14890 if ( nid === expando ) {
14891 context.removeAttribute( "id" );
14892 }
14893 }
14894 }
14895 }
14896 }
14897 }
14898
14899 // All others
14900 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14901 }
14902
14903 /**
14904 * Create key-value caches of limited size
14905 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14906 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14907 * deleting the oldest entry
14908 */
14909 function createCache() {
14910 var keys = [];
14911
14912 function cache( key, value ) {
14913 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14914 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14915 // Only keep the most recent entries
14916 delete cache[ keys.shift() ];
14917 }
14918 return (cache[ key + " " ] = value);
14919 }
14920 return cache;
14921 }
14922
14923 /**
14924 * Mark a function for special use by Sizzle
14925 * @param {Function} fn The function to mark
14926 */
14927 function markFunction( fn ) {
14928 fn[ expando ] = true;
14929 return fn;
14930 }
14931
14932 /**
14933 * Support testing using an element
14934 * @param {Function} fn Passed the created element and returns a boolean result
14935 */
14936 function assert( fn ) {
14937 var el = document.createElement("fieldset");
14938
14939 try {
14940 return !!fn( el );
14941 } catch (e) {
14942 return false;
14943 } finally {
14944 // Remove from its parent by default
14945 if ( el.parentNode ) {
14946 el.parentNode.removeChild( el );
14947 }
14948 // release memory in IE
14949 el = null;
14950 }
14951 }
14952
14953 /**
14954 * Adds the same handler for all of the specified attrs
14955 * @param {String} attrs Pipe-separated list of attributes
14956 * @param {Function} handler The method that will be applied
14957 */
14958 function addHandle( attrs, handler ) {
14959 var arr = attrs.split("|"),
14960 i = arr.length;
14961
14962 while ( i-- ) {
14963 Expr.attrHandle[ arr[i] ] = handler;
14964 }
14965 }
14966
14967 /**
14968 * Checks document order of two siblings
14969 * @param {Element} a
14970 * @param {Element} b
14971 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14972 */
14973 function siblingCheck( a, b ) {
14974 var cur = b && a,
14975 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14976 a.sourceIndex - b.sourceIndex;
14977
14978 // Use IE sourceIndex if available on both nodes
14979 if ( diff ) {
14980 return diff;
14981 }
14982
14983 // Check if b follows a
14984 if ( cur ) {
14985 while ( (cur = cur.nextSibling) ) {
14986 if ( cur === b ) {
14987 return -1;
14988 }
14989 }
14990 }
14991
14992 return a ? 1 : -1;
14993 }
14994
14995 /**
14996 * Returns a function to use in pseudos for input types
14997 * @param {String} type
14998 */
14999 function createInputPseudo( type ) {
15000 return function( elem ) {
15001 var name = elem.nodeName.toLowerCase();
15002 return name === "input" && elem.type === type;
15003 };
15004 }
15005
15006 /**
15007 * Returns a function to use in pseudos for buttons
15008 * @param {String} type
15009 */
15010 function createButtonPseudo( type ) {
15011 return function( elem ) {
15012 var name = elem.nodeName.toLowerCase();
15013 return (name === "input" || name === "button") && elem.type === type;
15014 };
15015 }
15016
15017 /**
15018 * Returns a function to use in pseudos for :enabled/:disabled
15019 * @param {Boolean} disabled true for :disabled; false for :enabled
15020 */
15021 function createDisabledPseudo( disabled ) {
15022
15023 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
15024 return function( elem ) {
15025
15026 // Only certain elements can match :enabled or :disabled
15027 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
15028 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
15029 if ( "form" in elem ) {
15030
15031 // Check for inherited disabledness on relevant non-disabled elements:
15032 // * listed form-associated elements in a disabled fieldset
15033 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15034 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15035 // * option elements in a disabled optgroup
15036 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15037 // All such elements have a "form" property.
15038 if ( elem.parentNode && elem.disabled === false ) {
15039
15040 // Option elements defer to a parent optgroup if present
15041 if ( "label" in elem ) {
15042 if ( "label" in elem.parentNode ) {
15043 return elem.parentNode.disabled === disabled;
15044 } else {
15045 return elem.disabled === disabled;
15046 }
15047 }
15048
15049 // Support: IE 6 - 11
15050 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15051 return elem.isDisabled === disabled ||
15052
15053 // Where there is no isDisabled, check manually
15054 /* jshint -W018 */
15055 elem.isDisabled !== !disabled &&
15056 disabledAncestor( elem ) === disabled;
15057 }
15058
15059 return elem.disabled === disabled;
15060
15061 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15062 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15063 // even exist on them, let alone have a boolean value.
15064 } else if ( "label" in elem ) {
15065 return elem.disabled === disabled;
15066 }
15067
15068 // Remaining elements are neither :enabled nor :disabled
15069 return false;
15070 };
15071 }
15072
15073 /**
15074 * Returns a function to use in pseudos for positionals
15075 * @param {Function} fn
15076 */
15077 function createPositionalPseudo( fn ) {
15078 return markFunction(function( argument ) {
15079 argument = +argument;
15080 return markFunction(function( seed, matches ) {
15081 var j,
15082 matchIndexes = fn( [], seed.length, argument ),
15083 i = matchIndexes.length;
15084
15085 // Match elements found at the specified indexes
15086 while ( i-- ) {
15087 if ( seed[ (j = matchIndexes[i]) ] ) {
15088 seed[j] = !(matches[j] = seed[j]);
15089 }
15090 }
15091 });
15092 });
15093 }
15094
15095 /**
15096 * Checks a node for validity as a Sizzle context
15097 * @param {Element|Object=} context
15098 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15099 */
15100 function testContext( context ) {
15101 return context && typeof context.getElementsByTagName !== "undefined" && context;
15102 }
15103
15104 // Expose support vars for convenience
15105 support = Sizzle.support = {};
15106
15107 /**
15108 * Detects XML nodes
15109 * @param {Element|Object} elem An element or a document
15110 * @returns {Boolean} True iff elem is a non-HTML XML node
15111 */
15112 isXML = Sizzle.isXML = function( elem ) {
15113 // documentElement is verified for cases where it doesn't yet exist
15114 // (such as loading iframes in IE - #4833)
15115 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15116 return documentElement ? documentElement.nodeName !== "HTML" : false;
15117 };
15118
15119 /**
15120 * Sets document-related variables once based on the current document
15121 * @param {Element|Object} [doc] An element or document object to use to set the document
15122 * @returns {Object} Returns the current document
15123 */
15124 setDocument = Sizzle.setDocument = function( node ) {
15125 var hasCompare, subWindow,
15126 doc = node ? node.ownerDocument || node : preferredDoc;
15127
15128 // Return early if doc is invalid or already selected
15129 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15130 return document;
15131 }
15132
15133 // Update global variables
15134 document = doc;
15135 docElem = document.documentElement;
15136 documentIsHTML = !isXML( document );
15137
15138 // Support: IE 9-11, Edge
15139 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15140 if ( preferredDoc !== document &&
15141 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15142
15143 // Support: IE 11, Edge
15144 if ( subWindow.addEventListener ) {
15145 subWindow.addEventListener( "unload", unloadHandler, false );
15146
15147 // Support: IE 9 - 10 only
15148 } else if ( subWindow.attachEvent ) {
15149 subWindow.attachEvent( "onunload", unloadHandler );
15150 }
15151 }
15152
15153 /* Attributes
15154 ---------------------------------------------------------------------- */
15155
15156 // Support: IE<8
15157 // Verify that getAttribute really returns attributes and not properties
15158 // (excepting IE8 booleans)
15159 support.attributes = assert(function( el ) {
15160 el.className = "i";
15161 return !el.getAttribute("className");
15162 });
15163
15164 /* getElement(s)By*
15165 ---------------------------------------------------------------------- */
15166
15167 // Check if getElementsByTagName("*") returns only elements
15168 support.getElementsByTagName = assert(function( el ) {
15169 el.appendChild( document.createComment("") );
15170 return !el.getElementsByTagName("*").length;
15171 });
15172
15173 // Support: IE<9
15174 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15175
15176 // Support: IE<10
15177 // Check if getElementById returns elements by name
15178 // The broken getElementById methods don't pick up programmatically-set names,
15179 // so use a roundabout getElementsByName test
15180 support.getById = assert(function( el ) {
15181 docElem.appendChild( el ).id = expando;
15182 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15183 });
15184
15185 // ID filter and find
15186 if ( support.getById ) {
15187 Expr.filter["ID"] = function( id ) {
15188 var attrId = id.replace( runescape, funescape );
15189 return function( elem ) {
15190 return elem.getAttribute("id") === attrId;
15191 };
15192 };
15193 Expr.find["ID"] = function( id, context ) {
15194 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15195 var elem = context.getElementById( id );
15196 return elem ? [ elem ] : [];
15197 }
15198 };
15199 } else {
15200 Expr.filter["ID"] = function( id ) {
15201 var attrId = id.replace( runescape, funescape );
15202 return function( elem ) {
15203 var node = typeof elem.getAttributeNode !== "undefined" &&
15204 elem.getAttributeNode("id");
15205 return node && node.value === attrId;
15206 };
15207 };
15208
15209 // Support: IE 6 - 7 only
15210 // getElementById is not reliable as a find shortcut
15211 Expr.find["ID"] = function( id, context ) {
15212 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15213 var node, i, elems,
15214 elem = context.getElementById( id );
15215
15216 if ( elem ) {
15217
15218 // Verify the id attribute
15219 node = elem.getAttributeNode("id");
15220 if ( node && node.value === id ) {
15221 return [ elem ];
15222 }
15223
15224 // Fall back on getElementsByName
15225 elems = context.getElementsByName( id );
15226 i = 0;
15227 while ( (elem = elems[i++]) ) {
15228 node = elem.getAttributeNode("id");
15229 if ( node && node.value === id ) {
15230 return [ elem ];
15231 }
15232 }
15233 }
15234
15235 return [];
15236 }
15237 };
15238 }
15239
15240 // Tag
15241 Expr.find["TAG"] = support.getElementsByTagName ?
15242 function( tag, context ) {
15243 if ( typeof context.getElementsByTagName !== "undefined" ) {
15244 return context.getElementsByTagName( tag );
15245
15246 // DocumentFragment nodes don't have gEBTN
15247 } else if ( support.qsa ) {
15248 return context.querySelectorAll( tag );
15249 }
15250 } :
15251
15252 function( tag, context ) {
15253 var elem,
15254 tmp = [],
15255 i = 0,
15256 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15257 results = context.getElementsByTagName( tag );
15258
15259 // Filter out possible comments
15260 if ( tag === "*" ) {
15261 while ( (elem = results[i++]) ) {
15262 if ( elem.nodeType === 1 ) {
15263 tmp.push( elem );
15264 }
15265 }
15266
15267 return tmp;
15268 }
15269 return results;
15270 };
15271
15272 // Class
15273 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15274 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15275 return context.getElementsByClassName( className );
15276 }
15277 };
15278
15279 /* QSA/matchesSelector
15280 ---------------------------------------------------------------------- */
15281
15282 // QSA and matchesSelector support
15283
15284 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15285 rbuggyMatches = [];
15286
15287 // qSa(:focus) reports false when true (Chrome 21)
15288 // We allow this because of a bug in IE8/9 that throws an error
15289 // whenever `document.activeElement` is accessed on an iframe
15290 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15291 // See https://bugs.jquery.com/ticket/13378
15292 rbuggyQSA = [];
15293
15294 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15295 // Build QSA regex
15296 // Regex strategy adopted from Diego Perini
15297 assert(function( el ) {
15298 // Select is set to empty string on purpose
15299 // This is to test IE's treatment of not explicitly
15300 // setting a boolean content attribute,
15301 // since its presence should be enough
15302 // https://bugs.jquery.com/ticket/12359
15303 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15304 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15305 "<option selected=''></option></select>";
15306
15307 // Support: IE8, Opera 11-12.16
15308 // Nothing should be selected when empty strings follow ^= or $= or *=
15309 // The test attribute must be unknown in Opera but "safe" for WinRT
15310 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15311 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15312 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15313 }
15314
15315 // Support: IE8
15316 // Boolean attributes and "value" are not treated correctly
15317 if ( !el.querySelectorAll("[selected]").length ) {
15318 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15319 }
15320
15321 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15322 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15323 rbuggyQSA.push("~=");
15324 }
15325
15326 // Webkit/Opera - :checked should return selected option elements
15327 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15328 // IE8 throws error here and will not see later tests
15329 if ( !el.querySelectorAll(":checked").length ) {
15330 rbuggyQSA.push(":checked");
15331 }
15332
15333 // Support: Safari 8+, iOS 8+
15334 // https://bugs.webkit.org/show_bug.cgi?id=136851
15335 // In-page `selector#id sibling-combinator selector` fails
15336 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15337 rbuggyQSA.push(".#.+[+~]");
15338 }
15339 });
15340
15341 assert(function( el ) {
15342 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15343 "<select disabled='disabled'><option/></select>";
15344
15345 // Support: Windows 8 Native Apps
15346 // The type and name attributes are restricted during .innerHTML assignment
15347 var input = document.createElement("input");
15348 input.setAttribute( "type", "hidden" );
15349 el.appendChild( input ).setAttribute( "name", "D" );
15350
15351 // Support: IE8
15352 // Enforce case-sensitivity of name attribute
15353 if ( el.querySelectorAll("[name=d]").length ) {
15354 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15355 }
15356
15357 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15358 // IE8 throws error here and will not see later tests
15359 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15360 rbuggyQSA.push( ":enabled", ":disabled" );
15361 }
15362
15363 // Support: IE9-11+
15364 // IE's :disabled selector does not pick up the children of disabled fieldsets
15365 docElem.appendChild( el ).disabled = true;
15366 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15367 rbuggyQSA.push( ":enabled", ":disabled" );
15368 }
15369
15370 // Opera 10-11 does not throw on post-comma invalid pseudos
15371 el.querySelectorAll("*,:x");
15372 rbuggyQSA.push(",.*:");
15373 });
15374 }
15375
15376 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15377 docElem.webkitMatchesSelector ||
15378 docElem.mozMatchesSelector ||
15379 docElem.oMatchesSelector ||
15380 docElem.msMatchesSelector) )) ) {
15381
15382 assert(function( el ) {
15383 // Check to see if it's possible to do matchesSelector
15384 // on a disconnected node (IE 9)
15385 support.disconnectedMatch = matches.call( el, "*" );
15386
15387 // This should fail with an exception
15388 // Gecko does not error, returns false instead
15389 matches.call( el, "[s!='']:x" );
15390 rbuggyMatches.push( "!=", pseudos );
15391 });
15392 }
15393
15394 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15395 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15396
15397 /* Contains
15398 ---------------------------------------------------------------------- */
15399 hasCompare = rnative.test( docElem.compareDocumentPosition );
15400
15401 // Element contains another
15402 // Purposefully self-exclusive
15403 // As in, an element does not contain itself
15404 contains = hasCompare || rnative.test( docElem.contains ) ?
15405 function( a, b ) {
15406 var adown = a.nodeType === 9 ? a.documentElement : a,
15407 bup = b && b.parentNode;
15408 return a === bup || !!( bup && bup.nodeType === 1 && (
15409 adown.contains ?
15410 adown.contains( bup ) :
15411 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15412 ));
15413 } :
15414 function( a, b ) {
15415 if ( b ) {
15416 while ( (b = b.parentNode) ) {
15417 if ( b === a ) {
15418 return true;
15419 }
15420 }
15421 }
15422 return false;
15423 };
15424
15425 /* Sorting
15426 ---------------------------------------------------------------------- */
15427
15428 // Document order sorting
15429 sortOrder = hasCompare ?
15430 function( a, b ) {
15431
15432 // Flag for duplicate removal
15433 if ( a === b ) {
15434 hasDuplicate = true;
15435 return 0;
15436 }
15437
15438 // Sort on method existence if only one input has compareDocumentPosition
15439 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15440 if ( compare ) {
15441 return compare;
15442 }
15443
15444 // Calculate position if both inputs belong to the same document
15445 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15446 a.compareDocumentPosition( b ) :
15447
15448 // Otherwise we know they are disconnected
15449 1;
15450
15451 // Disconnected nodes
15452 if ( compare & 1 ||
15453 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15454
15455 // Choose the first element that is related to our preferred document
15456 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15457 return -1;
15458 }
15459 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15460 return 1;
15461 }
15462
15463 // Maintain original order
15464 return sortInput ?
15465 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15466 0;
15467 }
15468
15469 return compare & 4 ? -1 : 1;
15470 } :
15471 function( a, b ) {
15472 // Exit early if the nodes are identical
15473 if ( a === b ) {
15474 hasDuplicate = true;
15475 return 0;
15476 }
15477
15478 var cur,
15479 i = 0,
15480 aup = a.parentNode,
15481 bup = b.parentNode,
15482 ap = [ a ],
15483 bp = [ b ];
15484
15485 // Parentless nodes are either documents or disconnected
15486 if ( !aup || !bup ) {
15487 return a === document ? -1 :
15488 b === document ? 1 :
15489 aup ? -1 :
15490 bup ? 1 :
15491 sortInput ?
15492 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15493 0;
15494
15495 // If the nodes are siblings, we can do a quick check
15496 } else if ( aup === bup ) {
15497 return siblingCheck( a, b );
15498 }
15499
15500 // Otherwise we need full lists of their ancestors for comparison
15501 cur = a;
15502 while ( (cur = cur.parentNode) ) {
15503 ap.unshift( cur );
15504 }
15505 cur = b;
15506 while ( (cur = cur.parentNode) ) {
15507 bp.unshift( cur );
15508 }
15509
15510 // Walk down the tree looking for a discrepancy
15511 while ( ap[i] === bp[i] ) {
15512 i++;
15513 }
15514
15515 return i ?
15516 // Do a sibling check if the nodes have a common ancestor
15517 siblingCheck( ap[i], bp[i] ) :
15518
15519 // Otherwise nodes in our document sort first
15520 ap[i] === preferredDoc ? -1 :
15521 bp[i] === preferredDoc ? 1 :
15522 0;
15523 };
15524
15525 return document;
15526 };
15527
15528 Sizzle.matches = function( expr, elements ) {
15529 return Sizzle( expr, null, null, elements );
15530 };
15531
15532 Sizzle.matchesSelector = function( elem, expr ) {
15533 // Set document vars if needed
15534 if ( ( elem.ownerDocument || elem ) !== document ) {
15535 setDocument( elem );
15536 }
15537
15538 // Make sure that attribute selectors are quoted
15539 expr = expr.replace( rattributeQuotes, "='$1']" );
15540
15541 if ( support.matchesSelector && documentIsHTML &&
15542 !compilerCache[ expr + " " ] &&
15543 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15544 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15545
15546 try {
15547 var ret = matches.call( elem, expr );
15548
15549 // IE 9's matchesSelector returns false on disconnected nodes
15550 if ( ret || support.disconnectedMatch ||
15551 // As well, disconnected nodes are said to be in a document
15552 // fragment in IE 9
15553 elem.document && elem.document.nodeType !== 11 ) {
15554 return ret;
15555 }
15556 } catch (e) {}
15557 }
15558
15559 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15560 };
15561
15562 Sizzle.contains = function( context, elem ) {
15563 // Set document vars if needed
15564 if ( ( context.ownerDocument || context ) !== document ) {
15565 setDocument( context );
15566 }
15567 return contains( context, elem );
15568 };
15569
15570 Sizzle.attr = function( elem, name ) {
15571 // Set document vars if needed
15572 if ( ( elem.ownerDocument || elem ) !== document ) {
15573 setDocument( elem );
15574 }
15575
15576 var fn = Expr.attrHandle[ name.toLowerCase() ],
15577 // Don't get fooled by Object.prototype properties (jQuery #13807)
15578 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15579 fn( elem, name, !documentIsHTML ) :
15580 undefined;
15581
15582 return val !== undefined ?
15583 val :
15584 support.attributes || !documentIsHTML ?
15585 elem.getAttribute( name ) :
15586 (val = elem.getAttributeNode(name)) && val.specified ?
15587 val.value :
15588 null;
15589 };
15590
15591 Sizzle.escape = function( sel ) {
15592 return (sel + "").replace( rcssescape, fcssescape );
15593 };
15594
15595 Sizzle.error = function( msg ) {
15596 throw new Error( "Syntax error, unrecognized expression: " + msg );
15597 };
15598
15599 /**
15600 * Document sorting and removing duplicates
15601 * @param {ArrayLike} results
15602 */
15603 Sizzle.uniqueSort = function( results ) {
15604 var elem,
15605 duplicates = [],
15606 j = 0,
15607 i = 0;
15608
15609 // Unless we *know* we can detect duplicates, assume their presence
15610 hasDuplicate = !support.detectDuplicates;
15611 sortInput = !support.sortStable && results.slice( 0 );
15612 results.sort( sortOrder );
15613
15614 if ( hasDuplicate ) {
15615 while ( (elem = results[i++]) ) {
15616 if ( elem === results[ i ] ) {
15617 j = duplicates.push( i );
15618 }
15619 }
15620 while ( j-- ) {
15621 results.splice( duplicates[ j ], 1 );
15622 }
15623 }
15624
15625 // Clear input after sorting to release objects
15626 // See https://github.com/jquery/sizzle/pull/225
15627 sortInput = null;
15628
15629 return results;
15630 };
15631
15632 /**
15633 * Utility function for retrieving the text value of an array of DOM nodes
15634 * @param {Array|Element} elem
15635 */
15636 getText = Sizzle.getText = function( elem ) {
15637 var node,
15638 ret = "",
15639 i = 0,
15640 nodeType = elem.nodeType;
15641
15642 if ( !nodeType ) {
15643 // If no nodeType, this is expected to be an array
15644 while ( (node = elem[i++]) ) {
15645 // Do not traverse comment nodes
15646 ret += getText( node );
15647 }
15648 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15649 // Use textContent for elements
15650 // innerText usage removed for consistency of new lines (jQuery #11153)
15651 if ( typeof elem.textContent === "string" ) {
15652 return elem.textContent;
15653 } else {
15654 // Traverse its children
15655 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15656 ret += getText( elem );
15657 }
15658 }
15659 } else if ( nodeType === 3 || nodeType === 4 ) {
15660 return elem.nodeValue;
15661 }
15662 // Do not include comment or processing instruction nodes
15663
15664 return ret;
15665 };
15666
15667 Expr = Sizzle.selectors = {
15668
15669 // Can be adjusted by the user
15670 cacheLength: 50,
15671
15672 createPseudo: markFunction,
15673
15674 match: matchExpr,
15675
15676 attrHandle: {},
15677
15678 find: {},
15679
15680 relative: {
15681 ">": { dir: "parentNode", first: true },
15682 " ": { dir: "parentNode" },
15683 "+": { dir: "previousSibling", first: true },
15684 "~": { dir: "previousSibling" }
15685 },
15686
15687 preFilter: {
15688 "ATTR": function( match ) {
15689 match[1] = match[1].replace( runescape, funescape );
15690
15691 // Move the given value to match[3] whether quoted or unquoted
15692 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15693
15694 if ( match[2] === "~=" ) {
15695 match[3] = " " + match[3] + " ";
15696 }
15697
15698 return match.slice( 0, 4 );
15699 },
15700
15701 "CHILD": function( match ) {
15702 /* matches from matchExpr["CHILD"]
15703 1 type (only|nth|...)
15704 2 what (child|of-type)
15705 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15706 4 xn-component of xn+y argument ([+-]?\d*n|)
15707 5 sign of xn-component
15708 6 x of xn-component
15709 7 sign of y-component
15710 8 y of y-component
15711 */
15712 match[1] = match[1].toLowerCase();
15713
15714 if ( match[1].slice( 0, 3 ) === "nth" ) {
15715 // nth-* requires argument
15716 if ( !match[3] ) {
15717 Sizzle.error( match[0] );
15718 }
15719
15720 // numeric x and y parameters for Expr.filter.CHILD
15721 // remember that false/true cast respectively to 0/1
15722 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15723 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15724
15725 // other types prohibit arguments
15726 } else if ( match[3] ) {
15727 Sizzle.error( match[0] );
15728 }
15729
15730 return match;
15731 },
15732
15733 "PSEUDO": function( match ) {
15734 var excess,
15735 unquoted = !match[6] && match[2];
15736
15737 if ( matchExpr["CHILD"].test( match[0] ) ) {
15738 return null;
15739 }
15740
15741 // Accept quoted arguments as-is
15742 if ( match[3] ) {
15743 match[2] = match[4] || match[5] || "";
15744
15745 // Strip excess characters from unquoted arguments
15746 } else if ( unquoted && rpseudo.test( unquoted ) &&
15747 // Get excess from tokenize (recursively)
15748 (excess = tokenize( unquoted, true )) &&
15749 // advance to the next closing parenthesis
15750 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15751
15752 // excess is a negative index
15753 match[0] = match[0].slice( 0, excess );
15754 match[2] = unquoted.slice( 0, excess );
15755 }
15756
15757 // Return only captures needed by the pseudo filter method (type and argument)
15758 return match.slice( 0, 3 );
15759 }
15760 },
15761
15762 filter: {
15763
15764 "TAG": function( nodeNameSelector ) {
15765 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15766 return nodeNameSelector === "*" ?
15767 function() { return true; } :
15768 function( elem ) {
15769 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15770 };
15771 },
15772
15773 "CLASS": function( className ) {
15774 var pattern = classCache[ className + " " ];
15775
15776 return pattern ||
15777 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15778 classCache( className, function( elem ) {
15779 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15780 });
15781 },
15782
15783 "ATTR": function( name, operator, check ) {
15784 return function( elem ) {
15785 var result = Sizzle.attr( elem, name );
15786
15787 if ( result == null ) {
15788 return operator === "!=";
15789 }
15790 if ( !operator ) {
15791 return true;
15792 }
15793
15794 result += "";
15795
15796 return operator === "=" ? result === check :
15797 operator === "!=" ? result !== check :
15798 operator === "^=" ? check && result.indexOf( check ) === 0 :
15799 operator === "*=" ? check && result.indexOf( check ) > -1 :
15800 operator === "$=" ? check && result.slice( -check.length ) === check :
15801 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15802 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15803 false;
15804 };
15805 },
15806
15807 "CHILD": function( type, what, argument, first, last ) {
15808 var simple = type.slice( 0, 3 ) !== "nth",
15809 forward = type.slice( -4 ) !== "last",
15810 ofType = what === "of-type";
15811
15812 return first === 1 && last === 0 ?
15813
15814 // Shortcut for :nth-*(n)
15815 function( elem ) {
15816 return !!elem.parentNode;
15817 } :
15818
15819 function( elem, context, xml ) {
15820 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15821 dir = simple !== forward ? "nextSibling" : "previousSibling",
15822 parent = elem.parentNode,
15823 name = ofType && elem.nodeName.toLowerCase(),
15824 useCache = !xml && !ofType,
15825 diff = false;
15826
15827 if ( parent ) {
15828
15829 // :(first|last|only)-(child|of-type)
15830 if ( simple ) {
15831 while ( dir ) {
15832 node = elem;
15833 while ( (node = node[ dir ]) ) {
15834 if ( ofType ?
15835 node.nodeName.toLowerCase() === name :
15836 node.nodeType === 1 ) {
15837
15838 return false;
15839 }
15840 }
15841 // Reverse direction for :only-* (if we haven't yet done so)
15842 start = dir = type === "only" && !start && "nextSibling";
15843 }
15844 return true;
15845 }
15846
15847 start = [ forward ? parent.firstChild : parent.lastChild ];
15848
15849 // non-xml :nth-child(...) stores cache data on `parent`
15850 if ( forward && useCache ) {
15851
15852 // Seek `elem` from a previously-cached index
15853
15854 // ...in a gzip-friendly way
15855 node = parent;
15856 outerCache = node[ expando ] || (node[ expando ] = {});
15857
15858 // Support: IE <9 only
15859 // Defend against cloned attroperties (jQuery gh-1709)
15860 uniqueCache = outerCache[ node.uniqueID ] ||
15861 (outerCache[ node.uniqueID ] = {});
15862
15863 cache = uniqueCache[ type ] || [];
15864 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15865 diff = nodeIndex && cache[ 2 ];
15866 node = nodeIndex && parent.childNodes[ nodeIndex ];
15867
15868 while ( (node = ++nodeIndex && node && node[ dir ] ||
15869
15870 // Fallback to seeking `elem` from the start
15871 (diff = nodeIndex = 0) || start.pop()) ) {
15872
15873 // When found, cache indexes on `parent` and break
15874 if ( node.nodeType === 1 && ++diff && node === elem ) {
15875 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15876 break;
15877 }
15878 }
15879
15880 } else {
15881 // Use previously-cached element index if available
15882 if ( useCache ) {
15883 // ...in a gzip-friendly way
15884 node = elem;
15885 outerCache = node[ expando ] || (node[ expando ] = {});
15886
15887 // Support: IE <9 only
15888 // Defend against cloned attroperties (jQuery gh-1709)
15889 uniqueCache = outerCache[ node.uniqueID ] ||
15890 (outerCache[ node.uniqueID ] = {});
15891
15892 cache = uniqueCache[ type ] || [];
15893 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15894 diff = nodeIndex;
15895 }
15896
15897 // xml :nth-child(...)
15898 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15899 if ( diff === false ) {
15900 // Use the same loop as above to seek `elem` from the start
15901 while ( (node = ++nodeIndex && node && node[ dir ] ||
15902 (diff = nodeIndex = 0) || start.pop()) ) {
15903
15904 if ( ( ofType ?
15905 node.nodeName.toLowerCase() === name :
15906 node.nodeType === 1 ) &&
15907 ++diff ) {
15908
15909 // Cache the index of each encountered element
15910 if ( useCache ) {
15911 outerCache = node[ expando ] || (node[ expando ] = {});
15912
15913 // Support: IE <9 only
15914 // Defend against cloned attroperties (jQuery gh-1709)
15915 uniqueCache = outerCache[ node.uniqueID ] ||
15916 (outerCache[ node.uniqueID ] = {});
15917
15918 uniqueCache[ type ] = [ dirruns, diff ];
15919 }
15920
15921 if ( node === elem ) {
15922 break;
15923 }
15924 }
15925 }
15926 }
15927 }
15928
15929 // Incorporate the offset, then check against cycle size
15930 diff -= last;
15931 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15932 }
15933 };
15934 },
15935
15936 "PSEUDO": function( pseudo, argument ) {
15937 // pseudo-class names are case-insensitive
15938 // http://www.w3.org/TR/selectors/#pseudo-classes
15939 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15940 // Remember that setFilters inherits from pseudos
15941 var args,
15942 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15943 Sizzle.error( "unsupported pseudo: " + pseudo );
15944
15945 // The user may use createPseudo to indicate that
15946 // arguments are needed to create the filter function
15947 // just as Sizzle does
15948 if ( fn[ expando ] ) {
15949 return fn( argument );
15950 }
15951
15952 // But maintain support for old signatures
15953 if ( fn.length > 1 ) {
15954 args = [ pseudo, pseudo, "", argument ];
15955 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15956 markFunction(function( seed, matches ) {
15957 var idx,
15958 matched = fn( seed, argument ),
15959 i = matched.length;
15960 while ( i-- ) {
15961 idx = indexOf( seed, matched[i] );
15962 seed[ idx ] = !( matches[ idx ] = matched[i] );
15963 }
15964 }) :
15965 function( elem ) {
15966 return fn( elem, 0, args );
15967 };
15968 }
15969
15970 return fn;
15971 }
15972 },
15973
15974 pseudos: {
15975 // Potentially complex pseudos
15976 "not": markFunction(function( selector ) {
15977 // Trim the selector passed to compile
15978 // to avoid treating leading and trailing
15979 // spaces as combinators
15980 var input = [],
15981 results = [],
15982 matcher = compile( selector.replace( rtrim, "$1" ) );
15983
15984 return matcher[ expando ] ?
15985 markFunction(function( seed, matches, context, xml ) {
15986 var elem,
15987 unmatched = matcher( seed, null, xml, [] ),
15988 i = seed.length;
15989
15990 // Match elements unmatched by `matcher`
15991 while ( i-- ) {
15992 if ( (elem = unmatched[i]) ) {
15993 seed[i] = !(matches[i] = elem);
15994 }
15995 }
15996 }) :
15997 function( elem, context, xml ) {
15998 input[0] = elem;
15999 matcher( input, null, xml, results );
16000 // Don't keep the element (issue #299)
16001 input[0] = null;
16002 return !results.pop();
16003 };
16004 }),
16005
16006 "has": markFunction(function( selector ) {
16007 return function( elem ) {
16008 return Sizzle( selector, elem ).length > 0;
16009 };
16010 }),
16011
16012 "contains": markFunction(function( text ) {
16013 text = text.replace( runescape, funescape );
16014 return function( elem ) {
16015 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
16016 };
16017 }),
16018
16019 // "Whether an element is represented by a :lang() selector
16020 // is based solely on the element's language value
16021 // being equal to the identifier C,
16022 // or beginning with the identifier C immediately followed by "-".
16023 // The matching of C against the element's language value is performed case-insensitively.
16024 // The identifier C does not have to be a valid language name."
16025 // http://www.w3.org/TR/selectors/#lang-pseudo
16026 "lang": markFunction( function( lang ) {
16027 // lang value must be a valid identifier
16028 if ( !ridentifier.test(lang || "") ) {
16029 Sizzle.error( "unsupported lang: " + lang );
16030 }
16031 lang = lang.replace( runescape, funescape ).toLowerCase();
16032 return function( elem ) {
16033 var elemLang;
16034 do {
16035 if ( (elemLang = documentIsHTML ?
16036 elem.lang :
16037 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16038
16039 elemLang = elemLang.toLowerCase();
16040 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16041 }
16042 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16043 return false;
16044 };
16045 }),
16046
16047 // Miscellaneous
16048 "target": function( elem ) {
16049 var hash = window.location && window.location.hash;
16050 return hash && hash.slice( 1 ) === elem.id;
16051 },
16052
16053 "root": function( elem ) {
16054 return elem === docElem;
16055 },
16056
16057 "focus": function( elem ) {
16058 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16059 },
16060
16061 // Boolean properties
16062 "enabled": createDisabledPseudo( false ),
16063 "disabled": createDisabledPseudo( true ),
16064
16065 "checked": function( elem ) {
16066 // In CSS3, :checked should return both checked and selected elements
16067 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16068 var nodeName = elem.nodeName.toLowerCase();
16069 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16070 },
16071
16072 "selected": function( elem ) {
16073 // Accessing this property makes selected-by-default
16074 // options in Safari work properly
16075 if ( elem.parentNode ) {
16076 elem.parentNode.selectedIndex;
16077 }
16078
16079 return elem.selected === true;
16080 },
16081
16082 // Contents
16083 "empty": function( elem ) {
16084 // http://www.w3.org/TR/selectors/#empty-pseudo
16085 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16086 // but not by others (comment: 8; processing instruction: 7; etc.)
16087 // nodeType < 6 works because attributes (2) do not appear as children
16088 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16089 if ( elem.nodeType < 6 ) {
16090 return false;
16091 }
16092 }
16093 return true;
16094 },
16095
16096 "parent": function( elem ) {
16097 return !Expr.pseudos["empty"]( elem );
16098 },
16099
16100 // Element/input types
16101 "header": function( elem ) {
16102 return rheader.test( elem.nodeName );
16103 },
16104
16105 "input": function( elem ) {
16106 return rinputs.test( elem.nodeName );
16107 },
16108
16109 "button": function( elem ) {
16110 var name = elem.nodeName.toLowerCase();
16111 return name === "input" && elem.type === "button" || name === "button";
16112 },
16113
16114 "text": function( elem ) {
16115 var attr;
16116 return elem.nodeName.toLowerCase() === "input" &&
16117 elem.type === "text" &&
16118
16119 // Support: IE<8
16120 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16121 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16122 },
16123
16124 // Position-in-collection
16125 "first": createPositionalPseudo(function() {
16126 return [ 0 ];
16127 }),
16128
16129 "last": createPositionalPseudo(function( matchIndexes, length ) {
16130 return [ length - 1 ];
16131 }),
16132
16133 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16134 return [ argument < 0 ? argument + length : argument ];
16135 }),
16136
16137 "even": createPositionalPseudo(function( matchIndexes, length ) {
16138 var i = 0;
16139 for ( ; i < length; i += 2 ) {
16140 matchIndexes.push( i );
16141 }
16142 return matchIndexes;
16143 }),
16144
16145 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16146 var i = 1;
16147 for ( ; i < length; i += 2 ) {
16148 matchIndexes.push( i );
16149 }
16150 return matchIndexes;
16151 }),
16152
16153 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16154 var i = argument < 0 ? argument + length : argument;
16155 for ( ; --i >= 0; ) {
16156 matchIndexes.push( i );
16157 }
16158 return matchIndexes;
16159 }),
16160
16161 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16162 var i = argument < 0 ? argument + length : argument;
16163 for ( ; ++i < length; ) {
16164 matchIndexes.push( i );
16165 }
16166 return matchIndexes;
16167 })
16168 }
16169 };
16170
16171 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16172
16173 // Add button/input type pseudos
16174 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16175 Expr.pseudos[ i ] = createInputPseudo( i );
16176 }
16177 for ( i in { submit: true, reset: true } ) {
16178 Expr.pseudos[ i ] = createButtonPseudo( i );
16179 }
16180
16181 // Easy API for creating new setFilters
16182 function setFilters() {}
16183 setFilters.prototype = Expr.filters = Expr.pseudos;
16184 Expr.setFilters = new setFilters();
16185
16186 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16187 var matched, match, tokens, type,
16188 soFar, groups, preFilters,
16189 cached = tokenCache[ selector + " " ];
16190
16191 if ( cached ) {
16192 return parseOnly ? 0 : cached.slice( 0 );
16193 }
16194
16195 soFar = selector;
16196 groups = [];
16197 preFilters = Expr.preFilter;
16198
16199 while ( soFar ) {
16200
16201 // Comma and first run
16202 if ( !matched || (match = rcomma.exec( soFar )) ) {
16203 if ( match ) {
16204 // Don't consume trailing commas as valid
16205 soFar = soFar.slice( match[0].length ) || soFar;
16206 }
16207 groups.push( (tokens = []) );
16208 }
16209
16210 matched = false;
16211
16212 // Combinators
16213 if ( (match = rcombinators.exec( soFar )) ) {
16214 matched = match.shift();
16215 tokens.push({
16216 value: matched,
16217 // Cast descendant combinators to space
16218 type: match[0].replace( rtrim, " " )
16219 });
16220 soFar = soFar.slice( matched.length );
16221 }
16222
16223 // Filters
16224 for ( type in Expr.filter ) {
16225 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16226 (match = preFilters[ type ]( match ))) ) {
16227 matched = match.shift();
16228 tokens.push({
16229 value: matched,
16230 type: type,
16231 matches: match
16232 });
16233 soFar = soFar.slice( matched.length );
16234 }
16235 }
16236
16237 if ( !matched ) {
16238 break;
16239 }
16240 }
16241
16242 // Return the length of the invalid excess
16243 // if we're just parsing
16244 // Otherwise, throw an error or return tokens
16245 return parseOnly ?
16246 soFar.length :
16247 soFar ?
16248 Sizzle.error( selector ) :
16249 // Cache the tokens
16250 tokenCache( selector, groups ).slice( 0 );
16251 };
16252
16253 function toSelector( tokens ) {
16254 var i = 0,
16255 len = tokens.length,
16256 selector = "";
16257 for ( ; i < len; i++ ) {
16258 selector += tokens[i].value;
16259 }
16260 return selector;
16261 }
16262
16263 function addCombinator( matcher, combinator, base ) {
16264 var dir = combinator.dir,
16265 skip = combinator.next,
16266 key = skip || dir,
16267 checkNonElements = base && key === "parentNode",
16268 doneName = done++;
16269
16270 return combinator.first ?
16271 // Check against closest ancestor/preceding element
16272 function( elem, context, xml ) {
16273 while ( (elem = elem[ dir ]) ) {
16274 if ( elem.nodeType === 1 || checkNonElements ) {
16275 return matcher( elem, context, xml );
16276 }
16277 }
16278 return false;
16279 } :
16280
16281 // Check against all ancestor/preceding elements
16282 function( elem, context, xml ) {
16283 var oldCache, uniqueCache, outerCache,
16284 newCache = [ dirruns, doneName ];
16285
16286 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16287 if ( xml ) {
16288 while ( (elem = elem[ dir ]) ) {
16289 if ( elem.nodeType === 1 || checkNonElements ) {
16290 if ( matcher( elem, context, xml ) ) {
16291 return true;
16292 }
16293 }
16294 }
16295 } else {
16296 while ( (elem = elem[ dir ]) ) {
16297 if ( elem.nodeType === 1 || checkNonElements ) {
16298 outerCache = elem[ expando ] || (elem[ expando ] = {});
16299
16300 // Support: IE <9 only
16301 // Defend against cloned attroperties (jQuery gh-1709)
16302 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16303
16304 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16305 elem = elem[ dir ] || elem;
16306 } else if ( (oldCache = uniqueCache[ key ]) &&
16307 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16308
16309 // Assign to newCache so results back-propagate to previous elements
16310 return (newCache[ 2 ] = oldCache[ 2 ]);
16311 } else {
16312 // Reuse newcache so results back-propagate to previous elements
16313 uniqueCache[ key ] = newCache;
16314
16315 // A match means we're done; a fail means we have to keep checking
16316 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16317 return true;
16318 }
16319 }
16320 }
16321 }
16322 }
16323 return false;
16324 };
16325 }
16326
16327 function elementMatcher( matchers ) {
16328 return matchers.length > 1 ?
16329 function( elem, context, xml ) {
16330 var i = matchers.length;
16331 while ( i-- ) {
16332 if ( !matchers[i]( elem, context, xml ) ) {
16333 return false;
16334 }
16335 }
16336 return true;
16337 } :
16338 matchers[0];
16339 }
16340
16341 function multipleContexts( selector, contexts, results ) {
16342 var i = 0,
16343 len = contexts.length;
16344 for ( ; i < len; i++ ) {
16345 Sizzle( selector, contexts[i], results );
16346 }
16347 return results;
16348 }
16349
16350 function condense( unmatched, map, filter, context, xml ) {
16351 var elem,
16352 newUnmatched = [],
16353 i = 0,
16354 len = unmatched.length,
16355 mapped = map != null;
16356
16357 for ( ; i < len; i++ ) {
16358 if ( (elem = unmatched[i]) ) {
16359 if ( !filter || filter( elem, context, xml ) ) {
16360 newUnmatched.push( elem );
16361 if ( mapped ) {
16362 map.push( i );
16363 }
16364 }
16365 }
16366 }
16367
16368 return newUnmatched;
16369 }
16370
16371 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16372 if ( postFilter && !postFilter[ expando ] ) {
16373 postFilter = setMatcher( postFilter );
16374 }
16375 if ( postFinder && !postFinder[ expando ] ) {
16376 postFinder = setMatcher( postFinder, postSelector );
16377 }
16378 return markFunction(function( seed, results, context, xml ) {
16379 var temp, i, elem,
16380 preMap = [],
16381 postMap = [],
16382 preexisting = results.length,
16383
16384 // Get initial elements from seed or context
16385 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16386
16387 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16388 matcherIn = preFilter && ( seed || !selector ) ?
16389 condense( elems, preMap, preFilter, context, xml ) :
16390 elems,
16391
16392 matcherOut = matcher ?
16393 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16394 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16395
16396 // ...intermediate processing is necessary
16397 [] :
16398
16399 // ...otherwise use results directly
16400 results :
16401 matcherIn;
16402
16403 // Find primary matches
16404 if ( matcher ) {
16405 matcher( matcherIn, matcherOut, context, xml );
16406 }
16407
16408 // Apply postFilter
16409 if ( postFilter ) {
16410 temp = condense( matcherOut, postMap );
16411 postFilter( temp, [], context, xml );
16412
16413 // Un-match failing elements by moving them back to matcherIn
16414 i = temp.length;
16415 while ( i-- ) {
16416 if ( (elem = temp[i]) ) {
16417 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16418 }
16419 }
16420 }
16421
16422 if ( seed ) {
16423 if ( postFinder || preFilter ) {
16424 if ( postFinder ) {
16425 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16426 temp = [];
16427 i = matcherOut.length;
16428 while ( i-- ) {
16429 if ( (elem = matcherOut[i]) ) {
16430 // Restore matcherIn since elem is not yet a final match
16431 temp.push( (matcherIn[i] = elem) );
16432 }
16433 }
16434 postFinder( null, (matcherOut = []), temp, xml );
16435 }
16436
16437 // Move matched elements from seed to results to keep them synchronized
16438 i = matcherOut.length;
16439 while ( i-- ) {
16440 if ( (elem = matcherOut[i]) &&
16441 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16442
16443 seed[temp] = !(results[temp] = elem);
16444 }
16445 }
16446 }
16447
16448 // Add elements to results, through postFinder if defined
16449 } else {
16450 matcherOut = condense(
16451 matcherOut === results ?
16452 matcherOut.splice( preexisting, matcherOut.length ) :
16453 matcherOut
16454 );
16455 if ( postFinder ) {
16456 postFinder( null, results, matcherOut, xml );
16457 } else {
16458 push.apply( results, matcherOut );
16459 }
16460 }
16461 });
16462 }
16463
16464 function matcherFromTokens( tokens ) {
16465 var checkContext, matcher, j,
16466 len = tokens.length,
16467 leadingRelative = Expr.relative[ tokens[0].type ],
16468 implicitRelative = leadingRelative || Expr.relative[" "],
16469 i = leadingRelative ? 1 : 0,
16470
16471 // The foundational matcher ensures that elements are reachable from top-level context(s)
16472 matchContext = addCombinator( function( elem ) {
16473 return elem === checkContext;
16474 }, implicitRelative, true ),
16475 matchAnyContext = addCombinator( function( elem ) {
16476 return indexOf( checkContext, elem ) > -1;
16477 }, implicitRelative, true ),
16478 matchers = [ function( elem, context, xml ) {
16479 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16480 (checkContext = context).nodeType ?
16481 matchContext( elem, context, xml ) :
16482 matchAnyContext( elem, context, xml ) );
16483 // Avoid hanging onto element (issue #299)
16484 checkContext = null;
16485 return ret;
16486 } ];
16487
16488 for ( ; i < len; i++ ) {
16489 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16490 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16491 } else {
16492 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16493
16494 // Return special upon seeing a positional matcher
16495 if ( matcher[ expando ] ) {
16496 // Find the next relative operator (if any) for proper handling
16497 j = ++i;
16498 for ( ; j < len; j++ ) {
16499 if ( Expr.relative[ tokens[j].type ] ) {
16500 break;
16501 }
16502 }
16503 return setMatcher(
16504 i > 1 && elementMatcher( matchers ),
16505 i > 1 && toSelector(
16506 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16507 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16508 ).replace( rtrim, "$1" ),
16509 matcher,
16510 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16511 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16512 j < len && toSelector( tokens )
16513 );
16514 }
16515 matchers.push( matcher );
16516 }
16517 }
16518
16519 return elementMatcher( matchers );
16520 }
16521
16522 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16523 var bySet = setMatchers.length > 0,
16524 byElement = elementMatchers.length > 0,
16525 superMatcher = function( seed, context, xml, results, outermost ) {
16526 var elem, j, matcher,
16527 matchedCount = 0,
16528 i = "0",
16529 unmatched = seed && [],
16530 setMatched = [],
16531 contextBackup = outermostContext,
16532 // We must always have either seed elements or outermost context
16533 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16534 // Use integer dirruns iff this is the outermost matcher
16535 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16536 len = elems.length;
16537
16538 if ( outermost ) {
16539 outermostContext = context === document || context || outermost;
16540 }
16541
16542 // Add elements passing elementMatchers directly to results
16543 // Support: IE<9, Safari
16544 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16545 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16546 if ( byElement && elem ) {
16547 j = 0;
16548 if ( !context && elem.ownerDocument !== document ) {
16549 setDocument( elem );
16550 xml = !documentIsHTML;
16551 }
16552 while ( (matcher = elementMatchers[j++]) ) {
16553 if ( matcher( elem, context || document, xml) ) {
16554 results.push( elem );
16555 break;
16556 }
16557 }
16558 if ( outermost ) {
16559 dirruns = dirrunsUnique;
16560 }
16561 }
16562
16563 // Track unmatched elements for set filters
16564 if ( bySet ) {
16565 // They will have gone through all possible matchers
16566 if ( (elem = !matcher && elem) ) {
16567 matchedCount--;
16568 }
16569
16570 // Lengthen the array for every element, matched or not
16571 if ( seed ) {
16572 unmatched.push( elem );
16573 }
16574 }
16575 }
16576
16577 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16578 // makes the latter nonnegative.
16579 matchedCount += i;
16580
16581 // Apply set filters to unmatched elements
16582 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16583 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16584 // no element matchers and no seed.
16585 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16586 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16587 // numerically zero.
16588 if ( bySet && i !== matchedCount ) {
16589 j = 0;
16590 while ( (matcher = setMatchers[j++]) ) {
16591 matcher( unmatched, setMatched, context, xml );
16592 }
16593
16594 if ( seed ) {
16595 // Reintegrate element matches to eliminate the need for sorting
16596 if ( matchedCount > 0 ) {
16597 while ( i-- ) {
16598 if ( !(unmatched[i] || setMatched[i]) ) {
16599 setMatched[i] = pop.call( results );
16600 }
16601 }
16602 }
16603
16604 // Discard index placeholder values to get only actual matches
16605 setMatched = condense( setMatched );
16606 }
16607
16608 // Add matches to results
16609 push.apply( results, setMatched );
16610
16611 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16612 if ( outermost && !seed && setMatched.length > 0 &&
16613 ( matchedCount + setMatchers.length ) > 1 ) {
16614
16615 Sizzle.uniqueSort( results );
16616 }
16617 }
16618
16619 // Override manipulation of globals by nested matchers
16620 if ( outermost ) {
16621 dirruns = dirrunsUnique;
16622 outermostContext = contextBackup;
16623 }
16624
16625 return unmatched;
16626 };
16627
16628 return bySet ?
16629 markFunction( superMatcher ) :
16630 superMatcher;
16631 }
16632
16633 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16634 var i,
16635 setMatchers = [],
16636 elementMatchers = [],
16637 cached = compilerCache[ selector + " " ];
16638
16639 if ( !cached ) {
16640 // Generate a function of recursive functions that can be used to check each element
16641 if ( !match ) {
16642 match = tokenize( selector );
16643 }
16644 i = match.length;
16645 while ( i-- ) {
16646 cached = matcherFromTokens( match[i] );
16647 if ( cached[ expando ] ) {
16648 setMatchers.push( cached );
16649 } else {
16650 elementMatchers.push( cached );
16651 }
16652 }
16653
16654 // Cache the compiled function
16655 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16656
16657 // Save selector and tokenization
16658 cached.selector = selector;
16659 }
16660 return cached;
16661 };
16662
16663 /**
16664 * A low-level selection function that works with Sizzle's compiled
16665 * selector functions
16666 * @param {String|Function} selector A selector or a pre-compiled
16667 * selector function built with Sizzle.compile
16668 * @param {Element} context
16669 * @param {Array} [results]
16670 * @param {Array} [seed] A set of elements to match against
16671 */
16672 select = Sizzle.select = function( selector, context, results, seed ) {
16673 var i, tokens, token, type, find,
16674 compiled = typeof selector === "function" && selector,
16675 match = !seed && tokenize( (selector = compiled.selector || selector) );
16676
16677 results = results || [];
16678
16679 // Try to minimize operations if there is only one selector in the list and no seed
16680 // (the latter of which guarantees us context)
16681 if ( match.length === 1 ) {
16682
16683 // Reduce context if the leading compound selector is an ID
16684 tokens = match[0] = match[0].slice( 0 );
16685 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16686 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16687
16688 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16689 if ( !context ) {
16690 return results;
16691
16692 // Precompiled matchers will still verify ancestry, so step up a level
16693 } else if ( compiled ) {
16694 context = context.parentNode;
16695 }
16696
16697 selector = selector.slice( tokens.shift().value.length );
16698 }
16699
16700 // Fetch a seed set for right-to-left matching
16701 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16702 while ( i-- ) {
16703 token = tokens[i];
16704
16705 // Abort if we hit a combinator
16706 if ( Expr.relative[ (type = token.type) ] ) {
16707 break;
16708 }
16709 if ( (find = Expr.find[ type ]) ) {
16710 // Search, expanding context for leading sibling combinators
16711 if ( (seed = find(
16712 token.matches[0].replace( runescape, funescape ),
16713 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16714 )) ) {
16715
16716 // If seed is empty or no tokens remain, we can return early
16717 tokens.splice( i, 1 );
16718 selector = seed.length && toSelector( tokens );
16719 if ( !selector ) {
16720 push.apply( results, seed );
16721 return results;
16722 }
16723
16724 break;
16725 }
16726 }
16727 }
16728 }
16729
16730 // Compile and execute a filtering function if one is not provided
16731 // Provide `match` to avoid retokenization if we modified the selector above
16732 ( compiled || compile( selector, match ) )(
16733 seed,
16734 context,
16735 !documentIsHTML,
16736 results,
16737 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16738 );
16739 return results;
16740 };
16741
16742 // One-time assignments
16743
16744 // Sort stability
16745 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16746
16747 // Support: Chrome 14-35+
16748 // Always assume duplicates if they aren't passed to the comparison function
16749 support.detectDuplicates = !!hasDuplicate;
16750
16751 // Initialize against the default document
16752 setDocument();
16753
16754 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16755 // Detached nodes confoundingly follow *each other*
16756 support.sortDetached = assert(function( el ) {
16757 // Should return 1, but returns 4 (following)
16758 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16759 });
16760
16761 // Support: IE<8
16762 // Prevent attribute/property "interpolation"
16763 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16764 if ( !assert(function( el ) {
16765 el.innerHTML = "<a href='#'></a>";
16766 return el.firstChild.getAttribute("href") === "#" ;
16767 }) ) {
16768 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16769 if ( !isXML ) {
16770 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16771 }
16772 });
16773 }
16774
16775 // Support: IE<9
16776 // Use defaultValue in place of getAttribute("value")
16777 if ( !support.attributes || !assert(function( el ) {
16778 el.innerHTML = "<input/>";
16779 el.firstChild.setAttribute( "value", "" );
16780 return el.firstChild.getAttribute( "value" ) === "";
16781 }) ) {
16782 addHandle( "value", function( elem, name, isXML ) {
16783 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16784 return elem.defaultValue;
16785 }
16786 });
16787 }
16788
16789 // Support: IE<9
16790 // Use getAttributeNode to fetch booleans when getAttribute lies
16791 if ( !assert(function( el ) {
16792 return el.getAttribute("disabled") == null;
16793 }) ) {
16794 addHandle( booleans, function( elem, name, isXML ) {
16795 var val;
16796 if ( !isXML ) {
16797 return elem[ name ] === true ? name.toLowerCase() :
16798 (val = elem.getAttributeNode( name )) && val.specified ?
16799 val.value :
16800 null;
16801 }
16802 });
16803 }
16804
16805 return Sizzle;
16806
16807 })( window );
16808
16809
16810
16811 jQuery.find = Sizzle;
16812 jQuery.expr = Sizzle.selectors;
16813
16814 // Deprecated
16815 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16816 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16817 jQuery.text = Sizzle.getText;
16818 jQuery.isXMLDoc = Sizzle.isXML;
16819 jQuery.contains = Sizzle.contains;
16820 jQuery.escapeSelector = Sizzle.escape;
16821
16822
16823
16824
16825 var dir = function( elem, dir, until ) {
16826 var matched = [],
16827 truncate = until !== undefined;
16828
16829 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16830 if ( elem.nodeType === 1 ) {
16831 if ( truncate && jQuery( elem ).is( until ) ) {
16832 break;
16833 }
16834 matched.push( elem );
16835 }
16836 }
16837 return matched;
16838 };
16839
16840
16841 var siblings = function( n, elem ) {
16842 var matched = [];
16843
16844 for ( ; n; n = n.nextSibling ) {
16845 if ( n.nodeType === 1 && n !== elem ) {
16846 matched.push( n );
16847 }
16848 }
16849
16850 return matched;
16851 };
16852
16853
16854 var rneedsContext = jQuery.expr.match.needsContext;
16855
16856
16857
16858 function nodeName( elem, name ) {
16859
16860 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16861
16862 };
16863 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16864
16865
16866
16867 var risSimple = /^.[^:#\[\.,]*$/;
16868
16869 // Implement the identical functionality for filter and not
16870 function winnow( elements, qualifier, not ) {
16871 if ( jQuery.isFunction( qualifier ) ) {
16872 return jQuery.grep( elements, function( elem, i ) {
16873 return !!qualifier.call( elem, i, elem ) !== not;
16874 } );
16875 }
16876
16877 // Single element
16878 if ( qualifier.nodeType ) {
16879 return jQuery.grep( elements, function( elem ) {
16880 return ( elem === qualifier ) !== not;
16881 } );
16882 }
16883
16884 // Arraylike of elements (jQuery, arguments, Array)
16885 if ( typeof qualifier !== "string" ) {
16886 return jQuery.grep( elements, function( elem ) {
16887 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16888 } );
16889 }
16890
16891 // Simple selector that can be filtered directly, removing non-Elements
16892 if ( risSimple.test( qualifier ) ) {
16893 return jQuery.filter( qualifier, elements, not );
16894 }
16895
16896 // Complex selector, compare the two sets, removing non-Elements
16897 qualifier = jQuery.filter( qualifier, elements );
16898 return jQuery.grep( elements, function( elem ) {
16899 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16900 } );
16901 }
16902
16903 jQuery.filter = function( expr, elems, not ) {
16904 var elem = elems[ 0 ];
16905
16906 if ( not ) {
16907 expr = ":not(" + expr + ")";
16908 }
16909
16910 if ( elems.length === 1 && elem.nodeType === 1 ) {
16911 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16912 }
16913
16914 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16915 return elem.nodeType === 1;
16916 } ) );
16917 };
16918
16919 jQuery.fn.extend( {
16920 find: function( selector ) {
16921 var i, ret,
16922 len = this.length,
16923 self = this;
16924
16925 if ( typeof selector !== "string" ) {
16926 return this.pushStack( jQuery( selector ).filter( function() {
16927 for ( i = 0; i < len; i++ ) {
16928 if ( jQuery.contains( self[ i ], this ) ) {
16929 return true;
16930 }
16931 }
16932 } ) );
16933 }
16934
16935 ret = this.pushStack( [] );
16936
16937 for ( i = 0; i < len; i++ ) {
16938 jQuery.find( selector, self[ i ], ret );
16939 }
16940
16941 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16942 },
16943 filter: function( selector ) {
16944 return this.pushStack( winnow( this, selector || [], false ) );
16945 },
16946 not: function( selector ) {
16947 return this.pushStack( winnow( this, selector || [], true ) );
16948 },
16949 is: function( selector ) {
16950 return !!winnow(
16951 this,
16952
16953 // If this is a positional/relative selector, check membership in the returned set
16954 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16955 typeof selector === "string" && rneedsContext.test( selector ) ?
16956 jQuery( selector ) :
16957 selector || [],
16958 false
16959 ).length;
16960 }
16961 } );
16962
16963
16964 // Initialize a jQuery object
16965
16966
16967 // A central reference to the root jQuery(document)
16968 var rootjQuery,
16969
16970 // A simple way to check for HTML strings
16971 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16972 // Strict HTML recognition (#11290: must start with <)
16973 // Shortcut simple #id case for speed
16974 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16975
16976 init = jQuery.fn.init = function( selector, context, root ) {
16977 var match, elem;
16978
16979 // HANDLE: $(""), $(null), $(undefined), $(false)
16980 if ( !selector ) {
16981 return this;
16982 }
16983
16984 // Method init() accepts an alternate rootjQuery
16985 // so migrate can support jQuery.sub (gh-2101)
16986 root = root || rootjQuery;
16987
16988 // Handle HTML strings
16989 if ( typeof selector === "string" ) {
16990 if ( selector[ 0 ] === "<" &&
16991 selector[ selector.length - 1 ] === ">" &&
16992 selector.length >= 3 ) {
16993
16994 // Assume that strings that start and end with <> are HTML and skip the regex check
16995 match = [ null, selector, null ];
16996
16997 } else {
16998 match = rquickExpr.exec( selector );
16999 }
17000
17001 // Match html or make sure no context is specified for #id
17002 if ( match && ( match[ 1 ] || !context ) ) {
17003
17004 // HANDLE: $(html) -> $(array)
17005 if ( match[ 1 ] ) {
17006 context = context instanceof jQuery ? context[ 0 ] : context;
17007
17008 // Option to run scripts is true for back-compat
17009 // Intentionally let the error be thrown if parseHTML is not present
17010 jQuery.merge( this, jQuery.parseHTML(
17011 match[ 1 ],
17012 context && context.nodeType ? context.ownerDocument || context : document,
17013 true
17014 ) );
17015
17016 // HANDLE: $(html, props)
17017 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
17018 for ( match in context ) {
17019
17020 // Properties of context are called as methods if possible
17021 if ( jQuery.isFunction( this[ match ] ) ) {
17022 this[ match ]( context[ match ] );
17023
17024 // ...and otherwise set as attributes
17025 } else {
17026 this.attr( match, context[ match ] );
17027 }
17028 }
17029 }
17030
17031 return this;
17032
17033 // HANDLE: $(#id)
17034 } else {
17035 elem = document.getElementById( match[ 2 ] );
17036
17037 if ( elem ) {
17038
17039 // Inject the element directly into the jQuery object
17040 this[ 0 ] = elem;
17041 this.length = 1;
17042 }
17043 return this;
17044 }
17045
17046 // HANDLE: $(expr, $(...))
17047 } else if ( !context || context.jquery ) {
17048 return ( context || root ).find( selector );
17049
17050 // HANDLE: $(expr, context)
17051 // (which is just equivalent to: $(context).find(expr)
17052 } else {
17053 return this.constructor( context ).find( selector );
17054 }
17055
17056 // HANDLE: $(DOMElement)
17057 } else if ( selector.nodeType ) {
17058 this[ 0 ] = selector;
17059 this.length = 1;
17060 return this;
17061
17062 // HANDLE: $(function)
17063 // Shortcut for document ready
17064 } else if ( jQuery.isFunction( selector ) ) {
17065 return root.ready !== undefined ?
17066 root.ready( selector ) :
17067
17068 // Execute immediately if ready is not present
17069 selector( jQuery );
17070 }
17071
17072 return jQuery.makeArray( selector, this );
17073 };
17074
17075 // Give the init function the jQuery prototype for later instantiation
17076 init.prototype = jQuery.fn;
17077
17078 // Initialize central reference
17079 rootjQuery = jQuery( document );
17080
17081
17082 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17083
17084 // Methods guaranteed to produce a unique set when starting from a unique set
17085 guaranteedUnique = {
17086 children: true,
17087 contents: true,
17088 next: true,
17089 prev: true
17090 };
17091
17092 jQuery.fn.extend( {
17093 has: function( target ) {
17094 var targets = jQuery( target, this ),
17095 l = targets.length;
17096
17097 return this.filter( function() {
17098 var i = 0;
17099 for ( ; i < l; i++ ) {
17100 if ( jQuery.contains( this, targets[ i ] ) ) {
17101 return true;
17102 }
17103 }
17104 } );
17105 },
17106
17107 closest: function( selectors, context ) {
17108 var cur,
17109 i = 0,
17110 l = this.length,
17111 matched = [],
17112 targets = typeof selectors !== "string" && jQuery( selectors );
17113
17114 // Positional selectors never match, since there's no _selection_ context
17115 if ( !rneedsContext.test( selectors ) ) {
17116 for ( ; i < l; i++ ) {
17117 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17118
17119 // Always skip document fragments
17120 if ( cur.nodeType < 11 && ( targets ?
17121 targets.index( cur ) > -1 :
17122
17123 // Don't pass non-elements to Sizzle
17124 cur.nodeType === 1 &&
17125 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17126
17127 matched.push( cur );
17128 break;
17129 }
17130 }
17131 }
17132 }
17133
17134 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17135 },
17136
17137 // Determine the position of an element within the set
17138 index: function( elem ) {
17139
17140 // No argument, return index in parent
17141 if ( !elem ) {
17142 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17143 }
17144
17145 // Index in selector
17146 if ( typeof elem === "string" ) {
17147 return indexOf.call( jQuery( elem ), this[ 0 ] );
17148 }
17149
17150 // Locate the position of the desired element
17151 return indexOf.call( this,
17152
17153 // If it receives a jQuery object, the first element is used
17154 elem.jquery ? elem[ 0 ] : elem
17155 );
17156 },
17157
17158 add: function( selector, context ) {
17159 return this.pushStack(
17160 jQuery.uniqueSort(
17161 jQuery.merge( this.get(), jQuery( selector, context ) )
17162 )
17163 );
17164 },
17165
17166 addBack: function( selector ) {
17167 return this.add( selector == null ?
17168 this.prevObject : this.prevObject.filter( selector )
17169 );
17170 }
17171 } );
17172
17173 function sibling( cur, dir ) {
17174 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17175 return cur;
17176 }
17177
17178 jQuery.each( {
17179 parent: function( elem ) {
17180 var parent = elem.parentNode;
17181 return parent && parent.nodeType !== 11 ? parent : null;
17182 },
17183 parents: function( elem ) {
17184 return dir( elem, "parentNode" );
17185 },
17186 parentsUntil: function( elem, i, until ) {
17187 return dir( elem, "parentNode", until );
17188 },
17189 next: function( elem ) {
17190 return sibling( elem, "nextSibling" );
17191 },
17192 prev: function( elem ) {
17193 return sibling( elem, "previousSibling" );
17194 },
17195 nextAll: function( elem ) {
17196 return dir( elem, "nextSibling" );
17197 },
17198 prevAll: function( elem ) {
17199 return dir( elem, "previousSibling" );
17200 },
17201 nextUntil: function( elem, i, until ) {
17202 return dir( elem, "nextSibling", until );
17203 },
17204 prevUntil: function( elem, i, until ) {
17205 return dir( elem, "previousSibling", until );
17206 },
17207 siblings: function( elem ) {
17208 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17209 },
17210 children: function( elem ) {
17211 return siblings( elem.firstChild );
17212 },
17213 contents: function( elem ) {
17214 if ( nodeName( elem, "iframe" ) ) {
17215 return elem.contentDocument;
17216 }
17217
17218 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17219 // Treat the template element as a regular one in browsers that
17220 // don't support it.
17221 if ( nodeName( elem, "template" ) ) {
17222 elem = elem.content || elem;
17223 }
17224
17225 return jQuery.merge( [], elem.childNodes );
17226 }
17227 }, function( name, fn ) {
17228 jQuery.fn[ name ] = function( until, selector ) {
17229 var matched = jQuery.map( this, fn, until );
17230
17231 if ( name.slice( -5 ) !== "Until" ) {
17232 selector = until;
17233 }
17234
17235 if ( selector && typeof selector === "string" ) {
17236 matched = jQuery.filter( selector, matched );
17237 }
17238
17239 if ( this.length > 1 ) {
17240
17241 // Remove duplicates
17242 if ( !guaranteedUnique[ name ] ) {
17243 jQuery.uniqueSort( matched );
17244 }
17245
17246 // Reverse order for parents* and prev-derivatives
17247 if ( rparentsprev.test( name ) ) {
17248 matched.reverse();
17249 }
17250 }
17251
17252 return this.pushStack( matched );
17253 };
17254 } );
17255 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17256
17257
17258
17259 // Convert String-formatted options into Object-formatted ones
17260 function createOptions( options ) {
17261 var object = {};
17262 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17263 object[ flag ] = true;
17264 } );
17265 return object;
17266 }
17267
17268 /*
17269 * Create a callback list using the following parameters:
17270 *
17271 * options: an optional list of space-separated options that will change how
17272 * the callback list behaves or a more traditional option object
17273 *
17274 * By default a callback list will act like an event callback list and can be
17275 * "fired" multiple times.
17276 *
17277 * Possible options:
17278 *
17279 * once: will ensure the callback list can only be fired once (like a Deferred)
17280 *
17281 * memory: will keep track of previous values and will call any callback added
17282 * after the list has been fired right away with the latest "memorized"
17283 * values (like a Deferred)
17284 *
17285 * unique: will ensure a callback can only be added once (no duplicate in the list)
17286 *
17287 * stopOnFalse: interrupt callings when a callback returns false
17288 *
17289 */
17290 jQuery.Callbacks = function( options ) {
17291
17292 // Convert options from String-formatted to Object-formatted if needed
17293 // (we check in cache first)
17294 options = typeof options === "string" ?
17295 createOptions( options ) :
17296 jQuery.extend( {}, options );
17297
17298 var // Flag to know if list is currently firing
17299 firing,
17300
17301 // Last fire value for non-forgettable lists
17302 memory,
17303
17304 // Flag to know if list was already fired
17305 fired,
17306
17307 // Flag to prevent firing
17308 locked,
17309
17310 // Actual callback list
17311 list = [],
17312
17313 // Queue of execution data for repeatable lists
17314 queue = [],
17315
17316 // Index of currently firing callback (modified by add/remove as needed)
17317 firingIndex = -1,
17318
17319 // Fire callbacks
17320 fire = function() {
17321
17322 // Enforce single-firing
17323 locked = locked || options.once;
17324
17325 // Execute callbacks for all pending executions,
17326 // respecting firingIndex overrides and runtime changes
17327 fired = firing = true;
17328 for ( ; queue.length; firingIndex = -1 ) {
17329 memory = queue.shift();
17330 while ( ++firingIndex < list.length ) {
17331
17332 // Run callback and check for early termination
17333 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17334 options.stopOnFalse ) {
17335
17336 // Jump to end and forget the data so .add doesn't re-fire
17337 firingIndex = list.length;
17338 memory = false;
17339 }
17340 }
17341 }
17342
17343 // Forget the data if we're done with it
17344 if ( !options.memory ) {
17345 memory = false;
17346 }
17347
17348 firing = false;
17349
17350 // Clean up if we're done firing for good
17351 if ( locked ) {
17352
17353 // Keep an empty list if we have data for future add calls
17354 if ( memory ) {
17355 list = [];
17356
17357 // Otherwise, this object is spent
17358 } else {
17359 list = "";
17360 }
17361 }
17362 },
17363
17364 // Actual Callbacks object
17365 self = {
17366
17367 // Add a callback or a collection of callbacks to the list
17368 add: function() {
17369 if ( list ) {
17370
17371 // If we have memory from a past run, we should fire after adding
17372 if ( memory && !firing ) {
17373 firingIndex = list.length - 1;
17374 queue.push( memory );
17375 }
17376
17377 ( function add( args ) {
17378 jQuery.each( args, function( _, arg ) {
17379 if ( jQuery.isFunction( arg ) ) {
17380 if ( !options.unique || !self.has( arg ) ) {
17381 list.push( arg );
17382 }
17383 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17384
17385 // Inspect recursively
17386 add( arg );
17387 }
17388 } );
17389 } )( arguments );
17390
17391 if ( memory && !firing ) {
17392 fire();
17393 }
17394 }
17395 return this;
17396 },
17397
17398 // Remove a callback from the list
17399 remove: function() {
17400 jQuery.each( arguments, function( _, arg ) {
17401 var index;
17402 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17403 list.splice( index, 1 );
17404
17405 // Handle firing indexes
17406 if ( index <= firingIndex ) {
17407 firingIndex--;
17408 }
17409 }
17410 } );
17411 return this;
17412 },
17413
17414 // Check if a given callback is in the list.
17415 // If no argument is given, return whether or not list has callbacks attached.
17416 has: function( fn ) {
17417 return fn ?
17418 jQuery.inArray( fn, list ) > -1 :
17419 list.length > 0;
17420 },
17421
17422 // Remove all callbacks from the list
17423 empty: function() {
17424 if ( list ) {
17425 list = [];
17426 }
17427 return this;
17428 },
17429
17430 // Disable .fire and .add
17431 // Abort any current/pending executions
17432 // Clear all callbacks and values
17433 disable: function() {
17434 locked = queue = [];
17435 list = memory = "";
17436 return this;
17437 },
17438 disabled: function() {
17439 return !list;
17440 },
17441
17442 // Disable .fire
17443 // Also disable .add unless we have memory (since it would have no effect)
17444 // Abort any pending executions
17445 lock: function() {
17446 locked = queue = [];
17447 if ( !memory && !firing ) {
17448 list = memory = "";
17449 }
17450 return this;
17451 },
17452 locked: function() {
17453 return !!locked;
17454 },
17455
17456 // Call all callbacks with the given context and arguments
17457 fireWith: function( context, args ) {
17458 if ( !locked ) {
17459 args = args || [];
17460 args = [ context, args.slice ? args.slice() : args ];
17461 queue.push( args );
17462 if ( !firing ) {
17463 fire();
17464 }
17465 }
17466 return this;
17467 },
17468
17469 // Call all the callbacks with the given arguments
17470 fire: function() {
17471 self.fireWith( this, arguments );
17472 return this;
17473 },
17474
17475 // To know if the callbacks have already been called at least once
17476 fired: function() {
17477 return !!fired;
17478 }
17479 };
17480
17481 return self;
17482 };
17483
17484
17485 function Identity( v ) {
17486 return v;
17487 }
17488 function Thrower( ex ) {
17489 throw ex;
17490 }
17491
17492 function adoptValue( value, resolve, reject, noValue ) {
17493 var method;
17494
17495 try {
17496
17497 // Check for promise aspect first to privilege synchronous behavior
17498 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17499 method.call( value ).done( resolve ).fail( reject );
17500
17501 // Other thenables
17502 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17503 method.call( value, resolve, reject );
17504
17505 // Other non-thenables
17506 } else {
17507
17508 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17509 // * false: [ value ].slice( 0 ) => resolve( value )
17510 // * true: [ value ].slice( 1 ) => resolve()
17511 resolve.apply( undefined, [ value ].slice( noValue ) );
17512 }
17513
17514 // For Promises/A+, convert exceptions into rejections
17515 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17516 // Deferred#then to conditionally suppress rejection.
17517 } catch ( value ) {
17518
17519 // Support: Android 4.0 only
17520 // Strict mode functions invoked without .call/.apply get global-object context
17521 reject.apply( undefined, [ value ] );
17522 }
17523 }
17524
17525 jQuery.extend( {
17526
17527 Deferred: function( func ) {
17528 var tuples = [
17529
17530 // action, add listener, callbacks,
17531 // ... .then handlers, argument index, [final state]
17532 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17533 jQuery.Callbacks( "memory" ), 2 ],
17534 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17535 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17536 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17537 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17538 ],
17539 state = "pending",
17540 promise = {
17541 state: function() {
17542 return state;
17543 },
17544 always: function() {
17545 deferred.done( arguments ).fail( arguments );
17546 return this;
17547 },
17548 "catch": function( fn ) {
17549 return promise.then( null, fn );
17550 },
17551
17552 // Keep pipe for back-compat
17553 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17554 var fns = arguments;
17555
17556 return jQuery.Deferred( function( newDefer ) {
17557 jQuery.each( tuples, function( i, tuple ) {
17558
17559 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17560 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17561
17562 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17563 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17564 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17565 deferred[ tuple[ 1 ] ]( function() {
17566 var returned = fn && fn.apply( this, arguments );
17567 if ( returned && jQuery.isFunction( returned.promise ) ) {
17568 returned.promise()
17569 .progress( newDefer.notify )
17570 .done( newDefer.resolve )
17571 .fail( newDefer.reject );
17572 } else {
17573 newDefer[ tuple[ 0 ] + "With" ](
17574 this,
17575 fn ? [ returned ] : arguments
17576 );
17577 }
17578 } );
17579 } );
17580 fns = null;
17581 } ).promise();
17582 },
17583 then: function( onFulfilled, onRejected, onProgress ) {
17584 var maxDepth = 0;
17585 function resolve( depth, deferred, handler, special ) {
17586 return function() {
17587 var that = this,
17588 args = arguments,
17589 mightThrow = function() {
17590 var returned, then;
17591
17592 // Support: Promises/A+ section 2.3.3.3.3
17593 // https://promisesaplus.com/#point-59
17594 // Ignore double-resolution attempts
17595 if ( depth < maxDepth ) {
17596 return;
17597 }
17598
17599 returned = handler.apply( that, args );
17600
17601 // Support: Promises/A+ section 2.3.1
17602 // https://promisesaplus.com/#point-48
17603 if ( returned === deferred.promise() ) {
17604 throw new TypeError( "Thenable self-resolution" );
17605 }
17606
17607 // Support: Promises/A+ sections 2.3.3.1, 3.5
17608 // https://promisesaplus.com/#point-54
17609 // https://promisesaplus.com/#point-75
17610 // Retrieve `then` only once
17611 then = returned &&
17612
17613 // Support: Promises/A+ section 2.3.4
17614 // https://promisesaplus.com/#point-64
17615 // Only check objects and functions for thenability
17616 ( typeof returned === "object" ||
17617 typeof returned === "function" ) &&
17618 returned.then;
17619
17620 // Handle a returned thenable
17621 if ( jQuery.isFunction( then ) ) {
17622
17623 // Special processors (notify) just wait for resolution
17624 if ( special ) {
17625 then.call(
17626 returned,
17627 resolve( maxDepth, deferred, Identity, special ),
17628 resolve( maxDepth, deferred, Thrower, special )
17629 );
17630
17631 // Normal processors (resolve) also hook into progress
17632 } else {
17633
17634 // ...and disregard older resolution values
17635 maxDepth++;
17636
17637 then.call(
17638 returned,
17639 resolve( maxDepth, deferred, Identity, special ),
17640 resolve( maxDepth, deferred, Thrower, special ),
17641 resolve( maxDepth, deferred, Identity,
17642 deferred.notifyWith )
17643 );
17644 }
17645
17646 // Handle all other returned values
17647 } else {
17648
17649 // Only substitute handlers pass on context
17650 // and multiple values (non-spec behavior)
17651 if ( handler !== Identity ) {
17652 that = undefined;
17653 args = [ returned ];
17654 }
17655
17656 // Process the value(s)
17657 // Default process is resolve
17658 ( special || deferred.resolveWith )( that, args );
17659 }
17660 },
17661
17662 // Only normal processors (resolve) catch and reject exceptions
17663 process = special ?
17664 mightThrow :
17665 function() {
17666 try {
17667 mightThrow();
17668 } catch ( e ) {
17669
17670 if ( jQuery.Deferred.exceptionHook ) {
17671 jQuery.Deferred.exceptionHook( e,
17672 process.stackTrace );
17673 }
17674
17675 // Support: Promises/A+ section 2.3.3.3.4.1
17676 // https://promisesaplus.com/#point-61
17677 // Ignore post-resolution exceptions
17678 if ( depth + 1 >= maxDepth ) {
17679
17680 // Only substitute handlers pass on context
17681 // and multiple values (non-spec behavior)
17682 if ( handler !== Thrower ) {
17683 that = undefined;
17684 args = [ e ];
17685 }
17686
17687 deferred.rejectWith( that, args );
17688 }
17689 }
17690 };
17691
17692 // Support: Promises/A+ section 2.3.3.3.1
17693 // https://promisesaplus.com/#point-57
17694 // Re-resolve promises immediately to dodge false rejection from
17695 // subsequent errors
17696 if ( depth ) {
17697 process();
17698 } else {
17699
17700 // Call an optional hook to record the stack, in case of exception
17701 // since it's otherwise lost when execution goes async
17702 if ( jQuery.Deferred.getStackHook ) {
17703 process.stackTrace = jQuery.Deferred.getStackHook();
17704 }
17705 window.setTimeout( process );
17706 }
17707 };
17708 }
17709
17710 return jQuery.Deferred( function( newDefer ) {
17711
17712 // progress_handlers.add( ... )
17713 tuples[ 0 ][ 3 ].add(
17714 resolve(
17715 0,
17716 newDefer,
17717 jQuery.isFunction( onProgress ) ?
17718 onProgress :
17719 Identity,
17720 newDefer.notifyWith
17721 )
17722 );
17723
17724 // fulfilled_handlers.add( ... )
17725 tuples[ 1 ][ 3 ].add(
17726 resolve(
17727 0,
17728 newDefer,
17729 jQuery.isFunction( onFulfilled ) ?
17730 onFulfilled :
17731 Identity
17732 )
17733 );
17734
17735 // rejected_handlers.add( ... )
17736 tuples[ 2 ][ 3 ].add(
17737 resolve(
17738 0,
17739 newDefer,
17740 jQuery.isFunction( onRejected ) ?
17741 onRejected :
17742 Thrower
17743 )
17744 );
17745 } ).promise();
17746 },
17747
17748 // Get a promise for this deferred
17749 // If obj is provided, the promise aspect is added to the object
17750 promise: function( obj ) {
17751 return obj != null ? jQuery.extend( obj, promise ) : promise;
17752 }
17753 },
17754 deferred = {};
17755
17756 // Add list-specific methods
17757 jQuery.each( tuples, function( i, tuple ) {
17758 var list = tuple[ 2 ],
17759 stateString = tuple[ 5 ];
17760
17761 // promise.progress = list.add
17762 // promise.done = list.add
17763 // promise.fail = list.add
17764 promise[ tuple[ 1 ] ] = list.add;
17765
17766 // Handle state
17767 if ( stateString ) {
17768 list.add(
17769 function() {
17770
17771 // state = "resolved" (i.e., fulfilled)
17772 // state = "rejected"
17773 state = stateString;
17774 },
17775
17776 // rejected_callbacks.disable
17777 // fulfilled_callbacks.disable
17778 tuples[ 3 - i ][ 2 ].disable,
17779
17780 // progress_callbacks.lock
17781 tuples[ 0 ][ 2 ].lock
17782 );
17783 }
17784
17785 // progress_handlers.fire
17786 // fulfilled_handlers.fire
17787 // rejected_handlers.fire
17788 list.add( tuple[ 3 ].fire );
17789
17790 // deferred.notify = function() { deferred.notifyWith(...) }
17791 // deferred.resolve = function() { deferred.resolveWith(...) }
17792 // deferred.reject = function() { deferred.rejectWith(...) }
17793 deferred[ tuple[ 0 ] ] = function() {
17794 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17795 return this;
17796 };
17797
17798 // deferred.notifyWith = list.fireWith
17799 // deferred.resolveWith = list.fireWith
17800 // deferred.rejectWith = list.fireWith
17801 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17802 } );
17803
17804 // Make the deferred a promise
17805 promise.promise( deferred );
17806
17807 // Call given func if any
17808 if ( func ) {
17809 func.call( deferred, deferred );
17810 }
17811
17812 // All done!
17813 return deferred;
17814 },
17815
17816 // Deferred helper
17817 when: function( singleValue ) {
17818 var
17819
17820 // count of uncompleted subordinates
17821 remaining = arguments.length,
17822
17823 // count of unprocessed arguments
17824 i = remaining,
17825
17826 // subordinate fulfillment data
17827 resolveContexts = Array( i ),
17828 resolveValues = slice.call( arguments ),
17829
17830 // the master Deferred
17831 master = jQuery.Deferred(),
17832
17833 // subordinate callback factory
17834 updateFunc = function( i ) {
17835 return function( value ) {
17836 resolveContexts[ i ] = this;
17837 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17838 if ( !( --remaining ) ) {
17839 master.resolveWith( resolveContexts, resolveValues );
17840 }
17841 };
17842 };
17843
17844 // Single- and empty arguments are adopted like Promise.resolve
17845 if ( remaining <= 1 ) {
17846 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17847 !remaining );
17848
17849 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17850 if ( master.state() === "pending" ||
17851 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17852
17853 return master.then();
17854 }
17855 }
17856
17857 // Multiple arguments are aggregated like Promise.all array elements
17858 while ( i-- ) {
17859 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17860 }
17861
17862 return master.promise();
17863 }
17864 } );
17865
17866
17867 // These usually indicate a programmer mistake during development,
17868 // warn about them ASAP rather than swallowing them by default.
17869 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17870
17871 jQuery.Deferred.exceptionHook = function( error, stack ) {
17872
17873 // Support: IE 8 - 9 only
17874 // Console exists when dev tools are open, which can happen at any time
17875 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17876 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17877 }
17878 };
17879
17880
17881
17882
17883 jQuery.readyException = function( error ) {
17884 window.setTimeout( function() {
17885 throw error;
17886 } );
17887 };
17888
17889
17890
17891
17892 // The deferred used on DOM ready
17893 var readyList = jQuery.Deferred();
17894
17895 jQuery.fn.ready = function( fn ) {
17896
17897 readyList
17898 .then( fn )
17899
17900 // Wrap jQuery.readyException in a function so that the lookup
17901 // happens at the time of error handling instead of callback
17902 // registration.
17903 .catch( function( error ) {
17904 jQuery.readyException( error );
17905 } );
17906
17907 return this;
17908 };
17909
17910 jQuery.extend( {
17911
17912 // Is the DOM ready to be used? Set to true once it occurs.
17913 isReady: false,
17914
17915 // A counter to track how many items to wait for before
17916 // the ready event fires. See #6781
17917 readyWait: 1,
17918
17919 // Handle when the DOM is ready
17920 ready: function( wait ) {
17921
17922 // Abort if there are pending holds or we're already ready
17923 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17924 return;
17925 }
17926
17927 // Remember that the DOM is ready
17928 jQuery.isReady = true;
17929
17930 // If a normal DOM Ready event fired, decrement, and wait if need be
17931 if ( wait !== true && --jQuery.readyWait > 0 ) {
17932 return;
17933 }
17934
17935 // If there are functions bound, to execute
17936 readyList.resolveWith( document, [ jQuery ] );
17937 }
17938 } );
17939
17940 jQuery.ready.then = readyList.then;
17941
17942 // The ready event handler and self cleanup method
17943 function completed() {
17944 document.removeEventListener( "DOMContentLoaded", completed );
17945 window.removeEventListener( "load", completed );
17946 jQuery.ready();
17947 }
17948
17949 // Catch cases where $(document).ready() is called
17950 // after the browser event has already occurred.
17951 // Support: IE <=9 - 10 only
17952 // Older IE sometimes signals "interactive" too soon
17953 if ( document.readyState === "complete" ||
17954 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17955
17956 // Handle it asynchronously to allow scripts the opportunity to delay ready
17957 window.setTimeout( jQuery.ready );
17958
17959 } else {
17960
17961 // Use the handy event callback
17962 document.addEventListener( "DOMContentLoaded", completed );
17963
17964 // A fallback to window.onload, that will always work
17965 window.addEventListener( "load", completed );
17966 }
17967
17968
17969
17970
17971 // Multifunctional method to get and set values of a collection
17972 // The value/s can optionally be executed if it's a function
17973 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17974 var i = 0,
17975 len = elems.length,
17976 bulk = key == null;
17977
17978 // Sets many values
17979 if ( jQuery.type( key ) === "object" ) {
17980 chainable = true;
17981 for ( i in key ) {
17982 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17983 }
17984
17985 // Sets one value
17986 } else if ( value !== undefined ) {
17987 chainable = true;
17988
17989 if ( !jQuery.isFunction( value ) ) {
17990 raw = true;
17991 }
17992
17993 if ( bulk ) {
17994
17995 // Bulk operations run against the entire set
17996 if ( raw ) {
17997 fn.call( elems, value );
17998 fn = null;
17999
18000 // ...except when executing function values
18001 } else {
18002 bulk = fn;
18003 fn = function( elem, key, value ) {
18004 return bulk.call( jQuery( elem ), value );
18005 };
18006 }
18007 }
18008
18009 if ( fn ) {
18010 for ( ; i < len; i++ ) {
18011 fn(
18012 elems[ i ], key, raw ?
18013 value :
18014 value.call( elems[ i ], i, fn( elems[ i ], key ) )
18015 );
18016 }
18017 }
18018 }
18019
18020 if ( chainable ) {
18021 return elems;
18022 }
18023
18024 // Gets
18025 if ( bulk ) {
18026 return fn.call( elems );
18027 }
18028
18029 return len ? fn( elems[ 0 ], key ) : emptyGet;
18030 };
18031 var acceptData = function( owner ) {
18032
18033 // Accepts only:
18034 // - Node
18035 // - Node.ELEMENT_NODE
18036 // - Node.DOCUMENT_NODE
18037 // - Object
18038 // - Any
18039 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18040 };
18041
18042
18043
18044
18045 function Data() {
18046 this.expando = jQuery.expando + Data.uid++;
18047 }
18048
18049 Data.uid = 1;
18050
18051 Data.prototype = {
18052
18053 cache: function( owner ) {
18054
18055 // Check if the owner object already has a cache
18056 var value = owner[ this.expando ];
18057
18058 // If not, create one
18059 if ( !value ) {
18060 value = {};
18061
18062 // We can accept data for non-element nodes in modern browsers,
18063 // but we should not, see #8335.
18064 // Always return an empty object.
18065 if ( acceptData( owner ) ) {
18066
18067 // If it is a node unlikely to be stringify-ed or looped over
18068 // use plain assignment
18069 if ( owner.nodeType ) {
18070 owner[ this.expando ] = value;
18071
18072 // Otherwise secure it in a non-enumerable property
18073 // configurable must be true to allow the property to be
18074 // deleted when data is removed
18075 } else {
18076 Object.defineProperty( owner, this.expando, {
18077 value: value,
18078 configurable: true
18079 } );
18080 }
18081 }
18082 }
18083
18084 return value;
18085 },
18086 set: function( owner, data, value ) {
18087 var prop,
18088 cache = this.cache( owner );
18089
18090 // Handle: [ owner, key, value ] args
18091 // Always use camelCase key (gh-2257)
18092 if ( typeof data === "string" ) {
18093 cache[ jQuery.camelCase( data ) ] = value;
18094
18095 // Handle: [ owner, { properties } ] args
18096 } else {
18097
18098 // Copy the properties one-by-one to the cache object
18099 for ( prop in data ) {
18100 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18101 }
18102 }
18103 return cache;
18104 },
18105 get: function( owner, key ) {
18106 return key === undefined ?
18107 this.cache( owner ) :
18108
18109 // Always use camelCase key (gh-2257)
18110 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18111 },
18112 access: function( owner, key, value ) {
18113
18114 // In cases where either:
18115 //
18116 // 1. No key was specified
18117 // 2. A string key was specified, but no value provided
18118 //
18119 // Take the "read" path and allow the get method to determine
18120 // which value to return, respectively either:
18121 //
18122 // 1. The entire cache object
18123 // 2. The data stored at the key
18124 //
18125 if ( key === undefined ||
18126 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18127
18128 return this.get( owner, key );
18129 }
18130
18131 // When the key is not a string, or both a key and value
18132 // are specified, set or extend (existing objects) with either:
18133 //
18134 // 1. An object of properties
18135 // 2. A key and value
18136 //
18137 this.set( owner, key, value );
18138
18139 // Since the "set" path can have two possible entry points
18140 // return the expected data based on which path was taken[*]
18141 return value !== undefined ? value : key;
18142 },
18143 remove: function( owner, key ) {
18144 var i,
18145 cache = owner[ this.expando ];
18146
18147 if ( cache === undefined ) {
18148 return;
18149 }
18150
18151 if ( key !== undefined ) {
18152
18153 // Support array or space separated string of keys
18154 if ( Array.isArray( key ) ) {
18155
18156 // If key is an array of keys...
18157 // We always set camelCase keys, so remove that.
18158 key = key.map( jQuery.camelCase );
18159 } else {
18160 key = jQuery.camelCase( key );
18161
18162 // If a key with the spaces exists, use it.
18163 // Otherwise, create an array by matching non-whitespace
18164 key = key in cache ?
18165 [ key ] :
18166 ( key.match( rnothtmlwhite ) || [] );
18167 }
18168
18169 i = key.length;
18170
18171 while ( i-- ) {
18172 delete cache[ key[ i ] ];
18173 }
18174 }
18175
18176 // Remove the expando if there's no more data
18177 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18178
18179 // Support: Chrome <=35 - 45
18180 // Webkit & Blink performance suffers when deleting properties
18181 // from DOM nodes, so set to undefined instead
18182 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18183 if ( owner.nodeType ) {
18184 owner[ this.expando ] = undefined;
18185 } else {
18186 delete owner[ this.expando ];
18187 }
18188 }
18189 },
18190 hasData: function( owner ) {
18191 var cache = owner[ this.expando ];
18192 return cache !== undefined && !jQuery.isEmptyObject( cache );
18193 }
18194 };
18195 var dataPriv = new Data();
18196
18197 var dataUser = new Data();
18198
18199
18200
18201 // Implementation Summary
18202 //
18203 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18204 // 2. Improve the module's maintainability by reducing the storage
18205 // paths to a single mechanism.
18206 // 3. Use the same single mechanism to support "private" and "user" data.
18207 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18208 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18209 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18210
18211 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18212 rmultiDash = /[A-Z]/g;
18213
18214 function getData( data ) {
18215 if ( data === "true" ) {
18216 return true;
18217 }
18218
18219 if ( data === "false" ) {
18220 return false;
18221 }
18222
18223 if ( data === "null" ) {
18224 return null;
18225 }
18226
18227 // Only convert to a number if it doesn't change the string
18228 if ( data === +data + "" ) {
18229 return +data;
18230 }
18231
18232 if ( rbrace.test( data ) ) {
18233 return JSON.parse( data );
18234 }
18235
18236 return data;
18237 }
18238
18239 function dataAttr( elem, key, data ) {
18240 var name;
18241
18242 // If nothing was found internally, try to fetch any
18243 // data from the HTML5 data-* attribute
18244 if ( data === undefined && elem.nodeType === 1 ) {
18245 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18246 data = elem.getAttribute( name );
18247
18248 if ( typeof data === "string" ) {
18249 try {
18250 data = getData( data );
18251 } catch ( e ) {}
18252
18253 // Make sure we set the data so it isn't changed later
18254 dataUser.set( elem, key, data );
18255 } else {
18256 data = undefined;
18257 }
18258 }
18259 return data;
18260 }
18261
18262 jQuery.extend( {
18263 hasData: function( elem ) {
18264 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18265 },
18266
18267 data: function( elem, name, data ) {
18268 return dataUser.access( elem, name, data );
18269 },
18270
18271 removeData: function( elem, name ) {
18272 dataUser.remove( elem, name );
18273 },
18274
18275 // TODO: Now that all calls to _data and _removeData have been replaced
18276 // with direct calls to dataPriv methods, these can be deprecated.
18277 _data: function( elem, name, data ) {
18278 return dataPriv.access( elem, name, data );
18279 },
18280
18281 _removeData: function( elem, name ) {
18282 dataPriv.remove( elem, name );
18283 }
18284 } );
18285
18286 jQuery.fn.extend( {
18287 data: function( key, value ) {
18288 var i, name, data,
18289 elem = this[ 0 ],
18290 attrs = elem && elem.attributes;
18291
18292 // Gets all values
18293 if ( key === undefined ) {
18294 if ( this.length ) {
18295 data = dataUser.get( elem );
18296
18297 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18298 i = attrs.length;
18299 while ( i-- ) {
18300
18301 // Support: IE 11 only
18302 // The attrs elements can be null (#14894)
18303 if ( attrs[ i ] ) {
18304 name = attrs[ i ].name;
18305 if ( name.indexOf( "data-" ) === 0 ) {
18306 name = jQuery.camelCase( name.slice( 5 ) );
18307 dataAttr( elem, name, data[ name ] );
18308 }
18309 }
18310 }
18311 dataPriv.set( elem, "hasDataAttrs", true );
18312 }
18313 }
18314
18315 return data;
18316 }
18317
18318 // Sets multiple values
18319 if ( typeof key === "object" ) {
18320 return this.each( function() {
18321 dataUser.set( this, key );
18322 } );
18323 }
18324
18325 return access( this, function( value ) {
18326 var data;
18327
18328 // The calling jQuery object (element matches) is not empty
18329 // (and therefore has an element appears at this[ 0 ]) and the
18330 // `value` parameter was not undefined. An empty jQuery object
18331 // will result in `undefined` for elem = this[ 0 ] which will
18332 // throw an exception if an attempt to read a data cache is made.
18333 if ( elem && value === undefined ) {
18334
18335 // Attempt to get data from the cache
18336 // The key will always be camelCased in Data
18337 data = dataUser.get( elem, key );
18338 if ( data !== undefined ) {
18339 return data;
18340 }
18341
18342 // Attempt to "discover" the data in
18343 // HTML5 custom data-* attrs
18344 data = dataAttr( elem, key );
18345 if ( data !== undefined ) {
18346 return data;
18347 }
18348
18349 // We tried really hard, but the data doesn't exist.
18350 return;
18351 }
18352
18353 // Set the data...
18354 this.each( function() {
18355
18356 // We always store the camelCased key
18357 dataUser.set( this, key, value );
18358 } );
18359 }, null, value, arguments.length > 1, null, true );
18360 },
18361
18362 removeData: function( key ) {
18363 return this.each( function() {
18364 dataUser.remove( this, key );
18365 } );
18366 }
18367 } );
18368
18369
18370 jQuery.extend( {
18371 queue: function( elem, type, data ) {
18372 var queue;
18373
18374 if ( elem ) {
18375 type = ( type || "fx" ) + "queue";
18376 queue = dataPriv.get( elem, type );
18377
18378 // Speed up dequeue by getting out quickly if this is just a lookup
18379 if ( data ) {
18380 if ( !queue || Array.isArray( data ) ) {
18381 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18382 } else {
18383 queue.push( data );
18384 }
18385 }
18386 return queue || [];
18387 }
18388 },
18389
18390 dequeue: function( elem, type ) {
18391 type = type || "fx";
18392
18393 var queue = jQuery.queue( elem, type ),
18394 startLength = queue.length,
18395 fn = queue.shift(),
18396 hooks = jQuery._queueHooks( elem, type ),
18397 next = function() {
18398 jQuery.dequeue( elem, type );
18399 };
18400
18401 // If the fx queue is dequeued, always remove the progress sentinel
18402 if ( fn === "inprogress" ) {
18403 fn = queue.shift();
18404 startLength--;
18405 }
18406
18407 if ( fn ) {
18408
18409 // Add a progress sentinel to prevent the fx queue from being
18410 // automatically dequeued
18411 if ( type === "fx" ) {
18412 queue.unshift( "inprogress" );
18413 }
18414
18415 // Clear up the last queue stop function
18416 delete hooks.stop;
18417 fn.call( elem, next, hooks );
18418 }
18419
18420 if ( !startLength && hooks ) {
18421 hooks.empty.fire();
18422 }
18423 },
18424
18425 // Not public - generate a queueHooks object, or return the current one
18426 _queueHooks: function( elem, type ) {
18427 var key = type + "queueHooks";
18428 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18429 empty: jQuery.Callbacks( "once memory" ).add( function() {
18430 dataPriv.remove( elem, [ type + "queue", key ] );
18431 } )
18432 } );
18433 }
18434 } );
18435
18436 jQuery.fn.extend( {
18437 queue: function( type, data ) {
18438 var setter = 2;
18439
18440 if ( typeof type !== "string" ) {
18441 data = type;
18442 type = "fx";
18443 setter--;
18444 }
18445
18446 if ( arguments.length < setter ) {
18447 return jQuery.queue( this[ 0 ], type );
18448 }
18449
18450 return data === undefined ?
18451 this :
18452 this.each( function() {
18453 var queue = jQuery.queue( this, type, data );
18454
18455 // Ensure a hooks for this queue
18456 jQuery._queueHooks( this, type );
18457
18458 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18459 jQuery.dequeue( this, type );
18460 }
18461 } );
18462 },
18463 dequeue: function( type ) {
18464 return this.each( function() {
18465 jQuery.dequeue( this, type );
18466 } );
18467 },
18468 clearQueue: function( type ) {
18469 return this.queue( type || "fx", [] );
18470 },
18471
18472 // Get a promise resolved when queues of a certain type
18473 // are emptied (fx is the type by default)
18474 promise: function( type, obj ) {
18475 var tmp,
18476 count = 1,
18477 defer = jQuery.Deferred(),
18478 elements = this,
18479 i = this.length,
18480 resolve = function() {
18481 if ( !( --count ) ) {
18482 defer.resolveWith( elements, [ elements ] );
18483 }
18484 };
18485
18486 if ( typeof type !== "string" ) {
18487 obj = type;
18488 type = undefined;
18489 }
18490 type = type || "fx";
18491
18492 while ( i-- ) {
18493 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18494 if ( tmp && tmp.empty ) {
18495 count++;
18496 tmp.empty.add( resolve );
18497 }
18498 }
18499 resolve();
18500 return defer.promise( obj );
18501 }
18502 } );
18503 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18504
18505 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18506
18507
18508 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18509
18510 var isHiddenWithinTree = function( elem, el ) {
18511
18512 // isHiddenWithinTree might be called from jQuery#filter function;
18513 // in that case, element will be second argument
18514 elem = el || elem;
18515
18516 // Inline style trumps all
18517 return elem.style.display === "none" ||
18518 elem.style.display === "" &&
18519
18520 // Otherwise, check computed style
18521 // Support: Firefox <=43 - 45
18522 // Disconnected elements can have computed display: none, so first confirm that elem is
18523 // in the document.
18524 jQuery.contains( elem.ownerDocument, elem ) &&
18525
18526 jQuery.css( elem, "display" ) === "none";
18527 };
18528
18529 var swap = function( elem, options, callback, args ) {
18530 var ret, name,
18531 old = {};
18532
18533 // Remember the old values, and insert the new ones
18534 for ( name in options ) {
18535 old[ name ] = elem.style[ name ];
18536 elem.style[ name ] = options[ name ];
18537 }
18538
18539 ret = callback.apply( elem, args || [] );
18540
18541 // Revert the old values
18542 for ( name in options ) {
18543 elem.style[ name ] = old[ name ];
18544 }
18545
18546 return ret;
18547 };
18548
18549
18550
18551
18552 function adjustCSS( elem, prop, valueParts, tween ) {
18553 var adjusted,
18554 scale = 1,
18555 maxIterations = 20,
18556 currentValue = tween ?
18557 function() {
18558 return tween.cur();
18559 } :
18560 function() {
18561 return jQuery.css( elem, prop, "" );
18562 },
18563 initial = currentValue(),
18564 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18565
18566 // Starting value computation is required for potential unit mismatches
18567 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18568 rcssNum.exec( jQuery.css( elem, prop ) );
18569
18570 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18571
18572 // Trust units reported by jQuery.css
18573 unit = unit || initialInUnit[ 3 ];
18574
18575 // Make sure we update the tween properties later on
18576 valueParts = valueParts || [];
18577
18578 // Iteratively approximate from a nonzero starting point
18579 initialInUnit = +initial || 1;
18580
18581 do {
18582
18583 // If previous iteration zeroed out, double until we get *something*.
18584 // Use string for doubling so we don't accidentally see scale as unchanged below
18585 scale = scale || ".5";
18586
18587 // Adjust and apply
18588 initialInUnit = initialInUnit / scale;
18589 jQuery.style( elem, prop, initialInUnit + unit );
18590
18591 // Update scale, tolerating zero or NaN from tween.cur()
18592 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18593 } while (
18594 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18595 );
18596 }
18597
18598 if ( valueParts ) {
18599 initialInUnit = +initialInUnit || +initial || 0;
18600
18601 // Apply relative offset (+=/-=) if specified
18602 adjusted = valueParts[ 1 ] ?
18603 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18604 +valueParts[ 2 ];
18605 if ( tween ) {
18606 tween.unit = unit;
18607 tween.start = initialInUnit;
18608 tween.end = adjusted;
18609 }
18610 }
18611 return adjusted;
18612 }
18613
18614
18615 var defaultDisplayMap = {};
18616
18617 function getDefaultDisplay( elem ) {
18618 var temp,
18619 doc = elem.ownerDocument,
18620 nodeName = elem.nodeName,
18621 display = defaultDisplayMap[ nodeName ];
18622
18623 if ( display ) {
18624 return display;
18625 }
18626
18627 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18628 display = jQuery.css( temp, "display" );
18629
18630 temp.parentNode.removeChild( temp );
18631
18632 if ( display === "none" ) {
18633 display = "block";
18634 }
18635 defaultDisplayMap[ nodeName ] = display;
18636
18637 return display;
18638 }
18639
18640 function showHide( elements, show ) {
18641 var display, elem,
18642 values = [],
18643 index = 0,
18644 length = elements.length;
18645
18646 // Determine new display value for elements that need to change
18647 for ( ; index < length; index++ ) {
18648 elem = elements[ index ];
18649 if ( !elem.style ) {
18650 continue;
18651 }
18652
18653 display = elem.style.display;
18654 if ( show ) {
18655
18656 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18657 // check is required in this first loop unless we have a nonempty display value (either
18658 // inline or about-to-be-restored)
18659 if ( display === "none" ) {
18660 values[ index ] = dataPriv.get( elem, "display" ) || null;
18661 if ( !values[ index ] ) {
18662 elem.style.display = "";
18663 }
18664 }
18665 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18666 values[ index ] = getDefaultDisplay( elem );
18667 }
18668 } else {
18669 if ( display !== "none" ) {
18670 values[ index ] = "none";
18671
18672 // Remember what we're overwriting
18673 dataPriv.set( elem, "display", display );
18674 }
18675 }
18676 }
18677
18678 // Set the display of the elements in a second loop to avoid constant reflow
18679 for ( index = 0; index < length; index++ ) {
18680 if ( values[ index ] != null ) {
18681 elements[ index ].style.display = values[ index ];
18682 }
18683 }
18684
18685 return elements;
18686 }
18687
18688 jQuery.fn.extend( {
18689 show: function() {
18690 return showHide( this, true );
18691 },
18692 hide: function() {
18693 return showHide( this );
18694 },
18695 toggle: function( state ) {
18696 if ( typeof state === "boolean" ) {
18697 return state ? this.show() : this.hide();
18698 }
18699
18700 return this.each( function() {
18701 if ( isHiddenWithinTree( this ) ) {
18702 jQuery( this ).show();
18703 } else {
18704 jQuery( this ).hide();
18705 }
18706 } );
18707 }
18708 } );
18709 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18710
18711 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18712
18713 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18714
18715
18716
18717 // We have to close these tags to support XHTML (#13200)
18718 var wrapMap = {
18719
18720 // Support: IE <=9 only
18721 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18722
18723 // XHTML parsers do not magically insert elements in the
18724 // same way that tag soup parsers do. So we cannot shorten
18725 // this by omitting <tbody> or other required elements.
18726 thead: [ 1, "<table>", "</table>" ],
18727 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18728 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18729 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18730
18731 _default: [ 0, "", "" ]
18732 };
18733
18734 // Support: IE <=9 only
18735 wrapMap.optgroup = wrapMap.option;
18736
18737 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18738 wrapMap.th = wrapMap.td;
18739
18740
18741 function getAll( context, tag ) {
18742
18743 // Support: IE <=9 - 11 only
18744 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18745 var ret;
18746
18747 if ( typeof context.getElementsByTagName !== "undefined" ) {
18748 ret = context.getElementsByTagName( tag || "*" );
18749
18750 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18751 ret = context.querySelectorAll( tag || "*" );
18752
18753 } else {
18754 ret = [];
18755 }
18756
18757 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18758 return jQuery.merge( [ context ], ret );
18759 }
18760
18761 return ret;
18762 }
18763
18764
18765 // Mark scripts as having already been evaluated
18766 function setGlobalEval( elems, refElements ) {
18767 var i = 0,
18768 l = elems.length;
18769
18770 for ( ; i < l; i++ ) {
18771 dataPriv.set(
18772 elems[ i ],
18773 "globalEval",
18774 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18775 );
18776 }
18777 }
18778
18779
18780 var rhtml = /<|&#?\w+;/;
18781
18782 function buildFragment( elems, context, scripts, selection, ignored ) {
18783 var elem, tmp, tag, wrap, contains, j,
18784 fragment = context.createDocumentFragment(),
18785 nodes = [],
18786 i = 0,
18787 l = elems.length;
18788
18789 for ( ; i < l; i++ ) {
18790 elem = elems[ i ];
18791
18792 if ( elem || elem === 0 ) {
18793
18794 // Add nodes directly
18795 if ( jQuery.type( elem ) === "object" ) {
18796
18797 // Support: Android <=4.0 only, PhantomJS 1 only
18798 // push.apply(_, arraylike) throws on ancient WebKit
18799 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18800
18801 // Convert non-html into a text node
18802 } else if ( !rhtml.test( elem ) ) {
18803 nodes.push( context.createTextNode( elem ) );
18804
18805 // Convert html into DOM nodes
18806 } else {
18807 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18808
18809 // Deserialize a standard representation
18810 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18811 wrap = wrapMap[ tag ] || wrapMap._default;
18812 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18813
18814 // Descend through wrappers to the right content
18815 j = wrap[ 0 ];
18816 while ( j-- ) {
18817 tmp = tmp.lastChild;
18818 }
18819
18820 // Support: Android <=4.0 only, PhantomJS 1 only
18821 // push.apply(_, arraylike) throws on ancient WebKit
18822 jQuery.merge( nodes, tmp.childNodes );
18823
18824 // Remember the top-level container
18825 tmp = fragment.firstChild;
18826
18827 // Ensure the created nodes are orphaned (#12392)
18828 tmp.textContent = "";
18829 }
18830 }
18831 }
18832
18833 // Remove wrapper from fragment
18834 fragment.textContent = "";
18835
18836 i = 0;
18837 while ( ( elem = nodes[ i++ ] ) ) {
18838
18839 // Skip elements already in the context collection (trac-4087)
18840 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18841 if ( ignored ) {
18842 ignored.push( elem );
18843 }
18844 continue;
18845 }
18846
18847 contains = jQuery.contains( elem.ownerDocument, elem );
18848
18849 // Append to fragment
18850 tmp = getAll( fragment.appendChild( elem ), "script" );
18851
18852 // Preserve script evaluation history
18853 if ( contains ) {
18854 setGlobalEval( tmp );
18855 }
18856
18857 // Capture executables
18858 if ( scripts ) {
18859 j = 0;
18860 while ( ( elem = tmp[ j++ ] ) ) {
18861 if ( rscriptType.test( elem.type || "" ) ) {
18862 scripts.push( elem );
18863 }
18864 }
18865 }
18866 }
18867
18868 return fragment;
18869 }
18870
18871
18872 ( function() {
18873 var fragment = document.createDocumentFragment(),
18874 div = fragment.appendChild( document.createElement( "div" ) ),
18875 input = document.createElement( "input" );
18876
18877 // Support: Android 4.0 - 4.3 only
18878 // Check state lost if the name is set (#11217)
18879 // Support: Windows Web Apps (WWA)
18880 // `name` and `type` must use .setAttribute for WWA (#14901)
18881 input.setAttribute( "type", "radio" );
18882 input.setAttribute( "checked", "checked" );
18883 input.setAttribute( "name", "t" );
18884
18885 div.appendChild( input );
18886
18887 // Support: Android <=4.1 only
18888 // Older WebKit doesn't clone checked state correctly in fragments
18889 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18890
18891 // Support: IE <=11 only
18892 // Make sure textarea (and checkbox) defaultValue is properly cloned
18893 div.innerHTML = "<textarea>x</textarea>";
18894 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18895 } )();
18896 var documentElement = document.documentElement;
18897
18898
18899
18900 var
18901 rkeyEvent = /^key/,
18902 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18903 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18904
18905 function returnTrue() {
18906 return true;
18907 }
18908
18909 function returnFalse() {
18910 return false;
18911 }
18912
18913 // Support: IE <=9 only
18914 // See #13393 for more info
18915 function safeActiveElement() {
18916 try {
18917 return document.activeElement;
18918 } catch ( err ) { }
18919 }
18920
18921 function on( elem, types, selector, data, fn, one ) {
18922 var origFn, type;
18923
18924 // Types can be a map of types/handlers
18925 if ( typeof types === "object" ) {
18926
18927 // ( types-Object, selector, data )
18928 if ( typeof selector !== "string" ) {
18929
18930 // ( types-Object, data )
18931 data = data || selector;
18932 selector = undefined;
18933 }
18934 for ( type in types ) {
18935 on( elem, type, selector, data, types[ type ], one );
18936 }
18937 return elem;
18938 }
18939
18940 if ( data == null && fn == null ) {
18941
18942 // ( types, fn )
18943 fn = selector;
18944 data = selector = undefined;
18945 } else if ( fn == null ) {
18946 if ( typeof selector === "string" ) {
18947
18948 // ( types, selector, fn )
18949 fn = data;
18950 data = undefined;
18951 } else {
18952
18953 // ( types, data, fn )
18954 fn = data;
18955 data = selector;
18956 selector = undefined;
18957 }
18958 }
18959 if ( fn === false ) {
18960 fn = returnFalse;
18961 } else if ( !fn ) {
18962 return elem;
18963 }
18964
18965 if ( one === 1 ) {
18966 origFn = fn;
18967 fn = function( event ) {
18968
18969 // Can use an empty set, since event contains the info
18970 jQuery().off( event );
18971 return origFn.apply( this, arguments );
18972 };
18973
18974 // Use same guid so caller can remove using origFn
18975 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18976 }
18977 return elem.each( function() {
18978 jQuery.event.add( this, types, fn, data, selector );
18979 } );
18980 }
18981
18982 /*
18983 * Helper functions for managing events -- not part of the public interface.
18984 * Props to Dean Edwards' addEvent library for many of the ideas.
18985 */
18986 jQuery.event = {
18987
18988 global: {},
18989
18990 add: function( elem, types, handler, data, selector ) {
18991
18992 var handleObjIn, eventHandle, tmp,
18993 events, t, handleObj,
18994 special, handlers, type, namespaces, origType,
18995 elemData = dataPriv.get( elem );
18996
18997 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18998 if ( !elemData ) {
18999 return;
19000 }
19001
19002 // Caller can pass in an object of custom data in lieu of the handler
19003 if ( handler.handler ) {
19004 handleObjIn = handler;
19005 handler = handleObjIn.handler;
19006 selector = handleObjIn.selector;
19007 }
19008
19009 // Ensure that invalid selectors throw exceptions at attach time
19010 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
19011 if ( selector ) {
19012 jQuery.find.matchesSelector( documentElement, selector );
19013 }
19014
19015 // Make sure that the handler has a unique ID, used to find/remove it later
19016 if ( !handler.guid ) {
19017 handler.guid = jQuery.guid++;
19018 }
19019
19020 // Init the element's event structure and main handler, if this is the first
19021 if ( !( events = elemData.events ) ) {
19022 events = elemData.events = {};
19023 }
19024 if ( !( eventHandle = elemData.handle ) ) {
19025 eventHandle = elemData.handle = function( e ) {
19026
19027 // Discard the second event of a jQuery.event.trigger() and
19028 // when an event is called after a page has unloaded
19029 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
19030 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19031 };
19032 }
19033
19034 // Handle multiple events separated by a space
19035 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19036 t = types.length;
19037 while ( t-- ) {
19038 tmp = rtypenamespace.exec( types[ t ] ) || [];
19039 type = origType = tmp[ 1 ];
19040 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19041
19042 // There *must* be a type, no attaching namespace-only handlers
19043 if ( !type ) {
19044 continue;
19045 }
19046
19047 // If event changes its type, use the special event handlers for the changed type
19048 special = jQuery.event.special[ type ] || {};
19049
19050 // If selector defined, determine special event api type, otherwise given type
19051 type = ( selector ? special.delegateType : special.bindType ) || type;
19052
19053 // Update special based on newly reset type
19054 special = jQuery.event.special[ type ] || {};
19055
19056 // handleObj is passed to all event handlers
19057 handleObj = jQuery.extend( {
19058 type: type,
19059 origType: origType,
19060 data: data,
19061 handler: handler,
19062 guid: handler.guid,
19063 selector: selector,
19064 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19065 namespace: namespaces.join( "." )
19066 }, handleObjIn );
19067
19068 // Init the event handler queue if we're the first
19069 if ( !( handlers = events[ type ] ) ) {
19070 handlers = events[ type ] = [];
19071 handlers.delegateCount = 0;
19072
19073 // Only use addEventListener if the special events handler returns false
19074 if ( !special.setup ||
19075 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19076
19077 if ( elem.addEventListener ) {
19078 elem.addEventListener( type, eventHandle );
19079 }
19080 }
19081 }
19082
19083 if ( special.add ) {
19084 special.add.call( elem, handleObj );
19085
19086 if ( !handleObj.handler.guid ) {
19087 handleObj.handler.guid = handler.guid;
19088 }
19089 }
19090
19091 // Add to the element's handler list, delegates in front
19092 if ( selector ) {
19093 handlers.splice( handlers.delegateCount++, 0, handleObj );
19094 } else {
19095 handlers.push( handleObj );
19096 }
19097
19098 // Keep track of which events have ever been used, for event optimization
19099 jQuery.event.global[ type ] = true;
19100 }
19101
19102 },
19103
19104 // Detach an event or set of events from an element
19105 remove: function( elem, types, handler, selector, mappedTypes ) {
19106
19107 var j, origCount, tmp,
19108 events, t, handleObj,
19109 special, handlers, type, namespaces, origType,
19110 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19111
19112 if ( !elemData || !( events = elemData.events ) ) {
19113 return;
19114 }
19115
19116 // Once for each type.namespace in types; type may be omitted
19117 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19118 t = types.length;
19119 while ( t-- ) {
19120 tmp = rtypenamespace.exec( types[ t ] ) || [];
19121 type = origType = tmp[ 1 ];
19122 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19123
19124 // Unbind all events (on this namespace, if provided) for the element
19125 if ( !type ) {
19126 for ( type in events ) {
19127 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19128 }
19129 continue;
19130 }
19131
19132 special = jQuery.event.special[ type ] || {};
19133 type = ( selector ? special.delegateType : special.bindType ) || type;
19134 handlers = events[ type ] || [];
19135 tmp = tmp[ 2 ] &&
19136 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19137
19138 // Remove matching events
19139 origCount = j = handlers.length;
19140 while ( j-- ) {
19141 handleObj = handlers[ j ];
19142
19143 if ( ( mappedTypes || origType === handleObj.origType ) &&
19144 ( !handler || handler.guid === handleObj.guid ) &&
19145 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19146 ( !selector || selector === handleObj.selector ||
19147 selector === "**" && handleObj.selector ) ) {
19148 handlers.splice( j, 1 );
19149
19150 if ( handleObj.selector ) {
19151 handlers.delegateCount--;
19152 }
19153 if ( special.remove ) {
19154 special.remove.call( elem, handleObj );
19155 }
19156 }
19157 }
19158
19159 // Remove generic event handler if we removed something and no more handlers exist
19160 // (avoids potential for endless recursion during removal of special event handlers)
19161 if ( origCount && !handlers.length ) {
19162 if ( !special.teardown ||
19163 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19164
19165 jQuery.removeEvent( elem, type, elemData.handle );
19166 }
19167
19168 delete events[ type ];
19169 }
19170 }
19171
19172 // Remove data and the expando if it's no longer used
19173 if ( jQuery.isEmptyObject( events ) ) {
19174 dataPriv.remove( elem, "handle events" );
19175 }
19176 },
19177
19178 dispatch: function( nativeEvent ) {
19179
19180 // Make a writable jQuery.Event from the native event object
19181 var event = jQuery.event.fix( nativeEvent );
19182
19183 var i, j, ret, matched, handleObj, handlerQueue,
19184 args = new Array( arguments.length ),
19185 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19186 special = jQuery.event.special[ event.type ] || {};
19187
19188 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19189 args[ 0 ] = event;
19190
19191 for ( i = 1; i < arguments.length; i++ ) {
19192 args[ i ] = arguments[ i ];
19193 }
19194
19195 event.delegateTarget = this;
19196
19197 // Call the preDispatch hook for the mapped type, and let it bail if desired
19198 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19199 return;
19200 }
19201
19202 // Determine handlers
19203 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19204
19205 // Run delegates first; they may want to stop propagation beneath us
19206 i = 0;
19207 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19208 event.currentTarget = matched.elem;
19209
19210 j = 0;
19211 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19212 !event.isImmediatePropagationStopped() ) {
19213
19214 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19215 // a subset or equal to those in the bound event (both can have no namespace).
19216 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19217
19218 event.handleObj = handleObj;
19219 event.data = handleObj.data;
19220
19221 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19222 handleObj.handler ).apply( matched.elem, args );
19223
19224 if ( ret !== undefined ) {
19225 if ( ( event.result = ret ) === false ) {
19226 event.preventDefault();
19227 event.stopPropagation();
19228 }
19229 }
19230 }
19231 }
19232 }
19233
19234 // Call the postDispatch hook for the mapped type
19235 if ( special.postDispatch ) {
19236 special.postDispatch.call( this, event );
19237 }
19238
19239 return event.result;
19240 },
19241
19242 handlers: function( event, handlers ) {
19243 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19244 handlerQueue = [],
19245 delegateCount = handlers.delegateCount,
19246 cur = event.target;
19247
19248 // Find delegate handlers
19249 if ( delegateCount &&
19250
19251 // Support: IE <=9
19252 // Black-hole SVG <use> instance trees (trac-13180)
19253 cur.nodeType &&
19254
19255 // Support: Firefox <=42
19256 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19257 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19258 // Support: IE 11 only
19259 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19260 !( event.type === "click" && event.button >= 1 ) ) {
19261
19262 for ( ; cur !== this; cur = cur.parentNode || this ) {
19263
19264 // Don't check non-elements (#13208)
19265 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19266 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19267 matchedHandlers = [];
19268 matchedSelectors = {};
19269 for ( i = 0; i < delegateCount; i++ ) {
19270 handleObj = handlers[ i ];
19271
19272 // Don't conflict with Object.prototype properties (#13203)
19273 sel = handleObj.selector + " ";
19274
19275 if ( matchedSelectors[ sel ] === undefined ) {
19276 matchedSelectors[ sel ] = handleObj.needsContext ?
19277 jQuery( sel, this ).index( cur ) > -1 :
19278 jQuery.find( sel, this, null, [ cur ] ).length;
19279 }
19280 if ( matchedSelectors[ sel ] ) {
19281 matchedHandlers.push( handleObj );
19282 }
19283 }
19284 if ( matchedHandlers.length ) {
19285 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19286 }
19287 }
19288 }
19289 }
19290
19291 // Add the remaining (directly-bound) handlers
19292 cur = this;
19293 if ( delegateCount < handlers.length ) {
19294 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19295 }
19296
19297 return handlerQueue;
19298 },
19299
19300 addProp: function( name, hook ) {
19301 Object.defineProperty( jQuery.Event.prototype, name, {
19302 enumerable: true,
19303 configurable: true,
19304
19305 get: jQuery.isFunction( hook ) ?
19306 function() {
19307 if ( this.originalEvent ) {
19308 return hook( this.originalEvent );
19309 }
19310 } :
19311 function() {
19312 if ( this.originalEvent ) {
19313 return this.originalEvent[ name ];
19314 }
19315 },
19316
19317 set: function( value ) {
19318 Object.defineProperty( this, name, {
19319 enumerable: true,
19320 configurable: true,
19321 writable: true,
19322 value: value
19323 } );
19324 }
19325 } );
19326 },
19327
19328 fix: function( originalEvent ) {
19329 return originalEvent[ jQuery.expando ] ?
19330 originalEvent :
19331 new jQuery.Event( originalEvent );
19332 },
19333
19334 special: {
19335 load: {
19336
19337 // Prevent triggered image.load events from bubbling to window.load
19338 noBubble: true
19339 },
19340 focus: {
19341
19342 // Fire native event if possible so blur/focus sequence is correct
19343 trigger: function() {
19344 if ( this !== safeActiveElement() && this.focus ) {
19345 this.focus();
19346 return false;
19347 }
19348 },
19349 delegateType: "focusin"
19350 },
19351 blur: {
19352 trigger: function() {
19353 if ( this === safeActiveElement() && this.blur ) {
19354 this.blur();
19355 return false;
19356 }
19357 },
19358 delegateType: "focusout"
19359 },
19360 click: {
19361
19362 // For checkbox, fire native event so checked state will be right
19363 trigger: function() {
19364 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19365 this.click();
19366 return false;
19367 }
19368 },
19369
19370 // For cross-browser consistency, don't fire native .click() on links
19371 _default: function( event ) {
19372 return nodeName( event.target, "a" );
19373 }
19374 },
19375
19376 beforeunload: {
19377 postDispatch: function( event ) {
19378
19379 // Support: Firefox 20+
19380 // Firefox doesn't alert if the returnValue field is not set.
19381 if ( event.result !== undefined && event.originalEvent ) {
19382 event.originalEvent.returnValue = event.result;
19383 }
19384 }
19385 }
19386 }
19387 };
19388
19389 jQuery.removeEvent = function( elem, type, handle ) {
19390
19391 // This "if" is needed for plain objects
19392 if ( elem.removeEventListener ) {
19393 elem.removeEventListener( type, handle );
19394 }
19395 };
19396
19397 jQuery.Event = function( src, props ) {
19398
19399 // Allow instantiation without the 'new' keyword
19400 if ( !( this instanceof jQuery.Event ) ) {
19401 return new jQuery.Event( src, props );
19402 }
19403
19404 // Event object
19405 if ( src && src.type ) {
19406 this.originalEvent = src;
19407 this.type = src.type;
19408
19409 // Events bubbling up the document may have been marked as prevented
19410 // by a handler lower down the tree; reflect the correct value.
19411 this.isDefaultPrevented = src.defaultPrevented ||
19412 src.defaultPrevented === undefined &&
19413
19414 // Support: Android <=2.3 only
19415 src.returnValue === false ?
19416 returnTrue :
19417 returnFalse;
19418
19419 // Create target properties
19420 // Support: Safari <=6 - 7 only
19421 // Target should not be a text node (#504, #13143)
19422 this.target = ( src.target && src.target.nodeType === 3 ) ?
19423 src.target.parentNode :
19424 src.target;
19425
19426 this.currentTarget = src.currentTarget;
19427 this.relatedTarget = src.relatedTarget;
19428
19429 // Event type
19430 } else {
19431 this.type = src;
19432 }
19433
19434 // Put explicitly provided properties onto the event object
19435 if ( props ) {
19436 jQuery.extend( this, props );
19437 }
19438
19439 // Create a timestamp if incoming event doesn't have one
19440 this.timeStamp = src && src.timeStamp || jQuery.now();
19441
19442 // Mark it as fixed
19443 this[ jQuery.expando ] = true;
19444 };
19445
19446 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19447 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19448 jQuery.Event.prototype = {
19449 constructor: jQuery.Event,
19450 isDefaultPrevented: returnFalse,
19451 isPropagationStopped: returnFalse,
19452 isImmediatePropagationStopped: returnFalse,
19453 isSimulated: false,
19454
19455 preventDefault: function() {
19456 var e = this.originalEvent;
19457
19458 this.isDefaultPrevented = returnTrue;
19459
19460 if ( e && !this.isSimulated ) {
19461 e.preventDefault();
19462 }
19463 },
19464 stopPropagation: function() {
19465 var e = this.originalEvent;
19466
19467 this.isPropagationStopped = returnTrue;
19468
19469 if ( e && !this.isSimulated ) {
19470 e.stopPropagation();
19471 }
19472 },
19473 stopImmediatePropagation: function() {
19474 var e = this.originalEvent;
19475
19476 this.isImmediatePropagationStopped = returnTrue;
19477
19478 if ( e && !this.isSimulated ) {
19479 e.stopImmediatePropagation();
19480 }
19481
19482 this.stopPropagation();
19483 }
19484 };
19485
19486 // Includes all common event props including KeyEvent and MouseEvent specific props
19487 jQuery.each( {
19488 altKey: true,
19489 bubbles: true,
19490 cancelable: true,
19491 changedTouches: true,
19492 ctrlKey: true,
19493 detail: true,
19494 eventPhase: true,
19495 metaKey: true,
19496 pageX: true,
19497 pageY: true,
19498 shiftKey: true,
19499 view: true,
19500 "char": true,
19501 charCode: true,
19502 key: true,
19503 keyCode: true,
19504 button: true,
19505 buttons: true,
19506 clientX: true,
19507 clientY: true,
19508 offsetX: true,
19509 offsetY: true,
19510 pointerId: true,
19511 pointerType: true,
19512 screenX: true,
19513 screenY: true,
19514 targetTouches: true,
19515 toElement: true,
19516 touches: true,
19517
19518 which: function( event ) {
19519 var button = event.button;
19520
19521 // Add which for key events
19522 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19523 return event.charCode != null ? event.charCode : event.keyCode;
19524 }
19525
19526 // Add which for click: 1 === left; 2 === middle; 3 === right
19527 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19528 if ( button & 1 ) {
19529 return 1;
19530 }
19531
19532 if ( button & 2 ) {
19533 return 3;
19534 }
19535
19536 if ( button & 4 ) {
19537 return 2;
19538 }
19539
19540 return 0;
19541 }
19542
19543 return event.which;
19544 }
19545 }, jQuery.event.addProp );
19546
19547 // Create mouseenter/leave events using mouseover/out and event-time checks
19548 // so that event delegation works in jQuery.
19549 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19550 //
19551 // Support: Safari 7 only
19552 // Safari sends mouseenter too often; see:
19553 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19554 // for the description of the bug (it existed in older Chrome versions as well).
19555 jQuery.each( {
19556 mouseenter: "mouseover",
19557 mouseleave: "mouseout",
19558 pointerenter: "pointerover",
19559 pointerleave: "pointerout"
19560 }, function( orig, fix ) {
19561 jQuery.event.special[ orig ] = {
19562 delegateType: fix,
19563 bindType: fix,
19564
19565 handle: function( event ) {
19566 var ret,
19567 target = this,
19568 related = event.relatedTarget,
19569 handleObj = event.handleObj;
19570
19571 // For mouseenter/leave call the handler if related is outside the target.
19572 // NB: No relatedTarget if the mouse left/entered the browser window
19573 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19574 event.type = handleObj.origType;
19575 ret = handleObj.handler.apply( this, arguments );
19576 event.type = fix;
19577 }
19578 return ret;
19579 }
19580 };
19581 } );
19582
19583 jQuery.fn.extend( {
19584
19585 on: function( types, selector, data, fn ) {
19586 return on( this, types, selector, data, fn );
19587 },
19588 one: function( types, selector, data, fn ) {
19589 return on( this, types, selector, data, fn, 1 );
19590 },
19591 off: function( types, selector, fn ) {
19592 var handleObj, type;
19593 if ( types && types.preventDefault && types.handleObj ) {
19594
19595 // ( event ) dispatched jQuery.Event
19596 handleObj = types.handleObj;
19597 jQuery( types.delegateTarget ).off(
19598 handleObj.namespace ?
19599 handleObj.origType + "." + handleObj.namespace :
19600 handleObj.origType,
19601 handleObj.selector,
19602 handleObj.handler
19603 );
19604 return this;
19605 }
19606 if ( typeof types === "object" ) {
19607
19608 // ( types-object [, selector] )
19609 for ( type in types ) {
19610 this.off( type, selector, types[ type ] );
19611 }
19612 return this;
19613 }
19614 if ( selector === false || typeof selector === "function" ) {
19615
19616 // ( types [, fn] )
19617 fn = selector;
19618 selector = undefined;
19619 }
19620 if ( fn === false ) {
19621 fn = returnFalse;
19622 }
19623 return this.each( function() {
19624 jQuery.event.remove( this, types, fn, selector );
19625 } );
19626 }
19627 } );
19628
19629
19630 var
19631
19632 /* eslint-disable max-len */
19633
19634 // See https://github.com/eslint/eslint/issues/3229
19635 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19636
19637 /* eslint-enable */
19638
19639 // Support: IE <=10 - 11, Edge 12 - 13
19640 // In IE/Edge using regex groups here causes severe slowdowns.
19641 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19642 rnoInnerhtml = /<script|<style|<link/i,
19643
19644 // checked="checked" or checked
19645 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19646 rscriptTypeMasked = /^true\/(.*)/,
19647 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19648
19649 // Prefer a tbody over its parent table for containing new rows
19650 function manipulationTarget( elem, content ) {
19651 if ( nodeName( elem, "table" ) &&
19652 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19653
19654 return jQuery( ">tbody", elem )[ 0 ] || elem;
19655 }
19656
19657 return elem;
19658 }
19659
19660 // Replace/restore the type attribute of script elements for safe DOM manipulation
19661 function disableScript( elem ) {
19662 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19663 return elem;
19664 }
19665 function restoreScript( elem ) {
19666 var match = rscriptTypeMasked.exec( elem.type );
19667
19668 if ( match ) {
19669 elem.type = match[ 1 ];
19670 } else {
19671 elem.removeAttribute( "type" );
19672 }
19673
19674 return elem;
19675 }
19676
19677 function cloneCopyEvent( src, dest ) {
19678 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19679
19680 if ( dest.nodeType !== 1 ) {
19681 return;
19682 }
19683
19684 // 1. Copy private data: events, handlers, etc.
19685 if ( dataPriv.hasData( src ) ) {
19686 pdataOld = dataPriv.access( src );
19687 pdataCur = dataPriv.set( dest, pdataOld );
19688 events = pdataOld.events;
19689
19690 if ( events ) {
19691 delete pdataCur.handle;
19692 pdataCur.events = {};
19693
19694 for ( type in events ) {
19695 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19696 jQuery.event.add( dest, type, events[ type ][ i ] );
19697 }
19698 }
19699 }
19700 }
19701
19702 // 2. Copy user data
19703 if ( dataUser.hasData( src ) ) {
19704 udataOld = dataUser.access( src );
19705 udataCur = jQuery.extend( {}, udataOld );
19706
19707 dataUser.set( dest, udataCur );
19708 }
19709 }
19710
19711 // Fix IE bugs, see support tests
19712 function fixInput( src, dest ) {
19713 var nodeName = dest.nodeName.toLowerCase();
19714
19715 // Fails to persist the checked state of a cloned checkbox or radio button.
19716 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19717 dest.checked = src.checked;
19718
19719 // Fails to return the selected option to the default selected state when cloning options
19720 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19721 dest.defaultValue = src.defaultValue;
19722 }
19723 }
19724
19725 function domManip( collection, args, callback, ignored ) {
19726
19727 // Flatten any nested arrays
19728 args = concat.apply( [], args );
19729
19730 var fragment, first, scripts, hasScripts, node, doc,
19731 i = 0,
19732 l = collection.length,
19733 iNoClone = l - 1,
19734 value = args[ 0 ],
19735 isFunction = jQuery.isFunction( value );
19736
19737 // We can't cloneNode fragments that contain checked, in WebKit
19738 if ( isFunction ||
19739 ( l > 1 && typeof value === "string" &&
19740 !support.checkClone && rchecked.test( value ) ) ) {
19741 return collection.each( function( index ) {
19742 var self = collection.eq( index );
19743 if ( isFunction ) {
19744 args[ 0 ] = value.call( this, index, self.html() );
19745 }
19746 domManip( self, args, callback, ignored );
19747 } );
19748 }
19749
19750 if ( l ) {
19751 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19752 first = fragment.firstChild;
19753
19754 if ( fragment.childNodes.length === 1 ) {
19755 fragment = first;
19756 }
19757
19758 // Require either new content or an interest in ignored elements to invoke the callback
19759 if ( first || ignored ) {
19760 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19761 hasScripts = scripts.length;
19762
19763 // Use the original fragment for the last item
19764 // instead of the first because it can end up
19765 // being emptied incorrectly in certain situations (#8070).
19766 for ( ; i < l; i++ ) {
19767 node = fragment;
19768
19769 if ( i !== iNoClone ) {
19770 node = jQuery.clone( node, true, true );
19771
19772 // Keep references to cloned scripts for later restoration
19773 if ( hasScripts ) {
19774
19775 // Support: Android <=4.0 only, PhantomJS 1 only
19776 // push.apply(_, arraylike) throws on ancient WebKit
19777 jQuery.merge( scripts, getAll( node, "script" ) );
19778 }
19779 }
19780
19781 callback.call( collection[ i ], node, i );
19782 }
19783
19784 if ( hasScripts ) {
19785 doc = scripts[ scripts.length - 1 ].ownerDocument;
19786
19787 // Reenable scripts
19788 jQuery.map( scripts, restoreScript );
19789
19790 // Evaluate executable scripts on first document insertion
19791 for ( i = 0; i < hasScripts; i++ ) {
19792 node = scripts[ i ];
19793 if ( rscriptType.test( node.type || "" ) &&
19794 !dataPriv.access( node, "globalEval" ) &&
19795 jQuery.contains( doc, node ) ) {
19796
19797 if ( node.src ) {
19798
19799 // Optional AJAX dependency, but won't run scripts if not present
19800 if ( jQuery._evalUrl ) {
19801 jQuery._evalUrl( node.src );
19802 }
19803 } else {
19804 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19805 }
19806 }
19807 }
19808 }
19809 }
19810 }
19811
19812 return collection;
19813 }
19814
19815 function remove( elem, selector, keepData ) {
19816 var node,
19817 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19818 i = 0;
19819
19820 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19821 if ( !keepData && node.nodeType === 1 ) {
19822 jQuery.cleanData( getAll( node ) );
19823 }
19824
19825 if ( node.parentNode ) {
19826 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19827 setGlobalEval( getAll( node, "script" ) );
19828 }
19829 node.parentNode.removeChild( node );
19830 }
19831 }
19832
19833 return elem;
19834 }
19835
19836 jQuery.extend( {
19837 htmlPrefilter: function( html ) {
19838 return html.replace( rxhtmlTag, "<$1></$2>" );
19839 },
19840
19841 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19842 var i, l, srcElements, destElements,
19843 clone = elem.cloneNode( true ),
19844 inPage = jQuery.contains( elem.ownerDocument, elem );
19845
19846 // Fix IE cloning issues
19847 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19848 !jQuery.isXMLDoc( elem ) ) {
19849
19850 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19851 destElements = getAll( clone );
19852 srcElements = getAll( elem );
19853
19854 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19855 fixInput( srcElements[ i ], destElements[ i ] );
19856 }
19857 }
19858
19859 // Copy the events from the original to the clone
19860 if ( dataAndEvents ) {
19861 if ( deepDataAndEvents ) {
19862 srcElements = srcElements || getAll( elem );
19863 destElements = destElements || getAll( clone );
19864
19865 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19866 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19867 }
19868 } else {
19869 cloneCopyEvent( elem, clone );
19870 }
19871 }
19872
19873 // Preserve script evaluation history
19874 destElements = getAll( clone, "script" );
19875 if ( destElements.length > 0 ) {
19876 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19877 }
19878
19879 // Return the cloned set
19880 return clone;
19881 },
19882
19883 cleanData: function( elems ) {
19884 var data, elem, type,
19885 special = jQuery.event.special,
19886 i = 0;
19887
19888 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19889 if ( acceptData( elem ) ) {
19890 if ( ( data = elem[ dataPriv.expando ] ) ) {
19891 if ( data.events ) {
19892 for ( type in data.events ) {
19893 if ( special[ type ] ) {
19894 jQuery.event.remove( elem, type );
19895
19896 // This is a shortcut to avoid jQuery.event.remove's overhead
19897 } else {
19898 jQuery.removeEvent( elem, type, data.handle );
19899 }
19900 }
19901 }
19902
19903 // Support: Chrome <=35 - 45+
19904 // Assign undefined instead of using delete, see Data#remove
19905 elem[ dataPriv.expando ] = undefined;
19906 }
19907 if ( elem[ dataUser.expando ] ) {
19908
19909 // Support: Chrome <=35 - 45+
19910 // Assign undefined instead of using delete, see Data#remove
19911 elem[ dataUser.expando ] = undefined;
19912 }
19913 }
19914 }
19915 }
19916 } );
19917
19918 jQuery.fn.extend( {
19919 detach: function( selector ) {
19920 return remove( this, selector, true );
19921 },
19922
19923 remove: function( selector ) {
19924 return remove( this, selector );
19925 },
19926
19927 text: function( value ) {
19928 return access( this, function( value ) {
19929 return value === undefined ?
19930 jQuery.text( this ) :
19931 this.empty().each( function() {
19932 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19933 this.textContent = value;
19934 }
19935 } );
19936 }, null, value, arguments.length );
19937 },
19938
19939 append: function() {
19940 return domManip( this, arguments, function( elem ) {
19941 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19942 var target = manipulationTarget( this, elem );
19943 target.appendChild( elem );
19944 }
19945 } );
19946 },
19947
19948 prepend: function() {
19949 return domManip( this, arguments, function( elem ) {
19950 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19951 var target = manipulationTarget( this, elem );
19952 target.insertBefore( elem, target.firstChild );
19953 }
19954 } );
19955 },
19956
19957 before: function() {
19958 return domManip( this, arguments, function( elem ) {
19959 if ( this.parentNode ) {
19960 this.parentNode.insertBefore( elem, this );
19961 }
19962 } );
19963 },
19964
19965 after: function() {
19966 return domManip( this, arguments, function( elem ) {
19967 if ( this.parentNode ) {
19968 this.parentNode.insertBefore( elem, this.nextSibling );
19969 }
19970 } );
19971 },
19972
19973 empty: function() {
19974 var elem,
19975 i = 0;
19976
19977 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19978 if ( elem.nodeType === 1 ) {
19979
19980 // Prevent memory leaks
19981 jQuery.cleanData( getAll( elem, false ) );
19982
19983 // Remove any remaining nodes
19984 elem.textContent = "";
19985 }
19986 }
19987
19988 return this;
19989 },
19990
19991 clone: function( dataAndEvents, deepDataAndEvents ) {
19992 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19993 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19994
19995 return this.map( function() {
19996 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19997 } );
19998 },
19999
20000 html: function( value ) {
20001 return access( this, function( value ) {
20002 var elem = this[ 0 ] || {},
20003 i = 0,
20004 l = this.length;
20005
20006 if ( value === undefined && elem.nodeType === 1 ) {
20007 return elem.innerHTML;
20008 }
20009
20010 // See if we can take a shortcut and just use innerHTML
20011 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
20012 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
20013
20014 value = jQuery.htmlPrefilter( value );
20015
20016 try {
20017 for ( ; i < l; i++ ) {
20018 elem = this[ i ] || {};
20019
20020 // Remove element nodes and prevent memory leaks
20021 if ( elem.nodeType === 1 ) {
20022 jQuery.cleanData( getAll( elem, false ) );
20023 elem.innerHTML = value;
20024 }
20025 }
20026
20027 elem = 0;
20028
20029 // If using innerHTML throws an exception, use the fallback method
20030 } catch ( e ) {}
20031 }
20032
20033 if ( elem ) {
20034 this.empty().append( value );
20035 }
20036 }, null, value, arguments.length );
20037 },
20038
20039 replaceWith: function() {
20040 var ignored = [];
20041
20042 // Make the changes, replacing each non-ignored context element with the new content
20043 return domManip( this, arguments, function( elem ) {
20044 var parent = this.parentNode;
20045
20046 if ( jQuery.inArray( this, ignored ) < 0 ) {
20047 jQuery.cleanData( getAll( this ) );
20048 if ( parent ) {
20049 parent.replaceChild( elem, this );
20050 }
20051 }
20052
20053 // Force callback invocation
20054 }, ignored );
20055 }
20056 } );
20057
20058 jQuery.each( {
20059 appendTo: "append",
20060 prependTo: "prepend",
20061 insertBefore: "before",
20062 insertAfter: "after",
20063 replaceAll: "replaceWith"
20064 }, function( name, original ) {
20065 jQuery.fn[ name ] = function( selector ) {
20066 var elems,
20067 ret = [],
20068 insert = jQuery( selector ),
20069 last = insert.length - 1,
20070 i = 0;
20071
20072 for ( ; i <= last; i++ ) {
20073 elems = i === last ? this : this.clone( true );
20074 jQuery( insert[ i ] )[ original ]( elems );
20075
20076 // Support: Android <=4.0 only, PhantomJS 1 only
20077 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20078 push.apply( ret, elems.get() );
20079 }
20080
20081 return this.pushStack( ret );
20082 };
20083 } );
20084 var rmargin = ( /^margin/ );
20085
20086 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20087
20088 var getStyles = function( elem ) {
20089
20090 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20091 // IE throws on elements created in popups
20092 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20093 var view = elem.ownerDocument.defaultView;
20094
20095 if ( !view || !view.opener ) {
20096 view = window;
20097 }
20098
20099 return view.getComputedStyle( elem );
20100 };
20101
20102
20103
20104 ( function() {
20105
20106 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20107 // so they're executed at the same time to save the second computation.
20108 function computeStyleTests() {
20109
20110 // This is a singleton, we need to execute it only once
20111 if ( !div ) {
20112 return;
20113 }
20114
20115 div.style.cssText =
20116 "box-sizing:border-box;" +
20117 "position:relative;display:block;" +
20118 "margin:auto;border:1px;padding:1px;" +
20119 "top:1%;width:50%";
20120 div.innerHTML = "";
20121 documentElement.appendChild( container );
20122
20123 var divStyle = window.getComputedStyle( div );
20124 pixelPositionVal = divStyle.top !== "1%";
20125
20126 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20127 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20128 boxSizingReliableVal = divStyle.width === "4px";
20129
20130 // Support: Android 4.0 - 4.3 only
20131 // Some styles come back with percentage values, even though they shouldn't
20132 div.style.marginRight = "50%";
20133 pixelMarginRightVal = divStyle.marginRight === "4px";
20134
20135 documentElement.removeChild( container );
20136
20137 // Nullify the div so it wouldn't be stored in the memory and
20138 // it will also be a sign that checks already performed
20139 div = null;
20140 }
20141
20142 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20143 container = document.createElement( "div" ),
20144 div = document.createElement( "div" );
20145
20146 // Finish early in limited (non-browser) environments
20147 if ( !div.style ) {
20148 return;
20149 }
20150
20151 // Support: IE <=9 - 11 only
20152 // Style of cloned element affects source element cloned (#8908)
20153 div.style.backgroundClip = "content-box";
20154 div.cloneNode( true ).style.backgroundClip = "";
20155 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20156
20157 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20158 "padding:0;margin-top:1px;position:absolute";
20159 container.appendChild( div );
20160
20161 jQuery.extend( support, {
20162 pixelPosition: function() {
20163 computeStyleTests();
20164 return pixelPositionVal;
20165 },
20166 boxSizingReliable: function() {
20167 computeStyleTests();
20168 return boxSizingReliableVal;
20169 },
20170 pixelMarginRight: function() {
20171 computeStyleTests();
20172 return pixelMarginRightVal;
20173 },
20174 reliableMarginLeft: function() {
20175 computeStyleTests();
20176 return reliableMarginLeftVal;
20177 }
20178 } );
20179 } )();
20180
20181
20182 function curCSS( elem, name, computed ) {
20183 var width, minWidth, maxWidth, ret,
20184
20185 // Support: Firefox 51+
20186 // Retrieving style before computed somehow
20187 // fixes an issue with getting wrong values
20188 // on detached elements
20189 style = elem.style;
20190
20191 computed = computed || getStyles( elem );
20192
20193 // getPropertyValue is needed for:
20194 // .css('filter') (IE 9 only, #12537)
20195 // .css('--customProperty) (#3144)
20196 if ( computed ) {
20197 ret = computed.getPropertyValue( name ) || computed[ name ];
20198
20199 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20200 ret = jQuery.style( elem, name );
20201 }
20202
20203 // A tribute to the "awesome hack by Dean Edwards"
20204 // Android Browser returns percentage for some values,
20205 // but width seems to be reliably pixels.
20206 // This is against the CSSOM draft spec:
20207 // https://drafts.csswg.org/cssom/#resolved-values
20208 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20209
20210 // Remember the original values
20211 width = style.width;
20212 minWidth = style.minWidth;
20213 maxWidth = style.maxWidth;
20214
20215 // Put in the new values to get a computed value out
20216 style.minWidth = style.maxWidth = style.width = ret;
20217 ret = computed.width;
20218
20219 // Revert the changed values
20220 style.width = width;
20221 style.minWidth = minWidth;
20222 style.maxWidth = maxWidth;
20223 }
20224 }
20225
20226 return ret !== undefined ?
20227
20228 // Support: IE <=9 - 11 only
20229 // IE returns zIndex value as an integer.
20230 ret + "" :
20231 ret;
20232 }
20233
20234
20235 function addGetHookIf( conditionFn, hookFn ) {
20236
20237 // Define the hook, we'll check on the first run if it's really needed.
20238 return {
20239 get: function() {
20240 if ( conditionFn() ) {
20241
20242 // Hook not needed (or it's not possible to use it due
20243 // to missing dependency), remove it.
20244 delete this.get;
20245 return;
20246 }
20247
20248 // Hook needed; redefine it so that the support test is not executed again.
20249 return ( this.get = hookFn ).apply( this, arguments );
20250 }
20251 };
20252 }
20253
20254
20255 var
20256
20257 // Swappable if display is none or starts with table
20258 // except "table", "table-cell", or "table-caption"
20259 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20260 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20261 rcustomProp = /^--/,
20262 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20263 cssNormalTransform = {
20264 letterSpacing: "0",
20265 fontWeight: "400"
20266 },
20267
20268 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20269 emptyStyle = document.createElement( "div" ).style;
20270
20271 // Return a css property mapped to a potentially vendor prefixed property
20272 function vendorPropName( name ) {
20273
20274 // Shortcut for names that are not vendor prefixed
20275 if ( name in emptyStyle ) {
20276 return name;
20277 }
20278
20279 // Check for vendor prefixed names
20280 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20281 i = cssPrefixes.length;
20282
20283 while ( i-- ) {
20284 name = cssPrefixes[ i ] + capName;
20285 if ( name in emptyStyle ) {
20286 return name;
20287 }
20288 }
20289 }
20290
20291 // Return a property mapped along what jQuery.cssProps suggests or to
20292 // a vendor prefixed property.
20293 function finalPropName( name ) {
20294 var ret = jQuery.cssProps[ name ];
20295 if ( !ret ) {
20296 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20297 }
20298 return ret;
20299 }
20300
20301 function setPositiveNumber( elem, value, subtract ) {
20302
20303 // Any relative (+/-) values have already been
20304 // normalized at this point
20305 var matches = rcssNum.exec( value );
20306 return matches ?
20307
20308 // Guard against undefined "subtract", e.g., when used as in cssHooks
20309 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20310 value;
20311 }
20312
20313 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20314 var i,
20315 val = 0;
20316
20317 // If we already have the right measurement, avoid augmentation
20318 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20319 i = 4;
20320
20321 // Otherwise initialize for horizontal or vertical properties
20322 } else {
20323 i = name === "width" ? 1 : 0;
20324 }
20325
20326 for ( ; i < 4; i += 2 ) {
20327
20328 // Both box models exclude margin, so add it if we want it
20329 if ( extra === "margin" ) {
20330 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20331 }
20332
20333 if ( isBorderBox ) {
20334
20335 // border-box includes padding, so remove it if we want content
20336 if ( extra === "content" ) {
20337 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20338 }
20339
20340 // At this point, extra isn't border nor margin, so remove border
20341 if ( extra !== "margin" ) {
20342 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20343 }
20344 } else {
20345
20346 // At this point, extra isn't content, so add padding
20347 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20348
20349 // At this point, extra isn't content nor padding, so add border
20350 if ( extra !== "padding" ) {
20351 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20352 }
20353 }
20354 }
20355
20356 return val;
20357 }
20358
20359 function getWidthOrHeight( elem, name, extra ) {
20360
20361 // Start with computed style
20362 var valueIsBorderBox,
20363 styles = getStyles( elem ),
20364 val = curCSS( elem, name, styles ),
20365 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20366
20367 // Computed unit is not pixels. Stop here and return.
20368 if ( rnumnonpx.test( val ) ) {
20369 return val;
20370 }
20371
20372 // Check for style in case a browser which returns unreliable values
20373 // for getComputedStyle silently falls back to the reliable elem.style
20374 valueIsBorderBox = isBorderBox &&
20375 ( support.boxSizingReliable() || val === elem.style[ name ] );
20376
20377 // Fall back to offsetWidth/Height when value is "auto"
20378 // This happens for inline elements with no explicit setting (gh-3571)
20379 if ( val === "auto" ) {
20380 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20381 }
20382
20383 // Normalize "", auto, and prepare for extra
20384 val = parseFloat( val ) || 0;
20385
20386 // Use the active box-sizing model to add/subtract irrelevant styles
20387 return ( val +
20388 augmentWidthOrHeight(
20389 elem,
20390 name,
20391 extra || ( isBorderBox ? "border" : "content" ),
20392 valueIsBorderBox,
20393 styles
20394 )
20395 ) + "px";
20396 }
20397
20398 jQuery.extend( {
20399
20400 // Add in style property hooks for overriding the default
20401 // behavior of getting and setting a style property
20402 cssHooks: {
20403 opacity: {
20404 get: function( elem, computed ) {
20405 if ( computed ) {
20406
20407 // We should always get a number back from opacity
20408 var ret = curCSS( elem, "opacity" );
20409 return ret === "" ? "1" : ret;
20410 }
20411 }
20412 }
20413 },
20414
20415 // Don't automatically add "px" to these possibly-unitless properties
20416 cssNumber: {
20417 "animationIterationCount": true,
20418 "columnCount": true,
20419 "fillOpacity": true,
20420 "flexGrow": true,
20421 "flexShrink": true,
20422 "fontWeight": true,
20423 "lineHeight": true,
20424 "opacity": true,
20425 "order": true,
20426 "orphans": true,
20427 "widows": true,
20428 "zIndex": true,
20429 "zoom": true
20430 },
20431
20432 // Add in properties whose names you wish to fix before
20433 // setting or getting the value
20434 cssProps: {
20435 "float": "cssFloat"
20436 },
20437
20438 // Get and set the style property on a DOM Node
20439 style: function( elem, name, value, extra ) {
20440
20441 // Don't set styles on text and comment nodes
20442 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20443 return;
20444 }
20445
20446 // Make sure that we're working with the right name
20447 var ret, type, hooks,
20448 origName = jQuery.camelCase( name ),
20449 isCustomProp = rcustomProp.test( name ),
20450 style = elem.style;
20451
20452 // Make sure that we're working with the right name. We don't
20453 // want to query the value if it is a CSS custom property
20454 // since they are user-defined.
20455 if ( !isCustomProp ) {
20456 name = finalPropName( origName );
20457 }
20458
20459 // Gets hook for the prefixed version, then unprefixed version
20460 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20461
20462 // Check if we're setting a value
20463 if ( value !== undefined ) {
20464 type = typeof value;
20465
20466 // Convert "+=" or "-=" to relative numbers (#7345)
20467 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20468 value = adjustCSS( elem, name, ret );
20469
20470 // Fixes bug #9237
20471 type = "number";
20472 }
20473
20474 // Make sure that null and NaN values aren't set (#7116)
20475 if ( value == null || value !== value ) {
20476 return;
20477 }
20478
20479 // If a number was passed in, add the unit (except for certain CSS properties)
20480 if ( type === "number" ) {
20481 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20482 }
20483
20484 // background-* props affect original clone's values
20485 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20486 style[ name ] = "inherit";
20487 }
20488
20489 // If a hook was provided, use that value, otherwise just set the specified value
20490 if ( !hooks || !( "set" in hooks ) ||
20491 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20492
20493 if ( isCustomProp ) {
20494 style.setProperty( name, value );
20495 } else {
20496 style[ name ] = value;
20497 }
20498 }
20499
20500 } else {
20501
20502 // If a hook was provided get the non-computed value from there
20503 if ( hooks && "get" in hooks &&
20504 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20505
20506 return ret;
20507 }
20508
20509 // Otherwise just get the value from the style object
20510 return style[ name ];
20511 }
20512 },
20513
20514 css: function( elem, name, extra, styles ) {
20515 var val, num, hooks,
20516 origName = jQuery.camelCase( name ),
20517 isCustomProp = rcustomProp.test( name );
20518
20519 // Make sure that we're working with the right name. We don't
20520 // want to modify the value if it is a CSS custom property
20521 // since they are user-defined.
20522 if ( !isCustomProp ) {
20523 name = finalPropName( origName );
20524 }
20525
20526 // Try prefixed name followed by the unprefixed name
20527 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20528
20529 // If a hook was provided get the computed value from there
20530 if ( hooks && "get" in hooks ) {
20531 val = hooks.get( elem, true, extra );
20532 }
20533
20534 // Otherwise, if a way to get the computed value exists, use that
20535 if ( val === undefined ) {
20536 val = curCSS( elem, name, styles );
20537 }
20538
20539 // Convert "normal" to computed value
20540 if ( val === "normal" && name in cssNormalTransform ) {
20541 val = cssNormalTransform[ name ];
20542 }
20543
20544 // Make numeric if forced or a qualifier was provided and val looks numeric
20545 if ( extra === "" || extra ) {
20546 num = parseFloat( val );
20547 return extra === true || isFinite( num ) ? num || 0 : val;
20548 }
20549
20550 return val;
20551 }
20552 } );
20553
20554 jQuery.each( [ "height", "width" ], function( i, name ) {
20555 jQuery.cssHooks[ name ] = {
20556 get: function( elem, computed, extra ) {
20557 if ( computed ) {
20558
20559 // Certain elements can have dimension info if we invisibly show them
20560 // but it must have a current display style that would benefit
20561 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20562
20563 // Support: Safari 8+
20564 // Table columns in Safari have non-zero offsetWidth & zero
20565 // getBoundingClientRect().width unless display is changed.
20566 // Support: IE <=11 only
20567 // Running getBoundingClientRect on a disconnected node
20568 // in IE throws an error.
20569 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20570 swap( elem, cssShow, function() {
20571 return getWidthOrHeight( elem, name, extra );
20572 } ) :
20573 getWidthOrHeight( elem, name, extra );
20574 }
20575 },
20576
20577 set: function( elem, value, extra ) {
20578 var matches,
20579 styles = extra && getStyles( elem ),
20580 subtract = extra && augmentWidthOrHeight(
20581 elem,
20582 name,
20583 extra,
20584 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20585 styles
20586 );
20587
20588 // Convert to pixels if value adjustment is needed
20589 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20590 ( matches[ 3 ] || "px" ) !== "px" ) {
20591
20592 elem.style[ name ] = value;
20593 value = jQuery.css( elem, name );
20594 }
20595
20596 return setPositiveNumber( elem, value, subtract );
20597 }
20598 };
20599 } );
20600
20601 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20602 function( elem, computed ) {
20603 if ( computed ) {
20604 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20605 elem.getBoundingClientRect().left -
20606 swap( elem, { marginLeft: 0 }, function() {
20607 return elem.getBoundingClientRect().left;
20608 } )
20609 ) + "px";
20610 }
20611 }
20612 );
20613
20614 // These hooks are used by animate to expand properties
20615 jQuery.each( {
20616 margin: "",
20617 padding: "",
20618 border: "Width"
20619 }, function( prefix, suffix ) {
20620 jQuery.cssHooks[ prefix + suffix ] = {
20621 expand: function( value ) {
20622 var i = 0,
20623 expanded = {},
20624
20625 // Assumes a single number if not a string
20626 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20627
20628 for ( ; i < 4; i++ ) {
20629 expanded[ prefix + cssExpand[ i ] + suffix ] =
20630 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20631 }
20632
20633 return expanded;
20634 }
20635 };
20636
20637 if ( !rmargin.test( prefix ) ) {
20638 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20639 }
20640 } );
20641
20642 jQuery.fn.extend( {
20643 css: function( name, value ) {
20644 return access( this, function( elem, name, value ) {
20645 var styles, len,
20646 map = {},
20647 i = 0;
20648
20649 if ( Array.isArray( name ) ) {
20650 styles = getStyles( elem );
20651 len = name.length;
20652
20653 for ( ; i < len; i++ ) {
20654 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20655 }
20656
20657 return map;
20658 }
20659
20660 return value !== undefined ?
20661 jQuery.style( elem, name, value ) :
20662 jQuery.css( elem, name );
20663 }, name, value, arguments.length > 1 );
20664 }
20665 } );
20666
20667
20668 function Tween( elem, options, prop, end, easing ) {
20669 return new Tween.prototype.init( elem, options, prop, end, easing );
20670 }
20671 jQuery.Tween = Tween;
20672
20673 Tween.prototype = {
20674 constructor: Tween,
20675 init: function( elem, options, prop, end, easing, unit ) {
20676 this.elem = elem;
20677 this.prop = prop;
20678 this.easing = easing || jQuery.easing._default;
20679 this.options = options;
20680 this.start = this.now = this.cur();
20681 this.end = end;
20682 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20683 },
20684 cur: function() {
20685 var hooks = Tween.propHooks[ this.prop ];
20686
20687 return hooks && hooks.get ?
20688 hooks.get( this ) :
20689 Tween.propHooks._default.get( this );
20690 },
20691 run: function( percent ) {
20692 var eased,
20693 hooks = Tween.propHooks[ this.prop ];
20694
20695 if ( this.options.duration ) {
20696 this.pos = eased = jQuery.easing[ this.easing ](
20697 percent, this.options.duration * percent, 0, 1, this.options.duration
20698 );
20699 } else {
20700 this.pos = eased = percent;
20701 }
20702 this.now = ( this.end - this.start ) * eased + this.start;
20703
20704 if ( this.options.step ) {
20705 this.options.step.call( this.elem, this.now, this );
20706 }
20707
20708 if ( hooks && hooks.set ) {
20709 hooks.set( this );
20710 } else {
20711 Tween.propHooks._default.set( this );
20712 }
20713 return this;
20714 }
20715 };
20716
20717 Tween.prototype.init.prototype = Tween.prototype;
20718
20719 Tween.propHooks = {
20720 _default: {
20721 get: function( tween ) {
20722 var result;
20723
20724 // Use a property on the element directly when it is not a DOM element,
20725 // or when there is no matching style property that exists.
20726 if ( tween.elem.nodeType !== 1 ||
20727 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20728 return tween.elem[ tween.prop ];
20729 }
20730
20731 // Passing an empty string as a 3rd parameter to .css will automatically
20732 // attempt a parseFloat and fallback to a string if the parse fails.
20733 // Simple values such as "10px" are parsed to Float;
20734 // complex values such as "rotate(1rad)" are returned as-is.
20735 result = jQuery.css( tween.elem, tween.prop, "" );
20736
20737 // Empty strings, null, undefined and "auto" are converted to 0.
20738 return !result || result === "auto" ? 0 : result;
20739 },
20740 set: function( tween ) {
20741
20742 // Use step hook for back compat.
20743 // Use cssHook if its there.
20744 // Use .style if available and use plain properties where available.
20745 if ( jQuery.fx.step[ tween.prop ] ) {
20746 jQuery.fx.step[ tween.prop ]( tween );
20747 } else if ( tween.elem.nodeType === 1 &&
20748 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20749 jQuery.cssHooks[ tween.prop ] ) ) {
20750 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20751 } else {
20752 tween.elem[ tween.prop ] = tween.now;
20753 }
20754 }
20755 }
20756 };
20757
20758 // Support: IE <=9 only
20759 // Panic based approach to setting things on disconnected nodes
20760 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20761 set: function( tween ) {
20762 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20763 tween.elem[ tween.prop ] = tween.now;
20764 }
20765 }
20766 };
20767
20768 jQuery.easing = {
20769 linear: function( p ) {
20770 return p;
20771 },
20772 swing: function( p ) {
20773 return 0.5 - Math.cos( p * Math.PI ) / 2;
20774 },
20775 _default: "swing"
20776 };
20777
20778 jQuery.fx = Tween.prototype.init;
20779
20780 // Back compat <1.8 extension point
20781 jQuery.fx.step = {};
20782
20783
20784
20785
20786 var
20787 fxNow, inProgress,
20788 rfxtypes = /^(?:toggle|show|hide)$/,
20789 rrun = /queueHooks$/;
20790
20791 function schedule() {
20792 if ( inProgress ) {
20793 if ( document.hidden === false && window.requestAnimationFrame ) {
20794 window.requestAnimationFrame( schedule );
20795 } else {
20796 window.setTimeout( schedule, jQuery.fx.interval );
20797 }
20798
20799 jQuery.fx.tick();
20800 }
20801 }
20802
20803 // Animations created synchronously will run synchronously
20804 function createFxNow() {
20805 window.setTimeout( function() {
20806 fxNow = undefined;
20807 } );
20808 return ( fxNow = jQuery.now() );
20809 }
20810
20811 // Generate parameters to create a standard animation
20812 function genFx( type, includeWidth ) {
20813 var which,
20814 i = 0,
20815 attrs = { height: type };
20816
20817 // If we include width, step value is 1 to do all cssExpand values,
20818 // otherwise step value is 2 to skip over Left and Right
20819 includeWidth = includeWidth ? 1 : 0;
20820 for ( ; i < 4; i += 2 - includeWidth ) {
20821 which = cssExpand[ i ];
20822 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20823 }
20824
20825 if ( includeWidth ) {
20826 attrs.opacity = attrs.width = type;
20827 }
20828
20829 return attrs;
20830 }
20831
20832 function createTween( value, prop, animation ) {
20833 var tween,
20834 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20835 index = 0,
20836 length = collection.length;
20837 for ( ; index < length; index++ ) {
20838 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20839
20840 // We're done with this property
20841 return tween;
20842 }
20843 }
20844 }
20845
20846 function defaultPrefilter( elem, props, opts ) {
20847 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20848 isBox = "width" in props || "height" in props,
20849 anim = this,
20850 orig = {},
20851 style = elem.style,
20852 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20853 dataShow = dataPriv.get( elem, "fxshow" );
20854
20855 // Queue-skipping animations hijack the fx hooks
20856 if ( !opts.queue ) {
20857 hooks = jQuery._queueHooks( elem, "fx" );
20858 if ( hooks.unqueued == null ) {
20859 hooks.unqueued = 0;
20860 oldfire = hooks.empty.fire;
20861 hooks.empty.fire = function() {
20862 if ( !hooks.unqueued ) {
20863 oldfire();
20864 }
20865 };
20866 }
20867 hooks.unqueued++;
20868
20869 anim.always( function() {
20870
20871 // Ensure the complete handler is called before this completes
20872 anim.always( function() {
20873 hooks.unqueued--;
20874 if ( !jQuery.queue( elem, "fx" ).length ) {
20875 hooks.empty.fire();
20876 }
20877 } );
20878 } );
20879 }
20880
20881 // Detect show/hide animations
20882 for ( prop in props ) {
20883 value = props[ prop ];
20884 if ( rfxtypes.test( value ) ) {
20885 delete props[ prop ];
20886 toggle = toggle || value === "toggle";
20887 if ( value === ( hidden ? "hide" : "show" ) ) {
20888
20889 // Pretend to be hidden if this is a "show" and
20890 // there is still data from a stopped show/hide
20891 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20892 hidden = true;
20893
20894 // Ignore all other no-op show/hide data
20895 } else {
20896 continue;
20897 }
20898 }
20899 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20900 }
20901 }
20902
20903 // Bail out if this is a no-op like .hide().hide()
20904 propTween = !jQuery.isEmptyObject( props );
20905 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20906 return;
20907 }
20908
20909 // Restrict "overflow" and "display" styles during box animations
20910 if ( isBox && elem.nodeType === 1 ) {
20911
20912 // Support: IE <=9 - 11, Edge 12 - 13
20913 // Record all 3 overflow attributes because IE does not infer the shorthand
20914 // from identically-valued overflowX and overflowY
20915 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20916
20917 // Identify a display type, preferring old show/hide data over the CSS cascade
20918 restoreDisplay = dataShow && dataShow.display;
20919 if ( restoreDisplay == null ) {
20920 restoreDisplay = dataPriv.get( elem, "display" );
20921 }
20922 display = jQuery.css( elem, "display" );
20923 if ( display === "none" ) {
20924 if ( restoreDisplay ) {
20925 display = restoreDisplay;
20926 } else {
20927
20928 // Get nonempty value(s) by temporarily forcing visibility
20929 showHide( [ elem ], true );
20930 restoreDisplay = elem.style.display || restoreDisplay;
20931 display = jQuery.css( elem, "display" );
20932 showHide( [ elem ] );
20933 }
20934 }
20935
20936 // Animate inline elements as inline-block
20937 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20938 if ( jQuery.css( elem, "float" ) === "none" ) {
20939
20940 // Restore the original display value at the end of pure show/hide animations
20941 if ( !propTween ) {
20942 anim.done( function() {
20943 style.display = restoreDisplay;
20944 } );
20945 if ( restoreDisplay == null ) {
20946 display = style.display;
20947 restoreDisplay = display === "none" ? "" : display;
20948 }
20949 }
20950 style.display = "inline-block";
20951 }
20952 }
20953 }
20954
20955 if ( opts.overflow ) {
20956 style.overflow = "hidden";
20957 anim.always( function() {
20958 style.overflow = opts.overflow[ 0 ];
20959 style.overflowX = opts.overflow[ 1 ];
20960 style.overflowY = opts.overflow[ 2 ];
20961 } );
20962 }
20963
20964 // Implement show/hide animations
20965 propTween = false;
20966 for ( prop in orig ) {
20967
20968 // General show/hide setup for this element animation
20969 if ( !propTween ) {
20970 if ( dataShow ) {
20971 if ( "hidden" in dataShow ) {
20972 hidden = dataShow.hidden;
20973 }
20974 } else {
20975 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20976 }
20977
20978 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20979 if ( toggle ) {
20980 dataShow.hidden = !hidden;
20981 }
20982
20983 // Show elements before animating them
20984 if ( hidden ) {
20985 showHide( [ elem ], true );
20986 }
20987
20988 /* eslint-disable no-loop-func */
20989
20990 anim.done( function() {
20991
20992 /* eslint-enable no-loop-func */
20993
20994 // The final step of a "hide" animation is actually hiding the element
20995 if ( !hidden ) {
20996 showHide( [ elem ] );
20997 }
20998 dataPriv.remove( elem, "fxshow" );
20999 for ( prop in orig ) {
21000 jQuery.style( elem, prop, orig[ prop ] );
21001 }
21002 } );
21003 }
21004
21005 // Per-property setup
21006 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
21007 if ( !( prop in dataShow ) ) {
21008 dataShow[ prop ] = propTween.start;
21009 if ( hidden ) {
21010 propTween.end = propTween.start;
21011 propTween.start = 0;
21012 }
21013 }
21014 }
21015 }
21016
21017 function propFilter( props, specialEasing ) {
21018 var index, name, easing, value, hooks;
21019
21020 // camelCase, specialEasing and expand cssHook pass
21021 for ( index in props ) {
21022 name = jQuery.camelCase( index );
21023 easing = specialEasing[ name ];
21024 value = props[ index ];
21025 if ( Array.isArray( value ) ) {
21026 easing = value[ 1 ];
21027 value = props[ index ] = value[ 0 ];
21028 }
21029
21030 if ( index !== name ) {
21031 props[ name ] = value;
21032 delete props[ index ];
21033 }
21034
21035 hooks = jQuery.cssHooks[ name ];
21036 if ( hooks && "expand" in hooks ) {
21037 value = hooks.expand( value );
21038 delete props[ name ];
21039
21040 // Not quite $.extend, this won't overwrite existing keys.
21041 // Reusing 'index' because we have the correct "name"
21042 for ( index in value ) {
21043 if ( !( index in props ) ) {
21044 props[ index ] = value[ index ];
21045 specialEasing[ index ] = easing;
21046 }
21047 }
21048 } else {
21049 specialEasing[ name ] = easing;
21050 }
21051 }
21052 }
21053
21054 function Animation( elem, properties, options ) {
21055 var result,
21056 stopped,
21057 index = 0,
21058 length = Animation.prefilters.length,
21059 deferred = jQuery.Deferred().always( function() {
21060
21061 // Don't match elem in the :animated selector
21062 delete tick.elem;
21063 } ),
21064 tick = function() {
21065 if ( stopped ) {
21066 return false;
21067 }
21068 var currentTime = fxNow || createFxNow(),
21069 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21070
21071 // Support: Android 2.3 only
21072 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21073 temp = remaining / animation.duration || 0,
21074 percent = 1 - temp,
21075 index = 0,
21076 length = animation.tweens.length;
21077
21078 for ( ; index < length; index++ ) {
21079 animation.tweens[ index ].run( percent );
21080 }
21081
21082 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21083
21084 // If there's more to do, yield
21085 if ( percent < 1 && length ) {
21086 return remaining;
21087 }
21088
21089 // If this was an empty animation, synthesize a final progress notification
21090 if ( !length ) {
21091 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21092 }
21093
21094 // Resolve the animation and report its conclusion
21095 deferred.resolveWith( elem, [ animation ] );
21096 return false;
21097 },
21098 animation = deferred.promise( {
21099 elem: elem,
21100 props: jQuery.extend( {}, properties ),
21101 opts: jQuery.extend( true, {
21102 specialEasing: {},
21103 easing: jQuery.easing._default
21104 }, options ),
21105 originalProperties: properties,
21106 originalOptions: options,
21107 startTime: fxNow || createFxNow(),
21108 duration: options.duration,
21109 tweens: [],
21110 createTween: function( prop, end ) {
21111 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21112 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21113 animation.tweens.push( tween );
21114 return tween;
21115 },
21116 stop: function( gotoEnd ) {
21117 var index = 0,
21118
21119 // If we are going to the end, we want to run all the tweens
21120 // otherwise we skip this part
21121 length = gotoEnd ? animation.tweens.length : 0;
21122 if ( stopped ) {
21123 return this;
21124 }
21125 stopped = true;
21126 for ( ; index < length; index++ ) {
21127 animation.tweens[ index ].run( 1 );
21128 }
21129
21130 // Resolve when we played the last frame; otherwise, reject
21131 if ( gotoEnd ) {
21132 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21133 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21134 } else {
21135 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21136 }
21137 return this;
21138 }
21139 } ),
21140 props = animation.props;
21141
21142 propFilter( props, animation.opts.specialEasing );
21143
21144 for ( ; index < length; index++ ) {
21145 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21146 if ( result ) {
21147 if ( jQuery.isFunction( result.stop ) ) {
21148 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21149 jQuery.proxy( result.stop, result );
21150 }
21151 return result;
21152 }
21153 }
21154
21155 jQuery.map( props, createTween, animation );
21156
21157 if ( jQuery.isFunction( animation.opts.start ) ) {
21158 animation.opts.start.call( elem, animation );
21159 }
21160
21161 // Attach callbacks from options
21162 animation
21163 .progress( animation.opts.progress )
21164 .done( animation.opts.done, animation.opts.complete )
21165 .fail( animation.opts.fail )
21166 .always( animation.opts.always );
21167
21168 jQuery.fx.timer(
21169 jQuery.extend( tick, {
21170 elem: elem,
21171 anim: animation,
21172 queue: animation.opts.queue
21173 } )
21174 );
21175
21176 return animation;
21177 }
21178
21179 jQuery.Animation = jQuery.extend( Animation, {
21180
21181 tweeners: {
21182 "*": [ function( prop, value ) {
21183 var tween = this.createTween( prop, value );
21184 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21185 return tween;
21186 } ]
21187 },
21188
21189 tweener: function( props, callback ) {
21190 if ( jQuery.isFunction( props ) ) {
21191 callback = props;
21192 props = [ "*" ];
21193 } else {
21194 props = props.match( rnothtmlwhite );
21195 }
21196
21197 var prop,
21198 index = 0,
21199 length = props.length;
21200
21201 for ( ; index < length; index++ ) {
21202 prop = props[ index ];
21203 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21204 Animation.tweeners[ prop ].unshift( callback );
21205 }
21206 },
21207
21208 prefilters: [ defaultPrefilter ],
21209
21210 prefilter: function( callback, prepend ) {
21211 if ( prepend ) {
21212 Animation.prefilters.unshift( callback );
21213 } else {
21214 Animation.prefilters.push( callback );
21215 }
21216 }
21217 } );
21218
21219 jQuery.speed = function( speed, easing, fn ) {
21220 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21221 complete: fn || !fn && easing ||
21222 jQuery.isFunction( speed ) && speed,
21223 duration: speed,
21224 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21225 };
21226
21227 // Go to the end state if fx are off
21228 if ( jQuery.fx.off ) {
21229 opt.duration = 0;
21230
21231 } else {
21232 if ( typeof opt.duration !== "number" ) {
21233 if ( opt.duration in jQuery.fx.speeds ) {
21234 opt.duration = jQuery.fx.speeds[ opt.duration ];
21235
21236 } else {
21237 opt.duration = jQuery.fx.speeds._default;
21238 }
21239 }
21240 }
21241
21242 // Normalize opt.queue - true/undefined/null -> "fx"
21243 if ( opt.queue == null || opt.queue === true ) {
21244 opt.queue = "fx";
21245 }
21246
21247 // Queueing
21248 opt.old = opt.complete;
21249
21250 opt.complete = function() {
21251 if ( jQuery.isFunction( opt.old ) ) {
21252 opt.old.call( this );
21253 }
21254
21255 if ( opt.queue ) {
21256 jQuery.dequeue( this, opt.queue );
21257 }
21258 };
21259
21260 return opt;
21261 };
21262
21263 jQuery.fn.extend( {
21264 fadeTo: function( speed, to, easing, callback ) {
21265
21266 // Show any hidden elements after setting opacity to 0
21267 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21268
21269 // Animate to the value specified
21270 .end().animate( { opacity: to }, speed, easing, callback );
21271 },
21272 animate: function( prop, speed, easing, callback ) {
21273 var empty = jQuery.isEmptyObject( prop ),
21274 optall = jQuery.speed( speed, easing, callback ),
21275 doAnimation = function() {
21276
21277 // Operate on a copy of prop so per-property easing won't be lost
21278 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21279
21280 // Empty animations, or finishing resolves immediately
21281 if ( empty || dataPriv.get( this, "finish" ) ) {
21282 anim.stop( true );
21283 }
21284 };
21285 doAnimation.finish = doAnimation;
21286
21287 return empty || optall.queue === false ?
21288 this.each( doAnimation ) :
21289 this.queue( optall.queue, doAnimation );
21290 },
21291 stop: function( type, clearQueue, gotoEnd ) {
21292 var stopQueue = function( hooks ) {
21293 var stop = hooks.stop;
21294 delete hooks.stop;
21295 stop( gotoEnd );
21296 };
21297
21298 if ( typeof type !== "string" ) {
21299 gotoEnd = clearQueue;
21300 clearQueue = type;
21301 type = undefined;
21302 }
21303 if ( clearQueue && type !== false ) {
21304 this.queue( type || "fx", [] );
21305 }
21306
21307 return this.each( function() {
21308 var dequeue = true,
21309 index = type != null && type + "queueHooks",
21310 timers = jQuery.timers,
21311 data = dataPriv.get( this );
21312
21313 if ( index ) {
21314 if ( data[ index ] && data[ index ].stop ) {
21315 stopQueue( data[ index ] );
21316 }
21317 } else {
21318 for ( index in data ) {
21319 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21320 stopQueue( data[ index ] );
21321 }
21322 }
21323 }
21324
21325 for ( index = timers.length; index--; ) {
21326 if ( timers[ index ].elem === this &&
21327 ( type == null || timers[ index ].queue === type ) ) {
21328
21329 timers[ index ].anim.stop( gotoEnd );
21330 dequeue = false;
21331 timers.splice( index, 1 );
21332 }
21333 }
21334
21335 // Start the next in the queue if the last step wasn't forced.
21336 // Timers currently will call their complete callbacks, which
21337 // will dequeue but only if they were gotoEnd.
21338 if ( dequeue || !gotoEnd ) {
21339 jQuery.dequeue( this, type );
21340 }
21341 } );
21342 },
21343 finish: function( type ) {
21344 if ( type !== false ) {
21345 type = type || "fx";
21346 }
21347 return this.each( function() {
21348 var index,
21349 data = dataPriv.get( this ),
21350 queue = data[ type + "queue" ],
21351 hooks = data[ type + "queueHooks" ],
21352 timers = jQuery.timers,
21353 length = queue ? queue.length : 0;
21354
21355 // Enable finishing flag on private data
21356 data.finish = true;
21357
21358 // Empty the queue first
21359 jQuery.queue( this, type, [] );
21360
21361 if ( hooks && hooks.stop ) {
21362 hooks.stop.call( this, true );
21363 }
21364
21365 // Look for any active animations, and finish them
21366 for ( index = timers.length; index--; ) {
21367 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21368 timers[ index ].anim.stop( true );
21369 timers.splice( index, 1 );
21370 }
21371 }
21372
21373 // Look for any animations in the old queue and finish them
21374 for ( index = 0; index < length; index++ ) {
21375 if ( queue[ index ] && queue[ index ].finish ) {
21376 queue[ index ].finish.call( this );
21377 }
21378 }
21379
21380 // Turn off finishing flag
21381 delete data.finish;
21382 } );
21383 }
21384 } );
21385
21386 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21387 var cssFn = jQuery.fn[ name ];
21388 jQuery.fn[ name ] = function( speed, easing, callback ) {
21389 return speed == null || typeof speed === "boolean" ?
21390 cssFn.apply( this, arguments ) :
21391 this.animate( genFx( name, true ), speed, easing, callback );
21392 };
21393 } );
21394
21395 // Generate shortcuts for custom animations
21396 jQuery.each( {
21397 slideDown: genFx( "show" ),
21398 slideUp: genFx( "hide" ),
21399 slideToggle: genFx( "toggle" ),
21400 fadeIn: { opacity: "show" },
21401 fadeOut: { opacity: "hide" },
21402 fadeToggle: { opacity: "toggle" }
21403 }, function( name, props ) {
21404 jQuery.fn[ name ] = function( speed, easing, callback ) {
21405 return this.animate( props, speed, easing, callback );
21406 };
21407 } );
21408
21409 jQuery.timers = [];
21410 jQuery.fx.tick = function() {
21411 var timer,
21412 i = 0,
21413 timers = jQuery.timers;
21414
21415 fxNow = jQuery.now();
21416
21417 for ( ; i < timers.length; i++ ) {
21418 timer = timers[ i ];
21419
21420 // Run the timer and safely remove it when done (allowing for external removal)
21421 if ( !timer() && timers[ i ] === timer ) {
21422 timers.splice( i--, 1 );
21423 }
21424 }
21425
21426 if ( !timers.length ) {
21427 jQuery.fx.stop();
21428 }
21429 fxNow = undefined;
21430 };
21431
21432 jQuery.fx.timer = function( timer ) {
21433 jQuery.timers.push( timer );
21434 jQuery.fx.start();
21435 };
21436
21437 jQuery.fx.interval = 13;
21438 jQuery.fx.start = function() {
21439 if ( inProgress ) {
21440 return;
21441 }
21442
21443 inProgress = true;
21444 schedule();
21445 };
21446
21447 jQuery.fx.stop = function() {
21448 inProgress = null;
21449 };
21450
21451 jQuery.fx.speeds = {
21452 slow: 600,
21453 fast: 200,
21454
21455 // Default speed
21456 _default: 400
21457 };
21458
21459
21460 // Based off of the plugin by Clint Helfers, with permission.
21461 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21462 jQuery.fn.delay = function( time, type ) {
21463 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21464 type = type || "fx";
21465
21466 return this.queue( type, function( next, hooks ) {
21467 var timeout = window.setTimeout( next, time );
21468 hooks.stop = function() {
21469 window.clearTimeout( timeout );
21470 };
21471 } );
21472 };
21473
21474
21475 ( function() {
21476 var input = document.createElement( "input" ),
21477 select = document.createElement( "select" ),
21478 opt = select.appendChild( document.createElement( "option" ) );
21479
21480 input.type = "checkbox";
21481
21482 // Support: Android <=4.3 only
21483 // Default value for a checkbox should be "on"
21484 support.checkOn = input.value !== "";
21485
21486 // Support: IE <=11 only
21487 // Must access selectedIndex to make default options select
21488 support.optSelected = opt.selected;
21489
21490 // Support: IE <=11 only
21491 // An input loses its value after becoming a radio
21492 input = document.createElement( "input" );
21493 input.value = "t";
21494 input.type = "radio";
21495 support.radioValue = input.value === "t";
21496 } )();
21497
21498
21499 var boolHook,
21500 attrHandle = jQuery.expr.attrHandle;
21501
21502 jQuery.fn.extend( {
21503 attr: function( name, value ) {
21504 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21505 },
21506
21507 removeAttr: function( name ) {
21508 return this.each( function() {
21509 jQuery.removeAttr( this, name );
21510 } );
21511 }
21512 } );
21513
21514 jQuery.extend( {
21515 attr: function( elem, name, value ) {
21516 var ret, hooks,
21517 nType = elem.nodeType;
21518
21519 // Don't get/set attributes on text, comment and attribute nodes
21520 if ( nType === 3 || nType === 8 || nType === 2 ) {
21521 return;
21522 }
21523
21524 // Fallback to prop when attributes are not supported
21525 if ( typeof elem.getAttribute === "undefined" ) {
21526 return jQuery.prop( elem, name, value );
21527 }
21528
21529 // Attribute hooks are determined by the lowercase version
21530 // Grab necessary hook if one is defined
21531 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21532 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21533 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21534 }
21535
21536 if ( value !== undefined ) {
21537 if ( value === null ) {
21538 jQuery.removeAttr( elem, name );
21539 return;
21540 }
21541
21542 if ( hooks && "set" in hooks &&
21543 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21544 return ret;
21545 }
21546
21547 elem.setAttribute( name, value + "" );
21548 return value;
21549 }
21550
21551 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21552 return ret;
21553 }
21554
21555 ret = jQuery.find.attr( elem, name );
21556
21557 // Non-existent attributes return null, we normalize to undefined
21558 return ret == null ? undefined : ret;
21559 },
21560
21561 attrHooks: {
21562 type: {
21563 set: function( elem, value ) {
21564 if ( !support.radioValue && value === "radio" &&
21565 nodeName( elem, "input" ) ) {
21566 var val = elem.value;
21567 elem.setAttribute( "type", value );
21568 if ( val ) {
21569 elem.value = val;
21570 }
21571 return value;
21572 }
21573 }
21574 }
21575 },
21576
21577 removeAttr: function( elem, value ) {
21578 var name,
21579 i = 0,
21580
21581 // Attribute names can contain non-HTML whitespace characters
21582 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21583 attrNames = value && value.match( rnothtmlwhite );
21584
21585 if ( attrNames && elem.nodeType === 1 ) {
21586 while ( ( name = attrNames[ i++ ] ) ) {
21587 elem.removeAttribute( name );
21588 }
21589 }
21590 }
21591 } );
21592
21593 // Hooks for boolean attributes
21594 boolHook = {
21595 set: function( elem, value, name ) {
21596 if ( value === false ) {
21597
21598 // Remove boolean attributes when set to false
21599 jQuery.removeAttr( elem, name );
21600 } else {
21601 elem.setAttribute( name, name );
21602 }
21603 return name;
21604 }
21605 };
21606
21607 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21608 var getter = attrHandle[ name ] || jQuery.find.attr;
21609
21610 attrHandle[ name ] = function( elem, name, isXML ) {
21611 var ret, handle,
21612 lowercaseName = name.toLowerCase();
21613
21614 if ( !isXML ) {
21615
21616 // Avoid an infinite loop by temporarily removing this function from the getter
21617 handle = attrHandle[ lowercaseName ];
21618 attrHandle[ lowercaseName ] = ret;
21619 ret = getter( elem, name, isXML ) != null ?
21620 lowercaseName :
21621 null;
21622 attrHandle[ lowercaseName ] = handle;
21623 }
21624 return ret;
21625 };
21626 } );
21627
21628
21629
21630
21631 var rfocusable = /^(?:input|select|textarea|button)$/i,
21632 rclickable = /^(?:a|area)$/i;
21633
21634 jQuery.fn.extend( {
21635 prop: function( name, value ) {
21636 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21637 },
21638
21639 removeProp: function( name ) {
21640 return this.each( function() {
21641 delete this[ jQuery.propFix[ name ] || name ];
21642 } );
21643 }
21644 } );
21645
21646 jQuery.extend( {
21647 prop: function( elem, name, value ) {
21648 var ret, hooks,
21649 nType = elem.nodeType;
21650
21651 // Don't get/set properties on text, comment and attribute nodes
21652 if ( nType === 3 || nType === 8 || nType === 2 ) {
21653 return;
21654 }
21655
21656 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21657
21658 // Fix name and attach hooks
21659 name = jQuery.propFix[ name ] || name;
21660 hooks = jQuery.propHooks[ name ];
21661 }
21662
21663 if ( value !== undefined ) {
21664 if ( hooks && "set" in hooks &&
21665 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21666 return ret;
21667 }
21668
21669 return ( elem[ name ] = value );
21670 }
21671
21672 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21673 return ret;
21674 }
21675
21676 return elem[ name ];
21677 },
21678
21679 propHooks: {
21680 tabIndex: {
21681 get: function( elem ) {
21682
21683 // Support: IE <=9 - 11 only
21684 // elem.tabIndex doesn't always return the
21685 // correct value when it hasn't been explicitly set
21686 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21687 // Use proper attribute retrieval(#12072)
21688 var tabindex = jQuery.find.attr( elem, "tabindex" );
21689
21690 if ( tabindex ) {
21691 return parseInt( tabindex, 10 );
21692 }
21693
21694 if (
21695 rfocusable.test( elem.nodeName ) ||
21696 rclickable.test( elem.nodeName ) &&
21697 elem.href
21698 ) {
21699 return 0;
21700 }
21701
21702 return -1;
21703 }
21704 }
21705 },
21706
21707 propFix: {
21708 "for": "htmlFor",
21709 "class": "className"
21710 }
21711 } );
21712
21713 // Support: IE <=11 only
21714 // Accessing the selectedIndex property
21715 // forces the browser to respect setting selected
21716 // on the option
21717 // The getter ensures a default option is selected
21718 // when in an optgroup
21719 // eslint rule "no-unused-expressions" is disabled for this code
21720 // since it considers such accessions noop
21721 if ( !support.optSelected ) {
21722 jQuery.propHooks.selected = {
21723 get: function( elem ) {
21724
21725 /* eslint no-unused-expressions: "off" */
21726
21727 var parent = elem.parentNode;
21728 if ( parent && parent.parentNode ) {
21729 parent.parentNode.selectedIndex;
21730 }
21731 return null;
21732 },
21733 set: function( elem ) {
21734
21735 /* eslint no-unused-expressions: "off" */
21736
21737 var parent = elem.parentNode;
21738 if ( parent ) {
21739 parent.selectedIndex;
21740
21741 if ( parent.parentNode ) {
21742 parent.parentNode.selectedIndex;
21743 }
21744 }
21745 }
21746 };
21747 }
21748
21749 jQuery.each( [
21750 "tabIndex",
21751 "readOnly",
21752 "maxLength",
21753 "cellSpacing",
21754 "cellPadding",
21755 "rowSpan",
21756 "colSpan",
21757 "useMap",
21758 "frameBorder",
21759 "contentEditable"
21760 ], function() {
21761 jQuery.propFix[ this.toLowerCase() ] = this;
21762 } );
21763
21764
21765
21766
21767 // Strip and collapse whitespace according to HTML spec
21768 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21769 function stripAndCollapse( value ) {
21770 var tokens = value.match( rnothtmlwhite ) || [];
21771 return tokens.join( " " );
21772 }
21773
21774
21775 function getClass( elem ) {
21776 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21777 }
21778
21779 jQuery.fn.extend( {
21780 addClass: function( value ) {
21781 var classes, elem, cur, curValue, clazz, j, finalValue,
21782 i = 0;
21783
21784 if ( jQuery.isFunction( value ) ) {
21785 return this.each( function( j ) {
21786 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21787 } );
21788 }
21789
21790 if ( typeof value === "string" && value ) {
21791 classes = value.match( rnothtmlwhite ) || [];
21792
21793 while ( ( elem = this[ i++ ] ) ) {
21794 curValue = getClass( elem );
21795 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21796
21797 if ( cur ) {
21798 j = 0;
21799 while ( ( clazz = classes[ j++ ] ) ) {
21800 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21801 cur += clazz + " ";
21802 }
21803 }
21804
21805 // Only assign if different to avoid unneeded rendering.
21806 finalValue = stripAndCollapse( cur );
21807 if ( curValue !== finalValue ) {
21808 elem.setAttribute( "class", finalValue );
21809 }
21810 }
21811 }
21812 }
21813
21814 return this;
21815 },
21816
21817 removeClass: function( value ) {
21818 var classes, elem, cur, curValue, clazz, j, finalValue,
21819 i = 0;
21820
21821 if ( jQuery.isFunction( value ) ) {
21822 return this.each( function( j ) {
21823 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21824 } );
21825 }
21826
21827 if ( !arguments.length ) {
21828 return this.attr( "class", "" );
21829 }
21830
21831 if ( typeof value === "string" && value ) {
21832 classes = value.match( rnothtmlwhite ) || [];
21833
21834 while ( ( elem = this[ i++ ] ) ) {
21835 curValue = getClass( elem );
21836
21837 // This expression is here for better compressibility (see addClass)
21838 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21839
21840 if ( cur ) {
21841 j = 0;
21842 while ( ( clazz = classes[ j++ ] ) ) {
21843
21844 // Remove *all* instances
21845 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21846 cur = cur.replace( " " + clazz + " ", " " );
21847 }
21848 }
21849
21850 // Only assign if different to avoid unneeded rendering.
21851 finalValue = stripAndCollapse( cur );
21852 if ( curValue !== finalValue ) {
21853 elem.setAttribute( "class", finalValue );
21854 }
21855 }
21856 }
21857 }
21858
21859 return this;
21860 },
21861
21862 toggleClass: function( value, stateVal ) {
21863 var type = typeof value;
21864
21865 if ( typeof stateVal === "boolean" && type === "string" ) {
21866 return stateVal ? this.addClass( value ) : this.removeClass( value );
21867 }
21868
21869 if ( jQuery.isFunction( value ) ) {
21870 return this.each( function( i ) {
21871 jQuery( this ).toggleClass(
21872 value.call( this, i, getClass( this ), stateVal ),
21873 stateVal
21874 );
21875 } );
21876 }
21877
21878 return this.each( function() {
21879 var className, i, self, classNames;
21880
21881 if ( type === "string" ) {
21882
21883 // Toggle individual class names
21884 i = 0;
21885 self = jQuery( this );
21886 classNames = value.match( rnothtmlwhite ) || [];
21887
21888 while ( ( className = classNames[ i++ ] ) ) {
21889
21890 // Check each className given, space separated list
21891 if ( self.hasClass( className ) ) {
21892 self.removeClass( className );
21893 } else {
21894 self.addClass( className );
21895 }
21896 }
21897
21898 // Toggle whole class name
21899 } else if ( value === undefined || type === "boolean" ) {
21900 className = getClass( this );
21901 if ( className ) {
21902
21903 // Store className if set
21904 dataPriv.set( this, "__className__", className );
21905 }
21906
21907 // If the element has a class name or if we're passed `false`,
21908 // then remove the whole classname (if there was one, the above saved it).
21909 // Otherwise bring back whatever was previously saved (if anything),
21910 // falling back to the empty string if nothing was stored.
21911 if ( this.setAttribute ) {
21912 this.setAttribute( "class",
21913 className || value === false ?
21914 "" :
21915 dataPriv.get( this, "__className__" ) || ""
21916 );
21917 }
21918 }
21919 } );
21920 },
21921
21922 hasClass: function( selector ) {
21923 var className, elem,
21924 i = 0;
21925
21926 className = " " + selector + " ";
21927 while ( ( elem = this[ i++ ] ) ) {
21928 if ( elem.nodeType === 1 &&
21929 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21930 return true;
21931 }
21932 }
21933
21934 return false;
21935 }
21936 } );
21937
21938
21939
21940
21941 var rreturn = /\r/g;
21942
21943 jQuery.fn.extend( {
21944 val: function( value ) {
21945 var hooks, ret, isFunction,
21946 elem = this[ 0 ];
21947
21948 if ( !arguments.length ) {
21949 if ( elem ) {
21950 hooks = jQuery.valHooks[ elem.type ] ||
21951 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21952
21953 if ( hooks &&
21954 "get" in hooks &&
21955 ( ret = hooks.get( elem, "value" ) ) !== undefined
21956 ) {
21957 return ret;
21958 }
21959
21960 ret = elem.value;
21961
21962 // Handle most common string cases
21963 if ( typeof ret === "string" ) {
21964 return ret.replace( rreturn, "" );
21965 }
21966
21967 // Handle cases where value is null/undef or number
21968 return ret == null ? "" : ret;
21969 }
21970
21971 return;
21972 }
21973
21974 isFunction = jQuery.isFunction( value );
21975
21976 return this.each( function( i ) {
21977 var val;
21978
21979 if ( this.nodeType !== 1 ) {
21980 return;
21981 }
21982
21983 if ( isFunction ) {
21984 val = value.call( this, i, jQuery( this ).val() );
21985 } else {
21986 val = value;
21987 }
21988
21989 // Treat null/undefined as ""; convert numbers to string
21990 if ( val == null ) {
21991 val = "";
21992
21993 } else if ( typeof val === "number" ) {
21994 val += "";
21995
21996 } else if ( Array.isArray( val ) ) {
21997 val = jQuery.map( val, function( value ) {
21998 return value == null ? "" : value + "";
21999 } );
22000 }
22001
22002 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
22003
22004 // If set returns undefined, fall back to normal setting
22005 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
22006 this.value = val;
22007 }
22008 } );
22009 }
22010 } );
22011
22012 jQuery.extend( {
22013 valHooks: {
22014 option: {
22015 get: function( elem ) {
22016
22017 var val = jQuery.find.attr( elem, "value" );
22018 return val != null ?
22019 val :
22020
22021 // Support: IE <=10 - 11 only
22022 // option.text throws exceptions (#14686, #14858)
22023 // Strip and collapse whitespace
22024 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
22025 stripAndCollapse( jQuery.text( elem ) );
22026 }
22027 },
22028 select: {
22029 get: function( elem ) {
22030 var value, option, i,
22031 options = elem.options,
22032 index = elem.selectedIndex,
22033 one = elem.type === "select-one",
22034 values = one ? null : [],
22035 max = one ? index + 1 : options.length;
22036
22037 if ( index < 0 ) {
22038 i = max;
22039
22040 } else {
22041 i = one ? index : 0;
22042 }
22043
22044 // Loop through all the selected options
22045 for ( ; i < max; i++ ) {
22046 option = options[ i ];
22047
22048 // Support: IE <=9 only
22049 // IE8-9 doesn't update selected after form reset (#2551)
22050 if ( ( option.selected || i === index ) &&
22051
22052 // Don't return options that are disabled or in a disabled optgroup
22053 !option.disabled &&
22054 ( !option.parentNode.disabled ||
22055 !nodeName( option.parentNode, "optgroup" ) ) ) {
22056
22057 // Get the specific value for the option
22058 value = jQuery( option ).val();
22059
22060 // We don't need an array for one selects
22061 if ( one ) {
22062 return value;
22063 }
22064
22065 // Multi-Selects return an array
22066 values.push( value );
22067 }
22068 }
22069
22070 return values;
22071 },
22072
22073 set: function( elem, value ) {
22074 var optionSet, option,
22075 options = elem.options,
22076 values = jQuery.makeArray( value ),
22077 i = options.length;
22078
22079 while ( i-- ) {
22080 option = options[ i ];
22081
22082 /* eslint-disable no-cond-assign */
22083
22084 if ( option.selected =
22085 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22086 ) {
22087 optionSet = true;
22088 }
22089
22090 /* eslint-enable no-cond-assign */
22091 }
22092
22093 // Force browsers to behave consistently when non-matching value is set
22094 if ( !optionSet ) {
22095 elem.selectedIndex = -1;
22096 }
22097 return values;
22098 }
22099 }
22100 }
22101 } );
22102
22103 // Radios and checkboxes getter/setter
22104 jQuery.each( [ "radio", "checkbox" ], function() {
22105 jQuery.valHooks[ this ] = {
22106 set: function( elem, value ) {
22107 if ( Array.isArray( value ) ) {
22108 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22109 }
22110 }
22111 };
22112 if ( !support.checkOn ) {
22113 jQuery.valHooks[ this ].get = function( elem ) {
22114 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22115 };
22116 }
22117 } );
22118
22119
22120
22121
22122 // Return jQuery for attributes-only inclusion
22123
22124
22125 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22126
22127 jQuery.extend( jQuery.event, {
22128
22129 trigger: function( event, data, elem, onlyHandlers ) {
22130
22131 var i, cur, tmp, bubbleType, ontype, handle, special,
22132 eventPath = [ elem || document ],
22133 type = hasOwn.call( event, "type" ) ? event.type : event,
22134 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22135
22136 cur = tmp = elem = elem || document;
22137
22138 // Don't do events on text and comment nodes
22139 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22140 return;
22141 }
22142
22143 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22144 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22145 return;
22146 }
22147
22148 if ( type.indexOf( "." ) > -1 ) {
22149
22150 // Namespaced trigger; create a regexp to match event type in handle()
22151 namespaces = type.split( "." );
22152 type = namespaces.shift();
22153 namespaces.sort();
22154 }
22155 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22156
22157 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22158 event = event[ jQuery.expando ] ?
22159 event :
22160 new jQuery.Event( type, typeof event === "object" && event );
22161
22162 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22163 event.isTrigger = onlyHandlers ? 2 : 3;
22164 event.namespace = namespaces.join( "." );
22165 event.rnamespace = event.namespace ?
22166 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22167 null;
22168
22169 // Clean up the event in case it is being reused
22170 event.result = undefined;
22171 if ( !event.target ) {
22172 event.target = elem;
22173 }
22174
22175 // Clone any incoming data and prepend the event, creating the handler arg list
22176 data = data == null ?
22177 [ event ] :
22178 jQuery.makeArray( data, [ event ] );
22179
22180 // Allow special events to draw outside the lines
22181 special = jQuery.event.special[ type ] || {};
22182 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22183 return;
22184 }
22185
22186 // Determine event propagation path in advance, per W3C events spec (#9951)
22187 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22188 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22189
22190 bubbleType = special.delegateType || type;
22191 if ( !rfocusMorph.test( bubbleType + type ) ) {
22192 cur = cur.parentNode;
22193 }
22194 for ( ; cur; cur = cur.parentNode ) {
22195 eventPath.push( cur );
22196 tmp = cur;
22197 }
22198
22199 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22200 if ( tmp === ( elem.ownerDocument || document ) ) {
22201 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22202 }
22203 }
22204
22205 // Fire handlers on the event path
22206 i = 0;
22207 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22208
22209 event.type = i > 1 ?
22210 bubbleType :
22211 special.bindType || type;
22212
22213 // jQuery handler
22214 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22215 dataPriv.get( cur, "handle" );
22216 if ( handle ) {
22217 handle.apply( cur, data );
22218 }
22219
22220 // Native handler
22221 handle = ontype && cur[ ontype ];
22222 if ( handle && handle.apply && acceptData( cur ) ) {
22223 event.result = handle.apply( cur, data );
22224 if ( event.result === false ) {
22225 event.preventDefault();
22226 }
22227 }
22228 }
22229 event.type = type;
22230
22231 // If nobody prevented the default action, do it now
22232 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22233
22234 if ( ( !special._default ||
22235 special._default.apply( eventPath.pop(), data ) === false ) &&
22236 acceptData( elem ) ) {
22237
22238 // Call a native DOM method on the target with the same name as the event.
22239 // Don't do default actions on window, that's where global variables be (#6170)
22240 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22241
22242 // Don't re-trigger an onFOO event when we call its FOO() method
22243 tmp = elem[ ontype ];
22244
22245 if ( tmp ) {
22246 elem[ ontype ] = null;
22247 }
22248
22249 // Prevent re-triggering of the same event, since we already bubbled it above
22250 jQuery.event.triggered = type;
22251 elem[ type ]();
22252 jQuery.event.triggered = undefined;
22253
22254 if ( tmp ) {
22255 elem[ ontype ] = tmp;
22256 }
22257 }
22258 }
22259 }
22260
22261 return event.result;
22262 },
22263
22264 // Piggyback on a donor event to simulate a different one
22265 // Used only for `focus(in | out)` events
22266 simulate: function( type, elem, event ) {
22267 var e = jQuery.extend(
22268 new jQuery.Event(),
22269 event,
22270 {
22271 type: type,
22272 isSimulated: true
22273 }
22274 );
22275
22276 jQuery.event.trigger( e, null, elem );
22277 }
22278
22279 } );
22280
22281 jQuery.fn.extend( {
22282
22283 trigger: function( type, data ) {
22284 return this.each( function() {
22285 jQuery.event.trigger( type, data, this );
22286 } );
22287 },
22288 triggerHandler: function( type, data ) {
22289 var elem = this[ 0 ];
22290 if ( elem ) {
22291 return jQuery.event.trigger( type, data, elem, true );
22292 }
22293 }
22294 } );
22295
22296
22297 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22298 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22299 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22300 function( i, name ) {
22301
22302 // Handle event binding
22303 jQuery.fn[ name ] = function( data, fn ) {
22304 return arguments.length > 0 ?
22305 this.on( name, null, data, fn ) :
22306 this.trigger( name );
22307 };
22308 } );
22309
22310 jQuery.fn.extend( {
22311 hover: function( fnOver, fnOut ) {
22312 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22313 }
22314 } );
22315
22316
22317
22318
22319 support.focusin = "onfocusin" in window;
22320
22321
22322 // Support: Firefox <=44
22323 // Firefox doesn't have focus(in | out) events
22324 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22325 //
22326 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22327 // focus(in | out) events fire after focus & blur events,
22328 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22329 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22330 if ( !support.focusin ) {
22331 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22332
22333 // Attach a single capturing handler on the document while someone wants focusin/focusout
22334 var handler = function( event ) {
22335 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22336 };
22337
22338 jQuery.event.special[ fix ] = {
22339 setup: function() {
22340 var doc = this.ownerDocument || this,
22341 attaches = dataPriv.access( doc, fix );
22342
22343 if ( !attaches ) {
22344 doc.addEventListener( orig, handler, true );
22345 }
22346 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22347 },
22348 teardown: function() {
22349 var doc = this.ownerDocument || this,
22350 attaches = dataPriv.access( doc, fix ) - 1;
22351
22352 if ( !attaches ) {
22353 doc.removeEventListener( orig, handler, true );
22354 dataPriv.remove( doc, fix );
22355
22356 } else {
22357 dataPriv.access( doc, fix, attaches );
22358 }
22359 }
22360 };
22361 } );
22362 }
22363 var location = window.location;
22364
22365 var nonce = jQuery.now();
22366
22367 var rquery = ( /\?/ );
22368
22369
22370
22371 // Cross-browser xml parsing
22372 jQuery.parseXML = function( data ) {
22373 var xml;
22374 if ( !data || typeof data !== "string" ) {
22375 return null;
22376 }
22377
22378 // Support: IE 9 - 11 only
22379 // IE throws on parseFromString with invalid input.
22380 try {
22381 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22382 } catch ( e ) {
22383 xml = undefined;
22384 }
22385
22386 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22387 jQuery.error( "Invalid XML: " + data );
22388 }
22389 return xml;
22390 };
22391
22392
22393 var
22394 rbracket = /\[\]$/,
22395 rCRLF = /\r?\n/g,
22396 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22397 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22398
22399 function buildParams( prefix, obj, traditional, add ) {
22400 var name;
22401
22402 if ( Array.isArray( obj ) ) {
22403
22404 // Serialize array item.
22405 jQuery.each( obj, function( i, v ) {
22406 if ( traditional || rbracket.test( prefix ) ) {
22407
22408 // Treat each array item as a scalar.
22409 add( prefix, v );
22410
22411 } else {
22412
22413 // Item is non-scalar (array or object), encode its numeric index.
22414 buildParams(
22415 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22416 v,
22417 traditional,
22418 add
22419 );
22420 }
22421 } );
22422
22423 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22424
22425 // Serialize object item.
22426 for ( name in obj ) {
22427 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22428 }
22429
22430 } else {
22431
22432 // Serialize scalar item.
22433 add( prefix, obj );
22434 }
22435 }
22436
22437 // Serialize an array of form elements or a set of
22438 // key/values into a query string
22439 jQuery.param = function( a, traditional ) {
22440 var prefix,
22441 s = [],
22442 add = function( key, valueOrFunction ) {
22443
22444 // If value is a function, invoke it and use its return value
22445 var value = jQuery.isFunction( valueOrFunction ) ?
22446 valueOrFunction() :
22447 valueOrFunction;
22448
22449 s[ s.length ] = encodeURIComponent( key ) + "=" +
22450 encodeURIComponent( value == null ? "" : value );
22451 };
22452
22453 // If an array was passed in, assume that it is an array of form elements.
22454 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22455
22456 // Serialize the form elements
22457 jQuery.each( a, function() {
22458 add( this.name, this.value );
22459 } );
22460
22461 } else {
22462
22463 // If traditional, encode the "old" way (the way 1.3.2 or older
22464 // did it), otherwise encode params recursively.
22465 for ( prefix in a ) {
22466 buildParams( prefix, a[ prefix ], traditional, add );
22467 }
22468 }
22469
22470 // Return the resulting serialization
22471 return s.join( "&" );
22472 };
22473
22474 jQuery.fn.extend( {
22475 serialize: function() {
22476 return jQuery.param( this.serializeArray() );
22477 },
22478 serializeArray: function() {
22479 return this.map( function() {
22480
22481 // Can add propHook for "elements" to filter or add form elements
22482 var elements = jQuery.prop( this, "elements" );
22483 return elements ? jQuery.makeArray( elements ) : this;
22484 } )
22485 .filter( function() {
22486 var type = this.type;
22487
22488 // Use .is( ":disabled" ) so that fieldset[disabled] works
22489 return this.name && !jQuery( this ).is( ":disabled" ) &&
22490 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22491 ( this.checked || !rcheckableType.test( type ) );
22492 } )
22493 .map( function( i, elem ) {
22494 var val = jQuery( this ).val();
22495
22496 if ( val == null ) {
22497 return null;
22498 }
22499
22500 if ( Array.isArray( val ) ) {
22501 return jQuery.map( val, function( val ) {
22502 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22503 } );
22504 }
22505
22506 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22507 } ).get();
22508 }
22509 } );
22510
22511
22512 var
22513 r20 = /%20/g,
22514 rhash = /#.*$/,
22515 rantiCache = /([?&])_=[^&]*/,
22516 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22517
22518 // #7653, #8125, #8152: local protocol detection
22519 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22520 rnoContent = /^(?:GET|HEAD)$/,
22521 rprotocol = /^\/\//,
22522
22523 /* Prefilters
22524 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22525 * 2) These are called:
22526 * - BEFORE asking for a transport
22527 * - AFTER param serialization (s.data is a string if s.processData is true)
22528 * 3) key is the dataType
22529 * 4) the catchall symbol "*" can be used
22530 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22531 */
22532 prefilters = {},
22533
22534 /* Transports bindings
22535 * 1) key is the dataType
22536 * 2) the catchall symbol "*" can be used
22537 * 3) selection will start with transport dataType and THEN go to "*" if needed
22538 */
22539 transports = {},
22540
22541 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22542 allTypes = "*/".concat( "*" ),
22543
22544 // Anchor tag for parsing the document origin
22545 originAnchor = document.createElement( "a" );
22546 originAnchor.href = location.href;
22547
22548 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22549 function addToPrefiltersOrTransports( structure ) {
22550
22551 // dataTypeExpression is optional and defaults to "*"
22552 return function( dataTypeExpression, func ) {
22553
22554 if ( typeof dataTypeExpression !== "string" ) {
22555 func = dataTypeExpression;
22556 dataTypeExpression = "*";
22557 }
22558
22559 var dataType,
22560 i = 0,
22561 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22562
22563 if ( jQuery.isFunction( func ) ) {
22564
22565 // For each dataType in the dataTypeExpression
22566 while ( ( dataType = dataTypes[ i++ ] ) ) {
22567
22568 // Prepend if requested
22569 if ( dataType[ 0 ] === "+" ) {
22570 dataType = dataType.slice( 1 ) || "*";
22571 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22572
22573 // Otherwise append
22574 } else {
22575 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22576 }
22577 }
22578 }
22579 };
22580 }
22581
22582 // Base inspection function for prefilters and transports
22583 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22584
22585 var inspected = {},
22586 seekingTransport = ( structure === transports );
22587
22588 function inspect( dataType ) {
22589 var selected;
22590 inspected[ dataType ] = true;
22591 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22592 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22593 if ( typeof dataTypeOrTransport === "string" &&
22594 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22595
22596 options.dataTypes.unshift( dataTypeOrTransport );
22597 inspect( dataTypeOrTransport );
22598 return false;
22599 } else if ( seekingTransport ) {
22600 return !( selected = dataTypeOrTransport );
22601 }
22602 } );
22603 return selected;
22604 }
22605
22606 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22607 }
22608
22609 // A special extend for ajax options
22610 // that takes "flat" options (not to be deep extended)
22611 // Fixes #9887
22612 function ajaxExtend( target, src ) {
22613 var key, deep,
22614 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22615
22616 for ( key in src ) {
22617 if ( src[ key ] !== undefined ) {
22618 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22619 }
22620 }
22621 if ( deep ) {
22622 jQuery.extend( true, target, deep );
22623 }
22624
22625 return target;
22626 }
22627
22628 /* Handles responses to an ajax request:
22629 * - finds the right dataType (mediates between content-type and expected dataType)
22630 * - returns the corresponding response
22631 */
22632 function ajaxHandleResponses( s, jqXHR, responses ) {
22633
22634 var ct, type, finalDataType, firstDataType,
22635 contents = s.contents,
22636 dataTypes = s.dataTypes;
22637
22638 // Remove auto dataType and get content-type in the process
22639 while ( dataTypes[ 0 ] === "*" ) {
22640 dataTypes.shift();
22641 if ( ct === undefined ) {
22642 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22643 }
22644 }
22645
22646 // Check if we're dealing with a known content-type
22647 if ( ct ) {
22648 for ( type in contents ) {
22649 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22650 dataTypes.unshift( type );
22651 break;
22652 }
22653 }
22654 }
22655
22656 // Check to see if we have a response for the expected dataType
22657 if ( dataTypes[ 0 ] in responses ) {
22658 finalDataType = dataTypes[ 0 ];
22659 } else {
22660
22661 // Try convertible dataTypes
22662 for ( type in responses ) {
22663 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22664 finalDataType = type;
22665 break;
22666 }
22667 if ( !firstDataType ) {
22668 firstDataType = type;
22669 }
22670 }
22671
22672 // Or just use first one
22673 finalDataType = finalDataType || firstDataType;
22674 }
22675
22676 // If we found a dataType
22677 // We add the dataType to the list if needed
22678 // and return the corresponding response
22679 if ( finalDataType ) {
22680 if ( finalDataType !== dataTypes[ 0 ] ) {
22681 dataTypes.unshift( finalDataType );
22682 }
22683 return responses[ finalDataType ];
22684 }
22685 }
22686
22687 /* Chain conversions given the request and the original response
22688 * Also sets the responseXXX fields on the jqXHR instance
22689 */
22690 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22691 var conv2, current, conv, tmp, prev,
22692 converters = {},
22693
22694 // Work with a copy of dataTypes in case we need to modify it for conversion
22695 dataTypes = s.dataTypes.slice();
22696
22697 // Create converters map with lowercased keys
22698 if ( dataTypes[ 1 ] ) {
22699 for ( conv in s.converters ) {
22700 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22701 }
22702 }
22703
22704 current = dataTypes.shift();
22705
22706 // Convert to each sequential dataType
22707 while ( current ) {
22708
22709 if ( s.responseFields[ current ] ) {
22710 jqXHR[ s.responseFields[ current ] ] = response;
22711 }
22712
22713 // Apply the dataFilter if provided
22714 if ( !prev && isSuccess && s.dataFilter ) {
22715 response = s.dataFilter( response, s.dataType );
22716 }
22717
22718 prev = current;
22719 current = dataTypes.shift();
22720
22721 if ( current ) {
22722
22723 // There's only work to do if current dataType is non-auto
22724 if ( current === "*" ) {
22725
22726 current = prev;
22727
22728 // Convert response if prev dataType is non-auto and differs from current
22729 } else if ( prev !== "*" && prev !== current ) {
22730
22731 // Seek a direct converter
22732 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22733
22734 // If none found, seek a pair
22735 if ( !conv ) {
22736 for ( conv2 in converters ) {
22737
22738 // If conv2 outputs current
22739 tmp = conv2.split( " " );
22740 if ( tmp[ 1 ] === current ) {
22741
22742 // If prev can be converted to accepted input
22743 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22744 converters[ "* " + tmp[ 0 ] ];
22745 if ( conv ) {
22746
22747 // Condense equivalence converters
22748 if ( conv === true ) {
22749 conv = converters[ conv2 ];
22750
22751 // Otherwise, insert the intermediate dataType
22752 } else if ( converters[ conv2 ] !== true ) {
22753 current = tmp[ 0 ];
22754 dataTypes.unshift( tmp[ 1 ] );
22755 }
22756 break;
22757 }
22758 }
22759 }
22760 }
22761
22762 // Apply converter (if not an equivalence)
22763 if ( conv !== true ) {
22764
22765 // Unless errors are allowed to bubble, catch and return them
22766 if ( conv && s.throws ) {
22767 response = conv( response );
22768 } else {
22769 try {
22770 response = conv( response );
22771 } catch ( e ) {
22772 return {
22773 state: "parsererror",
22774 error: conv ? e : "No conversion from " + prev + " to " + current
22775 };
22776 }
22777 }
22778 }
22779 }
22780 }
22781 }
22782
22783 return { state: "success", data: response };
22784 }
22785
22786 jQuery.extend( {
22787
22788 // Counter for holding the number of active queries
22789 active: 0,
22790
22791 // Last-Modified header cache for next request
22792 lastModified: {},
22793 etag: {},
22794
22795 ajaxSettings: {
22796 url: location.href,
22797 type: "GET",
22798 isLocal: rlocalProtocol.test( location.protocol ),
22799 global: true,
22800 processData: true,
22801 async: true,
22802 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22803
22804 /*
22805 timeout: 0,
22806 data: null,
22807 dataType: null,
22808 username: null,
22809 password: null,
22810 cache: null,
22811 throws: false,
22812 traditional: false,
22813 headers: {},
22814 */
22815
22816 accepts: {
22817 "*": allTypes,
22818 text: "text/plain",
22819 html: "text/html",
22820 xml: "application/xml, text/xml",
22821 json: "application/json, text/javascript"
22822 },
22823
22824 contents: {
22825 xml: /\bxml\b/,
22826 html: /\bhtml/,
22827 json: /\bjson\b/
22828 },
22829
22830 responseFields: {
22831 xml: "responseXML",
22832 text: "responseText",
22833 json: "responseJSON"
22834 },
22835
22836 // Data converters
22837 // Keys separate source (or catchall "*") and destination types with a single space
22838 converters: {
22839
22840 // Convert anything to text
22841 "* text": String,
22842
22843 // Text to html (true = no transformation)
22844 "text html": true,
22845
22846 // Evaluate text as a json expression
22847 "text json": JSON.parse,
22848
22849 // Parse text as xml
22850 "text xml": jQuery.parseXML
22851 },
22852
22853 // For options that shouldn't be deep extended:
22854 // you can add your own custom options here if
22855 // and when you create one that shouldn't be
22856 // deep extended (see ajaxExtend)
22857 flatOptions: {
22858 url: true,
22859 context: true
22860 }
22861 },
22862
22863 // Creates a full fledged settings object into target
22864 // with both ajaxSettings and settings fields.
22865 // If target is omitted, writes into ajaxSettings.
22866 ajaxSetup: function( target, settings ) {
22867 return settings ?
22868
22869 // Building a settings object
22870 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22871
22872 // Extending ajaxSettings
22873 ajaxExtend( jQuery.ajaxSettings, target );
22874 },
22875
22876 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22877 ajaxTransport: addToPrefiltersOrTransports( transports ),
22878
22879 // Main method
22880 ajax: function( url, options ) {
22881
22882 // If url is an object, simulate pre-1.5 signature
22883 if ( typeof url === "object" ) {
22884 options = url;
22885 url = undefined;
22886 }
22887
22888 // Force options to be an object
22889 options = options || {};
22890
22891 var transport,
22892
22893 // URL without anti-cache param
22894 cacheURL,
22895
22896 // Response headers
22897 responseHeadersString,
22898 responseHeaders,
22899
22900 // timeout handle
22901 timeoutTimer,
22902
22903 // Url cleanup var
22904 urlAnchor,
22905
22906 // Request state (becomes false upon send and true upon completion)
22907 completed,
22908
22909 // To know if global events are to be dispatched
22910 fireGlobals,
22911
22912 // Loop variable
22913 i,
22914
22915 // uncached part of the url
22916 uncached,
22917
22918 // Create the final options object
22919 s = jQuery.ajaxSetup( {}, options ),
22920
22921 // Callbacks context
22922 callbackContext = s.context || s,
22923
22924 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22925 globalEventContext = s.context &&
22926 ( callbackContext.nodeType || callbackContext.jquery ) ?
22927 jQuery( callbackContext ) :
22928 jQuery.event,
22929
22930 // Deferreds
22931 deferred = jQuery.Deferred(),
22932 completeDeferred = jQuery.Callbacks( "once memory" ),
22933
22934 // Status-dependent callbacks
22935 statusCode = s.statusCode || {},
22936
22937 // Headers (they are sent all at once)
22938 requestHeaders = {},
22939 requestHeadersNames = {},
22940
22941 // Default abort message
22942 strAbort = "canceled",
22943
22944 // Fake xhr
22945 jqXHR = {
22946 readyState: 0,
22947
22948 // Builds headers hashtable if needed
22949 getResponseHeader: function( key ) {
22950 var match;
22951 if ( completed ) {
22952 if ( !responseHeaders ) {
22953 responseHeaders = {};
22954 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22955 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22956 }
22957 }
22958 match = responseHeaders[ key.toLowerCase() ];
22959 }
22960 return match == null ? null : match;
22961 },
22962
22963 // Raw string
22964 getAllResponseHeaders: function() {
22965 return completed ? responseHeadersString : null;
22966 },
22967
22968 // Caches the header
22969 setRequestHeader: function( name, value ) {
22970 if ( completed == null ) {
22971 name = requestHeadersNames[ name.toLowerCase() ] =
22972 requestHeadersNames[ name.toLowerCase() ] || name;
22973 requestHeaders[ name ] = value;
22974 }
22975 return this;
22976 },
22977
22978 // Overrides response content-type header
22979 overrideMimeType: function( type ) {
22980 if ( completed == null ) {
22981 s.mimeType = type;
22982 }
22983 return this;
22984 },
22985
22986 // Status-dependent callbacks
22987 statusCode: function( map ) {
22988 var code;
22989 if ( map ) {
22990 if ( completed ) {
22991
22992 // Execute the appropriate callbacks
22993 jqXHR.always( map[ jqXHR.status ] );
22994 } else {
22995
22996 // Lazy-add the new callbacks in a way that preserves old ones
22997 for ( code in map ) {
22998 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22999 }
23000 }
23001 }
23002 return this;
23003 },
23004
23005 // Cancel the request
23006 abort: function( statusText ) {
23007 var finalText = statusText || strAbort;
23008 if ( transport ) {
23009 transport.abort( finalText );
23010 }
23011 done( 0, finalText );
23012 return this;
23013 }
23014 };
23015
23016 // Attach deferreds
23017 deferred.promise( jqXHR );
23018
23019 // Add protocol if not provided (prefilters might expect it)
23020 // Handle falsy url in the settings object (#10093: consistency with old signature)
23021 // We also use the url parameter if available
23022 s.url = ( ( url || s.url || location.href ) + "" )
23023 .replace( rprotocol, location.protocol + "//" );
23024
23025 // Alias method option to type as per ticket #12004
23026 s.type = options.method || options.type || s.method || s.type;
23027
23028 // Extract dataTypes list
23029 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
23030
23031 // A cross-domain request is in order when the origin doesn't match the current origin.
23032 if ( s.crossDomain == null ) {
23033 urlAnchor = document.createElement( "a" );
23034
23035 // Support: IE <=8 - 11, Edge 12 - 13
23036 // IE throws exception on accessing the href property if url is malformed,
23037 // e.g. http://example.com:80x/
23038 try {
23039 urlAnchor.href = s.url;
23040
23041 // Support: IE <=8 - 11 only
23042 // Anchor's host property isn't correctly set when s.url is relative
23043 urlAnchor.href = urlAnchor.href;
23044 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23045 urlAnchor.protocol + "//" + urlAnchor.host;
23046 } catch ( e ) {
23047
23048 // If there is an error parsing the URL, assume it is crossDomain,
23049 // it can be rejected by the transport if it is invalid
23050 s.crossDomain = true;
23051 }
23052 }
23053
23054 // Convert data if not already a string
23055 if ( s.data && s.processData && typeof s.data !== "string" ) {
23056 s.data = jQuery.param( s.data, s.traditional );
23057 }
23058
23059 // Apply prefilters
23060 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23061
23062 // If request was aborted inside a prefilter, stop there
23063 if ( completed ) {
23064 return jqXHR;
23065 }
23066
23067 // We can fire global events as of now if asked to
23068 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23069 fireGlobals = jQuery.event && s.global;
23070
23071 // Watch for a new set of requests
23072 if ( fireGlobals && jQuery.active++ === 0 ) {
23073 jQuery.event.trigger( "ajaxStart" );
23074 }
23075
23076 // Uppercase the type
23077 s.type = s.type.toUpperCase();
23078
23079 // Determine if request has content
23080 s.hasContent = !rnoContent.test( s.type );
23081
23082 // Save the URL in case we're toying with the If-Modified-Since
23083 // and/or If-None-Match header later on
23084 // Remove hash to simplify url manipulation
23085 cacheURL = s.url.replace( rhash, "" );
23086
23087 // More options handling for requests with no content
23088 if ( !s.hasContent ) {
23089
23090 // Remember the hash so we can put it back
23091 uncached = s.url.slice( cacheURL.length );
23092
23093 // If data is available, append data to url
23094 if ( s.data ) {
23095 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23096
23097 // #9682: remove data so that it's not used in an eventual retry
23098 delete s.data;
23099 }
23100
23101 // Add or update anti-cache param if needed
23102 if ( s.cache === false ) {
23103 cacheURL = cacheURL.replace( rantiCache, "$1" );
23104 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23105 }
23106
23107 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23108 s.url = cacheURL + uncached;
23109
23110 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23111 } else if ( s.data && s.processData &&
23112 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23113 s.data = s.data.replace( r20, "+" );
23114 }
23115
23116 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23117 if ( s.ifModified ) {
23118 if ( jQuery.lastModified[ cacheURL ] ) {
23119 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23120 }
23121 if ( jQuery.etag[ cacheURL ] ) {
23122 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23123 }
23124 }
23125
23126 // Set the correct header, if data is being sent
23127 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23128 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23129 }
23130
23131 // Set the Accepts header for the server, depending on the dataType
23132 jqXHR.setRequestHeader(
23133 "Accept",
23134 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23135 s.accepts[ s.dataTypes[ 0 ] ] +
23136 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23137 s.accepts[ "*" ]
23138 );
23139
23140 // Check for headers option
23141 for ( i in s.headers ) {
23142 jqXHR.setRequestHeader( i, s.headers[ i ] );
23143 }
23144
23145 // Allow custom headers/mimetypes and early abort
23146 if ( s.beforeSend &&
23147 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23148
23149 // Abort if not done already and return
23150 return jqXHR.abort();
23151 }
23152
23153 // Aborting is no longer a cancellation
23154 strAbort = "abort";
23155
23156 // Install callbacks on deferreds
23157 completeDeferred.add( s.complete );
23158 jqXHR.done( s.success );
23159 jqXHR.fail( s.error );
23160
23161 // Get transport
23162 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23163
23164 // If no transport, we auto-abort
23165 if ( !transport ) {
23166 done( -1, "No Transport" );
23167 } else {
23168 jqXHR.readyState = 1;
23169
23170 // Send global event
23171 if ( fireGlobals ) {
23172 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23173 }
23174
23175 // If request was aborted inside ajaxSend, stop there
23176 if ( completed ) {
23177 return jqXHR;
23178 }
23179
23180 // Timeout
23181 if ( s.async && s.timeout > 0 ) {
23182 timeoutTimer = window.setTimeout( function() {
23183 jqXHR.abort( "timeout" );
23184 }, s.timeout );
23185 }
23186
23187 try {
23188 completed = false;
23189 transport.send( requestHeaders, done );
23190 } catch ( e ) {
23191
23192 // Rethrow post-completion exceptions
23193 if ( completed ) {
23194 throw e;
23195 }
23196
23197 // Propagate others as results
23198 done( -1, e );
23199 }
23200 }
23201
23202 // Callback for when everything is done
23203 function done( status, nativeStatusText, responses, headers ) {
23204 var isSuccess, success, error, response, modified,
23205 statusText = nativeStatusText;
23206
23207 // Ignore repeat invocations
23208 if ( completed ) {
23209 return;
23210 }
23211
23212 completed = true;
23213
23214 // Clear timeout if it exists
23215 if ( timeoutTimer ) {
23216 window.clearTimeout( timeoutTimer );
23217 }
23218
23219 // Dereference transport for early garbage collection
23220 // (no matter how long the jqXHR object will be used)
23221 transport = undefined;
23222
23223 // Cache response headers
23224 responseHeadersString = headers || "";
23225
23226 // Set readyState
23227 jqXHR.readyState = status > 0 ? 4 : 0;
23228
23229 // Determine if successful
23230 isSuccess = status >= 200 && status < 300 || status === 304;
23231
23232 // Get response data
23233 if ( responses ) {
23234 response = ajaxHandleResponses( s, jqXHR, responses );
23235 }
23236
23237 // Convert no matter what (that way responseXXX fields are always set)
23238 response = ajaxConvert( s, response, jqXHR, isSuccess );
23239
23240 // If successful, handle type chaining
23241 if ( isSuccess ) {
23242
23243 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23244 if ( s.ifModified ) {
23245 modified = jqXHR.getResponseHeader( "Last-Modified" );
23246 if ( modified ) {
23247 jQuery.lastModified[ cacheURL ] = modified;
23248 }
23249 modified = jqXHR.getResponseHeader( "etag" );
23250 if ( modified ) {
23251 jQuery.etag[ cacheURL ] = modified;
23252 }
23253 }
23254
23255 // if no content
23256 if ( status === 204 || s.type === "HEAD" ) {
23257 statusText = "nocontent";
23258
23259 // if not modified
23260 } else if ( status === 304 ) {
23261 statusText = "notmodified";
23262
23263 // If we have data, let's convert it
23264 } else {
23265 statusText = response.state;
23266 success = response.data;
23267 error = response.error;
23268 isSuccess = !error;
23269 }
23270 } else {
23271
23272 // Extract error from statusText and normalize for non-aborts
23273 error = statusText;
23274 if ( status || !statusText ) {
23275 statusText = "error";
23276 if ( status < 0 ) {
23277 status = 0;
23278 }
23279 }
23280 }
23281
23282 // Set data for the fake xhr object
23283 jqXHR.status = status;
23284 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23285
23286 // Success/Error
23287 if ( isSuccess ) {
23288 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23289 } else {
23290 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23291 }
23292
23293 // Status-dependent callbacks
23294 jqXHR.statusCode( statusCode );
23295 statusCode = undefined;
23296
23297 if ( fireGlobals ) {
23298 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23299 [ jqXHR, s, isSuccess ? success : error ] );
23300 }
23301
23302 // Complete
23303 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23304
23305 if ( fireGlobals ) {
23306 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23307
23308 // Handle the global AJAX counter
23309 if ( !( --jQuery.active ) ) {
23310 jQuery.event.trigger( "ajaxStop" );
23311 }
23312 }
23313 }
23314
23315 return jqXHR;
23316 },
23317
23318 getJSON: function( url, data, callback ) {
23319 return jQuery.get( url, data, callback, "json" );
23320 },
23321
23322 getScript: function( url, callback ) {
23323 return jQuery.get( url, undefined, callback, "script" );
23324 }
23325 } );
23326
23327 jQuery.each( [ "get", "post" ], function( i, method ) {
23328 jQuery[ method ] = function( url, data, callback, type ) {
23329
23330 // Shift arguments if data argument was omitted
23331 if ( jQuery.isFunction( data ) ) {
23332 type = type || callback;
23333 callback = data;
23334 data = undefined;
23335 }
23336
23337 // The url can be an options object (which then must have .url)
23338 return jQuery.ajax( jQuery.extend( {
23339 url: url,
23340 type: method,
23341 dataType: type,
23342 data: data,
23343 success: callback
23344 }, jQuery.isPlainObject( url ) && url ) );
23345 };
23346 } );
23347
23348
23349 jQuery._evalUrl = function( url ) {
23350 return jQuery.ajax( {
23351 url: url,
23352
23353 // Make this explicit, since user can override this through ajaxSetup (#11264)
23354 type: "GET",
23355 dataType: "script",
23356 cache: true,
23357 async: false,
23358 global: false,
23359 "throws": true
23360 } );
23361 };
23362
23363
23364 jQuery.fn.extend( {
23365 wrapAll: function( html ) {
23366 var wrap;
23367
23368 if ( this[ 0 ] ) {
23369 if ( jQuery.isFunction( html ) ) {
23370 html = html.call( this[ 0 ] );
23371 }
23372
23373 // The elements to wrap the target around
23374 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23375
23376 if ( this[ 0 ].parentNode ) {
23377 wrap.insertBefore( this[ 0 ] );
23378 }
23379
23380 wrap.map( function() {
23381 var elem = this;
23382
23383 while ( elem.firstElementChild ) {
23384 elem = elem.firstElementChild;
23385 }
23386
23387 return elem;
23388 } ).append( this );
23389 }
23390
23391 return this;
23392 },
23393
23394 wrapInner: function( html ) {
23395 if ( jQuery.isFunction( html ) ) {
23396 return this.each( function( i ) {
23397 jQuery( this ).wrapInner( html.call( this, i ) );
23398 } );
23399 }
23400
23401 return this.each( function() {
23402 var self = jQuery( this ),
23403 contents = self.contents();
23404
23405 if ( contents.length ) {
23406 contents.wrapAll( html );
23407
23408 } else {
23409 self.append( html );
23410 }
23411 } );
23412 },
23413
23414 wrap: function( html ) {
23415 var isFunction = jQuery.isFunction( html );
23416
23417 return this.each( function( i ) {
23418 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23419 } );
23420 },
23421
23422 unwrap: function( selector ) {
23423 this.parent( selector ).not( "body" ).each( function() {
23424 jQuery( this ).replaceWith( this.childNodes );
23425 } );
23426 return this;
23427 }
23428 } );
23429
23430
23431 jQuery.expr.pseudos.hidden = function( elem ) {
23432 return !jQuery.expr.pseudos.visible( elem );
23433 };
23434 jQuery.expr.pseudos.visible = function( elem ) {
23435 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23436 };
23437
23438
23439
23440
23441 jQuery.ajaxSettings.xhr = function() {
23442 try {
23443 return new window.XMLHttpRequest();
23444 } catch ( e ) {}
23445 };
23446
23447 var xhrSuccessStatus = {
23448
23449 // File protocol always yields status code 0, assume 200
23450 0: 200,
23451
23452 // Support: IE <=9 only
23453 // #1450: sometimes IE returns 1223 when it should be 204
23454 1223: 204
23455 },
23456 xhrSupported = jQuery.ajaxSettings.xhr();
23457
23458 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23459 support.ajax = xhrSupported = !!xhrSupported;
23460
23461 jQuery.ajaxTransport( function( options ) {
23462 var callback, errorCallback;
23463
23464 // Cross domain only allowed if supported through XMLHttpRequest
23465 if ( support.cors || xhrSupported && !options.crossDomain ) {
23466 return {
23467 send: function( headers, complete ) {
23468 var i,
23469 xhr = options.xhr();
23470
23471 xhr.open(
23472 options.type,
23473 options.url,
23474 options.async,
23475 options.username,
23476 options.password
23477 );
23478
23479 // Apply custom fields if provided
23480 if ( options.xhrFields ) {
23481 for ( i in options.xhrFields ) {
23482 xhr[ i ] = options.xhrFields[ i ];
23483 }
23484 }
23485
23486 // Override mime type if needed
23487 if ( options.mimeType && xhr.overrideMimeType ) {
23488 xhr.overrideMimeType( options.mimeType );
23489 }
23490
23491 // X-Requested-With header
23492 // For cross-domain requests, seeing as conditions for a preflight are
23493 // akin to a jigsaw puzzle, we simply never set it to be sure.
23494 // (it can always be set on a per-request basis or even using ajaxSetup)
23495 // For same-domain requests, won't change header if already provided.
23496 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23497 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23498 }
23499
23500 // Set headers
23501 for ( i in headers ) {
23502 xhr.setRequestHeader( i, headers[ i ] );
23503 }
23504
23505 // Callback
23506 callback = function( type ) {
23507 return function() {
23508 if ( callback ) {
23509 callback = errorCallback = xhr.onload =
23510 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23511
23512 if ( type === "abort" ) {
23513 xhr.abort();
23514 } else if ( type === "error" ) {
23515
23516 // Support: IE <=9 only
23517 // On a manual native abort, IE9 throws
23518 // errors on any property access that is not readyState
23519 if ( typeof xhr.status !== "number" ) {
23520 complete( 0, "error" );
23521 } else {
23522 complete(
23523
23524 // File: protocol always yields status 0; see #8605, #14207
23525 xhr.status,
23526 xhr.statusText
23527 );
23528 }
23529 } else {
23530 complete(
23531 xhrSuccessStatus[ xhr.status ] || xhr.status,
23532 xhr.statusText,
23533
23534 // Support: IE <=9 only
23535 // IE9 has no XHR2 but throws on binary (trac-11426)
23536 // For XHR2 non-text, let the caller handle it (gh-2498)
23537 ( xhr.responseType || "text" ) !== "text" ||
23538 typeof xhr.responseText !== "string" ?
23539 { binary: xhr.response } :
23540 { text: xhr.responseText },
23541 xhr.getAllResponseHeaders()
23542 );
23543 }
23544 }
23545 };
23546 };
23547
23548 // Listen to events
23549 xhr.onload = callback();
23550 errorCallback = xhr.onerror = callback( "error" );
23551
23552 // Support: IE 9 only
23553 // Use onreadystatechange to replace onabort
23554 // to handle uncaught aborts
23555 if ( xhr.onabort !== undefined ) {
23556 xhr.onabort = errorCallback;
23557 } else {
23558 xhr.onreadystatechange = function() {
23559
23560 // Check readyState before timeout as it changes
23561 if ( xhr.readyState === 4 ) {
23562
23563 // Allow onerror to be called first,
23564 // but that will not handle a native abort
23565 // Also, save errorCallback to a variable
23566 // as xhr.onerror cannot be accessed
23567 window.setTimeout( function() {
23568 if ( callback ) {
23569 errorCallback();
23570 }
23571 } );
23572 }
23573 };
23574 }
23575
23576 // Create the abort callback
23577 callback = callback( "abort" );
23578
23579 try {
23580
23581 // Do send the request (this may raise an exception)
23582 xhr.send( options.hasContent && options.data || null );
23583 } catch ( e ) {
23584
23585 // #14683: Only rethrow if this hasn't been notified as an error yet
23586 if ( callback ) {
23587 throw e;
23588 }
23589 }
23590 },
23591
23592 abort: function() {
23593 if ( callback ) {
23594 callback();
23595 }
23596 }
23597 };
23598 }
23599 } );
23600
23601
23602
23603
23604 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23605 jQuery.ajaxPrefilter( function( s ) {
23606 if ( s.crossDomain ) {
23607 s.contents.script = false;
23608 }
23609 } );
23610
23611 // Install script dataType
23612 jQuery.ajaxSetup( {
23613 accepts: {
23614 script: "text/javascript, application/javascript, " +
23615 "application/ecmascript, application/x-ecmascript"
23616 },
23617 contents: {
23618 script: /\b(?:java|ecma)script\b/
23619 },
23620 converters: {
23621 "text script": function( text ) {
23622 jQuery.globalEval( text );
23623 return text;
23624 }
23625 }
23626 } );
23627
23628 // Handle cache's special case and crossDomain
23629 jQuery.ajaxPrefilter( "script", function( s ) {
23630 if ( s.cache === undefined ) {
23631 s.cache = false;
23632 }
23633 if ( s.crossDomain ) {
23634 s.type = "GET";
23635 }
23636 } );
23637
23638 // Bind script tag hack transport
23639 jQuery.ajaxTransport( "script", function( s ) {
23640
23641 // This transport only deals with cross domain requests
23642 if ( s.crossDomain ) {
23643 var script, callback;
23644 return {
23645 send: function( _, complete ) {
23646 script = jQuery( "<script>" ).prop( {
23647 charset: s.scriptCharset,
23648 src: s.url
23649 } ).on(
23650 "load error",
23651 callback = function( evt ) {
23652 script.remove();
23653 callback = null;
23654 if ( evt ) {
23655 complete( evt.type === "error" ? 404 : 200, evt.type );
23656 }
23657 }
23658 );
23659
23660 // Use native DOM manipulation to avoid our domManip AJAX trickery
23661 document.head.appendChild( script[ 0 ] );
23662 },
23663 abort: function() {
23664 if ( callback ) {
23665 callback();
23666 }
23667 }
23668 };
23669 }
23670 } );
23671
23672
23673
23674
23675 var oldCallbacks = [],
23676 rjsonp = /(=)\?(?=&|$)|\?\?/;
23677
23678 // Default jsonp settings
23679 jQuery.ajaxSetup( {
23680 jsonp: "callback",
23681 jsonpCallback: function() {
23682 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23683 this[ callback ] = true;
23684 return callback;
23685 }
23686 } );
23687
23688 // Detect, normalize options and install callbacks for jsonp requests
23689 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23690
23691 var callbackName, overwritten, responseContainer,
23692 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23693 "url" :
23694 typeof s.data === "string" &&
23695 ( s.contentType || "" )
23696 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23697 rjsonp.test( s.data ) && "data"
23698 );
23699
23700 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23701 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23702
23703 // Get callback name, remembering preexisting value associated with it
23704 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23705 s.jsonpCallback() :
23706 s.jsonpCallback;
23707
23708 // Insert callback into url or form data
23709 if ( jsonProp ) {
23710 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23711 } else if ( s.jsonp !== false ) {
23712 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23713 }
23714
23715 // Use data converter to retrieve json after script execution
23716 s.converters[ "script json" ] = function() {
23717 if ( !responseContainer ) {
23718 jQuery.error( callbackName + " was not called" );
23719 }
23720 return responseContainer[ 0 ];
23721 };
23722
23723 // Force json dataType
23724 s.dataTypes[ 0 ] = "json";
23725
23726 // Install callback
23727 overwritten = window[ callbackName ];
23728 window[ callbackName ] = function() {
23729 responseContainer = arguments;
23730 };
23731
23732 // Clean-up function (fires after converters)
23733 jqXHR.always( function() {
23734
23735 // If previous value didn't exist - remove it
23736 if ( overwritten === undefined ) {
23737 jQuery( window ).removeProp( callbackName );
23738
23739 // Otherwise restore preexisting value
23740 } else {
23741 window[ callbackName ] = overwritten;
23742 }
23743
23744 // Save back as free
23745 if ( s[ callbackName ] ) {
23746
23747 // Make sure that re-using the options doesn't screw things around
23748 s.jsonpCallback = originalSettings.jsonpCallback;
23749
23750 // Save the callback name for future use
23751 oldCallbacks.push( callbackName );
23752 }
23753
23754 // Call if it was a function and we have a response
23755 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23756 overwritten( responseContainer[ 0 ] );
23757 }
23758
23759 responseContainer = overwritten = undefined;
23760 } );
23761
23762 // Delegate to script
23763 return "script";
23764 }
23765 } );
23766
23767
23768
23769
23770 // Support: Safari 8 only
23771 // In Safari 8 documents created via document.implementation.createHTMLDocument
23772 // collapse sibling forms: the second one becomes a child of the first one.
23773 // Because of that, this security measure has to be disabled in Safari 8.
23774 // https://bugs.webkit.org/show_bug.cgi?id=137337
23775 support.createHTMLDocument = ( function() {
23776 var body = document.implementation.createHTMLDocument( "" ).body;
23777 body.innerHTML = "<form></form><form></form>";
23778 return body.childNodes.length === 2;
23779 } )();
23780
23781
23782 // Argument "data" should be string of html
23783 // context (optional): If specified, the fragment will be created in this context,
23784 // defaults to document
23785 // keepScripts (optional): If true, will include scripts passed in the html string
23786 jQuery.parseHTML = function( data, context, keepScripts ) {
23787 if ( typeof data !== "string" ) {
23788 return [];
23789 }
23790 if ( typeof context === "boolean" ) {
23791 keepScripts = context;
23792 context = false;
23793 }
23794
23795 var base, parsed, scripts;
23796
23797 if ( !context ) {
23798
23799 // Stop scripts or inline event handlers from being executed immediately
23800 // by using document.implementation
23801 if ( support.createHTMLDocument ) {
23802 context = document.implementation.createHTMLDocument( "" );
23803
23804 // Set the base href for the created document
23805 // so any parsed elements with URLs
23806 // are based on the document's URL (gh-2965)
23807 base = context.createElement( "base" );
23808 base.href = document.location.href;
23809 context.head.appendChild( base );
23810 } else {
23811 context = document;
23812 }
23813 }
23814
23815 parsed = rsingleTag.exec( data );
23816 scripts = !keepScripts && [];
23817
23818 // Single tag
23819 if ( parsed ) {
23820 return [ context.createElement( parsed[ 1 ] ) ];
23821 }
23822
23823 parsed = buildFragment( [ data ], context, scripts );
23824
23825 if ( scripts && scripts.length ) {
23826 jQuery( scripts ).remove();
23827 }
23828
23829 return jQuery.merge( [], parsed.childNodes );
23830 };
23831
23832
23833 /**
23834 * Load a url into a page
23835 */
23836 jQuery.fn.load = function( url, params, callback ) {
23837 var selector, type, response,
23838 self = this,
23839 off = url.indexOf( " " );
23840
23841 if ( off > -1 ) {
23842 selector = stripAndCollapse( url.slice( off ) );
23843 url = url.slice( 0, off );
23844 }
23845
23846 // If it's a function
23847 if ( jQuery.isFunction( params ) ) {
23848
23849 // We assume that it's the callback
23850 callback = params;
23851 params = undefined;
23852
23853 // Otherwise, build a param string
23854 } else if ( params && typeof params === "object" ) {
23855 type = "POST";
23856 }
23857
23858 // If we have elements to modify, make the request
23859 if ( self.length > 0 ) {
23860 jQuery.ajax( {
23861 url: url,
23862
23863 // If "type" variable is undefined, then "GET" method will be used.
23864 // Make value of this field explicit since
23865 // user can override it through ajaxSetup method
23866 type: type || "GET",
23867 dataType: "html",
23868 data: params
23869 } ).done( function( responseText ) {
23870
23871 // Save response for use in complete callback
23872 response = arguments;
23873
23874 self.html( selector ?
23875
23876 // If a selector was specified, locate the right elements in a dummy div
23877 // Exclude scripts to avoid IE 'Permission Denied' errors
23878 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23879
23880 // Otherwise use the full result
23881 responseText );
23882
23883 // If the request succeeds, this function gets "data", "status", "jqXHR"
23884 // but they are ignored because response was set above.
23885 // If it fails, this function gets "jqXHR", "status", "error"
23886 } ).always( callback && function( jqXHR, status ) {
23887 self.each( function() {
23888 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23889 } );
23890 } );
23891 }
23892
23893 return this;
23894 };
23895
23896
23897
23898
23899 // Attach a bunch of functions for handling common AJAX events
23900 jQuery.each( [
23901 "ajaxStart",
23902 "ajaxStop",
23903 "ajaxComplete",
23904 "ajaxError",
23905 "ajaxSuccess",
23906 "ajaxSend"
23907 ], function( i, type ) {
23908 jQuery.fn[ type ] = function( fn ) {
23909 return this.on( type, fn );
23910 };
23911 } );
23912
23913
23914
23915
23916 jQuery.expr.pseudos.animated = function( elem ) {
23917 return jQuery.grep( jQuery.timers, function( fn ) {
23918 return elem === fn.elem;
23919 } ).length;
23920 };
23921
23922
23923
23924
23925 jQuery.offset = {
23926 setOffset: function( elem, options, i ) {
23927 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23928 position = jQuery.css( elem, "position" ),
23929 curElem = jQuery( elem ),
23930 props = {};
23931
23932 // Set position first, in-case top/left are set even on static elem
23933 if ( position === "static" ) {
23934 elem.style.position = "relative";
23935 }
23936
23937 curOffset = curElem.offset();
23938 curCSSTop = jQuery.css( elem, "top" );
23939 curCSSLeft = jQuery.css( elem, "left" );
23940 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23941 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23942
23943 // Need to be able to calculate position if either
23944 // top or left is auto and position is either absolute or fixed
23945 if ( calculatePosition ) {
23946 curPosition = curElem.position();
23947 curTop = curPosition.top;
23948 curLeft = curPosition.left;
23949
23950 } else {
23951 curTop = parseFloat( curCSSTop ) || 0;
23952 curLeft = parseFloat( curCSSLeft ) || 0;
23953 }
23954
23955 if ( jQuery.isFunction( options ) ) {
23956
23957 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23958 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23959 }
23960
23961 if ( options.top != null ) {
23962 props.top = ( options.top - curOffset.top ) + curTop;
23963 }
23964 if ( options.left != null ) {
23965 props.left = ( options.left - curOffset.left ) + curLeft;
23966 }
23967
23968 if ( "using" in options ) {
23969 options.using.call( elem, props );
23970
23971 } else {
23972 curElem.css( props );
23973 }
23974 }
23975 };
23976
23977 jQuery.fn.extend( {
23978 offset: function( options ) {
23979
23980 // Preserve chaining for setter
23981 if ( arguments.length ) {
23982 return options === undefined ?
23983 this :
23984 this.each( function( i ) {
23985 jQuery.offset.setOffset( this, options, i );
23986 } );
23987 }
23988
23989 var doc, docElem, rect, win,
23990 elem = this[ 0 ];
23991
23992 if ( !elem ) {
23993 return;
23994 }
23995
23996 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23997 // Support: IE <=11 only
23998 // Running getBoundingClientRect on a
23999 // disconnected node in IE throws an error
24000 if ( !elem.getClientRects().length ) {
24001 return { top: 0, left: 0 };
24002 }
24003
24004 rect = elem.getBoundingClientRect();
24005
24006 doc = elem.ownerDocument;
24007 docElem = doc.documentElement;
24008 win = doc.defaultView;
24009
24010 return {
24011 top: rect.top + win.pageYOffset - docElem.clientTop,
24012 left: rect.left + win.pageXOffset - docElem.clientLeft
24013 };
24014 },
24015
24016 position: function() {
24017 if ( !this[ 0 ] ) {
24018 return;
24019 }
24020
24021 var offsetParent, offset,
24022 elem = this[ 0 ],
24023 parentOffset = { top: 0, left: 0 };
24024
24025 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
24026 // because it is its only offset parent
24027 if ( jQuery.css( elem, "position" ) === "fixed" ) {
24028
24029 // Assume getBoundingClientRect is there when computed position is fixed
24030 offset = elem.getBoundingClientRect();
24031
24032 } else {
24033
24034 // Get *real* offsetParent
24035 offsetParent = this.offsetParent();
24036
24037 // Get correct offsets
24038 offset = this.offset();
24039 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24040 parentOffset = offsetParent.offset();
24041 }
24042
24043 // Add offsetParent borders
24044 parentOffset = {
24045 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24046 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24047 };
24048 }
24049
24050 // Subtract parent offsets and element margins
24051 return {
24052 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24053 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24054 };
24055 },
24056
24057 // This method will return documentElement in the following cases:
24058 // 1) For the element inside the iframe without offsetParent, this method will return
24059 // documentElement of the parent window
24060 // 2) For the hidden or detached element
24061 // 3) For body or html element, i.e. in case of the html node - it will return itself
24062 //
24063 // but those exceptions were never presented as a real life use-cases
24064 // and might be considered as more preferable results.
24065 //
24066 // This logic, however, is not guaranteed and can change at any point in the future
24067 offsetParent: function() {
24068 return this.map( function() {
24069 var offsetParent = this.offsetParent;
24070
24071 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24072 offsetParent = offsetParent.offsetParent;
24073 }
24074
24075 return offsetParent || documentElement;
24076 } );
24077 }
24078 } );
24079
24080 // Create scrollLeft and scrollTop methods
24081 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24082 var top = "pageYOffset" === prop;
24083
24084 jQuery.fn[ method ] = function( val ) {
24085 return access( this, function( elem, method, val ) {
24086
24087 // Coalesce documents and windows
24088 var win;
24089 if ( jQuery.isWindow( elem ) ) {
24090 win = elem;
24091 } else if ( elem.nodeType === 9 ) {
24092 win = elem.defaultView;
24093 }
24094
24095 if ( val === undefined ) {
24096 return win ? win[ prop ] : elem[ method ];
24097 }
24098
24099 if ( win ) {
24100 win.scrollTo(
24101 !top ? val : win.pageXOffset,
24102 top ? val : win.pageYOffset
24103 );
24104
24105 } else {
24106 elem[ method ] = val;
24107 }
24108 }, method, val, arguments.length );
24109 };
24110 } );
24111
24112 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24113 // Add the top/left cssHooks using jQuery.fn.position
24114 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24115 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24116 // getComputedStyle returns percent when specified for top/left/bottom/right;
24117 // rather than make the css module depend on the offset module, just check for it here
24118 jQuery.each( [ "top", "left" ], function( i, prop ) {
24119 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24120 function( elem, computed ) {
24121 if ( computed ) {
24122 computed = curCSS( elem, prop );
24123
24124 // If curCSS returns percentage, fallback to offset
24125 return rnumnonpx.test( computed ) ?
24126 jQuery( elem ).position()[ prop ] + "px" :
24127 computed;
24128 }
24129 }
24130 );
24131 } );
24132
24133
24134 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24135 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24136 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24137 function( defaultExtra, funcName ) {
24138
24139 // Margin is only for outerHeight, outerWidth
24140 jQuery.fn[ funcName ] = function( margin, value ) {
24141 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24142 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24143
24144 return access( this, function( elem, type, value ) {
24145 var doc;
24146
24147 if ( jQuery.isWindow( elem ) ) {
24148
24149 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24150 return funcName.indexOf( "outer" ) === 0 ?
24151 elem[ "inner" + name ] :
24152 elem.document.documentElement[ "client" + name ];
24153 }
24154
24155 // Get document width or height
24156 if ( elem.nodeType === 9 ) {
24157 doc = elem.documentElement;
24158
24159 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24160 // whichever is greatest
24161 return Math.max(
24162 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24163 elem.body[ "offset" + name ], doc[ "offset" + name ],
24164 doc[ "client" + name ]
24165 );
24166 }
24167
24168 return value === undefined ?
24169
24170 // Get width or height on the element, requesting but not forcing parseFloat
24171 jQuery.css( elem, type, extra ) :
24172
24173 // Set width or height on the element
24174 jQuery.style( elem, type, value, extra );
24175 }, type, chainable ? margin : undefined, chainable );
24176 };
24177 } );
24178 } );
24179
24180
24181 jQuery.fn.extend( {
24182
24183 bind: function( types, data, fn ) {
24184 return this.on( types, null, data, fn );
24185 },
24186 unbind: function( types, fn ) {
24187 return this.off( types, null, fn );
24188 },
24189
24190 delegate: function( selector, types, data, fn ) {
24191 return this.on( types, selector, data, fn );
24192 },
24193 undelegate: function( selector, types, fn ) {
24194
24195 // ( namespace ) or ( selector, types [, fn] )
24196 return arguments.length === 1 ?
24197 this.off( selector, "**" ) :
24198 this.off( types, selector || "**", fn );
24199 }
24200 } );
24201
24202 jQuery.holdReady = function( hold ) {
24203 if ( hold ) {
24204 jQuery.readyWait++;
24205 } else {
24206 jQuery.ready( true );
24207 }
24208 };
24209 jQuery.isArray = Array.isArray;
24210 jQuery.parseJSON = JSON.parse;
24211 jQuery.nodeName = nodeName;
24212
24213
24214
24215
24216 // Register as a named AMD module, since jQuery can be concatenated with other
24217 // files that may use define, but not via a proper concatenation script that
24218 // understands anonymous AMD modules. A named AMD is safest and most robust
24219 // way to register. Lowercase jquery is used because AMD module names are
24220 // derived from file names, and jQuery is normally delivered in a lowercase
24221 // file name. Do this after creating the global so that if an AMD module wants
24222 // to call noConflict to hide this version of jQuery, it will work.
24223
24224 // Note that for maximum portability, libraries that are not jQuery should
24225 // declare themselves as anonymous modules, and avoid setting a global if an
24226 // AMD loader is present. jQuery is a special case. For more information, see
24227 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24228
24229 if ( typeof define === "function" && define.amd ) {
24230 define( "jquery", [], function() {
24231 return jQuery;
24232 } );
24233 }
24234
24235
24236
24237
24238 var
24239
24240 // Map over jQuery in case of overwrite
24241 _jQuery = window.jQuery,
24242
24243 // Map over the $ in case of overwrite
24244 _$ = window.$;
24245
24246 jQuery.noConflict = function( deep ) {
24247 if ( window.$ === jQuery ) {
24248 window.$ = _$;
24249 }
24250
24251 if ( deep && window.jQuery === jQuery ) {
24252 window.jQuery = _jQuery;
24253 }
24254
24255 return jQuery;
24256 };
24257
24258 // Expose jQuery and $ identifiers, even in AMD
24259 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24260 // and CommonJS for browser emulators (#13566)
24261 if ( !noGlobal ) {
24262 window.jQuery = window.$ = jQuery;
24263 }
24264
24265
24266
24267
24268 return jQuery;
24269 } );
24270 </script>
24271 <script>/*!
24272 * Bootstrap v3.3.7 (http://getbootstrap.com)
24273 * Copyright 2011-2016 Twitter, Inc.
24274 * Licensed under the MIT license
24275 */
24276
24277 if (typeof jQuery === 'undefined') {
24278 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24279 }
24280
24281 +function ($) {
24282 'use strict';
24283 var version = $.fn.jquery.split(' ')[0].split('.')
24284 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24285 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24286 }
24287 }(jQuery);
24288
24289 /* ========================================================================
24290 * Bootstrap: transition.js v3.3.7
24291 * http://getbootstrap.com/javascript/#transitions
24292 * ========================================================================
24293 * Copyright 2011-2016 Twitter, Inc.
24294 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24295 * ======================================================================== */
24296
24297
24298 +function ($) {
24299 'use strict';
24300
24301 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24302 // ============================================================
24303
24304 function transitionEnd() {
24305 var el = document.createElement('bootstrap')
24306
24307 var transEndEventNames = {
24308 WebkitTransition : 'webkitTransitionEnd',
24309 MozTransition : 'transitionend',
24310 OTransition : 'oTransitionEnd otransitionend',
24311 transition : 'transitionend'
24312 }
24313
24314 for (var name in transEndEventNames) {
24315 if (el.style[name] !== undefined) {
24316 return { end: transEndEventNames[name] }
24317 }
24318 }
24319
24320 return false // explicit for ie8 ( ._.)
24321 }
24322
24323 // http://blog.alexmaccaw.com/css-transitions
24324 $.fn.emulateTransitionEnd = function (duration) {
24325 var called = false
24326 var $el = this
24327 $(this).one('bsTransitionEnd', function () { called = true })
24328 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24329 setTimeout(callback, duration)
24330 return this
24331 }
24332
24333 $(function () {
24334 $.support.transition = transitionEnd()
24335
24336 if (!$.support.transition) return
24337
24338 $.event.special.bsTransitionEnd = {
24339 bindType: $.support.transition.end,
24340 delegateType: $.support.transition.end,
24341 handle: function (e) {
24342 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24343 }
24344 }
24345 })
24346
24347 }(jQuery);
24348
24349 /* ========================================================================
24350 * Bootstrap: alert.js v3.3.7
24351 * http://getbootstrap.com/javascript/#alerts
24352 * ========================================================================
24353 * Copyright 2011-2016 Twitter, Inc.
24354 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24355 * ======================================================================== */
24356
24357
24358 +function ($) {
24359 'use strict';
24360
24361 // ALERT CLASS DEFINITION
24362 // ======================
24363
24364 var dismiss = '[data-dismiss="alert"]'
24365 var Alert = function (el) {
24366 $(el).on('click', dismiss, this.close)
24367 }
24368
24369 Alert.VERSION = '3.3.7'
24370
24371 Alert.TRANSITION_DURATION = 150
24372
24373 Alert.prototype.close = function (e) {
24374 var $this = $(this)
24375 var selector = $this.attr('data-target')
24376
24377 if (!selector) {
24378 selector = $this.attr('href')
24379 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24380 }
24381
24382 var $parent = $(selector === '#' ? [] : selector)
24383
24384 if (e) e.preventDefault()
24385
24386 if (!$parent.length) {
24387 $parent = $this.closest('.alert')
24388 }
24389
24390 $parent.trigger(e = $.Event('close.bs.alert'))
24391
24392 if (e.isDefaultPrevented()) return
24393
24394 $parent.removeClass('in')
24395
24396 function removeElement() {
24397 // detach from parent, fire event then clean up data
24398 $parent.detach().trigger('closed.bs.alert').remove()
24399 }
24400
24401 $.support.transition && $parent.hasClass('fade') ?
24402 $parent
24403 .one('bsTransitionEnd', removeElement)
24404 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24405 removeElement()
24406 }
24407
24408
24409 // ALERT PLUGIN DEFINITION
24410 // =======================
24411
24412 function Plugin(option) {
24413 return this.each(function () {
24414 var $this = $(this)
24415 var data = $this.data('bs.alert')
24416
24417 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24418 if (typeof option == 'string') data[option].call($this)
24419 })
24420 }
24421
24422 var old = $.fn.alert
24423
24424 $.fn.alert = Plugin
24425 $.fn.alert.Constructor = Alert
24426
24427
24428 // ALERT NO CONFLICT
24429 // =================
24430
24431 $.fn.alert.noConflict = function () {
24432 $.fn.alert = old
24433 return this
24434 }
24435
24436
24437 // ALERT DATA-API
24438 // ==============
24439
24440 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24441
24442 }(jQuery);
24443
24444 /* ========================================================================
24445 * Bootstrap: button.js v3.3.7
24446 * http://getbootstrap.com/javascript/#buttons
24447 * ========================================================================
24448 * Copyright 2011-2016 Twitter, Inc.
24449 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24450 * ======================================================================== */
24451
24452
24453 +function ($) {
24454 'use strict';
24455
24456 // BUTTON PUBLIC CLASS DEFINITION
24457 // ==============================
24458
24459 var Button = function (element, options) {
24460 this.$element = $(element)
24461 this.options = $.extend({}, Button.DEFAULTS, options)
24462 this.isLoading = false
24463 }
24464
24465 Button.VERSION = '3.3.7'
24466
24467 Button.DEFAULTS = {
24468 loadingText: 'loading...'
24469 }
24470
24471 Button.prototype.setState = function (state) {
24472 var d = 'disabled'
24473 var $el = this.$element
24474 var val = $el.is('input') ? 'val' : 'html'
24475 var data = $el.data()
24476
24477 state += 'Text'
24478
24479 if (data.resetText == null) $el.data('resetText', $el[val]())
24480
24481 // push to event loop to allow forms to submit
24482 setTimeout($.proxy(function () {
24483 $el[val](data[state] == null ? this.options[state] : data[state])
24484
24485 if (state == 'loadingText') {
24486 this.isLoading = true
24487 $el.addClass(d).attr(d, d).prop(d, true)
24488 } else if (this.isLoading) {
24489 this.isLoading = false
24490 $el.removeClass(d).removeAttr(d).prop(d, false)
24491 }
24492 }, this), 0)
24493 }
24494
24495 Button.prototype.toggle = function () {
24496 var changed = true
24497 var $parent = this.$element.closest('[data-toggle="buttons"]')
24498
24499 if ($parent.length) {
24500 var $input = this.$element.find('input')
24501 if ($input.prop('type') == 'radio') {
24502 if ($input.prop('checked')) changed = false
24503 $parent.find('.active').removeClass('active')
24504 this.$element.addClass('active')
24505 } else if ($input.prop('type') == 'checkbox') {
24506 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24507 this.$element.toggleClass('active')
24508 }
24509 $input.prop('checked', this.$element.hasClass('active'))
24510 if (changed) $input.trigger('change')
24511 } else {
24512 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24513 this.$element.toggleClass('active')
24514 }
24515 }
24516
24517
24518 // BUTTON PLUGIN DEFINITION
24519 // ========================
24520
24521 function Plugin(option) {
24522 return this.each(function () {
24523 var $this = $(this)
24524 var data = $this.data('bs.button')
24525 var options = typeof option == 'object' && option
24526
24527 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24528
24529 if (option == 'toggle') data.toggle()
24530 else if (option) data.setState(option)
24531 })
24532 }
24533
24534 var old = $.fn.button
24535
24536 $.fn.button = Plugin
24537 $.fn.button.Constructor = Button
24538
24539
24540 // BUTTON NO CONFLICT
24541 // ==================
24542
24543 $.fn.button.noConflict = function () {
24544 $.fn.button = old
24545 return this
24546 }
24547
24548
24549 // BUTTON DATA-API
24550 // ===============
24551
24552 $(document)
24553 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24554 var $btn = $(e.target).closest('.btn')
24555 Plugin.call($btn, 'toggle')
24556 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24557 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24558 e.preventDefault()
24559 // The target component still receive the focus
24560 if ($btn.is('input,button')) $btn.trigger('focus')
24561 else $btn.find('input:visible,button:visible').first().trigger('focus')
24562 }
24563 })
24564 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24565 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24566 })
24567
24568 }(jQuery);
24569
24570 /* ========================================================================
24571 * Bootstrap: carousel.js v3.3.7
24572 * http://getbootstrap.com/javascript/#carousel
24573 * ========================================================================
24574 * Copyright 2011-2016 Twitter, Inc.
24575 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24576 * ======================================================================== */
24577
24578
24579 +function ($) {
24580 'use strict';
24581
24582 // CAROUSEL CLASS DEFINITION
24583 // =========================
24584
24585 var Carousel = function (element, options) {
24586 this.$element = $(element)
24587 this.$indicators = this.$element.find('.carousel-indicators')
24588 this.options = options
24589 this.paused = null
24590 this.sliding = null
24591 this.interval = null
24592 this.$active = null
24593 this.$items = null
24594
24595 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24596
24597 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24598 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24599 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24600 }
24601
24602 Carousel.VERSION = '3.3.7'
24603
24604 Carousel.TRANSITION_DURATION = 600
24605
24606 Carousel.DEFAULTS = {
24607 interval: 5000,
24608 pause: 'hover',
24609 wrap: true,
24610 keyboard: true
24611 }
24612
24613 Carousel.prototype.keydown = function (e) {
24614 if (/input|textarea/i.test(e.target.tagName)) return
24615 switch (e.which) {
24616 case 37: this.prev(); break
24617 case 39: this.next(); break
24618 default: return
24619 }
24620
24621 e.preventDefault()
24622 }
24623
24624 Carousel.prototype.cycle = function (e) {
24625 e || (this.paused = false)
24626
24627 this.interval && clearInterval(this.interval)
24628
24629 this.options.interval
24630 && !this.paused
24631 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24632
24633 return this
24634 }
24635
24636 Carousel.prototype.getItemIndex = function (item) {
24637 this.$items = item.parent().children('.item')
24638 return this.$items.index(item || this.$active)
24639 }
24640
24641 Carousel.prototype.getItemForDirection = function (direction, active) {
24642 var activeIndex = this.getItemIndex(active)
24643 var willWrap = (direction == 'prev' && activeIndex === 0)
24644 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24645 if (willWrap && !this.options.wrap) return active
24646 var delta = direction == 'prev' ? -1 : 1
24647 var itemIndex = (activeIndex + delta) % this.$items.length
24648 return this.$items.eq(itemIndex)
24649 }
24650
24651 Carousel.prototype.to = function (pos) {
24652 var that = this
24653 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24654
24655 if (pos > (this.$items.length - 1) || pos < 0) return
24656
24657 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24658 if (activeIndex == pos) return this.pause().cycle()
24659
24660 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24661 }
24662
24663 Carousel.prototype.pause = function (e) {
24664 e || (this.paused = true)
24665
24666 if (this.$element.find('.next, .prev').length && $.support.transition) {
24667 this.$element.trigger($.support.transition.end)
24668 this.cycle(true)
24669 }
24670
24671 this.interval = clearInterval(this.interval)
24672
24673 return this
24674 }
24675
24676 Carousel.prototype.next = function () {
24677 if (this.sliding) return
24678 return this.slide('next')
24679 }
24680
24681 Carousel.prototype.prev = function () {
24682 if (this.sliding) return
24683 return this.slide('prev')
24684 }
24685
24686 Carousel.prototype.slide = function (type, next) {
24687 var $active = this.$element.find('.item.active')
24688 var $next = next || this.getItemForDirection(type, $active)
24689 var isCycling = this.interval
24690 var direction = type == 'next' ? 'left' : 'right'
24691 var that = this
24692
24693 if ($next.hasClass('active')) return (this.sliding = false)
24694
24695 var relatedTarget = $next[0]
24696 var slideEvent = $.Event('slide.bs.carousel', {
24697 relatedTarget: relatedTarget,
24698 direction: direction
24699 })
24700 this.$element.trigger(slideEvent)
24701 if (slideEvent.isDefaultPrevented()) return
24702
24703 this.sliding = true
24704
24705 isCycling && this.pause()
24706
24707 if (this.$indicators.length) {
24708 this.$indicators.find('.active').removeClass('active')
24709 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24710 $nextIndicator && $nextIndicator.addClass('active')
24711 }
24712
24713 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24714 if ($.support.transition && this.$element.hasClass('slide')) {
24715 $next.addClass(type)
24716 $next[0].offsetWidth // force reflow
24717 $active.addClass(direction)
24718 $next.addClass(direction)
24719 $active
24720 .one('bsTransitionEnd', function () {
24721 $next.removeClass([type, direction].join(' ')).addClass('active')
24722 $active.removeClass(['active', direction].join(' '))
24723 that.sliding = false
24724 setTimeout(function () {
24725 that.$element.trigger(slidEvent)
24726 }, 0)
24727 })
24728 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24729 } else {
24730 $active.removeClass('active')
24731 $next.addClass('active')
24732 this.sliding = false
24733 this.$element.trigger(slidEvent)
24734 }
24735
24736 isCycling && this.cycle()
24737
24738 return this
24739 }
24740
24741
24742 // CAROUSEL PLUGIN DEFINITION
24743 // ==========================
24744
24745 function Plugin(option) {
24746 return this.each(function () {
24747 var $this = $(this)
24748 var data = $this.data('bs.carousel')
24749 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24750 var action = typeof option == 'string' ? option : options.slide
24751
24752 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24753 if (typeof option == 'number') data.to(option)
24754 else if (action) data[action]()
24755 else if (options.interval) data.pause().cycle()
24756 })
24757 }
24758
24759 var old = $.fn.carousel
24760
24761 $.fn.carousel = Plugin
24762 $.fn.carousel.Constructor = Carousel
24763
24764
24765 // CAROUSEL NO CONFLICT
24766 // ====================
24767
24768 $.fn.carousel.noConflict = function () {
24769 $.fn.carousel = old
24770 return this
24771 }
24772
24773
24774 // CAROUSEL DATA-API
24775 // =================
24776
24777 var clickHandler = function (e) {
24778 var href
24779 var $this = $(this)
24780 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24781 if (!$target.hasClass('carousel')) return
24782 var options = $.extend({}, $target.data(), $this.data())
24783 var slideIndex = $this.attr('data-slide-to')
24784 if (slideIndex) options.interval = false
24785
24786 Plugin.call($target, options)
24787
24788 if (slideIndex) {
24789 $target.data('bs.carousel').to(slideIndex)
24790 }
24791
24792 e.preventDefault()
24793 }
24794
24795 $(document)
24796 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24797 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24798
24799 $(window).on('load', function () {
24800 $('[data-ride="carousel"]').each(function () {
24801 var $carousel = $(this)
24802 Plugin.call($carousel, $carousel.data())
24803 })
24804 })
24805
24806 }(jQuery);
24807
24808 /* ========================================================================
24809 * Bootstrap: collapse.js v3.3.7
24810 * http://getbootstrap.com/javascript/#collapse
24811 * ========================================================================
24812 * Copyright 2011-2016 Twitter, Inc.
24813 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24814 * ======================================================================== */
24815
24816 /* jshint latedef: false */
24817
24818 +function ($) {
24819 'use strict';
24820
24821 // COLLAPSE PUBLIC CLASS DEFINITION
24822 // ================================
24823
24824 var Collapse = function (element, options) {
24825 this.$element = $(element)
24826 this.options = $.extend({}, Collapse.DEFAULTS, options)
24827 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24828 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24829 this.transitioning = null
24830
24831 if (this.options.parent) {
24832 this.$parent = this.getParent()
24833 } else {
24834 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24835 }
24836
24837 if (this.options.toggle) this.toggle()
24838 }
24839
24840 Collapse.VERSION = '3.3.7'
24841
24842 Collapse.TRANSITION_DURATION = 350
24843
24844 Collapse.DEFAULTS = {
24845 toggle: true
24846 }
24847
24848 Collapse.prototype.dimension = function () {
24849 var hasWidth = this.$element.hasClass('width')
24850 return hasWidth ? 'width' : 'height'
24851 }
24852
24853 Collapse.prototype.show = function () {
24854 if (this.transitioning || this.$element.hasClass('in')) return
24855
24856 var activesData
24857 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24858
24859 if (actives && actives.length) {
24860 activesData = actives.data('bs.collapse')
24861 if (activesData && activesData.transitioning) return
24862 }
24863
24864 var startEvent = $.Event('show.bs.collapse')
24865 this.$element.trigger(startEvent)
24866 if (startEvent.isDefaultPrevented()) return
24867
24868 if (actives && actives.length) {
24869 Plugin.call(actives, 'hide')
24870 activesData || actives.data('bs.collapse', null)
24871 }
24872
24873 var dimension = this.dimension()
24874
24875 this.$element
24876 .removeClass('collapse')
24877 .addClass('collapsing')[dimension](0)
24878 .attr('aria-expanded', true)
24879
24880 this.$trigger
24881 .removeClass('collapsed')
24882 .attr('aria-expanded', true)
24883
24884 this.transitioning = 1
24885
24886 var complete = function () {
24887 this.$element
24888 .removeClass('collapsing')
24889 .addClass('collapse in')[dimension]('')
24890 this.transitioning = 0
24891 this.$element
24892 .trigger('shown.bs.collapse')
24893 }
24894
24895 if (!$.support.transition) return complete.call(this)
24896
24897 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24898
24899 this.$element
24900 .one('bsTransitionEnd', $.proxy(complete, this))
24901 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24902 }
24903
24904 Collapse.prototype.hide = function () {
24905 if (this.transitioning || !this.$element.hasClass('in')) return
24906
24907 var startEvent = $.Event('hide.bs.collapse')
24908 this.$element.trigger(startEvent)
24909 if (startEvent.isDefaultPrevented()) return
24910
24911 var dimension = this.dimension()
24912
24913 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24914
24915 this.$element
24916 .addClass('collapsing')
24917 .removeClass('collapse in')
24918 .attr('aria-expanded', false)
24919
24920 this.$trigger
24921 .addClass('collapsed')
24922 .attr('aria-expanded', false)
24923
24924 this.transitioning = 1
24925
24926 var complete = function () {
24927 this.transitioning = 0
24928 this.$element
24929 .removeClass('collapsing')
24930 .addClass('collapse')
24931 .trigger('hidden.bs.collapse')
24932 }
24933
24934 if (!$.support.transition) return complete.call(this)
24935
24936 this.$element
24937 [dimension](0)
24938 .one('bsTransitionEnd', $.proxy(complete, this))
24939 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24940 }
24941
24942 Collapse.prototype.toggle = function () {
24943 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24944 }
24945
24946 Collapse.prototype.getParent = function () {
24947 return $(this.options.parent)
24948 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24949 .each($.proxy(function (i, element) {
24950 var $element = $(element)
24951 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24952 }, this))
24953 .end()
24954 }
24955
24956 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24957 var isOpen = $element.hasClass('in')
24958
24959 $element.attr('aria-expanded', isOpen)
24960 $trigger
24961 .toggleClass('collapsed', !isOpen)
24962 .attr('aria-expanded', isOpen)
24963 }
24964
24965 function getTargetFromTrigger($trigger) {
24966 var href
24967 var target = $trigger.attr('data-target')
24968 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24969
24970 return $(target)
24971 }
24972
24973
24974 // COLLAPSE PLUGIN DEFINITION
24975 // ==========================
24976
24977 function Plugin(option) {
24978 return this.each(function () {
24979 var $this = $(this)
24980 var data = $this.data('bs.collapse')
24981 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24982
24983 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24984 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24985 if (typeof option == 'string') data[option]()
24986 })
24987 }
24988
24989 var old = $.fn.collapse
24990
24991 $.fn.collapse = Plugin
24992 $.fn.collapse.Constructor = Collapse
24993
24994
24995 // COLLAPSE NO CONFLICT
24996 // ====================
24997
24998 $.fn.collapse.noConflict = function () {
24999 $.fn.collapse = old
25000 return this
25001 }
25002
25003
25004 // COLLAPSE DATA-API
25005 // =================
25006
25007 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
25008 var $this = $(this)
25009
25010 if (!$this.attr('data-target')) e.preventDefault()
25011
25012 var $target = getTargetFromTrigger($this)
25013 var data = $target.data('bs.collapse')
25014 var option = data ? 'toggle' : $this.data()
25015
25016 Plugin.call($target, option)
25017 })
25018
25019 }(jQuery);
25020
25021 /* ========================================================================
25022 * Bootstrap: dropdown.js v3.3.7
25023 * http://getbootstrap.com/javascript/#dropdowns
25024 * ========================================================================
25025 * Copyright 2011-2016 Twitter, Inc.
25026 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25027 * ======================================================================== */
25028
25029
25030 +function ($) {
25031 'use strict';
25032
25033 // DROPDOWN CLASS DEFINITION
25034 // =========================
25035
25036 var backdrop = '.dropdown-backdrop'
25037 var toggle = '[data-toggle="dropdown"]'
25038 var Dropdown = function (element) {
25039 $(element).on('click.bs.dropdown', this.toggle)
25040 }
25041
25042 Dropdown.VERSION = '3.3.7'
25043
25044 function getParent($this) {
25045 var selector = $this.attr('data-target')
25046
25047 if (!selector) {
25048 selector = $this.attr('href')
25049 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25050 }
25051
25052 var $parent = selector && $(selector)
25053
25054 return $parent && $parent.length ? $parent : $this.parent()
25055 }
25056
25057 function clearMenus(e) {
25058 if (e && e.which === 3) return
25059 $(backdrop).remove()
25060 $(toggle).each(function () {
25061 var $this = $(this)
25062 var $parent = getParent($this)
25063 var relatedTarget = { relatedTarget: this }
25064
25065 if (!$parent.hasClass('open')) return
25066
25067 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25068
25069 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25070
25071 if (e.isDefaultPrevented()) return
25072
25073 $this.attr('aria-expanded', 'false')
25074 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25075 })
25076 }
25077
25078 Dropdown.prototype.toggle = function (e) {
25079 var $this = $(this)
25080
25081 if ($this.is('.disabled, :disabled')) return
25082
25083 var $parent = getParent($this)
25084 var isActive = $parent.hasClass('open')
25085
25086 clearMenus()
25087
25088 if (!isActive) {
25089 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25090 // if mobile we use a backdrop because click events don't delegate
25091 $(document.createElement('div'))
25092 .addClass('dropdown-backdrop')
25093 .insertAfter($(this))
25094 .on('click', clearMenus)
25095 }
25096
25097 var relatedTarget = { relatedTarget: this }
25098 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25099
25100 if (e.isDefaultPrevented()) return
25101
25102 $this
25103 .trigger('focus')
25104 .attr('aria-expanded', 'true')
25105
25106 $parent
25107 .toggleClass('open')
25108 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25109 }
25110
25111 return false
25112 }
25113
25114 Dropdown.prototype.keydown = function (e) {
25115 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25116
25117 var $this = $(this)
25118
25119 e.preventDefault()
25120 e.stopPropagation()
25121
25122 if ($this.is('.disabled, :disabled')) return
25123
25124 var $parent = getParent($this)
25125 var isActive = $parent.hasClass('open')
25126
25127 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25128 if (e.which == 27) $parent.find(toggle).trigger('focus')
25129 return $this.trigger('click')
25130 }
25131
25132 var desc = ' li:not(.disabled):visible a'
25133 var $items = $parent.find('.dropdown-menu' + desc)
25134
25135 if (!$items.length) return
25136
25137 var index = $items.index(e.target)
25138
25139 if (e.which == 38 && index > 0) index-- // up
25140 if (e.which == 40 && index < $items.length - 1) index++ // down
25141 if (!~index) index = 0
25142
25143 $items.eq(index).trigger('focus')
25144 }
25145
25146
25147 // DROPDOWN PLUGIN DEFINITION
25148 // ==========================
25149
25150 function Plugin(option) {
25151 return this.each(function () {
25152 var $this = $(this)
25153 var data = $this.data('bs.dropdown')
25154
25155 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25156 if (typeof option == 'string') data[option].call($this)
25157 })
25158 }
25159
25160 var old = $.fn.dropdown
25161
25162 $.fn.dropdown = Plugin
25163 $.fn.dropdown.Constructor = Dropdown
25164
25165
25166 // DROPDOWN NO CONFLICT
25167 // ====================
25168
25169 $.fn.dropdown.noConflict = function () {
25170 $.fn.dropdown = old
25171 return this
25172 }
25173
25174
25175 // APPLY TO STANDARD DROPDOWN ELEMENTS
25176 // ===================================
25177
25178 $(document)
25179 .on('click.bs.dropdown.data-api', clearMenus)
25180 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25181 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25182 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25183 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25184
25185 }(jQuery);
25186
25187 /* ========================================================================
25188 * Bootstrap: modal.js v3.3.7
25189 * http://getbootstrap.com/javascript/#modals
25190 * ========================================================================
25191 * Copyright 2011-2016 Twitter, Inc.
25192 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25193 * ======================================================================== */
25194
25195
25196 +function ($) {
25197 'use strict';
25198
25199 // MODAL CLASS DEFINITION
25200 // ======================
25201
25202 var Modal = function (element, options) {
25203 this.options = options
25204 this.$body = $(document.body)
25205 this.$element = $(element)
25206 this.$dialog = this.$element.find('.modal-dialog')
25207 this.$backdrop = null
25208 this.isShown = null
25209 this.originalBodyPad = null
25210 this.scrollbarWidth = 0
25211 this.ignoreBackdropClick = false
25212
25213 if (this.options.remote) {
25214 this.$element
25215 .find('.modal-content')
25216 .load(this.options.remote, $.proxy(function () {
25217 this.$element.trigger('loaded.bs.modal')
25218 }, this))
25219 }
25220 }
25221
25222 Modal.VERSION = '3.3.7'
25223
25224 Modal.TRANSITION_DURATION = 300
25225 Modal.BACKDROP_TRANSITION_DURATION = 150
25226
25227 Modal.DEFAULTS = {
25228 backdrop: true,
25229 keyboard: true,
25230 show: true
25231 }
25232
25233 Modal.prototype.toggle = function (_relatedTarget) {
25234 return this.isShown ? this.hide() : this.show(_relatedTarget)
25235 }
25236
25237 Modal.prototype.show = function (_relatedTarget) {
25238 var that = this
25239 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25240
25241 this.$element.trigger(e)
25242
25243 if (this.isShown || e.isDefaultPrevented()) return
25244
25245 this.isShown = true
25246
25247 this.checkScrollbar()
25248 this.setScrollbar()
25249 this.$body.addClass('modal-open')
25250
25251 this.escape()
25252 this.resize()
25253
25254 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25255
25256 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25257 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25258 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25259 })
25260 })
25261
25262 this.backdrop(function () {
25263 var transition = $.support.transition && that.$element.hasClass('fade')
25264
25265 if (!that.$element.parent().length) {
25266 that.$element.appendTo(that.$body) // don't move modals dom position
25267 }
25268
25269 that.$element
25270 .show()
25271 .scrollTop(0)
25272
25273 that.adjustDialog()
25274
25275 if (transition) {
25276 that.$element[0].offsetWidth // force reflow
25277 }
25278
25279 that.$element.addClass('in')
25280
25281 that.enforceFocus()
25282
25283 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25284
25285 transition ?
25286 that.$dialog // wait for modal to slide in
25287 .one('bsTransitionEnd', function () {
25288 that.$element.trigger('focus').trigger(e)
25289 })
25290 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25291 that.$element.trigger('focus').trigger(e)
25292 })
25293 }
25294
25295 Modal.prototype.hide = function (e) {
25296 if (e) e.preventDefault()
25297
25298 e = $.Event('hide.bs.modal')
25299
25300 this.$element.trigger(e)
25301
25302 if (!this.isShown || e.isDefaultPrevented()) return
25303
25304 this.isShown = false
25305
25306 this.escape()
25307 this.resize()
25308
25309 $(document).off('focusin.bs.modal')
25310
25311 this.$element
25312 .removeClass('in')
25313 .off('click.dismiss.bs.modal')
25314 .off('mouseup.dismiss.bs.modal')
25315
25316 this.$dialog.off('mousedown.dismiss.bs.modal')
25317
25318 $.support.transition && this.$element.hasClass('fade') ?
25319 this.$element
25320 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25321 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25322 this.hideModal()
25323 }
25324
25325 Modal.prototype.enforceFocus = function () {
25326 $(document)
25327 .off('focusin.bs.modal') // guard against infinite focus loop
25328 .on('focusin.bs.modal', $.proxy(function (e) {
25329 if (document !== e.target &&
25330 this.$element[0] !== e.target &&
25331 !this.$element.has(e.target).length) {
25332 this.$element.trigger('focus')
25333 }
25334 }, this))
25335 }
25336
25337 Modal.prototype.escape = function () {
25338 if (this.isShown && this.options.keyboard) {
25339 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25340 e.which == 27 && this.hide()
25341 }, this))
25342 } else if (!this.isShown) {
25343 this.$element.off('keydown.dismiss.bs.modal')
25344 }
25345 }
25346
25347 Modal.prototype.resize = function () {
25348 if (this.isShown) {
25349 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25350 } else {
25351 $(window).off('resize.bs.modal')
25352 }
25353 }
25354
25355 Modal.prototype.hideModal = function () {
25356 var that = this
25357 this.$element.hide()
25358 this.backdrop(function () {
25359 that.$body.removeClass('modal-open')
25360 that.resetAdjustments()
25361 that.resetScrollbar()
25362 that.$element.trigger('hidden.bs.modal')
25363 })
25364 }
25365
25366 Modal.prototype.removeBackdrop = function () {
25367 this.$backdrop && this.$backdrop.remove()
25368 this.$backdrop = null
25369 }
25370
25371 Modal.prototype.backdrop = function (callback) {
25372 var that = this
25373 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25374
25375 if (this.isShown && this.options.backdrop) {
25376 var doAnimate = $.support.transition && animate
25377
25378 this.$backdrop = $(document.createElement('div'))
25379 .addClass('modal-backdrop ' + animate)
25380 .appendTo(this.$body)
25381
25382 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25383 if (this.ignoreBackdropClick) {
25384 this.ignoreBackdropClick = false
25385 return
25386 }
25387 if (e.target !== e.currentTarget) return
25388 this.options.backdrop == 'static'
25389 ? this.$element[0].focus()
25390 : this.hide()
25391 }, this))
25392
25393 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25394
25395 this.$backdrop.addClass('in')
25396
25397 if (!callback) return
25398
25399 doAnimate ?
25400 this.$backdrop
25401 .one('bsTransitionEnd', callback)
25402 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25403 callback()
25404
25405 } else if (!this.isShown && this.$backdrop) {
25406 this.$backdrop.removeClass('in')
25407
25408 var callbackRemove = function () {
25409 that.removeBackdrop()
25410 callback && callback()
25411 }
25412 $.support.transition && this.$element.hasClass('fade') ?
25413 this.$backdrop
25414 .one('bsTransitionEnd', callbackRemove)
25415 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25416 callbackRemove()
25417
25418 } else if (callback) {
25419 callback()
25420 }
25421 }
25422
25423 // these following methods are used to handle overflowing modals
25424
25425 Modal.prototype.handleUpdate = function () {
25426 this.adjustDialog()
25427 }
25428
25429 Modal.prototype.adjustDialog = function () {
25430 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25431
25432 this.$element.css({
25433 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25434 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25435 })
25436 }
25437
25438 Modal.prototype.resetAdjustments = function () {
25439 this.$element.css({
25440 paddingLeft: '',
25441 paddingRight: ''
25442 })
25443 }
25444
25445 Modal.prototype.checkScrollbar = function () {
25446 var fullWindowWidth = window.innerWidth
25447 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25448 var documentElementRect = document.documentElement.getBoundingClientRect()
25449 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25450 }
25451 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25452 this.scrollbarWidth = this.measureScrollbar()
25453 }
25454
25455 Modal.prototype.setScrollbar = function () {
25456 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25457 this.originalBodyPad = document.body.style.paddingRight || ''
25458 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25459 }
25460
25461 Modal.prototype.resetScrollbar = function () {
25462 this.$body.css('padding-right', this.originalBodyPad)
25463 }
25464
25465 Modal.prototype.measureScrollbar = function () { // thx walsh
25466 var scrollDiv = document.createElement('div')
25467 scrollDiv.className = 'modal-scrollbar-measure'
25468 this.$body.append(scrollDiv)
25469 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25470 this.$body[0].removeChild(scrollDiv)
25471 return scrollbarWidth
25472 }
25473
25474
25475 // MODAL PLUGIN DEFINITION
25476 // =======================
25477
25478 function Plugin(option, _relatedTarget) {
25479 return this.each(function () {
25480 var $this = $(this)
25481 var data = $this.data('bs.modal')
25482 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25483
25484 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25485 if (typeof option == 'string') data[option](_relatedTarget)
25486 else if (options.show) data.show(_relatedTarget)
25487 })
25488 }
25489
25490 var old = $.fn.modal
25491
25492 $.fn.modal = Plugin
25493 $.fn.modal.Constructor = Modal
25494
25495
25496 // MODAL NO CONFLICT
25497 // =================
25498
25499 $.fn.modal.noConflict = function () {
25500 $.fn.modal = old
25501 return this
25502 }
25503
25504
25505 // MODAL DATA-API
25506 // ==============
25507
25508 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25509 var $this = $(this)
25510 var href = $this.attr('href')
25511 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25512 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25513
25514 if ($this.is('a')) e.preventDefault()
25515
25516 $target.one('show.bs.modal', function (showEvent) {
25517 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25518 $target.one('hidden.bs.modal', function () {
25519 $this.is(':visible') && $this.trigger('focus')
25520 })
25521 })
25522 Plugin.call($target, option, this)
25523 })
25524
25525 }(jQuery);
25526
25527 /* ========================================================================
25528 * Bootstrap: tooltip.js v3.3.7
25529 * http://getbootstrap.com/javascript/#tooltip
25530 * Inspired by the original jQuery.tipsy by Jason Frame
25531 * ========================================================================
25532 * Copyright 2011-2016 Twitter, Inc.
25533 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25534 * ======================================================================== */
25535
25536
25537 +function ($) {
25538 'use strict';
25539
25540 // TOOLTIP PUBLIC CLASS DEFINITION
25541 // ===============================
25542
25543 var Tooltip = function (element, options) {
25544 this.type = null
25545 this.options = null
25546 this.enabled = null
25547 this.timeout = null
25548 this.hoverState = null
25549 this.$element = null
25550 this.inState = null
25551
25552 this.init('tooltip', element, options)
25553 }
25554
25555 Tooltip.VERSION = '3.3.7'
25556
25557 Tooltip.TRANSITION_DURATION = 150
25558
25559 Tooltip.DEFAULTS = {
25560 animation: true,
25561 placement: 'top',
25562 selector: false,
25563 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25564 trigger: 'hover focus',
25565 title: '',
25566 delay: 0,
25567 html: false,
25568 container: false,
25569 viewport: {
25570 selector: 'body',
25571 padding: 0
25572 }
25573 }
25574
25575 Tooltip.prototype.init = function (type, element, options) {
25576 this.enabled = true
25577 this.type = type
25578 this.$element = $(element)
25579 this.options = this.getOptions(options)
25580 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25581 this.inState = { click: false, hover: false, focus: false }
25582
25583 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25584 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25585 }
25586
25587 var triggers = this.options.trigger.split(' ')
25588
25589 for (var i = triggers.length; i--;) {
25590 var trigger = triggers[i]
25591
25592 if (trigger == 'click') {
25593 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25594 } else if (trigger != 'manual') {
25595 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25596 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25597
25598 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25599 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25600 }
25601 }
25602
25603 this.options.selector ?
25604 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25605 this.fixTitle()
25606 }
25607
25608 Tooltip.prototype.getDefaults = function () {
25609 return Tooltip.DEFAULTS
25610 }
25611
25612 Tooltip.prototype.getOptions = function (options) {
25613 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25614
25615 if (options.delay && typeof options.delay == 'number') {
25616 options.delay = {
25617 show: options.delay,
25618 hide: options.delay
25619 }
25620 }
25621
25622 return options
25623 }
25624
25625 Tooltip.prototype.getDelegateOptions = function () {
25626 var options = {}
25627 var defaults = this.getDefaults()
25628
25629 this._options && $.each(this._options, function (key, value) {
25630 if (defaults[key] != value) options[key] = value
25631 })
25632
25633 return options
25634 }
25635
25636 Tooltip.prototype.enter = function (obj) {
25637 var self = obj instanceof this.constructor ?
25638 obj : $(obj.currentTarget).data('bs.' + this.type)
25639
25640 if (!self) {
25641 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25642 $(obj.currentTarget).data('bs.' + this.type, self)
25643 }
25644
25645 if (obj instanceof $.Event) {
25646 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25647 }
25648
25649 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25650 self.hoverState = 'in'
25651 return
25652 }
25653
25654 clearTimeout(self.timeout)
25655
25656 self.hoverState = 'in'
25657
25658 if (!self.options.delay || !self.options.delay.show) return self.show()
25659
25660 self.timeout = setTimeout(function () {
25661 if (self.hoverState == 'in') self.show()
25662 }, self.options.delay.show)
25663 }
25664
25665 Tooltip.prototype.isInStateTrue = function () {
25666 for (var key in this.inState) {
25667 if (this.inState[key]) return true
25668 }
25669
25670 return false
25671 }
25672
25673 Tooltip.prototype.leave = function (obj) {
25674 var self = obj instanceof this.constructor ?
25675 obj : $(obj.currentTarget).data('bs.' + this.type)
25676
25677 if (!self) {
25678 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25679 $(obj.currentTarget).data('bs.' + this.type, self)
25680 }
25681
25682 if (obj instanceof $.Event) {
25683 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25684 }
25685
25686 if (self.isInStateTrue()) return
25687
25688 clearTimeout(self.timeout)
25689
25690 self.hoverState = 'out'
25691
25692 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25693
25694 self.timeout = setTimeout(function () {
25695 if (self.hoverState == 'out') self.hide()
25696 }, self.options.delay.hide)
25697 }
25698
25699 Tooltip.prototype.show = function () {
25700 var e = $.Event('show.bs.' + this.type)
25701
25702 if (this.hasContent() && this.enabled) {
25703 this.$element.trigger(e)
25704
25705 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25706 if (e.isDefaultPrevented() || !inDom) return
25707 var that = this
25708
25709 var $tip = this.tip()
25710
25711 var tipId = this.getUID(this.type)
25712
25713 this.setContent()
25714 $tip.attr('id', tipId)
25715 this.$element.attr('aria-describedby', tipId)
25716
25717 if (this.options.animation) $tip.addClass('fade')
25718
25719 var placement = typeof this.options.placement == 'function' ?
25720 this.options.placement.call(this, $tip[0], this.$element[0]) :
25721 this.options.placement
25722
25723 var autoToken = /\s?auto?\s?/i
25724 var autoPlace = autoToken.test(placement)
25725 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25726
25727 $tip
25728 .detach()
25729 .css({ top: 0, left: 0, display: 'block' })
25730 .addClass(placement)
25731 .data('bs.' + this.type, this)
25732
25733 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25734 this.$element.trigger('inserted.bs.' + this.type)
25735
25736 var pos = this.getPosition()
25737 var actualWidth = $tip[0].offsetWidth
25738 var actualHeight = $tip[0].offsetHeight
25739
25740 if (autoPlace) {
25741 var orgPlacement = placement
25742 var viewportDim = this.getPosition(this.$viewport)
25743
25744 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25745 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25746 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25747 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25748 placement
25749
25750 $tip
25751 .removeClass(orgPlacement)
25752 .addClass(placement)
25753 }
25754
25755 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25756
25757 this.applyPlacement(calculatedOffset, placement)
25758
25759 var complete = function () {
25760 var prevHoverState = that.hoverState
25761 that.$element.trigger('shown.bs.' + that.type)
25762 that.hoverState = null
25763
25764 if (prevHoverState == 'out') that.leave(that)
25765 }
25766
25767 $.support.transition && this.$tip.hasClass('fade') ?
25768 $tip
25769 .one('bsTransitionEnd', complete)
25770 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25771 complete()
25772 }
25773 }
25774
25775 Tooltip.prototype.applyPlacement = function (offset, placement) {
25776 var $tip = this.tip()
25777 var width = $tip[0].offsetWidth
25778 var height = $tip[0].offsetHeight
25779
25780 // manually read margins because getBoundingClientRect includes difference
25781 var marginTop = parseInt($tip.css('margin-top'), 10)
25782 var marginLeft = parseInt($tip.css('margin-left'), 10)
25783
25784 // we must check for NaN for ie 8/9
25785 if (isNaN(marginTop)) marginTop = 0
25786 if (isNaN(marginLeft)) marginLeft = 0
25787
25788 offset.top += marginTop
25789 offset.left += marginLeft
25790
25791 // $.fn.offset doesn't round pixel values
25792 // so we use setOffset directly with our own function B-0
25793 $.offset.setOffset($tip[0], $.extend({
25794 using: function (props) {
25795 $tip.css({
25796 top: Math.round(props.top),
25797 left: Math.round(props.left)
25798 })
25799 }
25800 }, offset), 0)
25801
25802 $tip.addClass('in')
25803
25804 // check to see if placing tip in new offset caused the tip to resize itself
25805 var actualWidth = $tip[0].offsetWidth
25806 var actualHeight = $tip[0].offsetHeight
25807
25808 if (placement == 'top' && actualHeight != height) {
25809 offset.top = offset.top + height - actualHeight
25810 }
25811
25812 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25813
25814 if (delta.left) offset.left += delta.left
25815 else offset.top += delta.top
25816
25817 var isVertical = /top|bottom/.test(placement)
25818 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25819 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25820
25821 $tip.offset(offset)
25822 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25823 }
25824
25825 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25826 this.arrow()
25827 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25828 .css(isVertical ? 'top' : 'left', '')
25829 }
25830
25831 Tooltip.prototype.setContent = function () {
25832 var $tip = this.tip()
25833 var title = this.getTitle()
25834
25835 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25836 $tip.removeClass('fade in top bottom left right')
25837 }
25838
25839 Tooltip.prototype.hide = function (callback) {
25840 var that = this
25841 var $tip = $(this.$tip)
25842 var e = $.Event('hide.bs.' + this.type)
25843
25844 function complete() {
25845 if (that.hoverState != 'in') $tip.detach()
25846 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25847 that.$element
25848 .removeAttr('aria-describedby')
25849 .trigger('hidden.bs.' + that.type)
25850 }
25851 callback && callback()
25852 }
25853
25854 this.$element.trigger(e)
25855
25856 if (e.isDefaultPrevented()) return
25857
25858 $tip.removeClass('in')
25859
25860 $.support.transition && $tip.hasClass('fade') ?
25861 $tip
25862 .one('bsTransitionEnd', complete)
25863 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25864 complete()
25865
25866 this.hoverState = null
25867
25868 return this
25869 }
25870
25871 Tooltip.prototype.fixTitle = function () {
25872 var $e = this.$element
25873 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25874 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25875 }
25876 }
25877
25878 Tooltip.prototype.hasContent = function () {
25879 return this.getTitle()
25880 }
25881
25882 Tooltip.prototype.getPosition = function ($element) {
25883 $element = $element || this.$element
25884
25885 var el = $element[0]
25886 var isBody = el.tagName == 'BODY'
25887
25888 var elRect = el.getBoundingClientRect()
25889 if (elRect.width == null) {
25890 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25891 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25892 }
25893 var isSvg = window.SVGElement && el instanceof window.SVGElement
25894 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25895 // See https://github.com/twbs/bootstrap/issues/20280
25896 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25897 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25898 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25899
25900 return $.extend({}, elRect, scroll, outerDims, elOffset)
25901 }
25902
25903 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25904 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25905 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25906 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25907 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25908
25909 }
25910
25911 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25912 var delta = { top: 0, left: 0 }
25913 if (!this.$viewport) return delta
25914
25915 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25916 var viewportDimensions = this.getPosition(this.$viewport)
25917
25918 if (/right|left/.test(placement)) {
25919 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25920 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25921 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25922 delta.top = viewportDimensions.top - topEdgeOffset
25923 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25924 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25925 }
25926 } else {
25927 var leftEdgeOffset = pos.left - viewportPadding
25928 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25929 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25930 delta.left = viewportDimensions.left - leftEdgeOffset
25931 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25932 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25933 }
25934 }
25935
25936 return delta
25937 }
25938
25939 Tooltip.prototype.getTitle = function () {
25940 var title
25941 var $e = this.$element
25942 var o = this.options
25943
25944 title = $e.attr('data-original-title')
25945 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25946
25947 return title
25948 }
25949
25950 Tooltip.prototype.getUID = function (prefix) {
25951 do prefix += ~~(Math.random() * 1000000)
25952 while (document.getElementById(prefix))
25953 return prefix
25954 }
25955
25956 Tooltip.prototype.tip = function () {
25957 if (!this.$tip) {
25958 this.$tip = $(this.options.template)
25959 if (this.$tip.length != 1) {
25960 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25961 }
25962 }
25963 return this.$tip
25964 }
25965
25966 Tooltip.prototype.arrow = function () {
25967 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25968 }
25969
25970 Tooltip.prototype.enable = function () {
25971 this.enabled = true
25972 }
25973
25974 Tooltip.prototype.disable = function () {
25975 this.enabled = false
25976 }
25977
25978 Tooltip.prototype.toggleEnabled = function () {
25979 this.enabled = !this.enabled
25980 }
25981
25982 Tooltip.prototype.toggle = function (e) {
25983 var self = this
25984 if (e) {
25985 self = $(e.currentTarget).data('bs.' + this.type)
25986 if (!self) {
25987 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25988 $(e.currentTarget).data('bs.' + this.type, self)
25989 }
25990 }
25991
25992 if (e) {
25993 self.inState.click = !self.inState.click
25994 if (self.isInStateTrue()) self.enter(self)
25995 else self.leave(self)
25996 } else {
25997 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25998 }
25999 }
26000
26001 Tooltip.prototype.destroy = function () {
26002 var that = this
26003 clearTimeout(this.timeout)
26004 this.hide(function () {
26005 that.$element.off('.' + that.type).removeData('bs.' + that.type)
26006 if (that.$tip) {
26007 that.$tip.detach()
26008 }
26009 that.$tip = null
26010 that.$arrow = null
26011 that.$viewport = null
26012 that.$element = null
26013 })
26014 }
26015
26016
26017 // TOOLTIP PLUGIN DEFINITION
26018 // =========================
26019
26020 function Plugin(option) {
26021 return this.each(function () {
26022 var $this = $(this)
26023 var data = $this.data('bs.tooltip')
26024 var options = typeof option == 'object' && option
26025
26026 if (!data && /destroy|hide/.test(option)) return
26027 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
26028 if (typeof option == 'string') data[option]()
26029 })
26030 }
26031
26032 var old = $.fn.tooltip
26033
26034 $.fn.tooltip = Plugin
26035 $.fn.tooltip.Constructor = Tooltip
26036
26037
26038 // TOOLTIP NO CONFLICT
26039 // ===================
26040
26041 $.fn.tooltip.noConflict = function () {
26042 $.fn.tooltip = old
26043 return this
26044 }
26045
26046 }(jQuery);
26047
26048 /* ========================================================================
26049 * Bootstrap: popover.js v3.3.7
26050 * http://getbootstrap.com/javascript/#popovers
26051 * ========================================================================
26052 * Copyright 2011-2016 Twitter, Inc.
26053 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26054 * ======================================================================== */
26055
26056
26057 +function ($) {
26058 'use strict';
26059
26060 // POPOVER PUBLIC CLASS DEFINITION
26061 // ===============================
26062
26063 var Popover = function (element, options) {
26064 this.init('popover', element, options)
26065 }
26066
26067 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26068
26069 Popover.VERSION = '3.3.7'
26070
26071 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26072 placement: 'right',
26073 trigger: 'click',
26074 content: '',
26075 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26076 })
26077
26078
26079 // NOTE: POPOVER EXTENDS tooltip.js
26080 // ================================
26081
26082 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26083
26084 Popover.prototype.constructor = Popover
26085
26086 Popover.prototype.getDefaults = function () {
26087 return Popover.DEFAULTS
26088 }
26089
26090 Popover.prototype.setContent = function () {
26091 var $tip = this.tip()
26092 var title = this.getTitle()
26093 var content = this.getContent()
26094
26095 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26096 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26097 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26098 ](content)
26099
26100 $tip.removeClass('fade top bottom left right in')
26101
26102 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26103 // this manually by checking the contents.
26104 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26105 }
26106
26107 Popover.prototype.hasContent = function () {
26108 return this.getTitle() || this.getContent()
26109 }
26110
26111 Popover.prototype.getContent = function () {
26112 var $e = this.$element
26113 var o = this.options
26114
26115 return $e.attr('data-content')
26116 || (typeof o.content == 'function' ?
26117 o.content.call($e[0]) :
26118 o.content)
26119 }
26120
26121 Popover.prototype.arrow = function () {
26122 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26123 }
26124
26125
26126 // POPOVER PLUGIN DEFINITION
26127 // =========================
26128
26129 function Plugin(option) {
26130 return this.each(function () {
26131 var $this = $(this)
26132 var data = $this.data('bs.popover')
26133 var options = typeof option == 'object' && option
26134
26135 if (!data && /destroy|hide/.test(option)) return
26136 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26137 if (typeof option == 'string') data[option]()
26138 })
26139 }
26140
26141 var old = $.fn.popover
26142
26143 $.fn.popover = Plugin
26144 $.fn.popover.Constructor = Popover
26145
26146
26147 // POPOVER NO CONFLICT
26148 // ===================
26149
26150 $.fn.popover.noConflict = function () {
26151 $.fn.popover = old
26152 return this
26153 }
26154
26155 }(jQuery);
26156
26157 /* ========================================================================
26158 * Bootstrap: scrollspy.js v3.3.7
26159 * http://getbootstrap.com/javascript/#scrollspy
26160 * ========================================================================
26161 * Copyright 2011-2016 Twitter, Inc.
26162 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26163 * ======================================================================== */
26164
26165
26166 +function ($) {
26167 'use strict';
26168
26169 // SCROLLSPY CLASS DEFINITION
26170 // ==========================
26171
26172 function ScrollSpy(element, options) {
26173 this.$body = $(document.body)
26174 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26175 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26176 this.selector = (this.options.target || '') + ' .nav li > a'
26177 this.offsets = []
26178 this.targets = []
26179 this.activeTarget = null
26180 this.scrollHeight = 0
26181
26182 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26183 this.refresh()
26184 this.process()
26185 }
26186
26187 ScrollSpy.VERSION = '3.3.7'
26188
26189 ScrollSpy.DEFAULTS = {
26190 offset: 10
26191 }
26192
26193 ScrollSpy.prototype.getScrollHeight = function () {
26194 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26195 }
26196
26197 ScrollSpy.prototype.refresh = function () {
26198 var that = this
26199 var offsetMethod = 'offset'
26200 var offsetBase = 0
26201
26202 this.offsets = []
26203 this.targets = []
26204 this.scrollHeight = this.getScrollHeight()
26205
26206 if (!$.isWindow(this.$scrollElement[0])) {
26207 offsetMethod = 'position'
26208 offsetBase = this.$scrollElement.scrollTop()
26209 }
26210
26211 this.$body
26212 .find(this.selector)
26213 .map(function () {
26214 var $el = $(this)
26215 var href = $el.data('target') || $el.attr('href')
26216 var $href = /^#./.test(href) && $(href)
26217
26218 return ($href
26219 && $href.length
26220 && $href.is(':visible')
26221 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26222 })
26223 .sort(function (a, b) { return a[0] - b[0] })
26224 .each(function () {
26225 that.offsets.push(this[0])
26226 that.targets.push(this[1])
26227 })
26228 }
26229
26230 ScrollSpy.prototype.process = function () {
26231 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26232 var scrollHeight = this.getScrollHeight()
26233 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26234 var offsets = this.offsets
26235 var targets = this.targets
26236 var activeTarget = this.activeTarget
26237 var i
26238
26239 if (this.scrollHeight != scrollHeight) {
26240 this.refresh()
26241 }
26242
26243 if (scrollTop >= maxScroll) {
26244 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26245 }
26246
26247 if (activeTarget && scrollTop < offsets[0]) {
26248 this.activeTarget = null
26249 return this.clear()
26250 }
26251
26252 for (i = offsets.length; i--;) {
26253 activeTarget != targets[i]
26254 && scrollTop >= offsets[i]
26255 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26256 && this.activate(targets[i])
26257 }
26258 }
26259
26260 ScrollSpy.prototype.activate = function (target) {
26261 this.activeTarget = target
26262
26263 this.clear()
26264
26265 var selector = this.selector +
26266 '[data-target="' + target + '"],' +
26267 this.selector + '[href="' + target + '"]'
26268
26269 var active = $(selector)
26270 .parents('li')
26271 .addClass('active')
26272
26273 if (active.parent('.dropdown-menu').length) {
26274 active = active
26275 .closest('li.dropdown')
26276 .addClass('active')
26277 }
26278
26279 active.trigger('activate.bs.scrollspy')
26280 }
26281
26282 ScrollSpy.prototype.clear = function () {
26283 $(this.selector)
26284 .parentsUntil(this.options.target, '.active')
26285 .removeClass('active')
26286 }
26287
26288
26289 // SCROLLSPY PLUGIN DEFINITION
26290 // ===========================
26291
26292 function Plugin(option) {
26293 return this.each(function () {
26294 var $this = $(this)
26295 var data = $this.data('bs.scrollspy')
26296 var options = typeof option == 'object' && option
26297
26298 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26299 if (typeof option == 'string') data[option]()
26300 })
26301 }
26302
26303 var old = $.fn.scrollspy
26304
26305 $.fn.scrollspy = Plugin
26306 $.fn.scrollspy.Constructor = ScrollSpy
26307
26308
26309 // SCROLLSPY NO CONFLICT
26310 // =====================
26311
26312 $.fn.scrollspy.noConflict = function () {
26313 $.fn.scrollspy = old
26314 return this
26315 }
26316
26317
26318 // SCROLLSPY DATA-API
26319 // ==================
26320
26321 $(window).on('load.bs.scrollspy.data-api', function () {
26322 $('[data-spy="scroll"]').each(function () {
26323 var $spy = $(this)
26324 Plugin.call($spy, $spy.data())
26325 })
26326 })
26327
26328 }(jQuery);
26329
26330 /* ========================================================================
26331 * Bootstrap: tab.js v3.3.7
26332 * http://getbootstrap.com/javascript/#tabs
26333 * ========================================================================
26334 * Copyright 2011-2016 Twitter, Inc.
26335 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26336 * ======================================================================== */
26337
26338
26339 +function ($) {
26340 'use strict';
26341
26342 // TAB CLASS DEFINITION
26343 // ====================
26344
26345 var Tab = function (element) {
26346 // jscs:disable requireDollarBeforejQueryAssignment
26347 this.element = $(element)
26348 // jscs:enable requireDollarBeforejQueryAssignment
26349 }
26350
26351 Tab.VERSION = '3.3.7'
26352
26353 Tab.TRANSITION_DURATION = 150
26354
26355 Tab.prototype.show = function () {
26356 var $this = this.element
26357 var $ul = $this.closest('ul:not(.dropdown-menu)')
26358 var selector = $this.data('target')
26359
26360 if (!selector) {
26361 selector = $this.attr('href')
26362 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26363 }
26364
26365 if ($this.parent('li').hasClass('active')) return
26366
26367 var $previous = $ul.find('.active:last a')
26368 var hideEvent = $.Event('hide.bs.tab', {
26369 relatedTarget: $this[0]
26370 })
26371 var showEvent = $.Event('show.bs.tab', {
26372 relatedTarget: $previous[0]
26373 })
26374
26375 $previous.trigger(hideEvent)
26376 $this.trigger(showEvent)
26377
26378 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26379
26380 var $target = $(selector)
26381
26382 this.activate($this.closest('li'), $ul)
26383 this.activate($target, $target.parent(), function () {
26384 $previous.trigger({
26385 type: 'hidden.bs.tab',
26386 relatedTarget: $this[0]
26387 })
26388 $this.trigger({
26389 type: 'shown.bs.tab',
26390 relatedTarget: $previous[0]
26391 })
26392 })
26393 }
26394
26395 Tab.prototype.activate = function (element, container, callback) {
26396 var $active = container.find('> .active')
26397 var transition = callback
26398 && $.support.transition
26399 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26400
26401 function next() {
26402 $active
26403 .removeClass('active')
26404 .find('> .dropdown-menu > .active')
26405 .removeClass('active')
26406 .end()
26407 .find('[data-toggle="tab"]')
26408 .attr('aria-expanded', false)
26409
26410 element
26411 .addClass('active')
26412 .find('[data-toggle="tab"]')
26413 .attr('aria-expanded', true)
26414
26415 if (transition) {
26416 element[0].offsetWidth // reflow for transition
26417 element.addClass('in')
26418 } else {
26419 element.removeClass('fade')
26420 }
26421
26422 if (element.parent('.dropdown-menu').length) {
26423 element
26424 .closest('li.dropdown')
26425 .addClass('active')
26426 .end()
26427 .find('[data-toggle="tab"]')
26428 .attr('aria-expanded', true)
26429 }
26430
26431 callback && callback()
26432 }
26433
26434 $active.length && transition ?
26435 $active
26436 .one('bsTransitionEnd', next)
26437 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26438 next()
26439
26440 $active.removeClass('in')
26441 }
26442
26443
26444 // TAB PLUGIN DEFINITION
26445 // =====================
26446
26447 function Plugin(option) {
26448 return this.each(function () {
26449 var $this = $(this)
26450 var data = $this.data('bs.tab')
26451
26452 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26453 if (typeof option == 'string') data[option]()
26454 })
26455 }
26456
26457 var old = $.fn.tab
26458
26459 $.fn.tab = Plugin
26460 $.fn.tab.Constructor = Tab
26461
26462
26463 // TAB NO CONFLICT
26464 // ===============
26465
26466 $.fn.tab.noConflict = function () {
26467 $.fn.tab = old
26468 return this
26469 }
26470
26471
26472 // TAB DATA-API
26473 // ============
26474
26475 var clickHandler = function (e) {
26476 e.preventDefault()
26477 Plugin.call($(this), 'show')
26478 }
26479
26480 $(document)
26481 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26482 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26483
26484 }(jQuery);
26485
26486 /* ========================================================================
26487 * Bootstrap: affix.js v3.3.7
26488 * http://getbootstrap.com/javascript/#affix
26489 * ========================================================================
26490 * Copyright 2011-2016 Twitter, Inc.
26491 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26492 * ======================================================================== */
26493
26494
26495 +function ($) {
26496 'use strict';
26497
26498 // AFFIX CLASS DEFINITION
26499 // ======================
26500
26501 var Affix = function (element, options) {
26502 this.options = $.extend({}, Affix.DEFAULTS, options)
26503
26504 this.$target = $(this.options.target)
26505 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26506 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26507
26508 this.$element = $(element)
26509 this.affixed = null
26510 this.unpin = null
26511 this.pinnedOffset = null
26512
26513 this.checkPosition()
26514 }
26515
26516 Affix.VERSION = '3.3.7'
26517
26518 Affix.RESET = 'affix affix-top affix-bottom'
26519
26520 Affix.DEFAULTS = {
26521 offset: 0,
26522 target: window
26523 }
26524
26525 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26526 var scrollTop = this.$target.scrollTop()
26527 var position = this.$element.offset()
26528 var targetHeight = this.$target.height()
26529
26530 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26531
26532 if (this.affixed == 'bottom') {
26533 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26534 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26535 }
26536
26537 var initializing = this.affixed == null
26538 var colliderTop = initializing ? scrollTop : position.top
26539 var colliderHeight = initializing ? targetHeight : height
26540
26541 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26542 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26543
26544 return false
26545 }
26546
26547 Affix.prototype.getPinnedOffset = function () {
26548 if (this.pinnedOffset) return this.pinnedOffset
26549 this.$element.removeClass(Affix.RESET).addClass('affix')
26550 var scrollTop = this.$target.scrollTop()
26551 var position = this.$element.offset()
26552 return (this.pinnedOffset = position.top - scrollTop)
26553 }
26554
26555 Affix.prototype.checkPositionWithEventLoop = function () {
26556 setTimeout($.proxy(this.checkPosition, this), 1)
26557 }
26558
26559 Affix.prototype.checkPosition = function () {
26560 if (!this.$element.is(':visible')) return
26561
26562 var height = this.$element.height()
26563 var offset = this.options.offset
26564 var offsetTop = offset.top
26565 var offsetBottom = offset.bottom
26566 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26567
26568 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26569 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26570 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26571
26572 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26573
26574 if (this.affixed != affix) {
26575 if (this.unpin != null) this.$element.css('top', '')
26576
26577 var affixType = 'affix' + (affix ? '-' + affix : '')
26578 var e = $.Event(affixType + '.bs.affix')
26579
26580 this.$element.trigger(e)
26581
26582 if (e.isDefaultPrevented()) return
26583
26584 this.affixed = affix
26585 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26586
26587 this.$element
26588 .removeClass(Affix.RESET)
26589 .addClass(affixType)
26590 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26591 }
26592
26593 if (affix == 'bottom') {
26594 this.$element.offset({
26595 top: scrollHeight - height - offsetBottom
26596 })
26597 }
26598 }
26599
26600
26601 // AFFIX PLUGIN DEFINITION
26602 // =======================
26603
26604 function Plugin(option) {
26605 return this.each(function () {
26606 var $this = $(this)
26607 var data = $this.data('bs.affix')
26608 var options = typeof option == 'object' && option
26609
26610 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26611 if (typeof option == 'string') data[option]()
26612 })
26613 }
26614
26615 var old = $.fn.affix
26616
26617 $.fn.affix = Plugin
26618 $.fn.affix.Constructor = Affix
26619
26620
26621 // AFFIX NO CONFLICT
26622 // =================
26623
26624 $.fn.affix.noConflict = function () {
26625 $.fn.affix = old
26626 return this
26627 }
26628
26629
26630 // AFFIX DATA-API
26631 // ==============
26632
26633 $(window).on('load', function () {
26634 $('[data-spy="affix"]').each(function () {
26635 var $spy = $(this)
26636 var data = $spy.data()
26637
26638 data.offset = data.offset || {}
26639
26640 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26641 if (data.offsetTop != null) data.offset.top = data.offsetTop
26642
26643 Plugin.call($spy, data)
26644 })
26645 })
26646
26647 }(jQuery);
26648 </script>
26649 <script>(function() {
26650 'use strict';
26651
26652 /**
26653 * Extend an Object with another Object's properties.
26654 *
26655 * The source objects are specified as additional arguments.
26656 *
26657 * @param dst Object the object to extend.
26658 *
26659 * @return Object the final object.
26660 */
26661 var _extend = function(dst) {
26662 var sources = Array.prototype.slice.call(arguments, 1);
26663 for (var i=0; i<sources.length; ++i) {
26664 var src = sources[i];
26665 for (var p in src) {
26666 if (src.hasOwnProperty(p)) dst[p] = src[p];
26667 }
26668 }
26669 return dst;
26670 };
26671
26672
26673 /**
26674 * Defer execution of given function.
26675 * @param {Function} func
26676 */
26677 var _defer = function(func) {
26678 if (typeof setImmediate === 'function') {
26679 return setImmediate(func);
26680 } else {
26681 return setTimeout(func, 0);
26682 }
26683 };
26684
26685 /**
26686 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26687 */
26688 var Levenshtein = {
26689 /**
26690 * Calculate levenshtein distance of the two strings.
26691 *
26692 * @param str1 String the first string.
26693 * @param str2 String the second string.
26694 * @return Integer the levenshtein distance (0 and above).
26695 */
26696 get: function(str1, str2) {
26697 // base cases
26698 if (str1 === str2) return 0;
26699 if (str1.length === 0) return str2.length;
26700 if (str2.length === 0) return str1.length;
26701
26702 // two rows
26703 var prevRow = new Array(str2.length + 1),
26704 curCol, nextCol, i, j, tmp;
26705
26706 // initialise previous row
26707 for (i=0; i<prevRow.length; ++i) {
26708 prevRow[i] = i;
26709 }
26710
26711 // calculate current row distance from previous row
26712 for (i=0; i<str1.length; ++i) {
26713 nextCol = i + 1;
26714
26715 for (j=0; j<str2.length; ++j) {
26716 curCol = nextCol;
26717
26718 // substution
26719 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26720 // insertion
26721 tmp = curCol + 1;
26722 if (nextCol > tmp) {
26723 nextCol = tmp;
26724 }
26725 // deletion
26726 tmp = prevRow[j + 1] + 1;
26727 if (nextCol > tmp) {
26728 nextCol = tmp;
26729 }
26730
26731 // copy current col value into previous (in preparation for next iteration)
26732 prevRow[j] = curCol;
26733 }
26734
26735 // copy last col value into previous (in preparation for next iteration)
26736 prevRow[j] = nextCol;
26737 }
26738
26739 return nextCol;
26740 },
26741
26742 /**
26743 * Asynchronously calculate levenshtein distance of the two strings.
26744 *
26745 * @param str1 String the first string.
26746 * @param str2 String the second string.
26747 * @param cb Function callback function with signature: function(Error err, int distance)
26748 * @param [options] Object additional options.
26749 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26750 */
26751 getAsync: function(str1, str2, cb, options) {
26752 options = _extend({}, {
26753 progress: null
26754 }, options);
26755
26756 // base cases
26757 if (str1 === str2) return cb(null, 0);
26758 if (str1.length === 0) return cb(null, str2.length);
26759 if (str2.length === 0) return cb(null, str1.length);
26760
26761 // two rows
26762 var prevRow = new Array(str2.length + 1),
26763 curCol, nextCol,
26764 i, j, tmp,
26765 startTime, currentTime;
26766
26767 // initialise previous row
26768 for (i=0; i<prevRow.length; ++i) {
26769 prevRow[i] = i;
26770 }
26771
26772 nextCol = 1;
26773 i = 0;
26774 j = -1;
26775
26776 var __calculate = function() {
26777 // reset timer
26778 startTime = new Date().valueOf();
26779 currentTime = startTime;
26780
26781 // keep going until one second has elapsed
26782 while (currentTime - startTime < 1000) {
26783 // reached end of current row?
26784 if (str2.length <= (++j)) {
26785 // copy current into previous (in preparation for next iteration)
26786 prevRow[j] = nextCol;
26787
26788 // if already done all chars
26789 if (str1.length <= (++i)) {
26790 return cb(null, nextCol);
26791 }
26792 // else if we have more left to do
26793 else {
26794 nextCol = i + 1;
26795 j = 0;
26796 }
26797 }
26798
26799 // calculation
26800 curCol = nextCol;
26801
26802 // substution
26803 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26804 // insertion
26805 tmp = curCol + 1;
26806 if (nextCol > tmp) {
26807 nextCol = tmp;
26808 }
26809 // deletion
26810 tmp = prevRow[j + 1] + 1;
26811 if (nextCol > tmp) {
26812 nextCol = tmp;
26813 }
26814
26815 // copy current into previous (in preparation for next iteration)
26816 prevRow[j] = curCol;
26817
26818 // get current time
26819 currentTime = new Date().valueOf();
26820 }
26821
26822 // send a progress update?
26823 if (null !== options.progress) {
26824 try {
26825 options.progress.call(null, (i * 100.0/ str1.length));
26826 } catch (err) {
26827 return cb('Progress callback: ' + err.toString());
26828 }
26829 }
26830
26831 // next iteration
26832 _defer(__calculate);
26833 };
26834
26835 __calculate();
26836 }
26837
26838 };
26839
26840 // amd
26841 if (typeof define !== "undefined" && define !== null && define.amd) {
26842 define(function() {
26843 return Levenshtein;
26844 });
26845 }
26846 // commonjs
26847 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26848 module.exports = Levenshtein;
26849 }
26850 // web worker
26851 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26852 self.Levenshtein = Levenshtein;
26853 }
26854 // browser main thread
26855 else if (typeof window !== "undefined" && window !== null) {
26856 window.Levenshtein = Levenshtein;
26857 }
26858 }());
26859
26860 </script>
26861 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26862 !function(r,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.kjua=t():r.kjua=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){"use strict";var n=e(1),o=n.createCanvas,i=n.canvasToImg,a=n.dpr,u=e(2),f=e(3),c=e(4);r.exports=function(r){var t=Object.assign({},u,r),e=f(t.text,t.ecLevel,t.minVersion,t.quiet),n=t.ratio||a,l=o(t.size,n),s=l.getContext("2d");return s.scale(n,n),c(e,s,t),"image"===t.render?i(l):l}},function(r,t){"use strict";var e=window,n=e.document,o=e.devicePixelRatio||1,i=function(r){return n.createElement(r)},a=function(r,t){return r.getAttribute(t)},u=function(r,t,e){return r.setAttribute(t,e)},f=function(r,t){var e=i("canvas");return u(e,"width",r*t),u(e,"height",r*t),e.style.width=r+"px",e.style.height=r+"px",e},c=function(r){var t=i("img");return u(t,"crossorigin","anonymous"),u(t,"src",r.toDataURL("image/png")),u(t,"width",a(r,"width")),u(t,"height",a(r,"height")),t.style.width=r.style.width,t.style.height=r.style.height,t};r.exports={createCanvas:f,canvasToImg:c,dpr:o}},function(r,t){"use strict";r.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(r,t){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol?"symbol":typeof r},n=/code length overflow/i,o=function(){var e=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var i=0;i<t.getLength();i+=1)e[n+i]^=a.gexp(a.glog(o.getAt(n))+a.glog(t.getAt(i)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=a.glog(o.getAt(0))-a.glog(t.getAt(0)),n=new Array(o.getLength()),i=0;i<o.getLength();i+=1)n[i]=o.getAt(i);for(var i=0;i<t.getLength();i+=1)n[i]^=a.gexp(a.glog(t.getAt(i))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,a=17,l=t,s=n[e],g=null,h=0,d=null,w=new Array,y={},p=function(r,t){h=4*l+17,g=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),m(0,0),m(h-7,0),m(0,h-7),E(),B(),M(r,t),l>=7&&T(r),null==d&&(d=x(l,s,w)),k(d,t)},m=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?g[r+e][t+n]=!0:g[r+e][t+n]=!1)},A=function(){for(var r=0,t=0,e=0;8>e;e+=1){p(!0,e);var n=i.getLostPoint(y);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;h-8>r;r+=1)null==g[r][6]&&(g[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==g[6][t]&&(g[6][t]=t%2==0)},E=function(){for(var r=i.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==g[n][o])for(var a=-2;2>=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?g[n+a][o+u]=!0:g[n+a][o+u]=!1}},T=function(r){for(var t=i.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[e%3+h-8-3][Math.floor(e/3)]=n}},M=function(r,t){for(var e=s<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?g[o][8]=a:8>o?g[o+1][8]=a:g[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?g[8][h-o-1]=a:9>o?g[8][15-o-1+1]=a:g[8][15-o-1]=a}g[h-8][8]=!r},k=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==g[n][f-c]){var l=!1;a<r.length&&(l=1==(r[a]>>>o&1));var s=u(n,f-c);s&&(l=!l),g[n][f-c]=l,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},b=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,s=e[c].totalCount-l;o=Math.max(o,l),a=Math.max(a,s),u[c]=new Array(l);for(var g=0;g<u[c].length;g+=1)u[c][g]=255&t.getBuffer()[g+n];n+=l;var h=i.getErrorCorrectPolynomial(s),v=r(u[c],h.getLength()-1),d=v.mod(h);f[c]=new Array(h.getLength()-1);for(var g=0;g<f[c].length;g+=1){var w=g+d.getLength()-f[c].length;f[c][g]=w>=0?d.getAt(w):0}}for(var y=0,g=0;g<e.length;g+=1)y+=e[g].totalCount;for(var p=new Array(y),m=0,g=0;o>g;g+=1)for(var c=0;c<e.length;c+=1)g<u[c].length&&(p[m]=u[c][g],m+=1);for(var g=0;a>g;g+=1)for(var c=0;c<e.length;c+=1)g<f[c].length&&(p[m]=f[c][g],m+=1);return p},x=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var s=e[l];c.put(s.getMode(),4),c.put(s.getLength(),i.getLengthInBits(s.getMode(),r)),s.write(c)}for(var g=0,l=0;l<n.length;l+=1)g+=n[l].dataCount;if(c.getLengthInBits()>8*g)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*g+")");for(c.getLengthInBits()+4<=8*g&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*g)break;if(c.put(o,8),c.getLengthInBits()>=8*g)break;c.put(a,8)}return b(c,n)};return y.addData=function(r){var t=c(r);w.push(t),d=null},y.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return g[r][t]},y.getModuleCount=function(){return h},y.make=function(){p(!1,A())},y.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<y.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<y.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=y.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},y.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=y.getModuleCount()*r+2*t,n=t,o=e-t;return v(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return y.isDark(a,i)?0:1}return 1})},y};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=g(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,i={};;){var a=e.read();if(-1==a)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(a<<8|u),s=f<<8|c;i[l]=s,o+=1}if(o!=t)throw new Error(o+" != "+t);return i}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var i=r.charCodeAt(o);if(128>i)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(i)>=0;)t^=i<<c(t)-c(i);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||0==u&&0==f||a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),0!=c&&4!=c||(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var s=Math.abs(100*l/t/t-50)/5;return e+=10*s},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],s=0;f>s;s+=1)a.push(t(c,l));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},i},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},s=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},g=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,i=f(),u=0;t>u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=l(),s=a(c);s.write(t,n);var g=0,h=String.fromCharCode(o[g]);for(g+=1;g<o.length;){var v=String.fromCharCode(o[g]);g+=1,i.contains(h+v)?h+=v:(s.write(i.indexOf(h),n),i.size()<4095&&(i.size()==1<<n&&(n+=1),i.add(h+v)),h=v)}return s.write(i.indexOf(h),n),s.write(e,n),s.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return i},v=function(r,t,e,n){for(var o=h(r,t),i=0;t>i;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=l();o.write(u);for(var f=s(),c=u.toByteArray(),g=0;g<c.length;g+=1)f.writeByte(c[g]);f.flush();var v="";return v+="<img",v+=' src="',v+="data:image/gif;base64,",v+=f,v+='"',v+=' width="',v+=r,v+='"',v+=' height="',v+=t,v+='"',n&&(v+=' alt="',v+=n,v+='"'),v+="/>"};return t}();return function(e){"function"==typeof define&&define.amd?define([],e):"object"==typeof t&&(r.exports=e())}(function(){return e}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(e),e}(),i=function(r,t){var i=arguments.length<=2||void 0===arguments[2]?1:arguments[2];i=Math.max(1,i);for(var a=i;40>=a;a+=1)try{var u=function(){var e=o(a,t);e.addData(r),e.make();var n=e.getModuleCount(),i=function(r,t){return r>=0&&n>r&&t>=0&&n>t&&e.isDark(r,t)};return{v:{text:r,level:t,version:a,moduleCount:n,isDark:i}}}();if("object"===("undefined"==typeof u?"undefined":e(u)))return u.v}catch(f){if(!n.test(f.message))throw f}return null},a=function(){var r=arguments.length<=0||void 0===arguments[0]?"":arguments[0],t=arguments.length<=1||void 0===arguments[1]?"L":arguments[1],e=arguments.length<=2||void 0===arguments[2]?1:arguments[2],n=arguments.length<=3||void 0===arguments[3]?0:arguments[3],o=i(r,t,e);return o&&!function(){var r=o.isDark;o.moduleCount+=2*n,o.isDark=function(t,e){return r(t-n,e-n)}}(),o};r.exports=a},function(r,t,e){"use strict";var n=e(5),o=e(6),i=function(r,t){r.fillStyle=t.back,r.fillRect(0,0,t.size,t.size)},a=function(r,t,e,n,o,i){r.isDark(o,i)&&t.rect(i*n,o*n,n,n)},u=function(r,t,e){if(r){var o=e.rounded>0&&e.rounded<=100?n:a,i=r.moduleCount,u=e.size/i,f=0;e.crisp&&(u=Math.floor(u),f=Math.floor((e.size-u*i)/2)),t.translate(f,f),t.beginPath();for(var c=0;i>c;c+=1)for(var l=0;i>l;l+=1)o(r,t,e,u,c,l);t.fillStyle=e.fill,t.fill(),t.translate(-f,-f)}},f=function(r,t,e){i(t,e),u(r,t,e),o(t,e)};r.exports=f},function(r,t){"use strict";var e=function(r){return{c:r,m:function(){var r;return(r=this.c).moveTo.apply(r,arguments),this},l:function(){var r;return(r=this.c).lineTo.apply(r,arguments),this},a:function(){var r;return(r=this.c).arcTo.apply(r,arguments),this}}},n=function(r,t,e,n,o,i,a,u,f,c){a?r.m(t+i,e):r.m(t,e),u?r.l(n-i,e).a(n,e,n,o,i):r.l(n,e),f?r.l(n,o-i).a(n,o,t,o,i):r.l(n,o),c?r.l(t+i,o).a(t,o,t,e,i):r.l(t,o),a?r.l(t,e+i).a(t,e,n,e,i):r.l(t,e)},o=function(r,t,e,n,o,i,a,u,f,c){a&&r.m(t+i,e).l(t,e).l(t,e+i).a(t,e,t+i,e,i),u&&r.m(n-i,e).l(n,e).l(n,e+i).a(n,e,n-i,e,i),f&&r.m(n-i,o).l(n,o).l(n,o-i).a(n,o,n-i,o,i),c&&r.m(t+i,o).l(t,o).l(t,o-i).a(t,o,t+i,o,i)},i=function(r,t,i,a,u,f){var c=f*a,l=u*a,s=c+a,g=l+a,h=.005*i.rounded*a,v=r.isDark,d=u-1,w=u+1,y=f-1,p=f+1,m=v(u,f),A=v(d,y),B=v(d,f),E=v(d,p),T=v(u,p),M=v(w,p),k=v(w,f),b=v(w,y),x=v(u,y),D=e(t);m?n(D,c,l,s,g,h,!B&&!x,!B&&!T,!k&&!T,!k&&!x):o(D,c,l,s,g,h,B&&x&&A,B&&T&&E,k&&T&&M,k&&x&&b)};r.exports=i},function(r,t){"use strict";var e=function(r,t){var e=t.size,n="bold "+.01*t.mSize*e+"px "+t.fontname;r.strokeStyle=t.back,r.lineWidth=.01*t.mSize*e*.1,r.fillStyle=t.fontcolor,r.font=n;var o=r.measureText(t.label).width,i=.01*t.mSize,a=o/e,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e+.75*t.mSize*.01*e;r.strokeText(t.label,c,l),r.fillText(t.label,c,l)},n=function(r,t){var e=t.size,n=t.image.naturalWidth||1,o=t.image.naturalHeight||1,i=.01*t.mSize,a=i*n/o,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e,s=a*e,g=i*e;r.drawImage(t.image,c,l,s,g)},o=function(r,t){var o=t.mode;"label"===o?e(r,t):"image"===o&&n(r,t)};r.exports=o}])});</script>
26863 <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.bitcoinjs = 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){
26864 (function (global){
26865 'use strict';
26866
26867 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26868 // original notice:
26869
26870 /*!
26871 * The buffer module from node.js, for the browser.
26872 *
26873 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26874 * @license MIT
26875 */
26876 function compare(a, b) {
26877 if (a === b) {
26878 return 0;
26879 }
26880
26881 var x = a.length;
26882 var y = b.length;
26883
26884 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26885 if (a[i] !== b[i]) {
26886 x = a[i];
26887 y = b[i];
26888 break;
26889 }
26890 }
26891
26892 if (x < y) {
26893 return -1;
26894 }
26895 if (y < x) {
26896 return 1;
26897 }
26898 return 0;
26899 }
26900 function isBuffer(b) {
26901 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26902 return global.Buffer.isBuffer(b);
26903 }
26904 return !!(b != null && b._isBuffer);
26905 }
26906
26907 // based on node assert, original notice:
26908
26909 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26910 //
26911 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26912 //
26913 // Originally from narwhal.js (http://narwhaljs.org)
26914 // Copyright (c) 2009 Thomas Robinson <280north.com>
26915 //
26916 // Permission is hereby granted, free of charge, to any person obtaining a copy
26917 // of this software and associated documentation files (the 'Software'), to
26918 // deal in the Software without restriction, including without limitation the
26919 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26920 // sell copies of the Software, and to permit persons to whom the Software is
26921 // furnished to do so, subject to the following conditions:
26922 //
26923 // The above copyright notice and this permission notice shall be included in
26924 // all copies or substantial portions of the Software.
26925 //
26926 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26927 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26928 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26929 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26930 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26931 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26932
26933 var util = require('util/');
26934 var hasOwn = Object.prototype.hasOwnProperty;
26935 var pSlice = Array.prototype.slice;
26936 var functionsHaveNames = (function () {
26937 return function foo() {}.name === 'foo';
26938 }());
26939 function pToString (obj) {
26940 return Object.prototype.toString.call(obj);
26941 }
26942 function isView(arrbuf) {
26943 if (isBuffer(arrbuf)) {
26944 return false;
26945 }
26946 if (typeof global.ArrayBuffer !== 'function') {
26947 return false;
26948 }
26949 if (typeof ArrayBuffer.isView === 'function') {
26950 return ArrayBuffer.isView(arrbuf);
26951 }
26952 if (!arrbuf) {
26953 return false;
26954 }
26955 if (arrbuf instanceof DataView) {
26956 return true;
26957 }
26958 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26959 return true;
26960 }
26961 return false;
26962 }
26963 // 1. The assert module provides functions that throw
26964 // AssertionError's when particular conditions are not met. The
26965 // assert module must conform to the following interface.
26966
26967 var assert = module.exports = ok;
26968
26969 // 2. The AssertionError is defined in assert.
26970 // new assert.AssertionError({ message: message,
26971 // actual: actual,
26972 // expected: expected })
26973
26974 var regex = /\s*function\s+([^\(\s]*)\s*/;
26975 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26976 function getName(func) {
26977 if (!util.isFunction(func)) {
26978 return;
26979 }
26980 if (functionsHaveNames) {
26981 return func.name;
26982 }
26983 var str = func.toString();
26984 var match = str.match(regex);
26985 return match && match[1];
26986 }
26987 assert.AssertionError = function AssertionError(options) {
26988 this.name = 'AssertionError';
26989 this.actual = options.actual;
26990 this.expected = options.expected;
26991 this.operator = options.operator;
26992 if (options.message) {
26993 this.message = options.message;
26994 this.generatedMessage = false;
26995 } else {
26996 this.message = getMessage(this);
26997 this.generatedMessage = true;
26998 }
26999 var stackStartFunction = options.stackStartFunction || fail;
27000 if (Error.captureStackTrace) {
27001 Error.captureStackTrace(this, stackStartFunction);
27002 } else {
27003 // non v8 browsers so we can have a stacktrace
27004 var err = new Error();
27005 if (err.stack) {
27006 var out = err.stack;
27007
27008 // try to strip useless frames
27009 var fn_name = getName(stackStartFunction);
27010 var idx = out.indexOf('\n' + fn_name);
27011 if (idx >= 0) {
27012 // once we have located the function frame
27013 // we need to strip out everything before it (and its line)
27014 var next_line = out.indexOf('\n', idx + 1);
27015 out = out.substring(next_line + 1);
27016 }
27017
27018 this.stack = out;
27019 }
27020 }
27021 };
27022
27023 // assert.AssertionError instanceof Error
27024 util.inherits(assert.AssertionError, Error);
27025
27026 function truncate(s, n) {
27027 if (typeof s === 'string') {
27028 return s.length < n ? s : s.slice(0, n);
27029 } else {
27030 return s;
27031 }
27032 }
27033 function inspect(something) {
27034 if (functionsHaveNames || !util.isFunction(something)) {
27035 return util.inspect(something);
27036 }
27037 var rawname = getName(something);
27038 var name = rawname ? ': ' + rawname : '';
27039 return '[Function' + name + ']';
27040 }
27041 function getMessage(self) {
27042 return truncate(inspect(self.actual), 128) + ' ' +
27043 self.operator + ' ' +
27044 truncate(inspect(self.expected), 128);
27045 }
27046
27047 // At present only the three keys mentioned above are used and
27048 // understood by the spec. Implementations or sub modules can pass
27049 // other keys to the AssertionError's constructor - they will be
27050 // ignored.
27051
27052 // 3. All of the following functions must throw an AssertionError
27053 // when a corresponding condition is not met, with a message that
27054 // may be undefined if not provided. All assertion methods provide
27055 // both the actual and expected values to the assertion error for
27056 // display purposes.
27057
27058 function fail(actual, expected, message, operator, stackStartFunction) {
27059 throw new assert.AssertionError({
27060 message: message,
27061 actual: actual,
27062 expected: expected,
27063 operator: operator,
27064 stackStartFunction: stackStartFunction
27065 });
27066 }
27067
27068 // EXTENSION! allows for well behaved errors defined elsewhere.
27069 assert.fail = fail;
27070
27071 // 4. Pure assertion tests whether a value is truthy, as determined
27072 // by !!guard.
27073 // assert.ok(guard, message_opt);
27074 // This statement is equivalent to assert.equal(true, !!guard,
27075 // message_opt);. To test strictly for the value true, use
27076 // assert.strictEqual(true, guard, message_opt);.
27077
27078 function ok(value, message) {
27079 if (!value) fail(value, true, message, '==', assert.ok);
27080 }
27081 assert.ok = ok;
27082
27083 // 5. The equality assertion tests shallow, coercive equality with
27084 // ==.
27085 // assert.equal(actual, expected, message_opt);
27086
27087 assert.equal = function equal(actual, expected, message) {
27088 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27089 };
27090
27091 // 6. The non-equality assertion tests for whether two objects are not equal
27092 // with != assert.notEqual(actual, expected, message_opt);
27093
27094 assert.notEqual = function notEqual(actual, expected, message) {
27095 if (actual == expected) {
27096 fail(actual, expected, message, '!=', assert.notEqual);
27097 }
27098 };
27099
27100 // 7. The equivalence assertion tests a deep equality relation.
27101 // assert.deepEqual(actual, expected, message_opt);
27102
27103 assert.deepEqual = function deepEqual(actual, expected, message) {
27104 if (!_deepEqual(actual, expected, false)) {
27105 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27106 }
27107 };
27108
27109 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27110 if (!_deepEqual(actual, expected, true)) {
27111 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27112 }
27113 };
27114
27115 function _deepEqual(actual, expected, strict, memos) {
27116 // 7.1. All identical values are equivalent, as determined by ===.
27117 if (actual === expected) {
27118 return true;
27119 } else if (isBuffer(actual) && isBuffer(expected)) {
27120 return compare(actual, expected) === 0;
27121
27122 // 7.2. If the expected value is a Date object, the actual value is
27123 // equivalent if it is also a Date object that refers to the same time.
27124 } else if (util.isDate(actual) && util.isDate(expected)) {
27125 return actual.getTime() === expected.getTime();
27126
27127 // 7.3 If the expected value is a RegExp object, the actual value is
27128 // equivalent if it is also a RegExp object with the same source and
27129 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27130 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27131 return actual.source === expected.source &&
27132 actual.global === expected.global &&
27133 actual.multiline === expected.multiline &&
27134 actual.lastIndex === expected.lastIndex &&
27135 actual.ignoreCase === expected.ignoreCase;
27136
27137 // 7.4. Other pairs that do not both pass typeof value == 'object',
27138 // equivalence is determined by ==.
27139 } else if ((actual === null || typeof actual !== 'object') &&
27140 (expected === null || typeof expected !== 'object')) {
27141 return strict ? actual === expected : actual == expected;
27142
27143 // If both values are instances of typed arrays, wrap their underlying
27144 // ArrayBuffers in a Buffer each to increase performance
27145 // This optimization requires the arrays to have the same type as checked by
27146 // Object.prototype.toString (aka pToString). Never perform binary
27147 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27148 // bit patterns are not identical.
27149 } else if (isView(actual) && isView(expected) &&
27150 pToString(actual) === pToString(expected) &&
27151 !(actual instanceof Float32Array ||
27152 actual instanceof Float64Array)) {
27153 return compare(new Uint8Array(actual.buffer),
27154 new Uint8Array(expected.buffer)) === 0;
27155
27156 // 7.5 For all other Object pairs, including Array objects, equivalence is
27157 // determined by having the same number of owned properties (as verified
27158 // with Object.prototype.hasOwnProperty.call), the same set of keys
27159 // (although not necessarily the same order), equivalent values for every
27160 // corresponding key, and an identical 'prototype' property. Note: this
27161 // accounts for both named and indexed properties on Arrays.
27162 } else if (isBuffer(actual) !== isBuffer(expected)) {
27163 return false;
27164 } else {
27165 memos = memos || {actual: [], expected: []};
27166
27167 var actualIndex = memos.actual.indexOf(actual);
27168 if (actualIndex !== -1) {
27169 if (actualIndex === memos.expected.indexOf(expected)) {
27170 return true;
27171 }
27172 }
27173
27174 memos.actual.push(actual);
27175 memos.expected.push(expected);
27176
27177 return objEquiv(actual, expected, strict, memos);
27178 }
27179 }
27180
27181 function isArguments(object) {
27182 return Object.prototype.toString.call(object) == '[object Arguments]';
27183 }
27184
27185 function objEquiv(a, b, strict, actualVisitedObjects) {
27186 if (a === null || a === undefined || b === null || b === undefined)
27187 return false;
27188 // if one is a primitive, the other must be same
27189 if (util.isPrimitive(a) || util.isPrimitive(b))
27190 return a === b;
27191 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27192 return false;
27193 var aIsArgs = isArguments(a);
27194 var bIsArgs = isArguments(b);
27195 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27196 return false;
27197 if (aIsArgs) {
27198 a = pSlice.call(a);
27199 b = pSlice.call(b);
27200 return _deepEqual(a, b, strict);
27201 }
27202 var ka = objectKeys(a);
27203 var kb = objectKeys(b);
27204 var key, i;
27205 // having the same number of owned properties (keys incorporates
27206 // hasOwnProperty)
27207 if (ka.length !== kb.length)
27208 return false;
27209 //the same set of keys (although not necessarily the same order),
27210 ka.sort();
27211 kb.sort();
27212 //~~~cheap key test
27213 for (i = ka.length - 1; i >= 0; i--) {
27214 if (ka[i] !== kb[i])
27215 return false;
27216 }
27217 //equivalent values for every corresponding key, and
27218 //~~~possibly expensive deep test
27219 for (i = ka.length - 1; i >= 0; i--) {
27220 key = ka[i];
27221 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27222 return false;
27223 }
27224 return true;
27225 }
27226
27227 // 8. The non-equivalence assertion tests for any deep inequality.
27228 // assert.notDeepEqual(actual, expected, message_opt);
27229
27230 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27231 if (_deepEqual(actual, expected, false)) {
27232 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27233 }
27234 };
27235
27236 assert.notDeepStrictEqual = notDeepStrictEqual;
27237 function notDeepStrictEqual(actual, expected, message) {
27238 if (_deepEqual(actual, expected, true)) {
27239 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27240 }
27241 }
27242
27243
27244 // 9. The strict equality assertion tests strict equality, as determined by ===.
27245 // assert.strictEqual(actual, expected, message_opt);
27246
27247 assert.strictEqual = function strictEqual(actual, expected, message) {
27248 if (actual !== expected) {
27249 fail(actual, expected, message, '===', assert.strictEqual);
27250 }
27251 };
27252
27253 // 10. The strict non-equality assertion tests for strict inequality, as
27254 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27255
27256 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27257 if (actual === expected) {
27258 fail(actual, expected, message, '!==', assert.notStrictEqual);
27259 }
27260 };
27261
27262 function expectedException(actual, expected) {
27263 if (!actual || !expected) {
27264 return false;
27265 }
27266
27267 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27268 return expected.test(actual);
27269 }
27270
27271 try {
27272 if (actual instanceof expected) {
27273 return true;
27274 }
27275 } catch (e) {
27276 // Ignore. The instanceof check doesn't work for arrow functions.
27277 }
27278
27279 if (Error.isPrototypeOf(expected)) {
27280 return false;
27281 }
27282
27283 return expected.call({}, actual) === true;
27284 }
27285
27286 function _tryBlock(block) {
27287 var error;
27288 try {
27289 block();
27290 } catch (e) {
27291 error = e;
27292 }
27293 return error;
27294 }
27295
27296 function _throws(shouldThrow, block, expected, message) {
27297 var actual;
27298
27299 if (typeof block !== 'function') {
27300 throw new TypeError('"block" argument must be a function');
27301 }
27302
27303 if (typeof expected === 'string') {
27304 message = expected;
27305 expected = null;
27306 }
27307
27308 actual = _tryBlock(block);
27309
27310 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27311 (message ? ' ' + message : '.');
27312
27313 if (shouldThrow && !actual) {
27314 fail(actual, expected, 'Missing expected exception' + message);
27315 }
27316
27317 var userProvidedMessage = typeof message === 'string';
27318 var isUnwantedException = !shouldThrow && util.isError(actual);
27319 var isUnexpectedException = !shouldThrow && actual && !expected;
27320
27321 if ((isUnwantedException &&
27322 userProvidedMessage &&
27323 expectedException(actual, expected)) ||
27324 isUnexpectedException) {
27325 fail(actual, expected, 'Got unwanted exception' + message);
27326 }
27327
27328 if ((shouldThrow && actual && expected &&
27329 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27330 throw actual;
27331 }
27332 }
27333
27334 // 11. Expected to throw an error:
27335 // assert.throws(block, Error_opt, message_opt);
27336
27337 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27338 _throws(true, block, error, message);
27339 };
27340
27341 // EXTENSION! This is annoying to write outside this module.
27342 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27343 _throws(false, block, error, message);
27344 };
27345
27346 assert.ifError = function(err) { if (err) throw err; };
27347
27348 var objectKeys = Object.keys || function (obj) {
27349 var keys = [];
27350 for (var key in obj) {
27351 if (hasOwn.call(obj, key)) keys.push(key);
27352 }
27353 return keys;
27354 };
27355
27356 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27357 },{"util/":33}],2:[function(require,module,exports){
27358 'use strict'
27359
27360 exports.byteLength = byteLength
27361 exports.toByteArray = toByteArray
27362 exports.fromByteArray = fromByteArray
27363
27364 var lookup = []
27365 var revLookup = []
27366 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27367
27368 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27369 for (var i = 0, len = code.length; i < len; ++i) {
27370 lookup[i] = code[i]
27371 revLookup[code.charCodeAt(i)] = i
27372 }
27373
27374 revLookup['-'.charCodeAt(0)] = 62
27375 revLookup['_'.charCodeAt(0)] = 63
27376
27377 function placeHoldersCount (b64) {
27378 var len = b64.length
27379 if (len % 4 > 0) {
27380 throw new Error('Invalid string. Length must be a multiple of 4')
27381 }
27382
27383 // the number of equal signs (place holders)
27384 // if there are two placeholders, than the two characters before it
27385 // represent one byte
27386 // if there is only one, then the three characters before it represent 2 bytes
27387 // this is just a cheap hack to not do indexOf twice
27388 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27389 }
27390
27391 function byteLength (b64) {
27392 // base64 is 4/3 + up to two characters of the original data
27393 return b64.length * 3 / 4 - placeHoldersCount(b64)
27394 }
27395
27396 function toByteArray (b64) {
27397 var i, j, l, tmp, placeHolders, arr
27398 var len = b64.length
27399 placeHolders = placeHoldersCount(b64)
27400
27401 arr = new Arr(len * 3 / 4 - placeHolders)
27402
27403 // if there are placeholders, only get up to the last complete 4 chars
27404 l = placeHolders > 0 ? len - 4 : len
27405
27406 var L = 0
27407
27408 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27409 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27410 arr[L++] = (tmp >> 16) & 0xFF
27411 arr[L++] = (tmp >> 8) & 0xFF
27412 arr[L++] = tmp & 0xFF
27413 }
27414
27415 if (placeHolders === 2) {
27416 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27417 arr[L++] = tmp & 0xFF
27418 } else if (placeHolders === 1) {
27419 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27420 arr[L++] = (tmp >> 8) & 0xFF
27421 arr[L++] = tmp & 0xFF
27422 }
27423
27424 return arr
27425 }
27426
27427 function tripletToBase64 (num) {
27428 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27429 }
27430
27431 function encodeChunk (uint8, start, end) {
27432 var tmp
27433 var output = []
27434 for (var i = start; i < end; i += 3) {
27435 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27436 output.push(tripletToBase64(tmp))
27437 }
27438 return output.join('')
27439 }
27440
27441 function fromByteArray (uint8) {
27442 var tmp
27443 var len = uint8.length
27444 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27445 var output = ''
27446 var parts = []
27447 var maxChunkLength = 16383 // must be multiple of 3
27448
27449 // go through the array every three bytes, we'll deal with trailing stuff later
27450 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27451 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27452 }
27453
27454 // pad the end with zeros, but make sure to not forget the extra bytes
27455 if (extraBytes === 1) {
27456 tmp = uint8[len - 1]
27457 output += lookup[tmp >> 2]
27458 output += lookup[(tmp << 4) & 0x3F]
27459 output += '=='
27460 } else if (extraBytes === 2) {
27461 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27462 output += lookup[tmp >> 10]
27463 output += lookup[(tmp >> 4) & 0x3F]
27464 output += lookup[(tmp << 2) & 0x3F]
27465 output += '='
27466 }
27467
27468 parts.push(output)
27469
27470 return parts.join('')
27471 }
27472
27473 },{}],3:[function(require,module,exports){
27474
27475 },{}],4:[function(require,module,exports){
27476 (function (global){
27477 'use strict';
27478
27479 var buffer = require('buffer');
27480 var Buffer = buffer.Buffer;
27481 var SlowBuffer = buffer.SlowBuffer;
27482 var MAX_LEN = buffer.kMaxLength || 2147483647;
27483 exports.alloc = function alloc(size, fill, encoding) {
27484 if (typeof Buffer.alloc === 'function') {
27485 return Buffer.alloc(size, fill, encoding);
27486 }
27487 if (typeof encoding === 'number') {
27488 throw new TypeError('encoding must not be number');
27489 }
27490 if (typeof size !== 'number') {
27491 throw new TypeError('size must be a number');
27492 }
27493 if (size > MAX_LEN) {
27494 throw new RangeError('size is too large');
27495 }
27496 var enc = encoding;
27497 var _fill = fill;
27498 if (_fill === undefined) {
27499 enc = undefined;
27500 _fill = 0;
27501 }
27502 var buf = new Buffer(size);
27503 if (typeof _fill === 'string') {
27504 var fillBuf = new Buffer(_fill, enc);
27505 var flen = fillBuf.length;
27506 var i = -1;
27507 while (++i < size) {
27508 buf[i] = fillBuf[i % flen];
27509 }
27510 } else {
27511 buf.fill(_fill);
27512 }
27513 return buf;
27514 }
27515 exports.allocUnsafe = function allocUnsafe(size) {
27516 if (typeof Buffer.allocUnsafe === 'function') {
27517 return Buffer.allocUnsafe(size);
27518 }
27519 if (typeof size !== 'number') {
27520 throw new TypeError('size must be a number');
27521 }
27522 if (size > MAX_LEN) {
27523 throw new RangeError('size is too large');
27524 }
27525 return new Buffer(size);
27526 }
27527 exports.from = function from(value, encodingOrOffset, length) {
27528 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27529 return Buffer.from(value, encodingOrOffset, length);
27530 }
27531 if (typeof value === 'number') {
27532 throw new TypeError('"value" argument must not be a number');
27533 }
27534 if (typeof value === 'string') {
27535 return new Buffer(value, encodingOrOffset);
27536 }
27537 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27538 var offset = encodingOrOffset;
27539 if (arguments.length === 1) {
27540 return new Buffer(value);
27541 }
27542 if (typeof offset === 'undefined') {
27543 offset = 0;
27544 }
27545 var len = length;
27546 if (typeof len === 'undefined') {
27547 len = value.byteLength - offset;
27548 }
27549 if (offset >= value.byteLength) {
27550 throw new RangeError('\'offset\' is out of bounds');
27551 }
27552 if (len > value.byteLength - offset) {
27553 throw new RangeError('\'length\' is out of bounds');
27554 }
27555 return new Buffer(value.slice(offset, offset + len));
27556 }
27557 if (Buffer.isBuffer(value)) {
27558 var out = new Buffer(value.length);
27559 value.copy(out, 0, 0, value.length);
27560 return out;
27561 }
27562 if (value) {
27563 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27564 return new Buffer(value);
27565 }
27566 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27567 return new Buffer(value.data);
27568 }
27569 }
27570
27571 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27572 }
27573 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27574 if (typeof Buffer.allocUnsafeSlow === 'function') {
27575 return Buffer.allocUnsafeSlow(size);
27576 }
27577 if (typeof size !== 'number') {
27578 throw new TypeError('size must be a number');
27579 }
27580 if (size >= MAX_LEN) {
27581 throw new RangeError('size is too large');
27582 }
27583 return new SlowBuffer(size);
27584 }
27585
27586 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27587 },{"buffer":5}],5:[function(require,module,exports){
27588 /*!
27589 * The buffer module from node.js, for the browser.
27590 *
27591 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27592 * @license MIT
27593 */
27594 /* eslint-disable no-proto */
27595
27596 'use strict'
27597
27598 var base64 = require('base64-js')
27599 var ieee754 = require('ieee754')
27600
27601 exports.Buffer = Buffer
27602 exports.SlowBuffer = SlowBuffer
27603 exports.INSPECT_MAX_BYTES = 50
27604
27605 var K_MAX_LENGTH = 0x7fffffff
27606 exports.kMaxLength = K_MAX_LENGTH
27607
27608 /**
27609 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27610 * === true Use Uint8Array implementation (fastest)
27611 * === false Print warning and recommend using `buffer` v4.x which has an Object
27612 * implementation (most compatible, even IE6)
27613 *
27614 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27615 * Opera 11.6+, iOS 4.2+.
27616 *
27617 * We report that the browser does not support typed arrays if the are not subclassable
27618 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27619 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27620 * for __proto__ and has a buggy typed array implementation.
27621 */
27622 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27623
27624 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27625 typeof console.error === 'function') {
27626 console.error(
27627 'This browser lacks typed array (Uint8Array) support which is required by ' +
27628 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27629 )
27630 }
27631
27632 function typedArraySupport () {
27633 // Can typed array instances can be augmented?
27634 try {
27635 var arr = new Uint8Array(1)
27636 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27637 return arr.foo() === 42
27638 } catch (e) {
27639 return false
27640 }
27641 }
27642
27643 function createBuffer (length) {
27644 if (length > K_MAX_LENGTH) {
27645 throw new RangeError('Invalid typed array length')
27646 }
27647 // Return an augmented `Uint8Array` instance
27648 var buf = new Uint8Array(length)
27649 buf.__proto__ = Buffer.prototype
27650 return buf
27651 }
27652
27653 /**
27654 * The Buffer constructor returns instances of `Uint8Array` that have their
27655 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27656 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27657 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27658 * returns a single octet.
27659 *
27660 * The `Uint8Array` prototype remains unmodified.
27661 */
27662
27663 function Buffer (arg, encodingOrOffset, length) {
27664 // Common case.
27665 if (typeof arg === 'number') {
27666 if (typeof encodingOrOffset === 'string') {
27667 throw new Error(
27668 'If encoding is specified then the first argument must be a string'
27669 )
27670 }
27671 return allocUnsafe(arg)
27672 }
27673 return from(arg, encodingOrOffset, length)
27674 }
27675
27676 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27677 if (typeof Symbol !== 'undefined' && Symbol.species &&
27678 Buffer[Symbol.species] === Buffer) {
27679 Object.defineProperty(Buffer, Symbol.species, {
27680 value: null,
27681 configurable: true,
27682 enumerable: false,
27683 writable: false
27684 })
27685 }
27686
27687 Buffer.poolSize = 8192 // not used by this implementation
27688
27689 function from (value, encodingOrOffset, length) {
27690 if (typeof value === 'number') {
27691 throw new TypeError('"value" argument must not be a number')
27692 }
27693
27694 if (value instanceof ArrayBuffer) {
27695 return fromArrayBuffer(value, encodingOrOffset, length)
27696 }
27697
27698 if (typeof value === 'string') {
27699 return fromString(value, encodingOrOffset)
27700 }
27701
27702 return fromObject(value)
27703 }
27704
27705 /**
27706 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27707 * if value is a number.
27708 * Buffer.from(str[, encoding])
27709 * Buffer.from(array)
27710 * Buffer.from(buffer)
27711 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27712 **/
27713 Buffer.from = function (value, encodingOrOffset, length) {
27714 return from(value, encodingOrOffset, length)
27715 }
27716
27717 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27718 // https://github.com/feross/buffer/pull/148
27719 Buffer.prototype.__proto__ = Uint8Array.prototype
27720 Buffer.__proto__ = Uint8Array
27721
27722 function assertSize (size) {
27723 if (typeof size !== 'number') {
27724 throw new TypeError('"size" argument must be a number')
27725 } else if (size < 0) {
27726 throw new RangeError('"size" argument must not be negative')
27727 }
27728 }
27729
27730 function alloc (size, fill, encoding) {
27731 assertSize(size)
27732 if (size <= 0) {
27733 return createBuffer(size)
27734 }
27735 if (fill !== undefined) {
27736 // Only pay attention to encoding if it's a string. This
27737 // prevents accidentally sending in a number that would
27738 // be interpretted as a start offset.
27739 return typeof encoding === 'string'
27740 ? createBuffer(size).fill(fill, encoding)
27741 : createBuffer(size).fill(fill)
27742 }
27743 return createBuffer(size)
27744 }
27745
27746 /**
27747 * Creates a new filled Buffer instance.
27748 * alloc(size[, fill[, encoding]])
27749 **/
27750 Buffer.alloc = function (size, fill, encoding) {
27751 return alloc(size, fill, encoding)
27752 }
27753
27754 function allocUnsafe (size) {
27755 assertSize(size)
27756 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27757 }
27758
27759 /**
27760 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27761 * */
27762 Buffer.allocUnsafe = function (size) {
27763 return allocUnsafe(size)
27764 }
27765 /**
27766 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27767 */
27768 Buffer.allocUnsafeSlow = function (size) {
27769 return allocUnsafe(size)
27770 }
27771
27772 function fromString (string, encoding) {
27773 if (typeof encoding !== 'string' || encoding === '') {
27774 encoding = 'utf8'
27775 }
27776
27777 if (!Buffer.isEncoding(encoding)) {
27778 throw new TypeError('"encoding" must be a valid string encoding')
27779 }
27780
27781 var length = byteLength(string, encoding) | 0
27782 var buf = createBuffer(length)
27783
27784 var actual = buf.write(string, encoding)
27785
27786 if (actual !== length) {
27787 // Writing a hex string, for example, that contains invalid characters will
27788 // cause everything after the first invalid character to be ignored. (e.g.
27789 // 'abxxcd' will be treated as 'ab')
27790 buf = buf.slice(0, actual)
27791 }
27792
27793 return buf
27794 }
27795
27796 function fromArrayLike (array) {
27797 var length = array.length < 0 ? 0 : checked(array.length) | 0
27798 var buf = createBuffer(length)
27799 for (var i = 0; i < length; i += 1) {
27800 buf[i] = array[i] & 255
27801 }
27802 return buf
27803 }
27804
27805 function fromArrayBuffer (array, byteOffset, length) {
27806 if (byteOffset < 0 || array.byteLength < byteOffset) {
27807 throw new RangeError('\'offset\' is out of bounds')
27808 }
27809
27810 if (array.byteLength < byteOffset + (length || 0)) {
27811 throw new RangeError('\'length\' is out of bounds')
27812 }
27813
27814 var buf
27815 if (byteOffset === undefined && length === undefined) {
27816 buf = new Uint8Array(array)
27817 } else if (length === undefined) {
27818 buf = new Uint8Array(array, byteOffset)
27819 } else {
27820 buf = new Uint8Array(array, byteOffset, length)
27821 }
27822
27823 // Return an augmented `Uint8Array` instance
27824 buf.__proto__ = Buffer.prototype
27825 return buf
27826 }
27827
27828 function fromObject (obj) {
27829 if (Buffer.isBuffer(obj)) {
27830 var len = checked(obj.length) | 0
27831 var buf = createBuffer(len)
27832
27833 if (buf.length === 0) {
27834 return buf
27835 }
27836
27837 obj.copy(buf, 0, 0, len)
27838 return buf
27839 }
27840
27841 if (obj) {
27842 if (isArrayBufferView(obj) || 'length' in obj) {
27843 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27844 return createBuffer(0)
27845 }
27846 return fromArrayLike(obj)
27847 }
27848
27849 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27850 return fromArrayLike(obj.data)
27851 }
27852 }
27853
27854 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27855 }
27856
27857 function checked (length) {
27858 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27859 // length is NaN (which is otherwise coerced to zero.)
27860 if (length >= K_MAX_LENGTH) {
27861 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27862 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27863 }
27864 return length | 0
27865 }
27866
27867 function SlowBuffer (length) {
27868 if (+length != length) { // eslint-disable-line eqeqeq
27869 length = 0
27870 }
27871 return Buffer.alloc(+length)
27872 }
27873
27874 Buffer.isBuffer = function isBuffer (b) {
27875 return b != null && b._isBuffer === true
27876 }
27877
27878 Buffer.compare = function compare (a, b) {
27879 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27880 throw new TypeError('Arguments must be Buffers')
27881 }
27882
27883 if (a === b) return 0
27884
27885 var x = a.length
27886 var y = b.length
27887
27888 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27889 if (a[i] !== b[i]) {
27890 x = a[i]
27891 y = b[i]
27892 break
27893 }
27894 }
27895
27896 if (x < y) return -1
27897 if (y < x) return 1
27898 return 0
27899 }
27900
27901 Buffer.isEncoding = function isEncoding (encoding) {
27902 switch (String(encoding).toLowerCase()) {
27903 case 'hex':
27904 case 'utf8':
27905 case 'utf-8':
27906 case 'ascii':
27907 case 'latin1':
27908 case 'binary':
27909 case 'base64':
27910 case 'ucs2':
27911 case 'ucs-2':
27912 case 'utf16le':
27913 case 'utf-16le':
27914 return true
27915 default:
27916 return false
27917 }
27918 }
27919
27920 Buffer.concat = function concat (list, length) {
27921 if (!Array.isArray(list)) {
27922 throw new TypeError('"list" argument must be an Array of Buffers')
27923 }
27924
27925 if (list.length === 0) {
27926 return Buffer.alloc(0)
27927 }
27928
27929 var i
27930 if (length === undefined) {
27931 length = 0
27932 for (i = 0; i < list.length; ++i) {
27933 length += list[i].length
27934 }
27935 }
27936
27937 var buffer = Buffer.allocUnsafe(length)
27938 var pos = 0
27939 for (i = 0; i < list.length; ++i) {
27940 var buf = list[i]
27941 if (!Buffer.isBuffer(buf)) {
27942 throw new TypeError('"list" argument must be an Array of Buffers')
27943 }
27944 buf.copy(buffer, pos)
27945 pos += buf.length
27946 }
27947 return buffer
27948 }
27949
27950 function byteLength (string, encoding) {
27951 if (Buffer.isBuffer(string)) {
27952 return string.length
27953 }
27954 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27955 return string.byteLength
27956 }
27957 if (typeof string !== 'string') {
27958 string = '' + string
27959 }
27960
27961 var len = string.length
27962 if (len === 0) return 0
27963
27964 // Use a for loop to avoid recursion
27965 var loweredCase = false
27966 for (;;) {
27967 switch (encoding) {
27968 case 'ascii':
27969 case 'latin1':
27970 case 'binary':
27971 return len
27972 case 'utf8':
27973 case 'utf-8':
27974 case undefined:
27975 return utf8ToBytes(string).length
27976 case 'ucs2':
27977 case 'ucs-2':
27978 case 'utf16le':
27979 case 'utf-16le':
27980 return len * 2
27981 case 'hex':
27982 return len >>> 1
27983 case 'base64':
27984 return base64ToBytes(string).length
27985 default:
27986 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27987 encoding = ('' + encoding).toLowerCase()
27988 loweredCase = true
27989 }
27990 }
27991 }
27992 Buffer.byteLength = byteLength
27993
27994 function slowToString (encoding, start, end) {
27995 var loweredCase = false
27996
27997 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27998 // property of a typed array.
27999
28000 // This behaves neither like String nor Uint8Array in that we set start/end
28001 // to their upper/lower bounds if the value passed is out of range.
28002 // undefined is handled specially as per ECMA-262 6th Edition,
28003 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
28004 if (start === undefined || start < 0) {
28005 start = 0
28006 }
28007 // Return early if start > this.length. Done here to prevent potential uint32
28008 // coercion fail below.
28009 if (start > this.length) {
28010 return ''
28011 }
28012
28013 if (end === undefined || end > this.length) {
28014 end = this.length
28015 }
28016
28017 if (end <= 0) {
28018 return ''
28019 }
28020
28021 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
28022 end >>>= 0
28023 start >>>= 0
28024
28025 if (end <= start) {
28026 return ''
28027 }
28028
28029 if (!encoding) encoding = 'utf8'
28030
28031 while (true) {
28032 switch (encoding) {
28033 case 'hex':
28034 return hexSlice(this, start, end)
28035
28036 case 'utf8':
28037 case 'utf-8':
28038 return utf8Slice(this, start, end)
28039
28040 case 'ascii':
28041 return asciiSlice(this, start, end)
28042
28043 case 'latin1':
28044 case 'binary':
28045 return latin1Slice(this, start, end)
28046
28047 case 'base64':
28048 return base64Slice(this, start, end)
28049
28050 case 'ucs2':
28051 case 'ucs-2':
28052 case 'utf16le':
28053 case 'utf-16le':
28054 return utf16leSlice(this, start, end)
28055
28056 default:
28057 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28058 encoding = (encoding + '').toLowerCase()
28059 loweredCase = true
28060 }
28061 }
28062 }
28063
28064 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28065 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28066 // reliably in a browserify context because there could be multiple different
28067 // copies of the 'buffer' package in use. This method works even for Buffer
28068 // instances that were created from another copy of the `buffer` package.
28069 // See: https://github.com/feross/buffer/issues/154
28070 Buffer.prototype._isBuffer = true
28071
28072 function swap (b, n, m) {
28073 var i = b[n]
28074 b[n] = b[m]
28075 b[m] = i
28076 }
28077
28078 Buffer.prototype.swap16 = function swap16 () {
28079 var len = this.length
28080 if (len % 2 !== 0) {
28081 throw new RangeError('Buffer size must be a multiple of 16-bits')
28082 }
28083 for (var i = 0; i < len; i += 2) {
28084 swap(this, i, i + 1)
28085 }
28086 return this
28087 }
28088
28089 Buffer.prototype.swap32 = function swap32 () {
28090 var len = this.length
28091 if (len % 4 !== 0) {
28092 throw new RangeError('Buffer size must be a multiple of 32-bits')
28093 }
28094 for (var i = 0; i < len; i += 4) {
28095 swap(this, i, i + 3)
28096 swap(this, i + 1, i + 2)
28097 }
28098 return this
28099 }
28100
28101 Buffer.prototype.swap64 = function swap64 () {
28102 var len = this.length
28103 if (len % 8 !== 0) {
28104 throw new RangeError('Buffer size must be a multiple of 64-bits')
28105 }
28106 for (var i = 0; i < len; i += 8) {
28107 swap(this, i, i + 7)
28108 swap(this, i + 1, i + 6)
28109 swap(this, i + 2, i + 5)
28110 swap(this, i + 3, i + 4)
28111 }
28112 return this
28113 }
28114
28115 Buffer.prototype.toString = function toString () {
28116 var length = this.length
28117 if (length === 0) return ''
28118 if (arguments.length === 0) return utf8Slice(this, 0, length)
28119 return slowToString.apply(this, arguments)
28120 }
28121
28122 Buffer.prototype.equals = function equals (b) {
28123 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28124 if (this === b) return true
28125 return Buffer.compare(this, b) === 0
28126 }
28127
28128 Buffer.prototype.inspect = function inspect () {
28129 var str = ''
28130 var max = exports.INSPECT_MAX_BYTES
28131 if (this.length > 0) {
28132 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28133 if (this.length > max) str += ' ... '
28134 }
28135 return '<Buffer ' + str + '>'
28136 }
28137
28138 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28139 if (!Buffer.isBuffer(target)) {
28140 throw new TypeError('Argument must be a Buffer')
28141 }
28142
28143 if (start === undefined) {
28144 start = 0
28145 }
28146 if (end === undefined) {
28147 end = target ? target.length : 0
28148 }
28149 if (thisStart === undefined) {
28150 thisStart = 0
28151 }
28152 if (thisEnd === undefined) {
28153 thisEnd = this.length
28154 }
28155
28156 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28157 throw new RangeError('out of range index')
28158 }
28159
28160 if (thisStart >= thisEnd && start >= end) {
28161 return 0
28162 }
28163 if (thisStart >= thisEnd) {
28164 return -1
28165 }
28166 if (start >= end) {
28167 return 1
28168 }
28169
28170 start >>>= 0
28171 end >>>= 0
28172 thisStart >>>= 0
28173 thisEnd >>>= 0
28174
28175 if (this === target) return 0
28176
28177 var x = thisEnd - thisStart
28178 var y = end - start
28179 var len = Math.min(x, y)
28180
28181 var thisCopy = this.slice(thisStart, thisEnd)
28182 var targetCopy = target.slice(start, end)
28183
28184 for (var i = 0; i < len; ++i) {
28185 if (thisCopy[i] !== targetCopy[i]) {
28186 x = thisCopy[i]
28187 y = targetCopy[i]
28188 break
28189 }
28190 }
28191
28192 if (x < y) return -1
28193 if (y < x) return 1
28194 return 0
28195 }
28196
28197 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28198 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28199 //
28200 // Arguments:
28201 // - buffer - a Buffer to search
28202 // - val - a string, Buffer, or number
28203 // - byteOffset - an index into `buffer`; will be clamped to an int32
28204 // - encoding - an optional encoding, relevant is val is a string
28205 // - dir - true for indexOf, false for lastIndexOf
28206 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28207 // Empty buffer means no match
28208 if (buffer.length === 0) return -1
28209
28210 // Normalize byteOffset
28211 if (typeof byteOffset === 'string') {
28212 encoding = byteOffset
28213 byteOffset = 0
28214 } else if (byteOffset > 0x7fffffff) {
28215 byteOffset = 0x7fffffff
28216 } else if (byteOffset < -0x80000000) {
28217 byteOffset = -0x80000000
28218 }
28219 byteOffset = +byteOffset // Coerce to Number.
28220 if (numberIsNaN(byteOffset)) {
28221 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28222 byteOffset = dir ? 0 : (buffer.length - 1)
28223 }
28224
28225 // Normalize byteOffset: negative offsets start from the end of the buffer
28226 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28227 if (byteOffset >= buffer.length) {
28228 if (dir) return -1
28229 else byteOffset = buffer.length - 1
28230 } else if (byteOffset < 0) {
28231 if (dir) byteOffset = 0
28232 else return -1
28233 }
28234
28235 // Normalize val
28236 if (typeof val === 'string') {
28237 val = Buffer.from(val, encoding)
28238 }
28239
28240 // Finally, search either indexOf (if dir is true) or lastIndexOf
28241 if (Buffer.isBuffer(val)) {
28242 // Special case: looking for empty string/buffer always fails
28243 if (val.length === 0) {
28244 return -1
28245 }
28246 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28247 } else if (typeof val === 'number') {
28248 val = val & 0xFF // Search for a byte value [0-255]
28249 if (typeof Uint8Array.prototype.indexOf === 'function') {
28250 if (dir) {
28251 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28252 } else {
28253 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28254 }
28255 }
28256 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28257 }
28258
28259 throw new TypeError('val must be string, number or Buffer')
28260 }
28261
28262 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28263 var indexSize = 1
28264 var arrLength = arr.length
28265 var valLength = val.length
28266
28267 if (encoding !== undefined) {
28268 encoding = String(encoding).toLowerCase()
28269 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28270 encoding === 'utf16le' || encoding === 'utf-16le') {
28271 if (arr.length < 2 || val.length < 2) {
28272 return -1
28273 }
28274 indexSize = 2
28275 arrLength /= 2
28276 valLength /= 2
28277 byteOffset /= 2
28278 }
28279 }
28280
28281 function read (buf, i) {
28282 if (indexSize === 1) {
28283 return buf[i]
28284 } else {
28285 return buf.readUInt16BE(i * indexSize)
28286 }
28287 }
28288
28289 var i
28290 if (dir) {
28291 var foundIndex = -1
28292 for (i = byteOffset; i < arrLength; i++) {
28293 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28294 if (foundIndex === -1) foundIndex = i
28295 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28296 } else {
28297 if (foundIndex !== -1) i -= i - foundIndex
28298 foundIndex = -1
28299 }
28300 }
28301 } else {
28302 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28303 for (i = byteOffset; i >= 0; i--) {
28304 var found = true
28305 for (var j = 0; j < valLength; j++) {
28306 if (read(arr, i + j) !== read(val, j)) {
28307 found = false
28308 break
28309 }
28310 }
28311 if (found) return i
28312 }
28313 }
28314
28315 return -1
28316 }
28317
28318 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28319 return this.indexOf(val, byteOffset, encoding) !== -1
28320 }
28321
28322 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28323 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28324 }
28325
28326 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28327 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28328 }
28329
28330 function hexWrite (buf, string, offset, length) {
28331 offset = Number(offset) || 0
28332 var remaining = buf.length - offset
28333 if (!length) {
28334 length = remaining
28335 } else {
28336 length = Number(length)
28337 if (length > remaining) {
28338 length = remaining
28339 }
28340 }
28341
28342 // must be an even number of digits
28343 var strLen = string.length
28344 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28345
28346 if (length > strLen / 2) {
28347 length = strLen / 2
28348 }
28349 for (var i = 0; i < length; ++i) {
28350 var parsed = parseInt(string.substr(i * 2, 2), 16)
28351 if (numberIsNaN(parsed)) return i
28352 buf[offset + i] = parsed
28353 }
28354 return i
28355 }
28356
28357 function utf8Write (buf, string, offset, length) {
28358 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28359 }
28360
28361 function asciiWrite (buf, string, offset, length) {
28362 return blitBuffer(asciiToBytes(string), buf, offset, length)
28363 }
28364
28365 function latin1Write (buf, string, offset, length) {
28366 return asciiWrite(buf, string, offset, length)
28367 }
28368
28369 function base64Write (buf, string, offset, length) {
28370 return blitBuffer(base64ToBytes(string), buf, offset, length)
28371 }
28372
28373 function ucs2Write (buf, string, offset, length) {
28374 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28375 }
28376
28377 Buffer.prototype.write = function write (string, offset, length, encoding) {
28378 // Buffer#write(string)
28379 if (offset === undefined) {
28380 encoding = 'utf8'
28381 length = this.length
28382 offset = 0
28383 // Buffer#write(string, encoding)
28384 } else if (length === undefined && typeof offset === 'string') {
28385 encoding = offset
28386 length = this.length
28387 offset = 0
28388 // Buffer#write(string, offset[, length][, encoding])
28389 } else if (isFinite(offset)) {
28390 offset = offset >>> 0
28391 if (isFinite(length)) {
28392 length = length >>> 0
28393 if (encoding === undefined) encoding = 'utf8'
28394 } else {
28395 encoding = length
28396 length = undefined
28397 }
28398 } else {
28399 throw new Error(
28400 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28401 )
28402 }
28403
28404 var remaining = this.length - offset
28405 if (length === undefined || length > remaining) length = remaining
28406
28407 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28408 throw new RangeError('Attempt to write outside buffer bounds')
28409 }
28410
28411 if (!encoding) encoding = 'utf8'
28412
28413 var loweredCase = false
28414 for (;;) {
28415 switch (encoding) {
28416 case 'hex':
28417 return hexWrite(this, string, offset, length)
28418
28419 case 'utf8':
28420 case 'utf-8':
28421 return utf8Write(this, string, offset, length)
28422
28423 case 'ascii':
28424 return asciiWrite(this, string, offset, length)
28425
28426 case 'latin1':
28427 case 'binary':
28428 return latin1Write(this, string, offset, length)
28429
28430 case 'base64':
28431 // Warning: maxLength not taken into account in base64Write
28432 return base64Write(this, string, offset, length)
28433
28434 case 'ucs2':
28435 case 'ucs-2':
28436 case 'utf16le':
28437 case 'utf-16le':
28438 return ucs2Write(this, string, offset, length)
28439
28440 default:
28441 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28442 encoding = ('' + encoding).toLowerCase()
28443 loweredCase = true
28444 }
28445 }
28446 }
28447
28448 Buffer.prototype.toJSON = function toJSON () {
28449 return {
28450 type: 'Buffer',
28451 data: Array.prototype.slice.call(this._arr || this, 0)
28452 }
28453 }
28454
28455 function base64Slice (buf, start, end) {
28456 if (start === 0 && end === buf.length) {
28457 return base64.fromByteArray(buf)
28458 } else {
28459 return base64.fromByteArray(buf.slice(start, end))
28460 }
28461 }
28462
28463 function utf8Slice (buf, start, end) {
28464 end = Math.min(buf.length, end)
28465 var res = []
28466
28467 var i = start
28468 while (i < end) {
28469 var firstByte = buf[i]
28470 var codePoint = null
28471 var bytesPerSequence = (firstByte > 0xEF) ? 4
28472 : (firstByte > 0xDF) ? 3
28473 : (firstByte > 0xBF) ? 2
28474 : 1
28475
28476 if (i + bytesPerSequence <= end) {
28477 var secondByte, thirdByte, fourthByte, tempCodePoint
28478
28479 switch (bytesPerSequence) {
28480 case 1:
28481 if (firstByte < 0x80) {
28482 codePoint = firstByte
28483 }
28484 break
28485 case 2:
28486 secondByte = buf[i + 1]
28487 if ((secondByte & 0xC0) === 0x80) {
28488 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28489 if (tempCodePoint > 0x7F) {
28490 codePoint = tempCodePoint
28491 }
28492 }
28493 break
28494 case 3:
28495 secondByte = buf[i + 1]
28496 thirdByte = buf[i + 2]
28497 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28498 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28499 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28500 codePoint = tempCodePoint
28501 }
28502 }
28503 break
28504 case 4:
28505 secondByte = buf[i + 1]
28506 thirdByte = buf[i + 2]
28507 fourthByte = buf[i + 3]
28508 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28509 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28510 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28511 codePoint = tempCodePoint
28512 }
28513 }
28514 }
28515 }
28516
28517 if (codePoint === null) {
28518 // we did not generate a valid codePoint so insert a
28519 // replacement char (U+FFFD) and advance only 1 byte
28520 codePoint = 0xFFFD
28521 bytesPerSequence = 1
28522 } else if (codePoint > 0xFFFF) {
28523 // encode to utf16 (surrogate pair dance)
28524 codePoint -= 0x10000
28525 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28526 codePoint = 0xDC00 | codePoint & 0x3FF
28527 }
28528
28529 res.push(codePoint)
28530 i += bytesPerSequence
28531 }
28532
28533 return decodeCodePointsArray(res)
28534 }
28535
28536 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28537 // the lowest limit is Chrome, with 0x10000 args.
28538 // We go 1 magnitude less, for safety
28539 var MAX_ARGUMENTS_LENGTH = 0x1000
28540
28541 function decodeCodePointsArray (codePoints) {
28542 var len = codePoints.length
28543 if (len <= MAX_ARGUMENTS_LENGTH) {
28544 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28545 }
28546
28547 // Decode in chunks to avoid "call stack size exceeded".
28548 var res = ''
28549 var i = 0
28550 while (i < len) {
28551 res += String.fromCharCode.apply(
28552 String,
28553 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28554 )
28555 }
28556 return res
28557 }
28558
28559 function asciiSlice (buf, start, end) {
28560 var ret = ''
28561 end = Math.min(buf.length, end)
28562
28563 for (var i = start; i < end; ++i) {
28564 ret += String.fromCharCode(buf[i] & 0x7F)
28565 }
28566 return ret
28567 }
28568
28569 function latin1Slice (buf, start, end) {
28570 var ret = ''
28571 end = Math.min(buf.length, end)
28572
28573 for (var i = start; i < end; ++i) {
28574 ret += String.fromCharCode(buf[i])
28575 }
28576 return ret
28577 }
28578
28579 function hexSlice (buf, start, end) {
28580 var len = buf.length
28581
28582 if (!start || start < 0) start = 0
28583 if (!end || end < 0 || end > len) end = len
28584
28585 var out = ''
28586 for (var i = start; i < end; ++i) {
28587 out += toHex(buf[i])
28588 }
28589 return out
28590 }
28591
28592 function utf16leSlice (buf, start, end) {
28593 var bytes = buf.slice(start, end)
28594 var res = ''
28595 for (var i = 0; i < bytes.length; i += 2) {
28596 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28597 }
28598 return res
28599 }
28600
28601 Buffer.prototype.slice = function slice (start, end) {
28602 var len = this.length
28603 start = ~~start
28604 end = end === undefined ? len : ~~end
28605
28606 if (start < 0) {
28607 start += len
28608 if (start < 0) start = 0
28609 } else if (start > len) {
28610 start = len
28611 }
28612
28613 if (end < 0) {
28614 end += len
28615 if (end < 0) end = 0
28616 } else if (end > len) {
28617 end = len
28618 }
28619
28620 if (end < start) end = start
28621
28622 var newBuf = this.subarray(start, end)
28623 // Return an augmented `Uint8Array` instance
28624 newBuf.__proto__ = Buffer.prototype
28625 return newBuf
28626 }
28627
28628 /*
28629 * Need to make sure that buffer isn't trying to write out of bounds.
28630 */
28631 function checkOffset (offset, ext, length) {
28632 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28633 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28634 }
28635
28636 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28637 offset = offset >>> 0
28638 byteLength = byteLength >>> 0
28639 if (!noAssert) checkOffset(offset, byteLength, this.length)
28640
28641 var val = this[offset]
28642 var mul = 1
28643 var i = 0
28644 while (++i < byteLength && (mul *= 0x100)) {
28645 val += this[offset + i] * mul
28646 }
28647
28648 return val
28649 }
28650
28651 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28652 offset = offset >>> 0
28653 byteLength = byteLength >>> 0
28654 if (!noAssert) {
28655 checkOffset(offset, byteLength, this.length)
28656 }
28657
28658 var val = this[offset + --byteLength]
28659 var mul = 1
28660 while (byteLength > 0 && (mul *= 0x100)) {
28661 val += this[offset + --byteLength] * mul
28662 }
28663
28664 return val
28665 }
28666
28667 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28668 offset = offset >>> 0
28669 if (!noAssert) checkOffset(offset, 1, this.length)
28670 return this[offset]
28671 }
28672
28673 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28674 offset = offset >>> 0
28675 if (!noAssert) checkOffset(offset, 2, this.length)
28676 return this[offset] | (this[offset + 1] << 8)
28677 }
28678
28679 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28680 offset = offset >>> 0
28681 if (!noAssert) checkOffset(offset, 2, this.length)
28682 return (this[offset] << 8) | this[offset + 1]
28683 }
28684
28685 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28686 offset = offset >>> 0
28687 if (!noAssert) checkOffset(offset, 4, this.length)
28688
28689 return ((this[offset]) |
28690 (this[offset + 1] << 8) |
28691 (this[offset + 2] << 16)) +
28692 (this[offset + 3] * 0x1000000)
28693 }
28694
28695 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28696 offset = offset >>> 0
28697 if (!noAssert) checkOffset(offset, 4, this.length)
28698
28699 return (this[offset] * 0x1000000) +
28700 ((this[offset + 1] << 16) |
28701 (this[offset + 2] << 8) |
28702 this[offset + 3])
28703 }
28704
28705 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28706 offset = offset >>> 0
28707 byteLength = byteLength >>> 0
28708 if (!noAssert) checkOffset(offset, byteLength, this.length)
28709
28710 var val = this[offset]
28711 var mul = 1
28712 var i = 0
28713 while (++i < byteLength && (mul *= 0x100)) {
28714 val += this[offset + i] * mul
28715 }
28716 mul *= 0x80
28717
28718 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28719
28720 return val
28721 }
28722
28723 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28724 offset = offset >>> 0
28725 byteLength = byteLength >>> 0
28726 if (!noAssert) checkOffset(offset, byteLength, this.length)
28727
28728 var i = byteLength
28729 var mul = 1
28730 var val = this[offset + --i]
28731 while (i > 0 && (mul *= 0x100)) {
28732 val += this[offset + --i] * mul
28733 }
28734 mul *= 0x80
28735
28736 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28737
28738 return val
28739 }
28740
28741 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28742 offset = offset >>> 0
28743 if (!noAssert) checkOffset(offset, 1, this.length)
28744 if (!(this[offset] & 0x80)) return (this[offset])
28745 return ((0xff - this[offset] + 1) * -1)
28746 }
28747
28748 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28749 offset = offset >>> 0
28750 if (!noAssert) checkOffset(offset, 2, this.length)
28751 var val = this[offset] | (this[offset + 1] << 8)
28752 return (val & 0x8000) ? val | 0xFFFF0000 : val
28753 }
28754
28755 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28756 offset = offset >>> 0
28757 if (!noAssert) checkOffset(offset, 2, this.length)
28758 var val = this[offset + 1] | (this[offset] << 8)
28759 return (val & 0x8000) ? val | 0xFFFF0000 : val
28760 }
28761
28762 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28763 offset = offset >>> 0
28764 if (!noAssert) checkOffset(offset, 4, this.length)
28765
28766 return (this[offset]) |
28767 (this[offset + 1] << 8) |
28768 (this[offset + 2] << 16) |
28769 (this[offset + 3] << 24)
28770 }
28771
28772 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28773 offset = offset >>> 0
28774 if (!noAssert) checkOffset(offset, 4, this.length)
28775
28776 return (this[offset] << 24) |
28777 (this[offset + 1] << 16) |
28778 (this[offset + 2] << 8) |
28779 (this[offset + 3])
28780 }
28781
28782 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28783 offset = offset >>> 0
28784 if (!noAssert) checkOffset(offset, 4, this.length)
28785 return ieee754.read(this, offset, true, 23, 4)
28786 }
28787
28788 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28789 offset = offset >>> 0
28790 if (!noAssert) checkOffset(offset, 4, this.length)
28791 return ieee754.read(this, offset, false, 23, 4)
28792 }
28793
28794 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28795 offset = offset >>> 0
28796 if (!noAssert) checkOffset(offset, 8, this.length)
28797 return ieee754.read(this, offset, true, 52, 8)
28798 }
28799
28800 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28801 offset = offset >>> 0
28802 if (!noAssert) checkOffset(offset, 8, this.length)
28803 return ieee754.read(this, offset, false, 52, 8)
28804 }
28805
28806 function checkInt (buf, value, offset, ext, max, min) {
28807 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28808 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28809 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28810 }
28811
28812 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28813 value = +value
28814 offset = offset >>> 0
28815 byteLength = byteLength >>> 0
28816 if (!noAssert) {
28817 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28818 checkInt(this, value, offset, byteLength, maxBytes, 0)
28819 }
28820
28821 var mul = 1
28822 var i = 0
28823 this[offset] = value & 0xFF
28824 while (++i < byteLength && (mul *= 0x100)) {
28825 this[offset + i] = (value / mul) & 0xFF
28826 }
28827
28828 return offset + byteLength
28829 }
28830
28831 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28832 value = +value
28833 offset = offset >>> 0
28834 byteLength = byteLength >>> 0
28835 if (!noAssert) {
28836 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28837 checkInt(this, value, offset, byteLength, maxBytes, 0)
28838 }
28839
28840 var i = byteLength - 1
28841 var mul = 1
28842 this[offset + i] = value & 0xFF
28843 while (--i >= 0 && (mul *= 0x100)) {
28844 this[offset + i] = (value / mul) & 0xFF
28845 }
28846
28847 return offset + byteLength
28848 }
28849
28850 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28851 value = +value
28852 offset = offset >>> 0
28853 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28854 this[offset] = (value & 0xff)
28855 return offset + 1
28856 }
28857
28858 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28859 value = +value
28860 offset = offset >>> 0
28861 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28862 this[offset] = (value & 0xff)
28863 this[offset + 1] = (value >>> 8)
28864 return offset + 2
28865 }
28866
28867 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28868 value = +value
28869 offset = offset >>> 0
28870 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28871 this[offset] = (value >>> 8)
28872 this[offset + 1] = (value & 0xff)
28873 return offset + 2
28874 }
28875
28876 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28877 value = +value
28878 offset = offset >>> 0
28879 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28880 this[offset + 3] = (value >>> 24)
28881 this[offset + 2] = (value >>> 16)
28882 this[offset + 1] = (value >>> 8)
28883 this[offset] = (value & 0xff)
28884 return offset + 4
28885 }
28886
28887 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28888 value = +value
28889 offset = offset >>> 0
28890 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28891 this[offset] = (value >>> 24)
28892 this[offset + 1] = (value >>> 16)
28893 this[offset + 2] = (value >>> 8)
28894 this[offset + 3] = (value & 0xff)
28895 return offset + 4
28896 }
28897
28898 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28899 value = +value
28900 offset = offset >>> 0
28901 if (!noAssert) {
28902 var limit = Math.pow(2, (8 * byteLength) - 1)
28903
28904 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28905 }
28906
28907 var i = 0
28908 var mul = 1
28909 var sub = 0
28910 this[offset] = value & 0xFF
28911 while (++i < byteLength && (mul *= 0x100)) {
28912 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28913 sub = 1
28914 }
28915 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28916 }
28917
28918 return offset + byteLength
28919 }
28920
28921 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28922 value = +value
28923 offset = offset >>> 0
28924 if (!noAssert) {
28925 var limit = Math.pow(2, (8 * byteLength) - 1)
28926
28927 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28928 }
28929
28930 var i = byteLength - 1
28931 var mul = 1
28932 var sub = 0
28933 this[offset + i] = value & 0xFF
28934 while (--i >= 0 && (mul *= 0x100)) {
28935 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28936 sub = 1
28937 }
28938 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28939 }
28940
28941 return offset + byteLength
28942 }
28943
28944 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28945 value = +value
28946 offset = offset >>> 0
28947 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28948 if (value < 0) value = 0xff + value + 1
28949 this[offset] = (value & 0xff)
28950 return offset + 1
28951 }
28952
28953 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28954 value = +value
28955 offset = offset >>> 0
28956 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28957 this[offset] = (value & 0xff)
28958 this[offset + 1] = (value >>> 8)
28959 return offset + 2
28960 }
28961
28962 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28963 value = +value
28964 offset = offset >>> 0
28965 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28966 this[offset] = (value >>> 8)
28967 this[offset + 1] = (value & 0xff)
28968 return offset + 2
28969 }
28970
28971 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28972 value = +value
28973 offset = offset >>> 0
28974 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28975 this[offset] = (value & 0xff)
28976 this[offset + 1] = (value >>> 8)
28977 this[offset + 2] = (value >>> 16)
28978 this[offset + 3] = (value >>> 24)
28979 return offset + 4
28980 }
28981
28982 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28983 value = +value
28984 offset = offset >>> 0
28985 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28986 if (value < 0) value = 0xffffffff + value + 1
28987 this[offset] = (value >>> 24)
28988 this[offset + 1] = (value >>> 16)
28989 this[offset + 2] = (value >>> 8)
28990 this[offset + 3] = (value & 0xff)
28991 return offset + 4
28992 }
28993
28994 function checkIEEE754 (buf, value, offset, ext, max, min) {
28995 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28996 if (offset < 0) throw new RangeError('Index out of range')
28997 }
28998
28999 function writeFloat (buf, value, offset, littleEndian, noAssert) {
29000 value = +value
29001 offset = offset >>> 0
29002 if (!noAssert) {
29003 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
29004 }
29005 ieee754.write(buf, value, offset, littleEndian, 23, 4)
29006 return offset + 4
29007 }
29008
29009 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
29010 return writeFloat(this, value, offset, true, noAssert)
29011 }
29012
29013 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
29014 return writeFloat(this, value, offset, false, noAssert)
29015 }
29016
29017 function writeDouble (buf, value, offset, littleEndian, noAssert) {
29018 value = +value
29019 offset = offset >>> 0
29020 if (!noAssert) {
29021 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
29022 }
29023 ieee754.write(buf, value, offset, littleEndian, 52, 8)
29024 return offset + 8
29025 }
29026
29027 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
29028 return writeDouble(this, value, offset, true, noAssert)
29029 }
29030
29031 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29032 return writeDouble(this, value, offset, false, noAssert)
29033 }
29034
29035 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29036 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29037 if (!start) start = 0
29038 if (!end && end !== 0) end = this.length
29039 if (targetStart >= target.length) targetStart = target.length
29040 if (!targetStart) targetStart = 0
29041 if (end > 0 && end < start) end = start
29042
29043 // Copy 0 bytes; we're done
29044 if (end === start) return 0
29045 if (target.length === 0 || this.length === 0) return 0
29046
29047 // Fatal error conditions
29048 if (targetStart < 0) {
29049 throw new RangeError('targetStart out of bounds')
29050 }
29051 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29052 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29053
29054 // Are we oob?
29055 if (end > this.length) end = this.length
29056 if (target.length - targetStart < end - start) {
29057 end = target.length - targetStart + start
29058 }
29059
29060 var len = end - start
29061 var i
29062
29063 if (this === target && start < targetStart && targetStart < end) {
29064 // descending copy from end
29065 for (i = len - 1; i >= 0; --i) {
29066 target[i + targetStart] = this[i + start]
29067 }
29068 } else if (len < 1000) {
29069 // ascending copy from start
29070 for (i = 0; i < len; ++i) {
29071 target[i + targetStart] = this[i + start]
29072 }
29073 } else {
29074 Uint8Array.prototype.set.call(
29075 target,
29076 this.subarray(start, start + len),
29077 targetStart
29078 )
29079 }
29080
29081 return len
29082 }
29083
29084 // Usage:
29085 // buffer.fill(number[, offset[, end]])
29086 // buffer.fill(buffer[, offset[, end]])
29087 // buffer.fill(string[, offset[, end]][, encoding])
29088 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29089 // Handle string cases:
29090 if (typeof val === 'string') {
29091 if (typeof start === 'string') {
29092 encoding = start
29093 start = 0
29094 end = this.length
29095 } else if (typeof end === 'string') {
29096 encoding = end
29097 end = this.length
29098 }
29099 if (val.length === 1) {
29100 var code = val.charCodeAt(0)
29101 if (code < 256) {
29102 val = code
29103 }
29104 }
29105 if (encoding !== undefined && typeof encoding !== 'string') {
29106 throw new TypeError('encoding must be a string')
29107 }
29108 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29109 throw new TypeError('Unknown encoding: ' + encoding)
29110 }
29111 } else if (typeof val === 'number') {
29112 val = val & 255
29113 }
29114
29115 // Invalid ranges are not set to a default, so can range check early.
29116 if (start < 0 || this.length < start || this.length < end) {
29117 throw new RangeError('Out of range index')
29118 }
29119
29120 if (end <= start) {
29121 return this
29122 }
29123
29124 start = start >>> 0
29125 end = end === undefined ? this.length : end >>> 0
29126
29127 if (!val) val = 0
29128
29129 var i
29130 if (typeof val === 'number') {
29131 for (i = start; i < end; ++i) {
29132 this[i] = val
29133 }
29134 } else {
29135 var bytes = Buffer.isBuffer(val)
29136 ? val
29137 : new Buffer(val, encoding)
29138 var len = bytes.length
29139 for (i = 0; i < end - start; ++i) {
29140 this[i + start] = bytes[i % len]
29141 }
29142 }
29143
29144 return this
29145 }
29146
29147 // HELPER FUNCTIONS
29148 // ================
29149
29150 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29151
29152 function base64clean (str) {
29153 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29154 str = str.trim().replace(INVALID_BASE64_RE, '')
29155 // Node converts strings with length < 2 to ''
29156 if (str.length < 2) return ''
29157 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29158 while (str.length % 4 !== 0) {
29159 str = str + '='
29160 }
29161 return str
29162 }
29163
29164 function toHex (n) {
29165 if (n < 16) return '0' + n.toString(16)
29166 return n.toString(16)
29167 }
29168
29169 function utf8ToBytes (string, units) {
29170 units = units || Infinity
29171 var codePoint
29172 var length = string.length
29173 var leadSurrogate = null
29174 var bytes = []
29175
29176 for (var i = 0; i < length; ++i) {
29177 codePoint = string.charCodeAt(i)
29178
29179 // is surrogate component
29180 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29181 // last char was a lead
29182 if (!leadSurrogate) {
29183 // no lead yet
29184 if (codePoint > 0xDBFF) {
29185 // unexpected trail
29186 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29187 continue
29188 } else if (i + 1 === length) {
29189 // unpaired lead
29190 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29191 continue
29192 }
29193
29194 // valid lead
29195 leadSurrogate = codePoint
29196
29197 continue
29198 }
29199
29200 // 2 leads in a row
29201 if (codePoint < 0xDC00) {
29202 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29203 leadSurrogate = codePoint
29204 continue
29205 }
29206
29207 // valid surrogate pair
29208 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29209 } else if (leadSurrogate) {
29210 // valid bmp char, but last char was a lead
29211 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29212 }
29213
29214 leadSurrogate = null
29215
29216 // encode utf8
29217 if (codePoint < 0x80) {
29218 if ((units -= 1) < 0) break
29219 bytes.push(codePoint)
29220 } else if (codePoint < 0x800) {
29221 if ((units -= 2) < 0) break
29222 bytes.push(
29223 codePoint >> 0x6 | 0xC0,
29224 codePoint & 0x3F | 0x80
29225 )
29226 } else if (codePoint < 0x10000) {
29227 if ((units -= 3) < 0) break
29228 bytes.push(
29229 codePoint >> 0xC | 0xE0,
29230 codePoint >> 0x6 & 0x3F | 0x80,
29231 codePoint & 0x3F | 0x80
29232 )
29233 } else if (codePoint < 0x110000) {
29234 if ((units -= 4) < 0) break
29235 bytes.push(
29236 codePoint >> 0x12 | 0xF0,
29237 codePoint >> 0xC & 0x3F | 0x80,
29238 codePoint >> 0x6 & 0x3F | 0x80,
29239 codePoint & 0x3F | 0x80
29240 )
29241 } else {
29242 throw new Error('Invalid code point')
29243 }
29244 }
29245
29246 return bytes
29247 }
29248
29249 function asciiToBytes (str) {
29250 var byteArray = []
29251 for (var i = 0; i < str.length; ++i) {
29252 // Node's code seems to be doing this and not & 0x7F..
29253 byteArray.push(str.charCodeAt(i) & 0xFF)
29254 }
29255 return byteArray
29256 }
29257
29258 function utf16leToBytes (str, units) {
29259 var c, hi, lo
29260 var byteArray = []
29261 for (var i = 0; i < str.length; ++i) {
29262 if ((units -= 2) < 0) break
29263
29264 c = str.charCodeAt(i)
29265 hi = c >> 8
29266 lo = c % 256
29267 byteArray.push(lo)
29268 byteArray.push(hi)
29269 }
29270
29271 return byteArray
29272 }
29273
29274 function base64ToBytes (str) {
29275 return base64.toByteArray(base64clean(str))
29276 }
29277
29278 function blitBuffer (src, dst, offset, length) {
29279 for (var i = 0; i < length; ++i) {
29280 if ((i + offset >= dst.length) || (i >= src.length)) break
29281 dst[i + offset] = src[i]
29282 }
29283 return i
29284 }
29285
29286 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29287 function isArrayBufferView (obj) {
29288 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29289 }
29290
29291 function numberIsNaN (obj) {
29292 return obj !== obj // eslint-disable-line no-self-compare
29293 }
29294
29295 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29296 (function (Buffer){
29297 // Copyright Joyent, Inc. and other Node contributors.
29298 //
29299 // Permission is hereby granted, free of charge, to any person obtaining a
29300 // copy of this software and associated documentation files (the
29301 // "Software"), to deal in the Software without restriction, including
29302 // without limitation the rights to use, copy, modify, merge, publish,
29303 // distribute, sublicense, and/or sell copies of the Software, and to permit
29304 // persons to whom the Software is furnished to do so, subject to the
29305 // following conditions:
29306 //
29307 // The above copyright notice and this permission notice shall be included
29308 // in all copies or substantial portions of the Software.
29309 //
29310 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29311 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29312 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29313 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29314 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29315 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29316 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29317
29318 // NOTE: These type checking functions intentionally don't use `instanceof`
29319 // because it is fragile and can be easily faked with `Object.create()`.
29320
29321 function isArray(arg) {
29322 if (Array.isArray) {
29323 return Array.isArray(arg);
29324 }
29325 return objectToString(arg) === '[object Array]';
29326 }
29327 exports.isArray = isArray;
29328
29329 function isBoolean(arg) {
29330 return typeof arg === 'boolean';
29331 }
29332 exports.isBoolean = isBoolean;
29333
29334 function isNull(arg) {
29335 return arg === null;
29336 }
29337 exports.isNull = isNull;
29338
29339 function isNullOrUndefined(arg) {
29340 return arg == null;
29341 }
29342 exports.isNullOrUndefined = isNullOrUndefined;
29343
29344 function isNumber(arg) {
29345 return typeof arg === 'number';
29346 }
29347 exports.isNumber = isNumber;
29348
29349 function isString(arg) {
29350 return typeof arg === 'string';
29351 }
29352 exports.isString = isString;
29353
29354 function isSymbol(arg) {
29355 return typeof arg === 'symbol';
29356 }
29357 exports.isSymbol = isSymbol;
29358
29359 function isUndefined(arg) {
29360 return arg === void 0;
29361 }
29362 exports.isUndefined = isUndefined;
29363
29364 function isRegExp(re) {
29365 return objectToString(re) === '[object RegExp]';
29366 }
29367 exports.isRegExp = isRegExp;
29368
29369 function isObject(arg) {
29370 return typeof arg === 'object' && arg !== null;
29371 }
29372 exports.isObject = isObject;
29373
29374 function isDate(d) {
29375 return objectToString(d) === '[object Date]';
29376 }
29377 exports.isDate = isDate;
29378
29379 function isError(e) {
29380 return (objectToString(e) === '[object Error]' || e instanceof Error);
29381 }
29382 exports.isError = isError;
29383
29384 function isFunction(arg) {
29385 return typeof arg === 'function';
29386 }
29387 exports.isFunction = isFunction;
29388
29389 function isPrimitive(arg) {
29390 return arg === null ||
29391 typeof arg === 'boolean' ||
29392 typeof arg === 'number' ||
29393 typeof arg === 'string' ||
29394 typeof arg === 'symbol' || // ES6 symbol
29395 typeof arg === 'undefined';
29396 }
29397 exports.isPrimitive = isPrimitive;
29398
29399 exports.isBuffer = Buffer.isBuffer;
29400
29401 function objectToString(o) {
29402 return Object.prototype.toString.call(o);
29403 }
29404
29405 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29406 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29407 // Copyright Joyent, Inc. and other Node contributors.
29408 //
29409 // Permission is hereby granted, free of charge, to any person obtaining a
29410 // copy of this software and associated documentation files (the
29411 // "Software"), to deal in the Software without restriction, including
29412 // without limitation the rights to use, copy, modify, merge, publish,
29413 // distribute, sublicense, and/or sell copies of the Software, and to permit
29414 // persons to whom the Software is furnished to do so, subject to the
29415 // following conditions:
29416 //
29417 // The above copyright notice and this permission notice shall be included
29418 // in all copies or substantial portions of the Software.
29419 //
29420 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29421 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29422 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29423 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29424 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29425 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29426 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29427
29428 function EventEmitter() {
29429 this._events = this._events || {};
29430 this._maxListeners = this._maxListeners || undefined;
29431 }
29432 module.exports = EventEmitter;
29433
29434 // Backwards-compat with node 0.10.x
29435 EventEmitter.EventEmitter = EventEmitter;
29436
29437 EventEmitter.prototype._events = undefined;
29438 EventEmitter.prototype._maxListeners = undefined;
29439
29440 // By default EventEmitters will print a warning if more than 10 listeners are
29441 // added to it. This is a useful default which helps finding memory leaks.
29442 EventEmitter.defaultMaxListeners = 10;
29443
29444 // Obviously not all Emitters should be limited to 10. This function allows
29445 // that to be increased. Set to zero for unlimited.
29446 EventEmitter.prototype.setMaxListeners = function(n) {
29447 if (!isNumber(n) || n < 0 || isNaN(n))
29448 throw TypeError('n must be a positive number');
29449 this._maxListeners = n;
29450 return this;
29451 };
29452
29453 EventEmitter.prototype.emit = function(type) {
29454 var er, handler, len, args, i, listeners;
29455
29456 if (!this._events)
29457 this._events = {};
29458
29459 // If there is no 'error' event listener then throw.
29460 if (type === 'error') {
29461 if (!this._events.error ||
29462 (isObject(this._events.error) && !this._events.error.length)) {
29463 er = arguments[1];
29464 if (er instanceof Error) {
29465 throw er; // Unhandled 'error' event
29466 } else {
29467 // At least give some kind of context to the user
29468 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29469 err.context = er;
29470 throw err;
29471 }
29472 }
29473 }
29474
29475 handler = this._events[type];
29476
29477 if (isUndefined(handler))
29478 return false;
29479
29480 if (isFunction(handler)) {
29481 switch (arguments.length) {
29482 // fast cases
29483 case 1:
29484 handler.call(this);
29485 break;
29486 case 2:
29487 handler.call(this, arguments[1]);
29488 break;
29489 case 3:
29490 handler.call(this, arguments[1], arguments[2]);
29491 break;
29492 // slower
29493 default:
29494 args = Array.prototype.slice.call(arguments, 1);
29495 handler.apply(this, args);
29496 }
29497 } else if (isObject(handler)) {
29498 args = Array.prototype.slice.call(arguments, 1);
29499 listeners = handler.slice();
29500 len = listeners.length;
29501 for (i = 0; i < len; i++)
29502 listeners[i].apply(this, args);
29503 }
29504
29505 return true;
29506 };
29507
29508 EventEmitter.prototype.addListener = function(type, listener) {
29509 var m;
29510
29511 if (!isFunction(listener))
29512 throw TypeError('listener must be a function');
29513
29514 if (!this._events)
29515 this._events = {};
29516
29517 // To avoid recursion in the case that type === "newListener"! Before
29518 // adding it to the listeners, first emit "newListener".
29519 if (this._events.newListener)
29520 this.emit('newListener', type,
29521 isFunction(listener.listener) ?
29522 listener.listener : listener);
29523
29524 if (!this._events[type])
29525 // Optimize the case of one listener. Don't need the extra array object.
29526 this._events[type] = listener;
29527 else if (isObject(this._events[type]))
29528 // If we've already got an array, just append.
29529 this._events[type].push(listener);
29530 else
29531 // Adding the second element, need to change to array.
29532 this._events[type] = [this._events[type], listener];
29533
29534 // Check for listener leak
29535 if (isObject(this._events[type]) && !this._events[type].warned) {
29536 if (!isUndefined(this._maxListeners)) {
29537 m = this._maxListeners;
29538 } else {
29539 m = EventEmitter.defaultMaxListeners;
29540 }
29541
29542 if (m && m > 0 && this._events[type].length > m) {
29543 this._events[type].warned = true;
29544 console.error('(node) warning: possible EventEmitter memory ' +
29545 'leak detected. %d listeners added. ' +
29546 'Use emitter.setMaxListeners() to increase limit.',
29547 this._events[type].length);
29548 if (typeof console.trace === 'function') {
29549 // not supported in IE 10
29550 console.trace();
29551 }
29552 }
29553 }
29554
29555 return this;
29556 };
29557
29558 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29559
29560 EventEmitter.prototype.once = function(type, listener) {
29561 if (!isFunction(listener))
29562 throw TypeError('listener must be a function');
29563
29564 var fired = false;
29565
29566 function g() {
29567 this.removeListener(type, g);
29568
29569 if (!fired) {
29570 fired = true;
29571 listener.apply(this, arguments);
29572 }
29573 }
29574
29575 g.listener = listener;
29576 this.on(type, g);
29577
29578 return this;
29579 };
29580
29581 // emits a 'removeListener' event iff the listener was removed
29582 EventEmitter.prototype.removeListener = function(type, listener) {
29583 var list, position, length, i;
29584
29585 if (!isFunction(listener))
29586 throw TypeError('listener must be a function');
29587
29588 if (!this._events || !this._events[type])
29589 return this;
29590
29591 list = this._events[type];
29592 length = list.length;
29593 position = -1;
29594
29595 if (list === listener ||
29596 (isFunction(list.listener) && list.listener === listener)) {
29597 delete this._events[type];
29598 if (this._events.removeListener)
29599 this.emit('removeListener', type, listener);
29600
29601 } else if (isObject(list)) {
29602 for (i = length; i-- > 0;) {
29603 if (list[i] === listener ||
29604 (list[i].listener && list[i].listener === listener)) {
29605 position = i;
29606 break;
29607 }
29608 }
29609
29610 if (position < 0)
29611 return this;
29612
29613 if (list.length === 1) {
29614 list.length = 0;
29615 delete this._events[type];
29616 } else {
29617 list.splice(position, 1);
29618 }
29619
29620 if (this._events.removeListener)
29621 this.emit('removeListener', type, listener);
29622 }
29623
29624 return this;
29625 };
29626
29627 EventEmitter.prototype.removeAllListeners = function(type) {
29628 var key, listeners;
29629
29630 if (!this._events)
29631 return this;
29632
29633 // not listening for removeListener, no need to emit
29634 if (!this._events.removeListener) {
29635 if (arguments.length === 0)
29636 this._events = {};
29637 else if (this._events[type])
29638 delete this._events[type];
29639 return this;
29640 }
29641
29642 // emit removeListener for all listeners on all events
29643 if (arguments.length === 0) {
29644 for (key in this._events) {
29645 if (key === 'removeListener') continue;
29646 this.removeAllListeners(key);
29647 }
29648 this.removeAllListeners('removeListener');
29649 this._events = {};
29650 return this;
29651 }
29652
29653 listeners = this._events[type];
29654
29655 if (isFunction(listeners)) {
29656 this.removeListener(type, listeners);
29657 } else if (listeners) {
29658 // LIFO order
29659 while (listeners.length)
29660 this.removeListener(type, listeners[listeners.length - 1]);
29661 }
29662 delete this._events[type];
29663
29664 return this;
29665 };
29666
29667 EventEmitter.prototype.listeners = function(type) {
29668 var ret;
29669 if (!this._events || !this._events[type])
29670 ret = [];
29671 else if (isFunction(this._events[type]))
29672 ret = [this._events[type]];
29673 else
29674 ret = this._events[type].slice();
29675 return ret;
29676 };
29677
29678 EventEmitter.prototype.listenerCount = function(type) {
29679 if (this._events) {
29680 var evlistener = this._events[type];
29681
29682 if (isFunction(evlistener))
29683 return 1;
29684 else if (evlistener)
29685 return evlistener.length;
29686 }
29687 return 0;
29688 };
29689
29690 EventEmitter.listenerCount = function(emitter, type) {
29691 return emitter.listenerCount(type);
29692 };
29693
29694 function isFunction(arg) {
29695 return typeof arg === 'function';
29696 }
29697
29698 function isNumber(arg) {
29699 return typeof arg === 'number';
29700 }
29701
29702 function isObject(arg) {
29703 return typeof arg === 'object' && arg !== null;
29704 }
29705
29706 function isUndefined(arg) {
29707 return arg === void 0;
29708 }
29709
29710 },{}],8:[function(require,module,exports){
29711 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29712 var e, m
29713 var eLen = nBytes * 8 - mLen - 1
29714 var eMax = (1 << eLen) - 1
29715 var eBias = eMax >> 1
29716 var nBits = -7
29717 var i = isLE ? (nBytes - 1) : 0
29718 var d = isLE ? -1 : 1
29719 var s = buffer[offset + i]
29720
29721 i += d
29722
29723 e = s & ((1 << (-nBits)) - 1)
29724 s >>= (-nBits)
29725 nBits += eLen
29726 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29727
29728 m = e & ((1 << (-nBits)) - 1)
29729 e >>= (-nBits)
29730 nBits += mLen
29731 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29732
29733 if (e === 0) {
29734 e = 1 - eBias
29735 } else if (e === eMax) {
29736 return m ? NaN : ((s ? -1 : 1) * Infinity)
29737 } else {
29738 m = m + Math.pow(2, mLen)
29739 e = e - eBias
29740 }
29741 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29742 }
29743
29744 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29745 var e, m, c
29746 var eLen = nBytes * 8 - mLen - 1
29747 var eMax = (1 << eLen) - 1
29748 var eBias = eMax >> 1
29749 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29750 var i = isLE ? 0 : (nBytes - 1)
29751 var d = isLE ? 1 : -1
29752 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29753
29754 value = Math.abs(value)
29755
29756 if (isNaN(value) || value === Infinity) {
29757 m = isNaN(value) ? 1 : 0
29758 e = eMax
29759 } else {
29760 e = Math.floor(Math.log(value) / Math.LN2)
29761 if (value * (c = Math.pow(2, -e)) < 1) {
29762 e--
29763 c *= 2
29764 }
29765 if (e + eBias >= 1) {
29766 value += rt / c
29767 } else {
29768 value += rt * Math.pow(2, 1 - eBias)
29769 }
29770 if (value * c >= 2) {
29771 e++
29772 c /= 2
29773 }
29774
29775 if (e + eBias >= eMax) {
29776 m = 0
29777 e = eMax
29778 } else if (e + eBias >= 1) {
29779 m = (value * c - 1) * Math.pow(2, mLen)
29780 e = e + eBias
29781 } else {
29782 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29783 e = 0
29784 }
29785 }
29786
29787 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29788
29789 e = (e << mLen) | m
29790 eLen += mLen
29791 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29792
29793 buffer[offset + i - d] |= s * 128
29794 }
29795
29796 },{}],9:[function(require,module,exports){
29797 if (typeof Object.create === 'function') {
29798 // implementation from standard node.js 'util' module
29799 module.exports = function inherits(ctor, superCtor) {
29800 ctor.super_ = superCtor
29801 ctor.prototype = Object.create(superCtor.prototype, {
29802 constructor: {
29803 value: ctor,
29804 enumerable: false,
29805 writable: true,
29806 configurable: true
29807 }
29808 });
29809 };
29810 } else {
29811 // old school shim for old browsers
29812 module.exports = function inherits(ctor, superCtor) {
29813 ctor.super_ = superCtor
29814 var TempCtor = function () {}
29815 TempCtor.prototype = superCtor.prototype
29816 ctor.prototype = new TempCtor()
29817 ctor.prototype.constructor = ctor
29818 }
29819 }
29820
29821 },{}],10:[function(require,module,exports){
29822 /*!
29823 * Determine if an object is a Buffer
29824 *
29825 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29826 * @license MIT
29827 */
29828
29829 // The _isBuffer check is for Safari 5-7 support, because it's missing
29830 // Object.prototype.constructor. Remove this eventually
29831 module.exports = function (obj) {
29832 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29833 }
29834
29835 function isBuffer (obj) {
29836 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29837 }
29838
29839 // For Node v0.10 support. Remove this eventually.
29840 function isSlowBuffer (obj) {
29841 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29842 }
29843
29844 },{}],11:[function(require,module,exports){
29845 var toString = {}.toString;
29846
29847 module.exports = Array.isArray || function (arr) {
29848 return toString.call(arr) == '[object Array]';
29849 };
29850
29851 },{}],12:[function(require,module,exports){
29852 (function (process){
29853 'use strict';
29854
29855 if (!process.version ||
29856 process.version.indexOf('v0.') === 0 ||
29857 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29858 module.exports = nextTick;
29859 } else {
29860 module.exports = process.nextTick;
29861 }
29862
29863 function nextTick(fn, arg1, arg2, arg3) {
29864 if (typeof fn !== 'function') {
29865 throw new TypeError('"callback" argument must be a function');
29866 }
29867 var len = arguments.length;
29868 var args, i;
29869 switch (len) {
29870 case 0:
29871 case 1:
29872 return process.nextTick(fn);
29873 case 2:
29874 return process.nextTick(function afterTickOne() {
29875 fn.call(null, arg1);
29876 });
29877 case 3:
29878 return process.nextTick(function afterTickTwo() {
29879 fn.call(null, arg1, arg2);
29880 });
29881 case 4:
29882 return process.nextTick(function afterTickThree() {
29883 fn.call(null, arg1, arg2, arg3);
29884 });
29885 default:
29886 args = new Array(len - 1);
29887 i = 0;
29888 while (i < args.length) {
29889 args[i++] = arguments[i];
29890 }
29891 return process.nextTick(function afterTick() {
29892 fn.apply(null, args);
29893 });
29894 }
29895 }
29896
29897 }).call(this,require('_process'))
29898 },{"_process":13}],13:[function(require,module,exports){
29899 // shim for using process in browser
29900 var process = module.exports = {};
29901
29902 // cached from whatever global is present so that test runners that stub it
29903 // don't break things. But we need to wrap it in a try catch in case it is
29904 // wrapped in strict mode code which doesn't define any globals. It's inside a
29905 // function because try/catches deoptimize in certain engines.
29906
29907 var cachedSetTimeout;
29908 var cachedClearTimeout;
29909
29910 function defaultSetTimout() {
29911 throw new Error('setTimeout has not been defined');
29912 }
29913 function defaultClearTimeout () {
29914 throw new Error('clearTimeout has not been defined');
29915 }
29916 (function () {
29917 try {
29918 if (typeof setTimeout === 'function') {
29919 cachedSetTimeout = setTimeout;
29920 } else {
29921 cachedSetTimeout = defaultSetTimout;
29922 }
29923 } catch (e) {
29924 cachedSetTimeout = defaultSetTimout;
29925 }
29926 try {
29927 if (typeof clearTimeout === 'function') {
29928 cachedClearTimeout = clearTimeout;
29929 } else {
29930 cachedClearTimeout = defaultClearTimeout;
29931 }
29932 } catch (e) {
29933 cachedClearTimeout = defaultClearTimeout;
29934 }
29935 } ())
29936 function runTimeout(fun) {
29937 if (cachedSetTimeout === setTimeout) {
29938 //normal enviroments in sane situations
29939 return setTimeout(fun, 0);
29940 }
29941 // if setTimeout wasn't available but was latter defined
29942 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29943 cachedSetTimeout = setTimeout;
29944 return setTimeout(fun, 0);
29945 }
29946 try {
29947 // when when somebody has screwed with setTimeout but no I.E. maddness
29948 return cachedSetTimeout(fun, 0);
29949 } catch(e){
29950 try {
29951 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29952 return cachedSetTimeout.call(null, fun, 0);
29953 } catch(e){
29954 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
29955 return cachedSetTimeout.call(this, fun, 0);
29956 }
29957 }
29958
29959
29960 }
29961 function runClearTimeout(marker) {
29962 if (cachedClearTimeout === clearTimeout) {
29963 //normal enviroments in sane situations
29964 return clearTimeout(marker);
29965 }
29966 // if clearTimeout wasn't available but was latter defined
29967 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29968 cachedClearTimeout = clearTimeout;
29969 return clearTimeout(marker);
29970 }
29971 try {
29972 // when when somebody has screwed with setTimeout but no I.E. maddness
29973 return cachedClearTimeout(marker);
29974 } catch (e){
29975 try {
29976 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29977 return cachedClearTimeout.call(null, marker);
29978 } catch (e){
29979 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
29980 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29981 return cachedClearTimeout.call(this, marker);
29982 }
29983 }
29984
29985
29986
29987 }
29988 var queue = [];
29989 var draining = false;
29990 var currentQueue;
29991 var queueIndex = -1;
29992
29993 function cleanUpNextTick() {
29994 if (!draining || !currentQueue) {
29995 return;
29996 }
29997 draining = false;
29998 if (currentQueue.length) {
29999 queue = currentQueue.concat(queue);
30000 } else {
30001 queueIndex = -1;
30002 }
30003 if (queue.length) {
30004 drainQueue();
30005 }
30006 }
30007
30008 function drainQueue() {
30009 if (draining) {
30010 return;
30011 }
30012 var timeout = runTimeout(cleanUpNextTick);
30013 draining = true;
30014
30015 var len = queue.length;
30016 while(len) {
30017 currentQueue = queue;
30018 queue = [];
30019 while (++queueIndex < len) {
30020 if (currentQueue) {
30021 currentQueue[queueIndex].run();
30022 }
30023 }
30024 queueIndex = -1;
30025 len = queue.length;
30026 }
30027 currentQueue = null;
30028 draining = false;
30029 runClearTimeout(timeout);
30030 }
30031
30032 process.nextTick = function (fun) {
30033 var args = new Array(arguments.length - 1);
30034 if (arguments.length > 1) {
30035 for (var i = 1; i < arguments.length; i++) {
30036 args[i - 1] = arguments[i];
30037 }
30038 }
30039 queue.push(new Item(fun, args));
30040 if (queue.length === 1 && !draining) {
30041 runTimeout(drainQueue);
30042 }
30043 };
30044
30045 // v8 likes predictible objects
30046 function Item(fun, array) {
30047 this.fun = fun;
30048 this.array = array;
30049 }
30050 Item.prototype.run = function () {
30051 this.fun.apply(null, this.array);
30052 };
30053 process.title = 'browser';
30054 process.browser = true;
30055 process.env = {};
30056 process.argv = [];
30057 process.version = ''; // empty string to avoid regexp issues
30058 process.versions = {};
30059
30060 function noop() {}
30061
30062 process.on = noop;
30063 process.addListener = noop;
30064 process.once = noop;
30065 process.off = noop;
30066 process.removeListener = noop;
30067 process.removeAllListeners = noop;
30068 process.emit = noop;
30069 process.prependListener = noop;
30070 process.prependOnceListener = noop;
30071
30072 process.listeners = function (name) { return [] }
30073
30074 process.binding = function (name) {
30075 throw new Error('process.binding is not supported');
30076 };
30077
30078 process.cwd = function () { return '/' };
30079 process.chdir = function (dir) {
30080 throw new Error('process.chdir is not supported');
30081 };
30082 process.umask = function() { return 0; };
30083
30084 },{}],14:[function(require,module,exports){
30085 module.exports = require('./lib/_stream_duplex.js');
30086
30087 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30088 // a duplex stream is just a stream that is both readable and writable.
30089 // Since JS doesn't have multiple prototypal inheritance, this class
30090 // prototypally inherits from Readable, and then parasitically from
30091 // Writable.
30092
30093 'use strict';
30094
30095 /*<replacement>*/
30096
30097 var objectKeys = Object.keys || function (obj) {
30098 var keys = [];
30099 for (var key in obj) {
30100 keys.push(key);
30101 }return keys;
30102 };
30103 /*</replacement>*/
30104
30105 module.exports = Duplex;
30106
30107 /*<replacement>*/
30108 var processNextTick = require('process-nextick-args');
30109 /*</replacement>*/
30110
30111 /*<replacement>*/
30112 var util = require('core-util-is');
30113 util.inherits = require('inherits');
30114 /*</replacement>*/
30115
30116 var Readable = require('./_stream_readable');
30117 var Writable = require('./_stream_writable');
30118
30119 util.inherits(Duplex, Readable);
30120
30121 var keys = objectKeys(Writable.prototype);
30122 for (var v = 0; v < keys.length; v++) {
30123 var method = keys[v];
30124 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30125 }
30126
30127 function Duplex(options) {
30128 if (!(this instanceof Duplex)) return new Duplex(options);
30129
30130 Readable.call(this, options);
30131 Writable.call(this, options);
30132
30133 if (options && options.readable === false) this.readable = false;
30134
30135 if (options && options.writable === false) this.writable = false;
30136
30137 this.allowHalfOpen = true;
30138 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30139
30140 this.once('end', onend);
30141 }
30142
30143 // the no-half-open enforcer
30144 function onend() {
30145 // if we allow half-open state, or if the writable side ended,
30146 // then we're ok.
30147 if (this.allowHalfOpen || this._writableState.ended) return;
30148
30149 // no more data can be written.
30150 // But allow more writes to happen in this tick.
30151 processNextTick(onEndNT, this);
30152 }
30153
30154 function onEndNT(self) {
30155 self.end();
30156 }
30157
30158 function forEach(xs, f) {
30159 for (var i = 0, l = xs.length; i < l; i++) {
30160 f(xs[i], i);
30161 }
30162 }
30163 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30164 // a passthrough stream.
30165 // basically just the most minimal sort of Transform stream.
30166 // Every written chunk gets output as-is.
30167
30168 'use strict';
30169
30170 module.exports = PassThrough;
30171
30172 var Transform = require('./_stream_transform');
30173
30174 /*<replacement>*/
30175 var util = require('core-util-is');
30176 util.inherits = require('inherits');
30177 /*</replacement>*/
30178
30179 util.inherits(PassThrough, Transform);
30180
30181 function PassThrough(options) {
30182 if (!(this instanceof PassThrough)) return new PassThrough(options);
30183
30184 Transform.call(this, options);
30185 }
30186
30187 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30188 cb(null, chunk);
30189 };
30190 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30191 (function (process){
30192 'use strict';
30193
30194 module.exports = Readable;
30195
30196 /*<replacement>*/
30197 var processNextTick = require('process-nextick-args');
30198 /*</replacement>*/
30199
30200 /*<replacement>*/
30201 var isArray = require('isarray');
30202 /*</replacement>*/
30203
30204 /*<replacement>*/
30205 var Duplex;
30206 /*</replacement>*/
30207
30208 Readable.ReadableState = ReadableState;
30209
30210 /*<replacement>*/
30211 var EE = require('events').EventEmitter;
30212
30213 var EElistenerCount = function (emitter, type) {
30214 return emitter.listeners(type).length;
30215 };
30216 /*</replacement>*/
30217
30218 /*<replacement>*/
30219 var Stream = require('./internal/streams/stream');
30220 /*</replacement>*/
30221
30222 var Buffer = require('buffer').Buffer;
30223 /*<replacement>*/
30224 var bufferShim = require('buffer-shims');
30225 /*</replacement>*/
30226
30227 /*<replacement>*/
30228 var util = require('core-util-is');
30229 util.inherits = require('inherits');
30230 /*</replacement>*/
30231
30232 /*<replacement>*/
30233 var debugUtil = require('util');
30234 var debug = void 0;
30235 if (debugUtil && debugUtil.debuglog) {
30236 debug = debugUtil.debuglog('stream');
30237 } else {
30238 debug = function () {};
30239 }
30240 /*</replacement>*/
30241
30242 var BufferList = require('./internal/streams/BufferList');
30243 var StringDecoder;
30244
30245 util.inherits(Readable, Stream);
30246
30247 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30248
30249 function prependListener(emitter, event, fn) {
30250 // Sadly this is not cacheable as some libraries bundle their own
30251 // event emitter implementation with them.
30252 if (typeof emitter.prependListener === 'function') {
30253 return emitter.prependListener(event, fn);
30254 } else {
30255 // This is a hack to make sure that our error handler is attached before any
30256 // userland ones. NEVER DO THIS. This is here only because this code needs
30257 // to continue to work with older versions of Node.js that do not include
30258 // the prependListener() method. The goal is to eventually remove this hack.
30259 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
30260 }
30261 }
30262
30263 function ReadableState(options, stream) {
30264 Duplex = Duplex || require('./_stream_duplex');
30265
30266 options = options || {};
30267
30268 // object stream flag. Used to make read(n) ignore n and to
30269 // make all the buffer merging and length checks go away
30270 this.objectMode = !!options.objectMode;
30271
30272 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30273
30274 // the point at which it stops calling _read() to fill the buffer
30275 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30276 var hwm = options.highWaterMark;
30277 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30278 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30279
30280 // cast to ints.
30281 this.highWaterMark = ~~this.highWaterMark;
30282
30283 // A linked list is used to store data chunks instead of an array because the
30284 // linked list can remove elements from the beginning faster than
30285 // array.shift()
30286 this.buffer = new BufferList();
30287 this.length = 0;
30288 this.pipes = null;
30289 this.pipesCount = 0;
30290 this.flowing = null;
30291 this.ended = false;
30292 this.endEmitted = false;
30293 this.reading = false;
30294
30295 // a flag to be able to tell if the onwrite cb is called immediately,
30296 // or on a later tick. We set this to true at first, because any
30297 // actions that shouldn't happen until "later" should generally also
30298 // not happen before the first write call.
30299 this.sync = true;
30300
30301 // whenever we return null, then we set a flag to say
30302 // that we're awaiting a 'readable' event emission.
30303 this.needReadable = false;
30304 this.emittedReadable = false;
30305 this.readableListening = false;
30306 this.resumeScheduled = false;
30307
30308 // Crypto is kind of old and crusty. Historically, its default string
30309 // encoding is 'binary' so we have to make this configurable.
30310 // Everything else in the universe uses 'utf8', though.
30311 this.defaultEncoding = options.defaultEncoding || 'utf8';
30312
30313 // when piping, we only care about 'readable' events that happen
30314 // after read()ing all the bytes and not getting any pushback.
30315 this.ranOut = false;
30316
30317 // the number of writers that are awaiting a drain event in .pipe()s
30318 this.awaitDrain = 0;
30319
30320 // if true, a maybeReadMore has been scheduled
30321 this.readingMore = false;
30322
30323 this.decoder = null;
30324 this.encoding = null;
30325 if (options.encoding) {
30326 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30327 this.decoder = new StringDecoder(options.encoding);
30328 this.encoding = options.encoding;
30329 }
30330 }
30331
30332 function Readable(options) {
30333 Duplex = Duplex || require('./_stream_duplex');
30334
30335 if (!(this instanceof Readable)) return new Readable(options);
30336
30337 this._readableState = new ReadableState(options, this);
30338
30339 // legacy
30340 this.readable = true;
30341
30342 if (options && typeof options.read === 'function') this._read = options.read;
30343
30344 Stream.call(this);
30345 }
30346
30347 // Manually shove something into the read() buffer.
30348 // This returns true if the highWaterMark has not been hit yet,
30349 // similar to how Writable.write() returns true if you should
30350 // write() some more.
30351 Readable.prototype.push = function (chunk, encoding) {
30352 var state = this._readableState;
30353
30354 if (!state.objectMode && typeof chunk === 'string') {
30355 encoding = encoding || state.defaultEncoding;
30356 if (encoding !== state.encoding) {
30357 chunk = bufferShim.from(chunk, encoding);
30358 encoding = '';
30359 }
30360 }
30361
30362 return readableAddChunk(this, state, chunk, encoding, false);
30363 };
30364
30365 // Unshift should *always* be something directly out of read()
30366 Readable.prototype.unshift = function (chunk) {
30367 var state = this._readableState;
30368 return readableAddChunk(this, state, chunk, '', true);
30369 };
30370
30371 Readable.prototype.isPaused = function () {
30372 return this._readableState.flowing === false;
30373 };
30374
30375 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30376 var er = chunkInvalid(state, chunk);
30377 if (er) {
30378 stream.emit('error', er);
30379 } else if (chunk === null) {
30380 state.reading = false;
30381 onEofChunk(stream, state);
30382 } else if (state.objectMode || chunk && chunk.length > 0) {
30383 if (state.ended && !addToFront) {
30384 var e = new Error('stream.push() after EOF');
30385 stream.emit('error', e);
30386 } else if (state.endEmitted && addToFront) {
30387 var _e = new Error('stream.unshift() after end event');
30388 stream.emit('error', _e);
30389 } else {
30390 var skipAdd;
30391 if (state.decoder && !addToFront && !encoding) {
30392 chunk = state.decoder.write(chunk);
30393 skipAdd = !state.objectMode && chunk.length === 0;
30394 }
30395
30396 if (!addToFront) state.reading = false;
30397
30398 // Don't add to the buffer if we've decoded to an empty string chunk and
30399 // we're not in object mode
30400 if (!skipAdd) {
30401 // if we want the data now, just emit it.
30402 if (state.flowing && state.length === 0 && !state.sync) {
30403 stream.emit('data', chunk);
30404 stream.read(0);
30405 } else {
30406 // update the buffer info.
30407 state.length += state.objectMode ? 1 : chunk.length;
30408 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30409
30410 if (state.needReadable) emitReadable(stream);
30411 }
30412 }
30413
30414 maybeReadMore(stream, state);
30415 }
30416 } else if (!addToFront) {
30417 state.reading = false;
30418 }
30419
30420 return needMoreData(state);
30421 }
30422
30423 // if it's past the high water mark, we can push in some more.
30424 // Also, if we have no data yet, we can stand some
30425 // more bytes. This is to work around cases where hwm=0,
30426 // such as the repl. Also, if the push() triggered a
30427 // readable event, and the user called read(largeNumber) such that
30428 // needReadable was set, then we ought to push more, so that another
30429 // 'readable' event will be triggered.
30430 function needMoreData(state) {
30431 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30432 }
30433
30434 // backwards compatibility.
30435 Readable.prototype.setEncoding = function (enc) {
30436 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30437 this._readableState.decoder = new StringDecoder(enc);
30438 this._readableState.encoding = enc;
30439 return this;
30440 };
30441
30442 // Don't raise the hwm > 8MB
30443 var MAX_HWM = 0x800000;
30444 function computeNewHighWaterMark(n) {
30445 if (n >= MAX_HWM) {
30446 n = MAX_HWM;
30447 } else {
30448 // Get the next highest power of 2 to prevent increasing hwm excessively in
30449 // tiny amounts
30450 n--;
30451 n |= n >>> 1;
30452 n |= n >>> 2;
30453 n |= n >>> 4;
30454 n |= n >>> 8;
30455 n |= n >>> 16;
30456 n++;
30457 }
30458 return n;
30459 }
30460
30461 // This function is designed to be inlinable, so please take care when making
30462 // changes to the function body.
30463 function howMuchToRead(n, state) {
30464 if (n <= 0 || state.length === 0 && state.ended) return 0;
30465 if (state.objectMode) return 1;
30466 if (n !== n) {
30467 // Only flow one buffer at a time
30468 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30469 }
30470 // If we're asking for more than the current hwm, then raise the hwm.
30471 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30472 if (n <= state.length) return n;
30473 // Don't have enough
30474 if (!state.ended) {
30475 state.needReadable = true;
30476 return 0;
30477 }
30478 return state.length;
30479 }
30480
30481 // you can override either this method, or the async _read(n) below.
30482 Readable.prototype.read = function (n) {
30483 debug('read', n);
30484 n = parseInt(n, 10);
30485 var state = this._readableState;
30486 var nOrig = n;
30487
30488 if (n !== 0) state.emittedReadable = false;
30489
30490 // if we're doing read(0) to trigger a readable event, but we
30491 // already have a bunch of data in the buffer, then just trigger
30492 // the 'readable' event and move on.
30493 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30494 debug('read: emitReadable', state.length, state.ended);
30495 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30496 return null;
30497 }
30498
30499 n = howMuchToRead(n, state);
30500
30501 // if we've ended, and we're now clear, then finish it up.
30502 if (n === 0 && state.ended) {
30503 if (state.length === 0) endReadable(this);
30504 return null;
30505 }
30506
30507 // All the actual chunk generation logic needs to be
30508 // *below* the call to _read. The reason is that in certain
30509 // synthetic stream cases, such as passthrough streams, _read
30510 // may be a completely synchronous operation which may change
30511 // the state of the read buffer, providing enough data when
30512 // before there was *not* enough.
30513 //
30514 // So, the steps are:
30515 // 1. Figure out what the state of things will be after we do
30516 // a read from the buffer.
30517 //
30518 // 2. If that resulting state will trigger a _read, then call _read.
30519 // Note that this may be asynchronous, or synchronous. Yes, it is
30520 // deeply ugly to write APIs this way, but that still doesn't mean
30521 // that the Readable class should behave improperly, as streams are
30522 // designed to be sync/async agnostic.
30523 // Take note if the _read call is sync or async (ie, if the read call
30524 // has returned yet), so that we know whether or not it's safe to emit
30525 // 'readable' etc.
30526 //
30527 // 3. Actually pull the requested chunks out of the buffer and return.
30528
30529 // if we need a readable event, then we need to do some reading.
30530 var doRead = state.needReadable;
30531 debug('need readable', doRead);
30532
30533 // if we currently have less than the highWaterMark, then also read some
30534 if (state.length === 0 || state.length - n < state.highWaterMark) {
30535 doRead = true;
30536 debug('length less than watermark', doRead);
30537 }
30538
30539 // however, if we've ended, then there's no point, and if we're already
30540 // reading, then it's unnecessary.
30541 if (state.ended || state.reading) {
30542 doRead = false;
30543 debug('reading or ended', doRead);
30544 } else if (doRead) {
30545 debug('do read');
30546 state.reading = true;
30547 state.sync = true;
30548 // if the length is currently zero, then we *need* a readable event.
30549 if (state.length === 0) state.needReadable = true;
30550 // call internal read method
30551 this._read(state.highWaterMark);
30552 state.sync = false;
30553 // If _read pushed data synchronously, then `reading` will be false,
30554 // and we need to re-evaluate how much data we can return to the user.
30555 if (!state.reading) n = howMuchToRead(nOrig, state);
30556 }
30557
30558 var ret;
30559 if (n > 0) ret = fromList(n, state);else ret = null;
30560
30561 if (ret === null) {
30562 state.needReadable = true;
30563 n = 0;
30564 } else {
30565 state.length -= n;
30566 }
30567
30568 if (state.length === 0) {
30569 // If we have nothing in the buffer, then we want to know
30570 // as soon as we *do* get something into the buffer.
30571 if (!state.ended) state.needReadable = true;
30572
30573 // If we tried to read() past the EOF, then emit end on the next tick.
30574 if (nOrig !== n && state.ended) endReadable(this);
30575 }
30576
30577 if (ret !== null) this.emit('data', ret);
30578
30579 return ret;
30580 };
30581
30582 function chunkInvalid(state, chunk) {
30583 var er = null;
30584 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30585 er = new TypeError('Invalid non-string/buffer chunk');
30586 }
30587 return er;
30588 }
30589
30590 function onEofChunk(stream, state) {
30591 if (state.ended) return;
30592 if (state.decoder) {
30593 var chunk = state.decoder.end();
30594 if (chunk && chunk.length) {
30595 state.buffer.push(chunk);
30596 state.length += state.objectMode ? 1 : chunk.length;
30597 }
30598 }
30599 state.ended = true;
30600
30601 // emit 'readable' now to make sure it gets picked up.
30602 emitReadable(stream);
30603 }
30604
30605 // Don't emit readable right away in sync mode, because this can trigger
30606 // another read() call => stack overflow. This way, it might trigger
30607 // a nextTick recursion warning, but that's not so bad.
30608 function emitReadable(stream) {
30609 var state = stream._readableState;
30610 state.needReadable = false;
30611 if (!state.emittedReadable) {
30612 debug('emitReadable', state.flowing);
30613 state.emittedReadable = true;
30614 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30615 }
30616 }
30617
30618 function emitReadable_(stream) {
30619 debug('emit readable');
30620 stream.emit('readable');
30621 flow(stream);
30622 }
30623
30624 // at this point, the user has presumably seen the 'readable' event,
30625 // and called read() to consume some data. that may have triggered
30626 // in turn another _read(n) call, in which case reading = true if
30627 // it's in progress.
30628 // However, if we're not ended, or reading, and the length < hwm,
30629 // then go ahead and try to read some more preemptively.
30630 function maybeReadMore(stream, state) {
30631 if (!state.readingMore) {
30632 state.readingMore = true;
30633 processNextTick(maybeReadMore_, stream, state);
30634 }
30635 }
30636
30637 function maybeReadMore_(stream, state) {
30638 var len = state.length;
30639 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30640 debug('maybeReadMore read 0');
30641 stream.read(0);
30642 if (len === state.length)
30643 // didn't get any data, stop spinning.
30644 break;else len = state.length;
30645 }
30646 state.readingMore = false;
30647 }
30648
30649 // abstract method. to be overridden in specific implementation classes.
30650 // call cb(er, data) where data is <= n in length.
30651 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30652 // arbitrary, and perhaps not very meaningful.
30653 Readable.prototype._read = function (n) {
30654 this.emit('error', new Error('_read() is not implemented'));
30655 };
30656
30657 Readable.prototype.pipe = function (dest, pipeOpts) {
30658 var src = this;
30659 var state = this._readableState;
30660
30661 switch (state.pipesCount) {
30662 case 0:
30663 state.pipes = dest;
30664 break;
30665 case 1:
30666 state.pipes = [state.pipes, dest];
30667 break;
30668 default:
30669 state.pipes.push(dest);
30670 break;
30671 }
30672 state.pipesCount += 1;
30673 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30674
30675 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30676
30677 var endFn = doEnd ? onend : cleanup;
30678 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30679
30680 dest.on('unpipe', onunpipe);
30681 function onunpipe(readable) {
30682 debug('onunpipe');
30683 if (readable === src) {
30684 cleanup();
30685 }
30686 }
30687
30688 function onend() {
30689 debug('onend');
30690 dest.end();
30691 }
30692
30693 // when the dest drains, it reduces the awaitDrain counter
30694 // on the source. This would be more elegant with a .once()
30695 // handler in flow(), but adding and removing repeatedly is
30696 // too slow.
30697 var ondrain = pipeOnDrain(src);
30698 dest.on('drain', ondrain);
30699
30700 var cleanedUp = false;
30701 function cleanup() {
30702 debug('cleanup');
30703 // cleanup event handlers once the pipe is broken
30704 dest.removeListener('close', onclose);
30705 dest.removeListener('finish', onfinish);
30706 dest.removeListener('drain', ondrain);
30707 dest.removeListener('error', onerror);
30708 dest.removeListener('unpipe', onunpipe);
30709 src.removeListener('end', onend);
30710 src.removeListener('end', cleanup);
30711 src.removeListener('data', ondata);
30712
30713 cleanedUp = true;
30714
30715 // if the reader is waiting for a drain event from this
30716 // specific writer, then it would cause it to never start
30717 // flowing again.
30718 // So, if this is awaiting a drain, then we just call it now.
30719 // If we don't know, then assume that we are waiting for one.
30720 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30721 }
30722
30723 // If the user pushes more data while we're writing to dest then we'll end up
30724 // in ondata again. However, we only want to increase awaitDrain once because
30725 // dest will only emit one 'drain' event for the multiple writes.
30726 // => Introduce a guard on increasing awaitDrain.
30727 var increasedAwaitDrain = false;
30728 src.on('data', ondata);
30729 function ondata(chunk) {
30730 debug('ondata');
30731 increasedAwaitDrain = false;
30732 var ret = dest.write(chunk);
30733 if (false === ret && !increasedAwaitDrain) {
30734 // If the user unpiped during `dest.write()`, it is possible
30735 // to get stuck in a permanently paused state if that write
30736 // also returned false.
30737 // => Check whether `dest` is still a piping destination.
30738 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30739 debug('false write response, pause', src._readableState.awaitDrain);
30740 src._readableState.awaitDrain++;
30741 increasedAwaitDrain = true;
30742 }
30743 src.pause();
30744 }
30745 }
30746
30747 // if the dest has an error, then stop piping into it.
30748 // however, don't suppress the throwing behavior for this.
30749 function onerror(er) {
30750 debug('onerror', er);
30751 unpipe();
30752 dest.removeListener('error', onerror);
30753 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30754 }
30755
30756 // Make sure our error handler is attached before userland ones.
30757 prependListener(dest, 'error', onerror);
30758
30759 // Both close and finish should trigger unpipe, but only once.
30760 function onclose() {
30761 dest.removeListener('finish', onfinish);
30762 unpipe();
30763 }
30764 dest.once('close', onclose);
30765 function onfinish() {
30766 debug('onfinish');
30767 dest.removeListener('close', onclose);
30768 unpipe();
30769 }
30770 dest.once('finish', onfinish);
30771
30772 function unpipe() {
30773 debug('unpipe');
30774 src.unpipe(dest);
30775 }
30776
30777 // tell the dest that it's being piped to
30778 dest.emit('pipe', src);
30779
30780 // start the flow if it hasn't been started already.
30781 if (!state.flowing) {
30782 debug('pipe resume');
30783 src.resume();
30784 }
30785
30786 return dest;
30787 };
30788
30789 function pipeOnDrain(src) {
30790 return function () {
30791 var state = src._readableState;
30792 debug('pipeOnDrain', state.awaitDrain);
30793 if (state.awaitDrain) state.awaitDrain--;
30794 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30795 state.flowing = true;
30796 flow(src);
30797 }
30798 };
30799 }
30800
30801 Readable.prototype.unpipe = function (dest) {
30802 var state = this._readableState;
30803
30804 // if we're not piping anywhere, then do nothing.
30805 if (state.pipesCount === 0) return this;
30806
30807 // just one destination. most common case.
30808 if (state.pipesCount === 1) {
30809 // passed in one, but it's not the right one.
30810 if (dest && dest !== state.pipes) return this;
30811
30812 if (!dest) dest = state.pipes;
30813
30814 // got a match.
30815 state.pipes = null;
30816 state.pipesCount = 0;
30817 state.flowing = false;
30818 if (dest) dest.emit('unpipe', this);
30819 return this;
30820 }
30821
30822 // slow case. multiple pipe destinations.
30823
30824 if (!dest) {
30825 // remove all.
30826 var dests = state.pipes;
30827 var len = state.pipesCount;
30828 state.pipes = null;
30829 state.pipesCount = 0;
30830 state.flowing = false;
30831
30832 for (var i = 0; i < len; i++) {
30833 dests[i].emit('unpipe', this);
30834 }return this;
30835 }
30836
30837 // try to find the right one.
30838 var index = indexOf(state.pipes, dest);
30839 if (index === -1) return this;
30840
30841 state.pipes.splice(index, 1);
30842 state.pipesCount -= 1;
30843 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30844
30845 dest.emit('unpipe', this);
30846
30847 return this;
30848 };
30849
30850 // set up data events if they are asked for
30851 // Ensure readable listeners eventually get something
30852 Readable.prototype.on = function (ev, fn) {
30853 var res = Stream.prototype.on.call(this, ev, fn);
30854
30855 if (ev === 'data') {
30856 // Start flowing on next tick if stream isn't explicitly paused
30857 if (this._readableState.flowing !== false) this.resume();
30858 } else if (ev === 'readable') {
30859 var state = this._readableState;
30860 if (!state.endEmitted && !state.readableListening) {
30861 state.readableListening = state.needReadable = true;
30862 state.emittedReadable = false;
30863 if (!state.reading) {
30864 processNextTick(nReadingNextTick, this);
30865 } else if (state.length) {
30866 emitReadable(this, state);
30867 }
30868 }
30869 }
30870
30871 return res;
30872 };
30873 Readable.prototype.addListener = Readable.prototype.on;
30874
30875 function nReadingNextTick(self) {
30876 debug('readable nexttick read 0');
30877 self.read(0);
30878 }
30879
30880 // pause() and resume() are remnants of the legacy readable stream API
30881 // If the user uses them, then switch into old mode.
30882 Readable.prototype.resume = function () {
30883 var state = this._readableState;
30884 if (!state.flowing) {
30885 debug('resume');
30886 state.flowing = true;
30887 resume(this, state);
30888 }
30889 return this;
30890 };
30891
30892 function resume(stream, state) {
30893 if (!state.resumeScheduled) {
30894 state.resumeScheduled = true;
30895 processNextTick(resume_, stream, state);
30896 }
30897 }
30898
30899 function resume_(stream, state) {
30900 if (!state.reading) {
30901 debug('resume read 0');
30902 stream.read(0);
30903 }
30904
30905 state.resumeScheduled = false;
30906 state.awaitDrain = 0;
30907 stream.emit('resume');
30908 flow(stream);
30909 if (state.flowing && !state.reading) stream.read(0);
30910 }
30911
30912 Readable.prototype.pause = function () {
30913 debug('call pause flowing=%j', this._readableState.flowing);
30914 if (false !== this._readableState.flowing) {
30915 debug('pause');
30916 this._readableState.flowing = false;
30917 this.emit('pause');
30918 }
30919 return this;
30920 };
30921
30922 function flow(stream) {
30923 var state = stream._readableState;
30924 debug('flow', state.flowing);
30925 while (state.flowing && stream.read() !== null) {}
30926 }
30927
30928 // wrap an old-style stream as the async data source.
30929 // This is *not* part of the readable stream interface.
30930 // It is an ugly unfortunate mess of history.
30931 Readable.prototype.wrap = function (stream) {
30932 var state = this._readableState;
30933 var paused = false;
30934
30935 var self = this;
30936 stream.on('end', function () {
30937 debug('wrapped end');
30938 if (state.decoder && !state.ended) {
30939 var chunk = state.decoder.end();
30940 if (chunk && chunk.length) self.push(chunk);
30941 }
30942
30943 self.push(null);
30944 });
30945
30946 stream.on('data', function (chunk) {
30947 debug('wrapped data');
30948 if (state.decoder) chunk = state.decoder.write(chunk);
30949
30950 // don't skip over falsy values in objectMode
30951 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30952
30953 var ret = self.push(chunk);
30954 if (!ret) {
30955 paused = true;
30956 stream.pause();
30957 }
30958 });
30959
30960 // proxy all the other methods.
30961 // important when wrapping filters and duplexes.
30962 for (var i in stream) {
30963 if (this[i] === undefined && typeof stream[i] === 'function') {
30964 this[i] = function (method) {
30965 return function () {
30966 return stream[method].apply(stream, arguments);
30967 };
30968 }(i);
30969 }
30970 }
30971
30972 // proxy certain important events.
30973 for (var n = 0; n < kProxyEvents.length; n++) {
30974 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30975 }
30976
30977 // when we try to consume some more bytes, simply unpause the
30978 // underlying stream.
30979 self._read = function (n) {
30980 debug('wrapped _read', n);
30981 if (paused) {
30982 paused = false;
30983 stream.resume();
30984 }
30985 };
30986
30987 return self;
30988 };
30989
30990 // exposed for testing purposes only.
30991 Readable._fromList = fromList;
30992
30993 // Pluck off n bytes from an array of buffers.
30994 // Length is the combined lengths of all the buffers in the list.
30995 // This function is designed to be inlinable, so please take care when making
30996 // changes to the function body.
30997 function fromList(n, state) {
30998 // nothing buffered
30999 if (state.length === 0) return null;
31000
31001 var ret;
31002 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
31003 // read it all, truncate the list
31004 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
31005 state.buffer.clear();
31006 } else {
31007 // read part of list
31008 ret = fromListPartial(n, state.buffer, state.decoder);
31009 }
31010
31011 return ret;
31012 }
31013
31014 // Extracts only enough buffered data to satisfy the amount requested.
31015 // This function is designed to be inlinable, so please take care when making
31016 // changes to the function body.
31017 function fromListPartial(n, list, hasStrings) {
31018 var ret;
31019 if (n < list.head.data.length) {
31020 // slice is the same for buffers and strings
31021 ret = list.head.data.slice(0, n);
31022 list.head.data = list.head.data.slice(n);
31023 } else if (n === list.head.data.length) {
31024 // first chunk is a perfect match
31025 ret = list.shift();
31026 } else {
31027 // result spans more than one buffer
31028 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
31029 }
31030 return ret;
31031 }
31032
31033 // Copies a specified amount of characters from the list of buffered data
31034 // chunks.
31035 // This function is designed to be inlinable, so please take care when making
31036 // changes to the function body.
31037 function copyFromBufferString(n, list) {
31038 var p = list.head;
31039 var c = 1;
31040 var ret = p.data;
31041 n -= ret.length;
31042 while (p = p.next) {
31043 var str = p.data;
31044 var nb = n > str.length ? str.length : n;
31045 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31046 n -= nb;
31047 if (n === 0) {
31048 if (nb === str.length) {
31049 ++c;
31050 if (p.next) list.head = p.next;else list.head = list.tail = null;
31051 } else {
31052 list.head = p;
31053 p.data = str.slice(nb);
31054 }
31055 break;
31056 }
31057 ++c;
31058 }
31059 list.length -= c;
31060 return ret;
31061 }
31062
31063 // Copies a specified amount of bytes from the list of buffered data chunks.
31064 // This function is designed to be inlinable, so please take care when making
31065 // changes to the function body.
31066 function copyFromBuffer(n, list) {
31067 var ret = bufferShim.allocUnsafe(n);
31068 var p = list.head;
31069 var c = 1;
31070 p.data.copy(ret);
31071 n -= p.data.length;
31072 while (p = p.next) {
31073 var buf = p.data;
31074 var nb = n > buf.length ? buf.length : n;
31075 buf.copy(ret, ret.length - n, 0, nb);
31076 n -= nb;
31077 if (n === 0) {
31078 if (nb === buf.length) {
31079 ++c;
31080 if (p.next) list.head = p.next;else list.head = list.tail = null;
31081 } else {
31082 list.head = p;
31083 p.data = buf.slice(nb);
31084 }
31085 break;
31086 }
31087 ++c;
31088 }
31089 list.length -= c;
31090 return ret;
31091 }
31092
31093 function endReadable(stream) {
31094 var state = stream._readableState;
31095
31096 // If we get here before consuming all the bytes, then that is a
31097 // bug in node. Should never happen.
31098 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31099
31100 if (!state.endEmitted) {
31101 state.ended = true;
31102 processNextTick(endReadableNT, state, stream);
31103 }
31104 }
31105
31106 function endReadableNT(state, stream) {
31107 // Check that we didn't get one last unshift.
31108 if (!state.endEmitted && state.length === 0) {
31109 state.endEmitted = true;
31110 stream.readable = false;
31111 stream.emit('end');
31112 }
31113 }
31114
31115 function forEach(xs, f) {
31116 for (var i = 0, l = xs.length; i < l; i++) {
31117 f(xs[i], i);
31118 }
31119 }
31120
31121 function indexOf(xs, x) {
31122 for (var i = 0, l = xs.length; i < l; i++) {
31123 if (xs[i] === x) return i;
31124 }
31125 return -1;
31126 }
31127 }).call(this,require('_process'))
31128 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":22,"util":3}],18:[function(require,module,exports){
31129 // a transform stream is a readable/writable stream where you do
31130 // something with the data. Sometimes it's called a "filter",
31131 // but that's not a great name for it, since that implies a thing where
31132 // some bits pass through, and others are simply ignored. (That would
31133 // be a valid example of a transform, of course.)
31134 //
31135 // While the output is causally related to the input, it's not a
31136 // necessarily symmetric or synchronous transformation. For example,
31137 // a zlib stream might take multiple plain-text writes(), and then
31138 // emit a single compressed chunk some time in the future.
31139 //
31140 // Here's how this works:
31141 //
31142 // The Transform stream has all the aspects of the readable and writable
31143 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31144 // internally, and returns false if there's a lot of pending writes
31145 // buffered up. When you call read(), that calls _read(n) until
31146 // there's enough pending readable data buffered up.
31147 //
31148 // In a transform stream, the written data is placed in a buffer. When
31149 // _read(n) is called, it transforms the queued up data, calling the
31150 // buffered _write cb's as it consumes chunks. If consuming a single
31151 // written chunk would result in multiple output chunks, then the first
31152 // outputted bit calls the readcb, and subsequent chunks just go into
31153 // the read buffer, and will cause it to emit 'readable' if necessary.
31154 //
31155 // This way, back-pressure is actually determined by the reading side,
31156 // since _read has to be called to start processing a new chunk. However,
31157 // a pathological inflate type of transform can cause excessive buffering
31158 // here. For example, imagine a stream where every byte of input is
31159 // interpreted as an integer from 0-255, and then results in that many
31160 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31161 // 1kb of data being output. In this case, you could write a very small
31162 // amount of input, and end up with a very large amount of output. In
31163 // such a pathological inflating mechanism, there'd be no way to tell
31164 // the system to stop doing the transform. A single 4MB write could
31165 // cause the system to run out of memory.
31166 //
31167 // However, even in such a pathological case, only a single written chunk
31168 // would be consumed, and then the rest would wait (un-transformed) until
31169 // the results of the previous transformed chunk were consumed.
31170
31171 'use strict';
31172
31173 module.exports = Transform;
31174
31175 var Duplex = require('./_stream_duplex');
31176
31177 /*<replacement>*/
31178 var util = require('core-util-is');
31179 util.inherits = require('inherits');
31180 /*</replacement>*/
31181
31182 util.inherits(Transform, Duplex);
31183
31184 function TransformState(stream) {
31185 this.afterTransform = function (er, data) {
31186 return afterTransform(stream, er, data);
31187 };
31188
31189 this.needTransform = false;
31190 this.transforming = false;
31191 this.writecb = null;
31192 this.writechunk = null;
31193 this.writeencoding = null;
31194 }
31195
31196 function afterTransform(stream, er, data) {
31197 var ts = stream._transformState;
31198 ts.transforming = false;
31199
31200 var cb = ts.writecb;
31201
31202 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31203
31204 ts.writechunk = null;
31205 ts.writecb = null;
31206
31207 if (data !== null && data !== undefined) stream.push(data);
31208
31209 cb(er);
31210
31211 var rs = stream._readableState;
31212 rs.reading = false;
31213 if (rs.needReadable || rs.length < rs.highWaterMark) {
31214 stream._read(rs.highWaterMark);
31215 }
31216 }
31217
31218 function Transform(options) {
31219 if (!(this instanceof Transform)) return new Transform(options);
31220
31221 Duplex.call(this, options);
31222
31223 this._transformState = new TransformState(this);
31224
31225 var stream = this;
31226
31227 // start out asking for a readable event once data is transformed.
31228 this._readableState.needReadable = true;
31229
31230 // we have implemented the _read method, and done the other things
31231 // that Readable wants before the first _read call, so unset the
31232 // sync guard flag.
31233 this._readableState.sync = false;
31234
31235 if (options) {
31236 if (typeof options.transform === 'function') this._transform = options.transform;
31237
31238 if (typeof options.flush === 'function') this._flush = options.flush;
31239 }
31240
31241 // When the writable side finishes, then flush out anything remaining.
31242 this.once('prefinish', function () {
31243 if (typeof this._flush === 'function') this._flush(function (er, data) {
31244 done(stream, er, data);
31245 });else done(stream);
31246 });
31247 }
31248
31249 Transform.prototype.push = function (chunk, encoding) {
31250 this._transformState.needTransform = false;
31251 return Duplex.prototype.push.call(this, chunk, encoding);
31252 };
31253
31254 // This is the part where you do stuff!
31255 // override this function in implementation classes.
31256 // 'chunk' is an input chunk.
31257 //
31258 // Call `push(newChunk)` to pass along transformed output
31259 // to the readable side. You may call 'push' zero or more times.
31260 //
31261 // Call `cb(err)` when you are done with this chunk. If you pass
31262 // an error, then that'll put the hurt on the whole operation. If you
31263 // never call cb(), then you'll never get another chunk.
31264 Transform.prototype._transform = function (chunk, encoding, cb) {
31265 throw new Error('_transform() is not implemented');
31266 };
31267
31268 Transform.prototype._write = function (chunk, encoding, cb) {
31269 var ts = this._transformState;
31270 ts.writecb = cb;
31271 ts.writechunk = chunk;
31272 ts.writeencoding = encoding;
31273 if (!ts.transforming) {
31274 var rs = this._readableState;
31275 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31276 }
31277 };
31278
31279 // Doesn't matter what the args are here.
31280 // _transform does all the work.
31281 // That we got here means that the readable side wants more data.
31282 Transform.prototype._read = function (n) {
31283 var ts = this._transformState;
31284
31285 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31286 ts.transforming = true;
31287 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31288 } else {
31289 // mark that we need a transform, so that any data that comes in
31290 // will get processed, now that we've asked for it.
31291 ts.needTransform = true;
31292 }
31293 };
31294
31295 function done(stream, er, data) {
31296 if (er) return stream.emit('error', er);
31297
31298 if (data !== null && data !== undefined) stream.push(data);
31299
31300 // if there's nothing in the write buffer, then that means
31301 // that nothing more will ever be provided
31302 var ws = stream._writableState;
31303 var ts = stream._transformState;
31304
31305 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31306
31307 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31308
31309 return stream.push(null);
31310 }
31311 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31312 (function (process){
31313 // A bit simpler than readable streams.
31314 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31315 // the drain event emission and buffering.
31316
31317 'use strict';
31318
31319 module.exports = Writable;
31320
31321 /*<replacement>*/
31322 var processNextTick = require('process-nextick-args');
31323 /*</replacement>*/
31324
31325 /*<replacement>*/
31326 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31327 /*</replacement>*/
31328
31329 /*<replacement>*/
31330 var Duplex;
31331 /*</replacement>*/
31332
31333 Writable.WritableState = WritableState;
31334
31335 /*<replacement>*/
31336 var util = require('core-util-is');
31337 util.inherits = require('inherits');
31338 /*</replacement>*/
31339
31340 /*<replacement>*/
31341 var internalUtil = {
31342 deprecate: require('util-deprecate')
31343 };
31344 /*</replacement>*/
31345
31346 /*<replacement>*/
31347 var Stream = require('./internal/streams/stream');
31348 /*</replacement>*/
31349
31350 var Buffer = require('buffer').Buffer;
31351 /*<replacement>*/
31352 var bufferShim = require('buffer-shims');
31353 /*</replacement>*/
31354
31355 util.inherits(Writable, Stream);
31356
31357 function nop() {}
31358
31359 function WriteReq(chunk, encoding, cb) {
31360 this.chunk = chunk;
31361 this.encoding = encoding;
31362 this.callback = cb;
31363 this.next = null;
31364 }
31365
31366 function WritableState(options, stream) {
31367 Duplex = Duplex || require('./_stream_duplex');
31368
31369 options = options || {};
31370
31371 // object stream flag to indicate whether or not this stream
31372 // contains buffers or objects.
31373 this.objectMode = !!options.objectMode;
31374
31375 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31376
31377 // the point at which write() starts returning false
31378 // Note: 0 is a valid value, means that we always return false if
31379 // the entire buffer is not flushed immediately on write()
31380 var hwm = options.highWaterMark;
31381 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31382 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31383
31384 // cast to ints.
31385 this.highWaterMark = ~~this.highWaterMark;
31386
31387 // drain event flag.
31388 this.needDrain = false;
31389 // at the start of calling end()
31390 this.ending = false;
31391 // when end() has been called, and returned
31392 this.ended = false;
31393 // when 'finish' is emitted
31394 this.finished = false;
31395
31396 // should we decode strings into buffers before passing to _write?
31397 // this is here so that some node-core streams can optimize string
31398 // handling at a lower level.
31399 var noDecode = options.decodeStrings === false;
31400 this.decodeStrings = !noDecode;
31401
31402 // Crypto is kind of old and crusty. Historically, its default string
31403 // encoding is 'binary' so we have to make this configurable.
31404 // Everything else in the universe uses 'utf8', though.
31405 this.defaultEncoding = options.defaultEncoding || 'utf8';
31406
31407 // not an actual buffer we keep track of, but a measurement
31408 // of how much we're waiting to get pushed to some underlying
31409 // socket or file.
31410 this.length = 0;
31411
31412 // a flag to see when we're in the middle of a write.
31413 this.writing = false;
31414
31415 // when true all writes will be buffered until .uncork() call
31416 this.corked = 0;
31417
31418 // a flag to be able to tell if the onwrite cb is called immediately,
31419 // or on a later tick. We set this to true at first, because any
31420 // actions that shouldn't happen until "later" should generally also
31421 // not happen before the first write call.
31422 this.sync = true;
31423
31424 // a flag to know if we're processing previously buffered items, which
31425 // may call the _write() callback in the same tick, so that we don't
31426 // end up in an overlapped onwrite situation.
31427 this.bufferProcessing = false;
31428
31429 // the callback that's passed to _write(chunk,cb)
31430 this.onwrite = function (er) {
31431 onwrite(stream, er);
31432 };
31433
31434 // the callback that the user supplies to write(chunk,encoding,cb)
31435 this.writecb = null;
31436
31437 // the amount that is being written when _write is called.
31438 this.writelen = 0;
31439
31440 this.bufferedRequest = null;
31441 this.lastBufferedRequest = null;
31442
31443 // number of pending user-supplied write callbacks
31444 // this must be 0 before 'finish' can be emitted
31445 this.pendingcb = 0;
31446
31447 // emit prefinish if the only thing we're waiting for is _write cbs
31448 // This is relevant for synchronous Transform streams
31449 this.prefinished = false;
31450
31451 // True if the error was already emitted and should not be thrown again
31452 this.errorEmitted = false;
31453
31454 // count buffered requests
31455 this.bufferedRequestCount = 0;
31456
31457 // allocate the first CorkedRequest, there is always
31458 // one allocated and free to use, and we maintain at most two
31459 this.corkedRequestsFree = new CorkedRequest(this);
31460 }
31461
31462 WritableState.prototype.getBuffer = function getBuffer() {
31463 var current = this.bufferedRequest;
31464 var out = [];
31465 while (current) {
31466 out.push(current);
31467 current = current.next;
31468 }
31469 return out;
31470 };
31471
31472 (function () {
31473 try {
31474 Object.defineProperty(WritableState.prototype, 'buffer', {
31475 get: internalUtil.deprecate(function () {
31476 return this.getBuffer();
31477 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31478 });
31479 } catch (_) {}
31480 })();
31481
31482 // Test _writableState for inheritance to account for Duplex streams,
31483 // whose prototype chain only points to Readable.
31484 var realHasInstance;
31485 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31486 realHasInstance = Function.prototype[Symbol.hasInstance];
31487 Object.defineProperty(Writable, Symbol.hasInstance, {
31488 value: function (object) {
31489 if (realHasInstance.call(this, object)) return true;
31490
31491 return object && object._writableState instanceof WritableState;
31492 }
31493 });
31494 } else {
31495 realHasInstance = function (object) {
31496 return object instanceof this;
31497 };
31498 }
31499
31500 function Writable(options) {
31501 Duplex = Duplex || require('./_stream_duplex');
31502
31503 // Writable ctor is applied to Duplexes, too.
31504 // `realHasInstance` is necessary because using plain `instanceof`
31505 // would return false, as no `_writableState` property is attached.
31506
31507 // Trying to use the custom `instanceof` for Writable here will also break the
31508 // Node.js LazyTransform implementation, which has a non-trivial getter for
31509 // `_writableState` that would lead to infinite recursion.
31510 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31511 return new Writable(options);
31512 }
31513
31514 this._writableState = new WritableState(options, this);
31515
31516 // legacy.
31517 this.writable = true;
31518
31519 if (options) {
31520 if (typeof options.write === 'function') this._write = options.write;
31521
31522 if (typeof options.writev === 'function') this._writev = options.writev;
31523 }
31524
31525 Stream.call(this);
31526 }
31527
31528 // Otherwise people can pipe Writable streams, which is just wrong.
31529 Writable.prototype.pipe = function () {
31530 this.emit('error', new Error('Cannot pipe, not readable'));
31531 };
31532
31533 function writeAfterEnd(stream, cb) {
31534 var er = new Error('write after end');
31535 // TODO: defer error events consistently everywhere, not just the cb
31536 stream.emit('error', er);
31537 processNextTick(cb, er);
31538 }
31539
31540 // Checks that a user-supplied chunk is valid, especially for the particular
31541 // mode the stream is in. Currently this means that `null` is never accepted
31542 // and undefined/non-string values are only allowed in object mode.
31543 function validChunk(stream, state, chunk, cb) {
31544 var valid = true;
31545 var er = false;
31546
31547 if (chunk === null) {
31548 er = new TypeError('May not write null values to stream');
31549 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31550 er = new TypeError('Invalid non-string/buffer chunk');
31551 }
31552 if (er) {
31553 stream.emit('error', er);
31554 processNextTick(cb, er);
31555 valid = false;
31556 }
31557 return valid;
31558 }
31559
31560 Writable.prototype.write = function (chunk, encoding, cb) {
31561 var state = this._writableState;
31562 var ret = false;
31563 var isBuf = Buffer.isBuffer(chunk);
31564
31565 if (typeof encoding === 'function') {
31566 cb = encoding;
31567 encoding = null;
31568 }
31569
31570 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31571
31572 if (typeof cb !== 'function') cb = nop;
31573
31574 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31575 state.pendingcb++;
31576 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31577 }
31578
31579 return ret;
31580 };
31581
31582 Writable.prototype.cork = function () {
31583 var state = this._writableState;
31584
31585 state.corked++;
31586 };
31587
31588 Writable.prototype.uncork = function () {
31589 var state = this._writableState;
31590
31591 if (state.corked) {
31592 state.corked--;
31593
31594 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31595 }
31596 };
31597
31598 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31599 // node::ParseEncoding() requires lower case.
31600 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31601 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
31602 this._writableState.defaultEncoding = encoding;
31603 return this;
31604 };
31605
31606 function decodeChunk(state, chunk, encoding) {
31607 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31608 chunk = bufferShim.from(chunk, encoding);
31609 }
31610 return chunk;
31611 }
31612
31613 // if we're already writing something, then just put this
31614 // in the queue, and wait our turn. Otherwise, call _write
31615 // If we return false, then we need a drain event, so set that flag.
31616 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31617 if (!isBuf) {
31618 chunk = decodeChunk(state, chunk, encoding);
31619 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31620 }
31621 var len = state.objectMode ? 1 : chunk.length;
31622
31623 state.length += len;
31624
31625 var ret = state.length < state.highWaterMark;
31626 // we must ensure that previous needDrain will not be reset to false.
31627 if (!ret) state.needDrain = true;
31628
31629 if (state.writing || state.corked) {
31630 var last = state.lastBufferedRequest;
31631 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31632 if (last) {
31633 last.next = state.lastBufferedRequest;
31634 } else {
31635 state.bufferedRequest = state.lastBufferedRequest;
31636 }
31637 state.bufferedRequestCount += 1;
31638 } else {
31639 doWrite(stream, state, false, len, chunk, encoding, cb);
31640 }
31641
31642 return ret;
31643 }
31644
31645 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31646 state.writelen = len;
31647 state.writecb = cb;
31648 state.writing = true;
31649 state.sync = true;
31650 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31651 state.sync = false;
31652 }
31653
31654 function onwriteError(stream, state, sync, er, cb) {
31655 --state.pendingcb;
31656 if (sync) processNextTick(cb, er);else cb(er);
31657
31658 stream._writableState.errorEmitted = true;
31659 stream.emit('error', er);
31660 }
31661
31662 function onwriteStateUpdate(state) {
31663 state.writing = false;
31664 state.writecb = null;
31665 state.length -= state.writelen;
31666 state.writelen = 0;
31667 }
31668
31669 function onwrite(stream, er) {
31670 var state = stream._writableState;
31671 var sync = state.sync;
31672 var cb = state.writecb;
31673
31674 onwriteStateUpdate(state);
31675
31676 if (er) onwriteError(stream, state, sync, er, cb);else {
31677 // Check if we're actually ready to finish, but don't emit yet
31678 var finished = needFinish(state);
31679
31680 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31681 clearBuffer(stream, state);
31682 }
31683
31684 if (sync) {
31685 /*<replacement>*/
31686 asyncWrite(afterWrite, stream, state, finished, cb);
31687 /*</replacement>*/
31688 } else {
31689 afterWrite(stream, state, finished, cb);
31690 }
31691 }
31692 }
31693
31694 function afterWrite(stream, state, finished, cb) {
31695 if (!finished) onwriteDrain(stream, state);
31696 state.pendingcb--;
31697 cb();
31698 finishMaybe(stream, state);
31699 }
31700
31701 // Must force callback to be called on nextTick, so that we don't
31702 // emit 'drain' before the write() consumer gets the 'false' return
31703 // value, and has a chance to attach a 'drain' listener.
31704 function onwriteDrain(stream, state) {
31705 if (state.length === 0 && state.needDrain) {
31706 state.needDrain = false;
31707 stream.emit('drain');
31708 }
31709 }
31710
31711 // if there's something in the buffer waiting, then process it
31712 function clearBuffer(stream, state) {
31713 state.bufferProcessing = true;
31714 var entry = state.bufferedRequest;
31715
31716 if (stream._writev && entry && entry.next) {
31717 // Fast case, write everything using _writev()
31718 var l = state.bufferedRequestCount;
31719 var buffer = new Array(l);
31720 var holder = state.corkedRequestsFree;
31721 holder.entry = entry;
31722
31723 var count = 0;
31724 while (entry) {
31725 buffer[count] = entry;
31726 entry = entry.next;
31727 count += 1;
31728 }
31729
31730 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31731
31732 // doWrite is almost always async, defer these to save a bit of time
31733 // as the hot path ends with doWrite
31734 state.pendingcb++;
31735 state.lastBufferedRequest = null;
31736 if (holder.next) {
31737 state.corkedRequestsFree = holder.next;
31738 holder.next = null;
31739 } else {
31740 state.corkedRequestsFree = new CorkedRequest(state);
31741 }
31742 } else {
31743 // Slow case, write chunks one-by-one
31744 while (entry) {
31745 var chunk = entry.chunk;
31746 var encoding = entry.encoding;
31747 var cb = entry.callback;
31748 var len = state.objectMode ? 1 : chunk.length;
31749
31750 doWrite(stream, state, false, len, chunk, encoding, cb);
31751 entry = entry.next;
31752 // if we didn't call the onwrite immediately, then
31753 // it means that we need to wait until it does.
31754 // also, that means that the chunk and cb are currently
31755 // being processed, so move the buffer counter past them.
31756 if (state.writing) {
31757 break;
31758 }
31759 }
31760
31761 if (entry === null) state.lastBufferedRequest = null;
31762 }
31763
31764 state.bufferedRequestCount = 0;
31765 state.bufferedRequest = entry;
31766 state.bufferProcessing = false;
31767 }
31768
31769 Writable.prototype._write = function (chunk, encoding, cb) {
31770 cb(new Error('_write() is not implemented'));
31771 };
31772
31773 Writable.prototype._writev = null;
31774
31775 Writable.prototype.end = function (chunk, encoding, cb) {
31776 var state = this._writableState;
31777
31778 if (typeof chunk === 'function') {
31779 cb = chunk;
31780 chunk = null;
31781 encoding = null;
31782 } else if (typeof encoding === 'function') {
31783 cb = encoding;
31784 encoding = null;
31785 }
31786
31787 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31788
31789 // .end() fully uncorks
31790 if (state.corked) {
31791 state.corked = 1;
31792 this.uncork();
31793 }
31794
31795 // ignore unnecessary end() calls.
31796 if (!state.ending && !state.finished) endWritable(this, state, cb);
31797 };
31798
31799 function needFinish(state) {
31800 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31801 }
31802
31803 function prefinish(stream, state) {
31804 if (!state.prefinished) {
31805 state.prefinished = true;
31806 stream.emit('prefinish');
31807 }
31808 }
31809
31810 function finishMaybe(stream, state) {
31811 var need = needFinish(state);
31812 if (need) {
31813 if (state.pendingcb === 0) {
31814 prefinish(stream, state);
31815 state.finished = true;
31816 stream.emit('finish');
31817 } else {
31818 prefinish(stream, state);
31819 }
31820 }
31821 return need;
31822 }
31823
31824 function endWritable(stream, state, cb) {
31825 state.ending = true;
31826 finishMaybe(stream, state);
31827 if (cb) {
31828 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31829 }
31830 state.ended = true;
31831 stream.writable = false;
31832 }
31833
31834 // It seems a linked list but it is not
31835 // there will be only 2 of these for each stream
31836 function CorkedRequest(state) {
31837 var _this = this;
31838
31839 this.next = null;
31840 this.entry = null;
31841 this.finish = function (err) {
31842 var entry = _this.entry;
31843 _this.entry = null;
31844 while (entry) {
31845 var cb = entry.callback;
31846 state.pendingcb--;
31847 cb(err);
31848 entry = entry.next;
31849 }
31850 if (state.corkedRequestsFree) {
31851 state.corkedRequestsFree.next = _this;
31852 } else {
31853 state.corkedRequestsFree = _this;
31854 }
31855 };
31856 }
31857 }).call(this,require('_process'))
31858 },{"./_stream_duplex":15,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"inherits":9,"process-nextick-args":12,"util-deprecate":30}],20:[function(require,module,exports){
31859 'use strict';
31860
31861 var Buffer = require('buffer').Buffer;
31862 /*<replacement>*/
31863 var bufferShim = require('buffer-shims');
31864 /*</replacement>*/
31865
31866 module.exports = BufferList;
31867
31868 function BufferList() {
31869 this.head = null;
31870 this.tail = null;
31871 this.length = 0;
31872 }
31873
31874 BufferList.prototype.push = function (v) {
31875 var entry = { data: v, next: null };
31876 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31877 this.tail = entry;
31878 ++this.length;
31879 };
31880
31881 BufferList.prototype.unshift = function (v) {
31882 var entry = { data: v, next: this.head };
31883 if (this.length === 0) this.tail = entry;
31884 this.head = entry;
31885 ++this.length;
31886 };
31887
31888 BufferList.prototype.shift = function () {
31889 if (this.length === 0) return;
31890 var ret = this.head.data;
31891 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31892 --this.length;
31893 return ret;
31894 };
31895
31896 BufferList.prototype.clear = function () {
31897 this.head = this.tail = null;
31898 this.length = 0;
31899 };
31900
31901 BufferList.prototype.join = function (s) {
31902 if (this.length === 0) return '';
31903 var p = this.head;
31904 var ret = '' + p.data;
31905 while (p = p.next) {
31906 ret += s + p.data;
31907 }return ret;
31908 };
31909
31910 BufferList.prototype.concat = function (n) {
31911 if (this.length === 0) return bufferShim.alloc(0);
31912 if (this.length === 1) return this.head.data;
31913 var ret = bufferShim.allocUnsafe(n >>> 0);
31914 var p = this.head;
31915 var i = 0;
31916 while (p) {
31917 p.data.copy(ret, i);
31918 i += p.data.length;
31919 p = p.next;
31920 }
31921 return ret;
31922 };
31923 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31924 module.exports = require('events').EventEmitter;
31925
31926 },{"events":7}],22:[function(require,module,exports){
31927 'use strict';
31928
31929 var Buffer = require('safe-buffer').Buffer;
31930
31931 var isEncoding = Buffer.isEncoding || function (encoding) {
31932 encoding = '' + encoding;
31933 switch (encoding && encoding.toLowerCase()) {
31934 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':
31935 return true;
31936 default:
31937 return false;
31938 }
31939 };
31940
31941 function _normalizeEncoding(enc) {
31942 if (!enc) return 'utf8';
31943 var retried;
31944 while (true) {
31945 switch (enc) {
31946 case 'utf8':
31947 case 'utf-8':
31948 return 'utf8';
31949 case 'ucs2':
31950 case 'ucs-2':
31951 case 'utf16le':
31952 case 'utf-16le':
31953 return 'utf16le';
31954 case 'latin1':
31955 case 'binary':
31956 return 'latin1';
31957 case 'base64':
31958 case 'ascii':
31959 case 'hex':
31960 return enc;
31961 default:
31962 if (retried) return; // undefined
31963 enc = ('' + enc).toLowerCase();
31964 retried = true;
31965 }
31966 }
31967 };
31968
31969 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31970 // modules monkey-patch it to support additional encodings
31971 function normalizeEncoding(enc) {
31972 var nenc = _normalizeEncoding(enc);
31973 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31974 return nenc || enc;
31975 }
31976
31977 // StringDecoder provides an interface for efficiently splitting a series of
31978 // buffers into a series of JS strings without breaking apart multi-byte
31979 // characters.
31980 exports.StringDecoder = StringDecoder;
31981 function StringDecoder(encoding) {
31982 this.encoding = normalizeEncoding(encoding);
31983 var nb;
31984 switch (this.encoding) {
31985 case 'utf16le':
31986 this.text = utf16Text;
31987 this.end = utf16End;
31988 nb = 4;
31989 break;
31990 case 'utf8':
31991 this.fillLast = utf8FillLast;
31992 nb = 4;
31993 break;
31994 case 'base64':
31995 this.text = base64Text;
31996 this.end = base64End;
31997 nb = 3;
31998 break;
31999 default:
32000 this.write = simpleWrite;
32001 this.end = simpleEnd;
32002 return;
32003 }
32004 this.lastNeed = 0;
32005 this.lastTotal = 0;
32006 this.lastChar = Buffer.allocUnsafe(nb);
32007 }
32008
32009 StringDecoder.prototype.write = function (buf) {
32010 if (buf.length === 0) return '';
32011 var r;
32012 var i;
32013 if (this.lastNeed) {
32014 r = this.fillLast(buf);
32015 if (r === undefined) return '';
32016 i = this.lastNeed;
32017 this.lastNeed = 0;
32018 } else {
32019 i = 0;
32020 }
32021 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
32022 return r || '';
32023 };
32024
32025 StringDecoder.prototype.end = utf8End;
32026
32027 // Returns only complete characters in a Buffer
32028 StringDecoder.prototype.text = utf8Text;
32029
32030 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32031 StringDecoder.prototype.fillLast = function (buf) {
32032 if (this.lastNeed <= buf.length) {
32033 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32034 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32035 }
32036 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32037 this.lastNeed -= buf.length;
32038 };
32039
32040 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32041 // continuation byte.
32042 function utf8CheckByte(byte) {
32043 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
32044 return -1;
32045 }
32046
32047 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32048 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32049 // needed to complete the UTF-8 character (if applicable) are returned.
32050 function utf8CheckIncomplete(self, buf, i) {
32051 var j = buf.length - 1;
32052 if (j < i) return 0;
32053 var nb = utf8CheckByte(buf[j]);
32054 if (nb >= 0) {
32055 if (nb > 0) self.lastNeed = nb - 1;
32056 return nb;
32057 }
32058 if (--j < i) return 0;
32059 nb = utf8CheckByte(buf[j]);
32060 if (nb >= 0) {
32061 if (nb > 0) self.lastNeed = nb - 2;
32062 return nb;
32063 }
32064 if (--j < i) return 0;
32065 nb = utf8CheckByte(buf[j]);
32066 if (nb >= 0) {
32067 if (nb > 0) {
32068 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32069 }
32070 return nb;
32071 }
32072 return 0;
32073 }
32074
32075 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32076 // needed or are available. If we see a non-continuation byte where we expect
32077 // one, we "replace" the validated continuation bytes we've seen so far with
32078 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32079 // behavior. The continuation byte check is included three times in the case
32080 // where all of the continuation bytes for a character exist in the same buffer.
32081 // It is also done this way as a slight performance increase instead of using a
32082 // loop.
32083 function utf8CheckExtraBytes(self, buf, p) {
32084 if ((buf[0] & 0xC0) !== 0x80) {
32085 self.lastNeed = 0;
32086 return '\ufffd'.repeat(p);
32087 }
32088 if (self.lastNeed > 1 && buf.length > 1) {
32089 if ((buf[1] & 0xC0) !== 0x80) {
32090 self.lastNeed = 1;
32091 return '\ufffd'.repeat(p + 1);
32092 }
32093 if (self.lastNeed > 2 && buf.length > 2) {
32094 if ((buf[2] & 0xC0) !== 0x80) {
32095 self.lastNeed = 2;
32096 return '\ufffd'.repeat(p + 2);
32097 }
32098 }
32099 }
32100 }
32101
32102 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32103 function utf8FillLast(buf) {
32104 var p = this.lastTotal - this.lastNeed;
32105 var r = utf8CheckExtraBytes(this, buf, p);
32106 if (r !== undefined) return r;
32107 if (this.lastNeed <= buf.length) {
32108 buf.copy(this.lastChar, p, 0, this.lastNeed);
32109 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32110 }
32111 buf.copy(this.lastChar, p, 0, buf.length);
32112 this.lastNeed -= buf.length;
32113 }
32114
32115 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32116 // partial character, the character's bytes are buffered until the required
32117 // number of bytes are available.
32118 function utf8Text(buf, i) {
32119 var total = utf8CheckIncomplete(this, buf, i);
32120 if (!this.lastNeed) return buf.toString('utf8', i);
32121 this.lastTotal = total;
32122 var end = buf.length - (total - this.lastNeed);
32123 buf.copy(this.lastChar, 0, end);
32124 return buf.toString('utf8', i, end);
32125 }
32126
32127 // For UTF-8, a replacement character for each buffered byte of a (partial)
32128 // character needs to be added to the output.
32129 function utf8End(buf) {
32130 var r = buf && buf.length ? this.write(buf) : '';
32131 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32132 return r;
32133 }
32134
32135 // UTF-16LE typically needs two bytes per character, but even if we have an even
32136 // number of bytes available, we need to check if we end on a leading/high
32137 // surrogate. In that case, we need to wait for the next two bytes in order to
32138 // decode the last character properly.
32139 function utf16Text(buf, i) {
32140 if ((buf.length - i) % 2 === 0) {
32141 var r = buf.toString('utf16le', i);
32142 if (r) {
32143 var c = r.charCodeAt(r.length - 1);
32144 if (c >= 0xD800 && c <= 0xDBFF) {
32145 this.lastNeed = 2;
32146 this.lastTotal = 4;
32147 this.lastChar[0] = buf[buf.length - 2];
32148 this.lastChar[1] = buf[buf.length - 1];
32149 return r.slice(0, -1);
32150 }
32151 }
32152 return r;
32153 }
32154 this.lastNeed = 1;
32155 this.lastTotal = 2;
32156 this.lastChar[0] = buf[buf.length - 1];
32157 return buf.toString('utf16le', i, buf.length - 1);
32158 }
32159
32160 // For UTF-16LE we do not explicitly append special replacement characters if we
32161 // end on a partial character, we simply let v8 handle that.
32162 function utf16End(buf) {
32163 var r = buf && buf.length ? this.write(buf) : '';
32164 if (this.lastNeed) {
32165 var end = this.lastTotal - this.lastNeed;
32166 return r + this.lastChar.toString('utf16le', 0, end);
32167 }
32168 return r;
32169 }
32170
32171 function base64Text(buf, i) {
32172 var n = (buf.length - i) % 3;
32173 if (n === 0) return buf.toString('base64', i);
32174 this.lastNeed = 3 - n;
32175 this.lastTotal = 3;
32176 if (n === 1) {
32177 this.lastChar[0] = buf[buf.length - 1];
32178 } else {
32179 this.lastChar[0] = buf[buf.length - 2];
32180 this.lastChar[1] = buf[buf.length - 1];
32181 }
32182 return buf.toString('base64', i, buf.length - n);
32183 }
32184
32185 function base64End(buf) {
32186 var r = buf && buf.length ? this.write(buf) : '';
32187 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32188 return r;
32189 }
32190
32191 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32192 function simpleWrite(buf) {
32193 return buf.toString(this.encoding);
32194 }
32195
32196 function simpleEnd(buf) {
32197 return buf && buf.length ? this.write(buf) : '';
32198 }
32199 },{"safe-buffer":27}],23:[function(require,module,exports){
32200 module.exports = require('./readable').PassThrough
32201
32202 },{"./readable":24}],24:[function(require,module,exports){
32203 exports = module.exports = require('./lib/_stream_readable.js');
32204 exports.Stream = exports;
32205 exports.Readable = exports;
32206 exports.Writable = require('./lib/_stream_writable.js');
32207 exports.Duplex = require('./lib/_stream_duplex.js');
32208 exports.Transform = require('./lib/_stream_transform.js');
32209 exports.PassThrough = require('./lib/_stream_passthrough.js');
32210
32211 },{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
32212 module.exports = require('./readable').Transform
32213
32214 },{"./readable":24}],26:[function(require,module,exports){
32215 module.exports = require('./lib/_stream_writable.js');
32216
32217 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32218 module.exports = require('buffer')
32219
32220 },{"buffer":5}],28:[function(require,module,exports){
32221 // Copyright Joyent, Inc. and other Node contributors.
32222 //
32223 // Permission is hereby granted, free of charge, to any person obtaining a
32224 // copy of this software and associated documentation files (the
32225 // "Software"), to deal in the Software without restriction, including
32226 // without limitation the rights to use, copy, modify, merge, publish,
32227 // distribute, sublicense, and/or sell copies of the Software, and to permit
32228 // persons to whom the Software is furnished to do so, subject to the
32229 // following conditions:
32230 //
32231 // The above copyright notice and this permission notice shall be included
32232 // in all copies or substantial portions of the Software.
32233 //
32234 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32235 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32236 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32237 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32238 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32239 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32240 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32241
32242 module.exports = Stream;
32243
32244 var EE = require('events').EventEmitter;
32245 var inherits = require('inherits');
32246
32247 inherits(Stream, EE);
32248 Stream.Readable = require('readable-stream/readable.js');
32249 Stream.Writable = require('readable-stream/writable.js');
32250 Stream.Duplex = require('readable-stream/duplex.js');
32251 Stream.Transform = require('readable-stream/transform.js');
32252 Stream.PassThrough = require('readable-stream/passthrough.js');
32253
32254 // Backwards-compat with node 0.4.x
32255 Stream.Stream = Stream;
32256
32257
32258
32259 // old-style streams. Note that the pipe method (the only relevant
32260 // part of this class) is overridden in the Readable class.
32261
32262 function Stream() {
32263 EE.call(this);
32264 }
32265
32266 Stream.prototype.pipe = function(dest, options) {
32267 var source = this;
32268
32269 function ondata(chunk) {
32270 if (dest.writable) {
32271 if (false === dest.write(chunk) && source.pause) {
32272 source.pause();
32273 }
32274 }
32275 }
32276
32277 source.on('data', ondata);
32278
32279 function ondrain() {
32280 if (source.readable && source.resume) {
32281 source.resume();
32282 }
32283 }
32284
32285 dest.on('drain', ondrain);
32286
32287 // If the 'end' option is not supplied, dest.end() will be called when
32288 // source gets the 'end' or 'close' events. Only dest.end() once.
32289 if (!dest._isStdio && (!options || options.end !== false)) {
32290 source.on('end', onend);
32291 source.on('close', onclose);
32292 }
32293
32294 var didOnEnd = false;
32295 function onend() {
32296 if (didOnEnd) return;
32297 didOnEnd = true;
32298
32299 dest.end();
32300 }
32301
32302
32303 function onclose() {
32304 if (didOnEnd) return;
32305 didOnEnd = true;
32306
32307 if (typeof dest.destroy === 'function') dest.destroy();
32308 }
32309
32310 // don't leave dangling pipes when there are errors.
32311 function onerror(er) {
32312 cleanup();
32313 if (EE.listenerCount(this, 'error') === 0) {
32314 throw er; // Unhandled stream error in pipe.
32315 }
32316 }
32317
32318 source.on('error', onerror);
32319 dest.on('error', onerror);
32320
32321 // remove all the event listeners that were added.
32322 function cleanup() {
32323 source.removeListener('data', ondata);
32324 dest.removeListener('drain', ondrain);
32325
32326 source.removeListener('end', onend);
32327 source.removeListener('close', onclose);
32328
32329 source.removeListener('error', onerror);
32330 dest.removeListener('error', onerror);
32331
32332 source.removeListener('end', cleanup);
32333 source.removeListener('close', cleanup);
32334
32335 dest.removeListener('close', cleanup);
32336 }
32337
32338 source.on('end', cleanup);
32339 source.on('close', cleanup);
32340
32341 dest.on('close', cleanup);
32342
32343 dest.emit('pipe', source);
32344
32345 // Allow for unix-like usage: A.pipe(B).pipe(C)
32346 return dest;
32347 };
32348
32349 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":23,"readable-stream/readable.js":24,"readable-stream/transform.js":25,"readable-stream/writable.js":26}],29:[function(require,module,exports){
32350 // Copyright Joyent, Inc. and other Node contributors.
32351 //
32352 // Permission is hereby granted, free of charge, to any person obtaining a
32353 // copy of this software and associated documentation files (the
32354 // "Software"), to deal in the Software without restriction, including
32355 // without limitation the rights to use, copy, modify, merge, publish,
32356 // distribute, sublicense, and/or sell copies of the Software, and to permit
32357 // persons to whom the Software is furnished to do so, subject to the
32358 // following conditions:
32359 //
32360 // The above copyright notice and this permission notice shall be included
32361 // in all copies or substantial portions of the Software.
32362 //
32363 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32364 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32365 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32366 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32367 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32368 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32369 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32370
32371 var Buffer = require('buffer').Buffer;
32372
32373 var isBufferEncoding = Buffer.isEncoding
32374 || function(encoding) {
32375 switch (encoding && encoding.toLowerCase()) {
32376 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;
32377 default: return false;
32378 }
32379 }
32380
32381
32382 function assertEncoding(encoding) {
32383 if (encoding && !isBufferEncoding(encoding)) {
32384 throw new Error('Unknown encoding: ' + encoding);
32385 }
32386 }
32387
32388 // StringDecoder provides an interface for efficiently splitting a series of
32389 // buffers into a series of JS strings without breaking apart multi-byte
32390 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32391 //
32392 // @TODO Handling all encodings inside a single object makes it very difficult
32393 // to reason about this code, so it should be split up in the future.
32394 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32395 // points as used by CESU-8.
32396 var StringDecoder = exports.StringDecoder = function(encoding) {
32397 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32398 assertEncoding(encoding);
32399 switch (this.encoding) {
32400 case 'utf8':
32401 // CESU-8 represents each of Surrogate Pair by 3-bytes
32402 this.surrogateSize = 3;
32403 break;
32404 case 'ucs2':
32405 case 'utf16le':
32406 // UTF-16 represents each of Surrogate Pair by 2-bytes
32407 this.surrogateSize = 2;
32408 this.detectIncompleteChar = utf16DetectIncompleteChar;
32409 break;
32410 case 'base64':
32411 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32412 this.surrogateSize = 3;
32413 this.detectIncompleteChar = base64DetectIncompleteChar;
32414 break;
32415 default:
32416 this.write = passThroughWrite;
32417 return;
32418 }
32419
32420 // Enough space to store all bytes of a single character. UTF-8 needs 4
32421 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32422 this.charBuffer = new Buffer(6);
32423 // Number of bytes received for the current incomplete multi-byte character.
32424 this.charReceived = 0;
32425 // Number of bytes expected for the current incomplete multi-byte character.
32426 this.charLength = 0;
32427 };
32428
32429
32430 // write decodes the given buffer and returns it as JS string that is
32431 // guaranteed to not contain any partial multi-byte characters. Any partial
32432 // character found at the end of the buffer is buffered up, and will be
32433 // returned when calling write again with the remaining bytes.
32434 //
32435 // Note: Converting a Buffer containing an orphan surrogate to a String
32436 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32437 // Buffer#write) will replace incomplete surrogates with the unicode
32438 // replacement character. See https://codereview.chromium.org/121173009/ .
32439 StringDecoder.prototype.write = function(buffer) {
32440 var charStr = '';
32441 // if our last write ended with an incomplete multibyte character
32442 while (this.charLength) {
32443 // determine how many remaining bytes this buffer has to offer for this char
32444 var available = (buffer.length >= this.charLength - this.charReceived) ?
32445 this.charLength - this.charReceived :
32446 buffer.length;
32447
32448 // add the new bytes to the char buffer
32449 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32450 this.charReceived += available;
32451
32452 if (this.charReceived < this.charLength) {
32453 // still not enough chars in this buffer? wait for more ...
32454 return '';
32455 }
32456
32457 // remove bytes belonging to the current character from the buffer
32458 buffer = buffer.slice(available, buffer.length);
32459
32460 // get the character that was split
32461 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32462
32463 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32464 var charCode = charStr.charCodeAt(charStr.length - 1);
32465 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32466 this.charLength += this.surrogateSize;
32467 charStr = '';
32468 continue;
32469 }
32470 this.charReceived = this.charLength = 0;
32471
32472 // if there are no more bytes in this buffer, just emit our char
32473 if (buffer.length === 0) {
32474 return charStr;
32475 }
32476 break;
32477 }
32478
32479 // determine and set charLength / charReceived
32480 this.detectIncompleteChar(buffer);
32481
32482 var end = buffer.length;
32483 if (this.charLength) {
32484 // buffer the incomplete character bytes we got
32485 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32486 end -= this.charReceived;
32487 }
32488
32489 charStr += buffer.toString(this.encoding, 0, end);
32490
32491 var end = charStr.length - 1;
32492 var charCode = charStr.charCodeAt(end);
32493 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32494 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32495 var size = this.surrogateSize;
32496 this.charLength += size;
32497 this.charReceived += size;
32498 this.charBuffer.copy(this.charBuffer, size, 0, size);
32499 buffer.copy(this.charBuffer, 0, 0, size);
32500 return charStr.substring(0, end);
32501 }
32502
32503 // or just emit the charStr
32504 return charStr;
32505 };
32506
32507 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32508 // the end of the given buffer. If so, it sets this.charLength to the byte
32509 // length that character, and sets this.charReceived to the number of bytes
32510 // that are available for this character.
32511 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32512 // determine how many bytes we have to check at the end of this buffer
32513 var i = (buffer.length >= 3) ? 3 : buffer.length;
32514
32515 // Figure out if one of the last i bytes of our buffer announces an
32516 // incomplete char.
32517 for (; i > 0; i--) {
32518 var c = buffer[buffer.length - i];
32519
32520 // See http://en.wikipedia.org/wiki/UTF-8#Description
32521
32522 // 110XXXXX
32523 if (i == 1 && c >> 5 == 0x06) {
32524 this.charLength = 2;
32525 break;
32526 }
32527
32528 // 1110XXXX
32529 if (i <= 2 && c >> 4 == 0x0E) {
32530 this.charLength = 3;
32531 break;
32532 }
32533
32534 // 11110XXX
32535 if (i <= 3 && c >> 3 == 0x1E) {
32536 this.charLength = 4;
32537 break;
32538 }
32539 }
32540 this.charReceived = i;
32541 };
32542
32543 StringDecoder.prototype.end = function(buffer) {
32544 var res = '';
32545 if (buffer && buffer.length)
32546 res = this.write(buffer);
32547
32548 if (this.charReceived) {
32549 var cr = this.charReceived;
32550 var buf = this.charBuffer;
32551 var enc = this.encoding;
32552 res += buf.slice(0, cr).toString(enc);
32553 }
32554
32555 return res;
32556 };
32557
32558 function passThroughWrite(buffer) {
32559 return buffer.toString(this.encoding);
32560 }
32561
32562 function utf16DetectIncompleteChar(buffer) {
32563 this.charReceived = buffer.length % 2;
32564 this.charLength = this.charReceived ? 2 : 0;
32565 }
32566
32567 function base64DetectIncompleteChar(buffer) {
32568 this.charReceived = buffer.length % 3;
32569 this.charLength = this.charReceived ? 3 : 0;
32570 }
32571
32572 },{"buffer":5}],30:[function(require,module,exports){
32573 (function (global){
32574
32575 /**
32576 * Module exports.
32577 */
32578
32579 module.exports = deprecate;
32580
32581 /**
32582 * Mark that a method should not be used.
32583 * Returns a modified function which warns once by default.
32584 *
32585 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32586 *
32587 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32588 * will throw an Error when invoked.
32589 *
32590 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32591 * will invoke `console.trace()` instead of `console.error()`.
32592 *
32593 * @param {Function} fn - the function to deprecate
32594 * @param {String} msg - the string to print to the console when `fn` is invoked
32595 * @returns {Function} a new "deprecated" version of `fn`
32596 * @api public
32597 */
32598
32599 function deprecate (fn, msg) {
32600 if (config('noDeprecation')) {
32601 return fn;
32602 }
32603
32604 var warned = false;
32605 function deprecated() {
32606 if (!warned) {
32607 if (config('throwDeprecation')) {
32608 throw new Error(msg);
32609 } else if (config('traceDeprecation')) {
32610 console.trace(msg);
32611 } else {
32612 console.warn(msg);
32613 }
32614 warned = true;
32615 }
32616 return fn.apply(this, arguments);
32617 }
32618
32619 return deprecated;
32620 }
32621
32622 /**
32623 * Checks `localStorage` for boolean values for the given `name`.
32624 *
32625 * @param {String} name
32626 * @returns {Boolean}
32627 * @api private
32628 */
32629
32630 function config (name) {
32631 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32632 try {
32633 if (!global.localStorage) return false;
32634 } catch (_) {
32635 return false;
32636 }
32637 var val = global.localStorage[name];
32638 if (null == val) return false;
32639 return String(val).toLowerCase() === 'true';
32640 }
32641
32642 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32643 },{}],31:[function(require,module,exports){
32644 arguments[4][9][0].apply(exports,arguments)
32645 },{"dup":9}],32:[function(require,module,exports){
32646 module.exports = function isBuffer(arg) {
32647 return arg && typeof arg === 'object'
32648 && typeof arg.copy === 'function'
32649 && typeof arg.fill === 'function'
32650 && typeof arg.readUInt8 === 'function';
32651 }
32652 },{}],33:[function(require,module,exports){
32653 (function (process,global){
32654 // Copyright Joyent, Inc. and other Node contributors.
32655 //
32656 // Permission is hereby granted, free of charge, to any person obtaining a
32657 // copy of this software and associated documentation files (the
32658 // "Software"), to deal in the Software without restriction, including
32659 // without limitation the rights to use, copy, modify, merge, publish,
32660 // distribute, sublicense, and/or sell copies of the Software, and to permit
32661 // persons to whom the Software is furnished to do so, subject to the
32662 // following conditions:
32663 //
32664 // The above copyright notice and this permission notice shall be included
32665 // in all copies or substantial portions of the Software.
32666 //
32667 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32668 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32669 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32670 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32671 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32672 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32673 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32674
32675 var formatRegExp = /%[sdj%]/g;
32676 exports.format = function(f) {
32677 if (!isString(f)) {
32678 var objects = [];
32679 for (var i = 0; i < arguments.length; i++) {
32680 objects.push(inspect(arguments[i]));
32681 }
32682 return objects.join(' ');
32683 }
32684
32685 var i = 1;
32686 var args = arguments;
32687 var len = args.length;
32688 var str = String(f).replace(formatRegExp, function(x) {
32689 if (x === '%%') return '%';
32690 if (i >= len) return x;
32691 switch (x) {
32692 case '%s': return String(args[i++]);
32693 case '%d': return Number(args[i++]);
32694 case '%j':
32695 try {
32696 return JSON.stringify(args[i++]);
32697 } catch (_) {
32698 return '[Circular]';
32699 }
32700 default:
32701 return x;
32702 }
32703 });
32704 for (var x = args[i]; i < len; x = args[++i]) {
32705 if (isNull(x) || !isObject(x)) {
32706 str += ' ' + x;
32707 } else {
32708 str += ' ' + inspect(x);
32709 }
32710 }
32711 return str;
32712 };
32713
32714
32715 // Mark that a method should not be used.
32716 // Returns a modified function which warns once by default.
32717 // If --no-deprecation is set, then it is a no-op.
32718 exports.deprecate = function(fn, msg) {
32719 // Allow for deprecating things in the process of starting up.
32720 if (isUndefined(global.process)) {
32721 return function() {
32722 return exports.deprecate(fn, msg).apply(this, arguments);
32723 };
32724 }
32725
32726 if (process.noDeprecation === true) {
32727 return fn;
32728 }
32729
32730 var warned = false;
32731 function deprecated() {
32732 if (!warned) {
32733 if (process.throwDeprecation) {
32734 throw new Error(msg);
32735 } else if (process.traceDeprecation) {
32736 console.trace(msg);
32737 } else {
32738 console.error(msg);
32739 }
32740 warned = true;
32741 }
32742 return fn.apply(this, arguments);
32743 }
32744
32745 return deprecated;
32746 };
32747
32748
32749 var debugs = {};
32750 var debugEnviron;
32751 exports.debuglog = function(set) {
32752 if (isUndefined(debugEnviron))
32753 debugEnviron = process.env.NODE_DEBUG || '';
32754 set = set.toUpperCase();
32755 if (!debugs[set]) {
32756 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32757 var pid = process.pid;
32758 debugs[set] = function() {
32759 var msg = exports.format.apply(exports, arguments);
32760 console.error('%s %d: %s', set, pid, msg);
32761 };
32762 } else {
32763 debugs[set] = function() {};
32764 }
32765 }
32766 return debugs[set];
32767 };
32768
32769
32770 /**
32771 * Echos the value of a value. Trys to print the value out
32772 * in the best way possible given the different types.
32773 *
32774 * @param {Object} obj The object to print out.
32775 * @param {Object} opts Optional options object that alters the output.
32776 */
32777 /* legacy: obj, showHidden, depth, colors*/
32778 function inspect(obj, opts) {
32779 // default options
32780 var ctx = {
32781 seen: [],
32782 stylize: stylizeNoColor
32783 };
32784 // legacy...
32785 if (arguments.length >= 3) ctx.depth = arguments[2];
32786 if (arguments.length >= 4) ctx.colors = arguments[3];
32787 if (isBoolean(opts)) {
32788 // legacy...
32789 ctx.showHidden = opts;
32790 } else if (opts) {
32791 // got an "options" object
32792 exports._extend(ctx, opts);
32793 }
32794 // set default options
32795 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32796 if (isUndefined(ctx.depth)) ctx.depth = 2;
32797 if (isUndefined(ctx.colors)) ctx.colors = false;
32798 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32799 if (ctx.colors) ctx.stylize = stylizeWithColor;
32800 return formatValue(ctx, obj, ctx.depth);
32801 }
32802 exports.inspect = inspect;
32803
32804
32805 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32806 inspect.colors = {
32807 'bold' : [1, 22],
32808 'italic' : [3, 23],
32809 'underline' : [4, 24],
32810 'inverse' : [7, 27],
32811 'white' : [37, 39],
32812 'grey' : [90, 39],
32813 'black' : [30, 39],
32814 'blue' : [34, 39],
32815 'cyan' : [36, 39],
32816 'green' : [32, 39],
32817 'magenta' : [35, 39],
32818 'red' : [31, 39],
32819 'yellow' : [33, 39]
32820 };
32821
32822 // Don't use 'blue' not visible on cmd.exe
32823 inspect.styles = {
32824 'special': 'cyan',
32825 'number': 'yellow',
32826 'boolean': 'yellow',
32827 'undefined': 'grey',
32828 'null': 'bold',
32829 'string': 'green',
32830 'date': 'magenta',
32831 // "name": intentionally not styling
32832 'regexp': 'red'
32833 };
32834
32835
32836 function stylizeWithColor(str, styleType) {
32837 var style = inspect.styles[styleType];
32838
32839 if (style) {
32840 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32841 '\u001b[' + inspect.colors[style][1] + 'm';
32842 } else {
32843 return str;
32844 }
32845 }
32846
32847
32848 function stylizeNoColor(str, styleType) {
32849 return str;
32850 }
32851
32852
32853 function arrayToHash(array) {
32854 var hash = {};
32855
32856 array.forEach(function(val, idx) {
32857 hash[val] = true;
32858 });
32859
32860 return hash;
32861 }
32862
32863
32864 function formatValue(ctx, value, recurseTimes) {
32865 // Provide a hook for user-specified inspect functions.
32866 // Check that value is an object with an inspect function on it
32867 if (ctx.customInspect &&
32868 value &&
32869 isFunction(value.inspect) &&
32870 // Filter out the util module, it's inspect function is special
32871 value.inspect !== exports.inspect &&
32872 // Also filter out any prototype objects using the circular check.
32873 !(value.constructor && value.constructor.prototype === value)) {
32874 var ret = value.inspect(recurseTimes, ctx);
32875 if (!isString(ret)) {
32876 ret = formatValue(ctx, ret, recurseTimes);
32877 }
32878 return ret;
32879 }
32880
32881 // Primitive types cannot have properties
32882 var primitive = formatPrimitive(ctx, value);
32883 if (primitive) {
32884 return primitive;
32885 }
32886
32887 // Look up the keys of the object.
32888 var keys = Object.keys(value);
32889 var visibleKeys = arrayToHash(keys);
32890
32891 if (ctx.showHidden) {
32892 keys = Object.getOwnPropertyNames(value);
32893 }
32894
32895 // IE doesn't make error fields non-enumerable
32896 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32897 if (isError(value)
32898 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32899 return formatError(value);
32900 }
32901
32902 // Some type of object without properties can be shortcutted.
32903 if (keys.length === 0) {
32904 if (isFunction(value)) {
32905 var name = value.name ? ': ' + value.name : '';
32906 return ctx.stylize('[Function' + name + ']', 'special');
32907 }
32908 if (isRegExp(value)) {
32909 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32910 }
32911 if (isDate(value)) {
32912 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32913 }
32914 if (isError(value)) {
32915 return formatError(value);
32916 }
32917 }
32918
32919 var base = '', array = false, braces = ['{', '}'];
32920
32921 // Make Array say that they are Array
32922 if (isArray(value)) {
32923 array = true;
32924 braces = ['[', ']'];
32925 }
32926
32927 // Make functions say that they are functions
32928 if (isFunction(value)) {
32929 var n = value.name ? ': ' + value.name : '';
32930 base = ' [Function' + n + ']';
32931 }
32932
32933 // Make RegExps say that they are RegExps
32934 if (isRegExp(value)) {
32935 base = ' ' + RegExp.prototype.toString.call(value);
32936 }
32937
32938 // Make dates with properties first say the date
32939 if (isDate(value)) {
32940 base = ' ' + Date.prototype.toUTCString.call(value);
32941 }
32942
32943 // Make error with message first say the error
32944 if (isError(value)) {
32945 base = ' ' + formatError(value);
32946 }
32947
32948 if (keys.length === 0 && (!array || value.length == 0)) {
32949 return braces[0] + base + braces[1];
32950 }
32951
32952 if (recurseTimes < 0) {
32953 if (isRegExp(value)) {
32954 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32955 } else {
32956 return ctx.stylize('[Object]', 'special');
32957 }
32958 }
32959
32960 ctx.seen.push(value);
32961
32962 var output;
32963 if (array) {
32964 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32965 } else {
32966 output = keys.map(function(key) {
32967 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32968 });
32969 }
32970
32971 ctx.seen.pop();
32972
32973 return reduceToSingleString(output, base, braces);
32974 }
32975
32976
32977 function formatPrimitive(ctx, value) {
32978 if (isUndefined(value))
32979 return ctx.stylize('undefined', 'undefined');
32980 if (isString(value)) {
32981 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32982 .replace(/'/g, "\\'")
32983 .replace(/\\"/g, '"') + '\'';
32984 return ctx.stylize(simple, 'string');
32985 }
32986 if (isNumber(value))
32987 return ctx.stylize('' + value, 'number');
32988 if (isBoolean(value))
32989 return ctx.stylize('' + value, 'boolean');
32990 // For some reason typeof null is "object", so special case here.
32991 if (isNull(value))
32992 return ctx.stylize('null', 'null');
32993 }
32994
32995
32996 function formatError(value) {
32997 return '[' + Error.prototype.toString.call(value) + ']';
32998 }
32999
33000
33001 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
33002 var output = [];
33003 for (var i = 0, l = value.length; i < l; ++i) {
33004 if (hasOwnProperty(value, String(i))) {
33005 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
33006 String(i), true));
33007 } else {
33008 output.push('');
33009 }
33010 }
33011 keys.forEach(function(key) {
33012 if (!key.match(/^\d+$/)) {
33013 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
33014 key, true));
33015 }
33016 });
33017 return output;
33018 }
33019
33020
33021 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
33022 var name, str, desc;
33023 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
33024 if (desc.get) {
33025 if (desc.set) {
33026 str = ctx.stylize('[Getter/Setter]', 'special');
33027 } else {
33028 str = ctx.stylize('[Getter]', 'special');
33029 }
33030 } else {
33031 if (desc.set) {
33032 str = ctx.stylize('[Setter]', 'special');
33033 }
33034 }
33035 if (!hasOwnProperty(visibleKeys, key)) {
33036 name = '[' + key + ']';
33037 }
33038 if (!str) {
33039 if (ctx.seen.indexOf(desc.value) < 0) {
33040 if (isNull(recurseTimes)) {
33041 str = formatValue(ctx, desc.value, null);
33042 } else {
33043 str = formatValue(ctx, desc.value, recurseTimes - 1);
33044 }
33045 if (str.indexOf('\n') > -1) {
33046 if (array) {
33047 str = str.split('\n').map(function(line) {
33048 return ' ' + line;
33049 }).join('\n').substr(2);
33050 } else {
33051 str = '\n' + str.split('\n').map(function(line) {
33052 return ' ' + line;
33053 }).join('\n');
33054 }
33055 }
33056 } else {
33057 str = ctx.stylize('[Circular]', 'special');
33058 }
33059 }
33060 if (isUndefined(name)) {
33061 if (array && key.match(/^\d+$/)) {
33062 return str;
33063 }
33064 name = JSON.stringify('' + key);
33065 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33066 name = name.substr(1, name.length - 2);
33067 name = ctx.stylize(name, 'name');
33068 } else {
33069 name = name.replace(/'/g, "\\'")
33070 .replace(/\\"/g, '"')
33071 .replace(/(^"|"$)/g, "'");
33072 name = ctx.stylize(name, 'string');
33073 }
33074 }
33075
33076 return name + ': ' + str;
33077 }
33078
33079
33080 function reduceToSingleString(output, base, braces) {
33081 var numLinesEst = 0;
33082 var length = output.reduce(function(prev, cur) {
33083 numLinesEst++;
33084 if (cur.indexOf('\n') >= 0) numLinesEst++;
33085 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33086 }, 0);
33087
33088 if (length > 60) {
33089 return braces[0] +
33090 (base === '' ? '' : base + '\n ') +
33091 ' ' +
33092 output.join(',\n ') +
33093 ' ' +
33094 braces[1];
33095 }
33096
33097 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33098 }
33099
33100
33101 // NOTE: These type checking functions intentionally don't use `instanceof`
33102 // because it is fragile and can be easily faked with `Object.create()`.
33103 function isArray(ar) {
33104 return Array.isArray(ar);
33105 }
33106 exports.isArray = isArray;
33107
33108 function isBoolean(arg) {
33109 return typeof arg === 'boolean';
33110 }
33111 exports.isBoolean = isBoolean;
33112
33113 function isNull(arg) {
33114 return arg === null;
33115 }
33116 exports.isNull = isNull;
33117
33118 function isNullOrUndefined(arg) {
33119 return arg == null;
33120 }
33121 exports.isNullOrUndefined = isNullOrUndefined;
33122
33123 function isNumber(arg) {
33124 return typeof arg === 'number';
33125 }
33126 exports.isNumber = isNumber;
33127
33128 function isString(arg) {
33129 return typeof arg === 'string';
33130 }
33131 exports.isString = isString;
33132
33133 function isSymbol(arg) {
33134 return typeof arg === 'symbol';
33135 }
33136 exports.isSymbol = isSymbol;
33137
33138 function isUndefined(arg) {
33139 return arg === void 0;
33140 }
33141 exports.isUndefined = isUndefined;
33142
33143 function isRegExp(re) {
33144 return isObject(re) && objectToString(re) === '[object RegExp]';
33145 }
33146 exports.isRegExp = isRegExp;
33147
33148 function isObject(arg) {
33149 return typeof arg === 'object' && arg !== null;
33150 }
33151 exports.isObject = isObject;
33152
33153 function isDate(d) {
33154 return isObject(d) && objectToString(d) === '[object Date]';
33155 }
33156 exports.isDate = isDate;
33157
33158 function isError(e) {
33159 return isObject(e) &&
33160 (objectToString(e) === '[object Error]' || e instanceof Error);
33161 }
33162 exports.isError = isError;
33163
33164 function isFunction(arg) {
33165 return typeof arg === 'function';
33166 }
33167 exports.isFunction = isFunction;
33168
33169 function isPrimitive(arg) {
33170 return arg === null ||
33171 typeof arg === 'boolean' ||
33172 typeof arg === 'number' ||
33173 typeof arg === 'string' ||
33174 typeof arg === 'symbol' || // ES6 symbol
33175 typeof arg === 'undefined';
33176 }
33177 exports.isPrimitive = isPrimitive;
33178
33179 exports.isBuffer = require('./support/isBuffer');
33180
33181 function objectToString(o) {
33182 return Object.prototype.toString.call(o);
33183 }
33184
33185
33186 function pad(n) {
33187 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33188 }
33189
33190
33191 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33192 'Oct', 'Nov', 'Dec'];
33193
33194 // 26 Feb 16:19:34
33195 function timestamp() {
33196 var d = new Date();
33197 var time = [pad(d.getHours()),
33198 pad(d.getMinutes()),
33199 pad(d.getSeconds())].join(':');
33200 return [d.getDate(), months[d.getMonth()], time].join(' ');
33201 }
33202
33203
33204 // log is just a thin wrapper to console.log that prepends a timestamp
33205 exports.log = function() {
33206 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33207 };
33208
33209
33210 /**
33211 * Inherit the prototype methods from one constructor into another.
33212 *
33213 * The Function.prototype.inherits from lang.js rewritten as a standalone
33214 * function (not on Function.prototype). NOTE: If this file is to be loaded
33215 * during bootstrapping this function needs to be rewritten using some native
33216 * functions as prototype setup using normal JavaScript does not work as
33217 * expected during bootstrapping (see mirror.js in r114903).
33218 *
33219 * @param {function} ctor Constructor function which needs to inherit the
33220 * prototype.
33221 * @param {function} superCtor Constructor function to inherit prototype from.
33222 */
33223 exports.inherits = require('inherits');
33224
33225 exports._extend = function(origin, add) {
33226 // Don't do anything if add isn't an object
33227 if (!add || !isObject(add)) return origin;
33228
33229 var keys = Object.keys(add);
33230 var i = keys.length;
33231 while (i--) {
33232 origin[keys[i]] = add[keys[i]];
33233 }
33234 return origin;
33235 };
33236
33237 function hasOwnProperty(obj, prop) {
33238 return Object.prototype.hasOwnProperty.call(obj, prop);
33239 }
33240
33241 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33242 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33243 let bitcoin = require('bitcoinjs-lib');
33244
33245 module.exports = {
33246 bitcoin
33247 }
33248
33249 },{"bitcoinjs-lib":52}],35:[function(require,module,exports){
33250 // base-x encoding
33251 // Forked from https://github.com/cryptocoinjs/bs58
33252 // Originally written by Mike Hearn for BitcoinJ
33253 // Copyright (c) 2011 Google Inc
33254 // Ported to JavaScript by Stefan Thomas
33255 // Merged Buffer refactorings from base58-native by Stephen Pair
33256 // Copyright (c) 2013 BitPay Inc
33257
33258 var Buffer = require('safe-buffer').Buffer
33259
33260 module.exports = function base (ALPHABET) {
33261 var ALPHABET_MAP = {}
33262 var BASE = ALPHABET.length
33263 var LEADER = ALPHABET.charAt(0)
33264
33265 // pre-compute lookup table
33266 for (var z = 0; z < ALPHABET.length; z++) {
33267 var x = ALPHABET.charAt(z)
33268
33269 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33270 ALPHABET_MAP[x] = z
33271 }
33272
33273 function encode (source) {
33274 if (source.length === 0) return ''
33275
33276 var digits = [0]
33277 for (var i = 0; i < source.length; ++i) {
33278 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33279 carry += digits[j] << 8
33280 digits[j] = carry % BASE
33281 carry = (carry / BASE) | 0
33282 }
33283
33284 while (carry > 0) {
33285 digits.push(carry % BASE)
33286 carry = (carry / BASE) | 0
33287 }
33288 }
33289
33290 var string = ''
33291
33292 // deal with leading zeros
33293 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
33294 // convert digits to a string
33295 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33296
33297 return string
33298 }
33299
33300 function decodeUnsafe (string) {
33301 if (typeof string !== 'string') throw new TypeError('Expected String')
33302 if (string.length === 0) return Buffer.allocUnsafe(0)
33303
33304 var bytes = [0]
33305 for (var i = 0; i < string.length; i++) {
33306 var value = ALPHABET_MAP[string[i]]
33307 if (value === undefined) return
33308
33309 for (var j = 0, carry = value; j < bytes.length; ++j) {
33310 carry += bytes[j] * BASE
33311 bytes[j] = carry & 0xff
33312 carry >>= 8
33313 }
33314
33315 while (carry > 0) {
33316 bytes.push(carry & 0xff)
33317 carry >>= 8
33318 }
33319 }
33320
33321 // deal with leading zeros
33322 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33323 bytes.push(0)
33324 }
33325
33326 return Buffer.from(bytes.reverse())
33327 }
33328
33329 function decode (string) {
33330 var buffer = decodeUnsafe(string)
33331 if (buffer) return buffer
33332
33333 throw new Error('Non-base' + BASE + ' character')
33334 }
33335
33336 return {
33337 encode: encode,
33338 decodeUnsafe: decodeUnsafe,
33339 decode: decode
33340 }
33341 }
33342
33343 },{"safe-buffer":101}],36:[function(require,module,exports){
33344 'use strict'
33345 var ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33346
33347 // pre-compute lookup table
33348 var ALPHABET_MAP = {}
33349 for (var z = 0; z < ALPHABET.length; z++) {
33350 var x = ALPHABET.charAt(z)
33351
33352 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33353 ALPHABET_MAP[x] = z
33354 }
33355
33356 function polymodStep (pre) {
33357 var b = pre >> 25
33358 return ((pre & 0x1FFFFFF) << 5) ^
33359 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33360 (-((b >> 1) & 1) & 0x26508e6d) ^
33361 (-((b >> 2) & 1) & 0x1ea119fa) ^
33362 (-((b >> 3) & 1) & 0x3d4233dd) ^
33363 (-((b >> 4) & 1) & 0x2a1462b3)
33364 }
33365
33366 function prefixChk (prefix) {
33367 var chk = 1
33368 for (var i = 0; i < prefix.length; ++i) {
33369 var c = prefix.charCodeAt(i)
33370 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33371
33372 chk = polymodStep(chk) ^ (c >> 5)
33373 }
33374 chk = polymodStep(chk)
33375
33376 for (i = 0; i < prefix.length; ++i) {
33377 var v = prefix.charCodeAt(i)
33378 chk = polymodStep(chk) ^ (v & 0x1f)
33379 }
33380 return chk
33381 }
33382
33383 function encode (prefix, words, LIMIT) {
33384 LIMIT = LIMIT || 90
33385 if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')
33386
33387 prefix = prefix.toLowerCase()
33388
33389 // determine chk mod
33390 var chk = prefixChk(prefix)
33391 var result = prefix + '1'
33392 for (var i = 0; i < words.length; ++i) {
33393 var x = words[i]
33394 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33395
33396 chk = polymodStep(chk) ^ x
33397 result += ALPHABET.charAt(x)
33398 }
33399
33400 for (i = 0; i < 6; ++i) {
33401 chk = polymodStep(chk)
33402 }
33403 chk ^= 1
33404
33405 for (i = 0; i < 6; ++i) {
33406 var v = (chk >> ((5 - i) * 5)) & 0x1f
33407 result += ALPHABET.charAt(v)
33408 }
33409
33410 return result
33411 }
33412
33413 function decode (str, LIMIT) {
33414 LIMIT = LIMIT || 90
33415 if (str.length < 8) throw new TypeError(str + ' too short')
33416 if (str.length > LIMIT) throw new TypeError('Exceeds length limit')
33417
33418 // don't allow mixed case
33419 var lowered = str.toLowerCase()
33420 var uppered = str.toUpperCase()
33421 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33422 str = lowered
33423
33424 var split = str.lastIndexOf('1')
33425 if (split === -1) throw new Error('No separator character for ' + str)
33426 if (split === 0) throw new Error('Missing prefix for ' + str)
33427
33428 var prefix = str.slice(0, split)
33429 var wordChars = str.slice(split + 1)
33430 if (wordChars.length < 6) throw new Error('Data too short')
33431
33432 var chk = prefixChk(prefix)
33433 var words = []
33434 for (var i = 0; i < wordChars.length; ++i) {
33435 var c = wordChars.charAt(i)
33436 var v = ALPHABET_MAP[c]
33437 if (v === undefined) throw new Error('Unknown character ' + c)
33438 chk = polymodStep(chk) ^ v
33439
33440 // not in the checksum?
33441 if (i + 6 >= wordChars.length) continue
33442 words.push(v)
33443 }
33444
33445 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33446 return { prefix: prefix, words: words }
33447 }
33448
33449 function convert (data, inBits, outBits, pad) {
33450 var value = 0
33451 var bits = 0
33452 var maxV = (1 << outBits) - 1
33453
33454 var result = []
33455 for (var i = 0; i < data.length; ++i) {
33456 value = (value << inBits) | data[i]
33457 bits += inBits
33458
33459 while (bits >= outBits) {
33460 bits -= outBits
33461 result.push((value >> bits) & maxV)
33462 }
33463 }
33464
33465 if (pad) {
33466 if (bits > 0) {
33467 result.push((value << (outBits - bits)) & maxV)
33468 }
33469 } else {
33470 if (bits >= inBits) throw new Error('Excess padding')
33471 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33472 }
33473
33474 return result
33475 }
33476
33477 function toWords (bytes) {
33478 return convert(bytes, 8, 5, true)
33479 }
33480
33481 function fromWords (words) {
33482 return convert(words, 5, 8, false)
33483 }
33484
33485 module.exports = {
33486 decode: decode,
33487 encode: encode,
33488 toWords: toWords,
33489 fromWords: fromWords
33490 }
33491
33492 },{}],37:[function(require,module,exports){
33493 // (public) Constructor
33494 function BigInteger(a, b, c) {
33495 if (!(this instanceof BigInteger))
33496 return new BigInteger(a, b, c)
33497
33498 if (a != null) {
33499 if ("number" == typeof a) this.fromNumber(a, b, c)
33500 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33501 else this.fromString(a, b)
33502 }
33503 }
33504
33505 var proto = BigInteger.prototype
33506
33507 // duck-typed isBigInteger
33508 proto.__bigi = require('../package.json').version
33509 BigInteger.isBigInteger = function (obj, check_ver) {
33510 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33511 }
33512
33513 // Bits per digit
33514 var dbits
33515
33516 // am: Compute w_j += (x*this_i), propagate carries,
33517 // c is initial carry, returns final carry.
33518 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33519 // We need to select the fastest one that works in this environment.
33520
33521 // am1: use a single mult and divide to get the high bits,
33522 // max digit bits should be 26 because
33523 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33524 function am1(i, x, w, j, c, n) {
33525 while (--n >= 0) {
33526 var v = x * this[i++] + w[j] + c
33527 c = Math.floor(v / 0x4000000)
33528 w[j++] = v & 0x3ffffff
33529 }
33530 return c
33531 }
33532 // am2 avoids a big mult-and-extract completely.
33533 // Max digit bits should be <= 30 because we do bitwise ops
33534 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33535 function am2(i, x, w, j, c, n) {
33536 var xl = x & 0x7fff,
33537 xh = x >> 15
33538 while (--n >= 0) {
33539 var l = this[i] & 0x7fff
33540 var h = this[i++] >> 15
33541 var m = xh * l + h * xl
33542 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33543 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33544 w[j++] = l & 0x3fffffff
33545 }
33546 return c
33547 }
33548 // Alternately, set max digit bits to 28 since some
33549 // browsers slow down when dealing with 32-bit numbers.
33550 function am3(i, x, w, j, c, n) {
33551 var xl = x & 0x3fff,
33552 xh = x >> 14
33553 while (--n >= 0) {
33554 var l = this[i] & 0x3fff
33555 var h = this[i++] >> 14
33556 var m = xh * l + h * xl
33557 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33558 c = (l >> 28) + (m >> 14) + xh * h
33559 w[j++] = l & 0xfffffff
33560 }
33561 return c
33562 }
33563
33564 // wtf?
33565 BigInteger.prototype.am = am1
33566 dbits = 26
33567
33568 BigInteger.prototype.DB = dbits
33569 BigInteger.prototype.DM = ((1 << dbits) - 1)
33570 var DV = BigInteger.prototype.DV = (1 << dbits)
33571
33572 var BI_FP = 52
33573 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33574 BigInteger.prototype.F1 = BI_FP - dbits
33575 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33576
33577 // Digit conversions
33578 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33579 var BI_RC = new Array()
33580 var rr, vv
33581 rr = "0".charCodeAt(0)
33582 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33583 rr = "a".charCodeAt(0)
33584 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33585 rr = "A".charCodeAt(0)
33586 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33587
33588 function int2char(n) {
33589 return BI_RM.charAt(n)
33590 }
33591
33592 function intAt(s, i) {
33593 var c = BI_RC[s.charCodeAt(i)]
33594 return (c == null) ? -1 : c
33595 }
33596
33597 // (protected) copy this to r
33598 function bnpCopyTo(r) {
33599 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33600 r.t = this.t
33601 r.s = this.s
33602 }
33603
33604 // (protected) set from integer value x, -DV <= x < DV
33605 function bnpFromInt(x) {
33606 this.t = 1
33607 this.s = (x < 0) ? -1 : 0
33608 if (x > 0) this[0] = x
33609 else if (x < -1) this[0] = x + DV
33610 else this.t = 0
33611 }
33612
33613 // return bigint initialized to value
33614 function nbv(i) {
33615 var r = new BigInteger()
33616 r.fromInt(i)
33617 return r
33618 }
33619
33620 // (protected) set from string and radix
33621 function bnpFromString(s, b) {
33622 var self = this
33623
33624 var k
33625 if (b == 16) k = 4
33626 else if (b == 8) k = 3
33627 else if (b == 256) k = 8; // byte array
33628 else if (b == 2) k = 1
33629 else if (b == 32) k = 5
33630 else if (b == 4) k = 2
33631 else {
33632 self.fromRadix(s, b)
33633 return
33634 }
33635 self.t = 0
33636 self.s = 0
33637 var i = s.length,
33638 mi = false,
33639 sh = 0
33640 while (--i >= 0) {
33641 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33642 if (x < 0) {
33643 if (s.charAt(i) == "-") mi = true
33644 continue
33645 }
33646 mi = false
33647 if (sh == 0)
33648 self[self.t++] = x
33649 else if (sh + k > self.DB) {
33650 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33651 self[self.t++] = (x >> (self.DB - sh))
33652 } else
33653 self[self.t - 1] |= x << sh
33654 sh += k
33655 if (sh >= self.DB) sh -= self.DB
33656 }
33657 if (k == 8 && (s[0] & 0x80) != 0) {
33658 self.s = -1
33659 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33660 }
33661 self.clamp()
33662 if (mi) BigInteger.ZERO.subTo(self, self)
33663 }
33664
33665 // (protected) clamp off excess high words
33666 function bnpClamp() {
33667 var c = this.s & this.DM
33668 while (this.t > 0 && this[this.t - 1] == c)--this.t
33669 }
33670
33671 // (public) return string representation in given radix
33672 function bnToString(b) {
33673 var self = this
33674 if (self.s < 0) return "-" + self.negate()
33675 .toString(b)
33676 var k
33677 if (b == 16) k = 4
33678 else if (b == 8) k = 3
33679 else if (b == 2) k = 1
33680 else if (b == 32) k = 5
33681 else if (b == 4) k = 2
33682 else return self.toRadix(b)
33683 var km = (1 << k) - 1,
33684 d, m = false,
33685 r = "",
33686 i = self.t
33687 var p = self.DB - (i * self.DB) % k
33688 if (i-- > 0) {
33689 if (p < self.DB && (d = self[i] >> p) > 0) {
33690 m = true
33691 r = int2char(d)
33692 }
33693 while (i >= 0) {
33694 if (p < k) {
33695 d = (self[i] & ((1 << p) - 1)) << (k - p)
33696 d |= self[--i] >> (p += self.DB - k)
33697 } else {
33698 d = (self[i] >> (p -= k)) & km
33699 if (p <= 0) {
33700 p += self.DB
33701 --i
33702 }
33703 }
33704 if (d > 0) m = true
33705 if (m) r += int2char(d)
33706 }
33707 }
33708 return m ? r : "0"
33709 }
33710
33711 // (public) -this
33712 function bnNegate() {
33713 var r = new BigInteger()
33714 BigInteger.ZERO.subTo(this, r)
33715 return r
33716 }
33717
33718 // (public) |this|
33719 function bnAbs() {
33720 return (this.s < 0) ? this.negate() : this
33721 }
33722
33723 // (public) return + if this > a, - if this < a, 0 if equal
33724 function bnCompareTo(a) {
33725 var r = this.s - a.s
33726 if (r != 0) return r
33727 var i = this.t
33728 r = i - a.t
33729 if (r != 0) return (this.s < 0) ? -r : r
33730 while (--i >= 0)
33731 if ((r = this[i] - a[i]) != 0) return r
33732 return 0
33733 }
33734
33735 // returns bit length of the integer x
33736 function nbits(x) {
33737 var r = 1,
33738 t
33739 if ((t = x >>> 16) != 0) {
33740 x = t
33741 r += 16
33742 }
33743 if ((t = x >> 8) != 0) {
33744 x = t
33745 r += 8
33746 }
33747 if ((t = x >> 4) != 0) {
33748 x = t
33749 r += 4
33750 }
33751 if ((t = x >> 2) != 0) {
33752 x = t
33753 r += 2
33754 }
33755 if ((t = x >> 1) != 0) {
33756 x = t
33757 r += 1
33758 }
33759 return r
33760 }
33761
33762 // (public) return the number of bits in "this"
33763 function bnBitLength() {
33764 if (this.t <= 0) return 0
33765 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33766 }
33767
33768 // (public) return the number of bytes in "this"
33769 function bnByteLength() {
33770 return this.bitLength() >> 3
33771 }
33772
33773 // (protected) r = this << n*DB
33774 function bnpDLShiftTo(n, r) {
33775 var i
33776 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33777 for (i = n - 1; i >= 0; --i) r[i] = 0
33778 r.t = this.t + n
33779 r.s = this.s
33780 }
33781
33782 // (protected) r = this >> n*DB
33783 function bnpDRShiftTo(n, r) {
33784 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33785 r.t = Math.max(this.t - n, 0)
33786 r.s = this.s
33787 }
33788
33789 // (protected) r = this << n
33790 function bnpLShiftTo(n, r) {
33791 var self = this
33792 var bs = n % self.DB
33793 var cbs = self.DB - bs
33794 var bm = (1 << cbs) - 1
33795 var ds = Math.floor(n / self.DB),
33796 c = (self.s << bs) & self.DM,
33797 i
33798 for (i = self.t - 1; i >= 0; --i) {
33799 r[i + ds + 1] = (self[i] >> cbs) | c
33800 c = (self[i] & bm) << bs
33801 }
33802 for (i = ds - 1; i >= 0; --i) r[i] = 0
33803 r[ds] = c
33804 r.t = self.t + ds + 1
33805 r.s = self.s
33806 r.clamp()
33807 }
33808
33809 // (protected) r = this >> n
33810 function bnpRShiftTo(n, r) {
33811 var self = this
33812 r.s = self.s
33813 var ds = Math.floor(n / self.DB)
33814 if (ds >= self.t) {
33815 r.t = 0
33816 return
33817 }
33818 var bs = n % self.DB
33819 var cbs = self.DB - bs
33820 var bm = (1 << bs) - 1
33821 r[0] = self[ds] >> bs
33822 for (var i = ds + 1; i < self.t; ++i) {
33823 r[i - ds - 1] |= (self[i] & bm) << cbs
33824 r[i - ds] = self[i] >> bs
33825 }
33826 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33827 r.t = self.t - ds
33828 r.clamp()
33829 }
33830
33831 // (protected) r = this - a
33832 function bnpSubTo(a, r) {
33833 var self = this
33834 var i = 0,
33835 c = 0,
33836 m = Math.min(a.t, self.t)
33837 while (i < m) {
33838 c += self[i] - a[i]
33839 r[i++] = c & self.DM
33840 c >>= self.DB
33841 }
33842 if (a.t < self.t) {
33843 c -= a.s
33844 while (i < self.t) {
33845 c += self[i]
33846 r[i++] = c & self.DM
33847 c >>= self.DB
33848 }
33849 c += self.s
33850 } else {
33851 c += self.s
33852 while (i < a.t) {
33853 c -= a[i]
33854 r[i++] = c & self.DM
33855 c >>= self.DB
33856 }
33857 c -= a.s
33858 }
33859 r.s = (c < 0) ? -1 : 0
33860 if (c < -1) r[i++] = self.DV + c
33861 else if (c > 0) r[i++] = c
33862 r.t = i
33863 r.clamp()
33864 }
33865
33866 // (protected) r = this * a, r != this,a (HAC 14.12)
33867 // "this" should be the larger one if appropriate.
33868 function bnpMultiplyTo(a, r) {
33869 var x = this.abs(),
33870 y = a.abs()
33871 var i = x.t
33872 r.t = i + y.t
33873 while (--i >= 0) r[i] = 0
33874 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33875 r.s = 0
33876 r.clamp()
33877 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33878 }
33879
33880 // (protected) r = this^2, r != this (HAC 14.16)
33881 function bnpSquareTo(r) {
33882 var x = this.abs()
33883 var i = r.t = 2 * x.t
33884 while (--i >= 0) r[i] = 0
33885 for (i = 0; i < x.t - 1; ++i) {
33886 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33887 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33888 r[i + x.t] -= x.DV
33889 r[i + x.t + 1] = 1
33890 }
33891 }
33892 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33893 r.s = 0
33894 r.clamp()
33895 }
33896
33897 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33898 // r != q, this != m. q or r may be null.
33899 function bnpDivRemTo(m, q, r) {
33900 var self = this
33901 var pm = m.abs()
33902 if (pm.t <= 0) return
33903 var pt = self.abs()
33904 if (pt.t < pm.t) {
33905 if (q != null) q.fromInt(0)
33906 if (r != null) self.copyTo(r)
33907 return
33908 }
33909 if (r == null) r = new BigInteger()
33910 var y = new BigInteger(),
33911 ts = self.s,
33912 ms = m.s
33913 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33914 if (nsh > 0) {
33915 pm.lShiftTo(nsh, y)
33916 pt.lShiftTo(nsh, r)
33917 } else {
33918 pm.copyTo(y)
33919 pt.copyTo(r)
33920 }
33921 var ys = y.t
33922 var y0 = y[ys - 1]
33923 if (y0 == 0) return
33924 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33925 var d1 = self.FV / yt,
33926 d2 = (1 << self.F1) / yt,
33927 e = 1 << self.F2
33928 var i = r.t,
33929 j = i - ys,
33930 t = (q == null) ? new BigInteger() : q
33931 y.dlShiftTo(j, t)
33932 if (r.compareTo(t) >= 0) {
33933 r[r.t++] = 1
33934 r.subTo(t, r)
33935 }
33936 BigInteger.ONE.dlShiftTo(ys, t)
33937 t.subTo(y, y); // "negative" y so we can replace sub with am later
33938 while (y.t < ys) y[y.t++] = 0
33939 while (--j >= 0) {
33940 // Estimate quotient digit
33941 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33942 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33943 y.dlShiftTo(j, t)
33944 r.subTo(t, r)
33945 while (r[i] < --qd) r.subTo(t, r)
33946 }
33947 }
33948 if (q != null) {
33949 r.drShiftTo(ys, q)
33950 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33951 }
33952 r.t = ys
33953 r.clamp()
33954 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33955 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33956 }
33957
33958 // (public) this mod a
33959 function bnMod(a) {
33960 var r = new BigInteger()
33961 this.abs()
33962 .divRemTo(a, null, r)
33963 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33964 return r
33965 }
33966
33967 // Modular reduction using "classic" algorithm
33968 function Classic(m) {
33969 this.m = m
33970 }
33971
33972 function cConvert(x) {
33973 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33974 else return x
33975 }
33976
33977 function cRevert(x) {
33978 return x
33979 }
33980
33981 function cReduce(x) {
33982 x.divRemTo(this.m, null, x)
33983 }
33984
33985 function cMulTo(x, y, r) {
33986 x.multiplyTo(y, r)
33987 this.reduce(r)
33988 }
33989
33990 function cSqrTo(x, r) {
33991 x.squareTo(r)
33992 this.reduce(r)
33993 }
33994
33995 Classic.prototype.convert = cConvert
33996 Classic.prototype.revert = cRevert
33997 Classic.prototype.reduce = cReduce
33998 Classic.prototype.mulTo = cMulTo
33999 Classic.prototype.sqrTo = cSqrTo
34000
34001 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
34002 // justification:
34003 // xy == 1 (mod m)
34004 // xy = 1+km
34005 // xy(2-xy) = (1+km)(1-km)
34006 // x[y(2-xy)] = 1-k^2m^2
34007 // x[y(2-xy)] == 1 (mod m^2)
34008 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
34009 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
34010 // JS multiply "overflows" differently from C/C++, so care is needed here.
34011 function bnpInvDigit() {
34012 if (this.t < 1) return 0
34013 var x = this[0]
34014 if ((x & 1) == 0) return 0
34015 var y = x & 3; // y == 1/x mod 2^2
34016 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
34017 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
34018 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
34019 // last step - calculate inverse mod DV directly
34020 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
34021 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
34022 // we really want the negative inverse, and -DV < y < DV
34023 return (y > 0) ? this.DV - y : -y
34024 }
34025
34026 // Montgomery reduction
34027 function Montgomery(m) {
34028 this.m = m
34029 this.mp = m.invDigit()
34030 this.mpl = this.mp & 0x7fff
34031 this.mph = this.mp >> 15
34032 this.um = (1 << (m.DB - 15)) - 1
34033 this.mt2 = 2 * m.t
34034 }
34035
34036 // xR mod m
34037 function montConvert(x) {
34038 var r = new BigInteger()
34039 x.abs()
34040 .dlShiftTo(this.m.t, r)
34041 r.divRemTo(this.m, null, r)
34042 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34043 return r
34044 }
34045
34046 // x/R mod m
34047 function montRevert(x) {
34048 var r = new BigInteger()
34049 x.copyTo(r)
34050 this.reduce(r)
34051 return r
34052 }
34053
34054 // x = x/R mod m (HAC 14.32)
34055 function montReduce(x) {
34056 while (x.t <= this.mt2) // pad x so am has enough room later
34057 x[x.t++] = 0
34058 for (var i = 0; i < this.m.t; ++i) {
34059 // faster way of calculating u0 = x[i]*mp mod DV
34060 var j = x[i] & 0x7fff
34061 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34062 // use am to combine the multiply-shift-add into one call
34063 j = i + this.m.t
34064 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34065 // propagate carry
34066 while (x[j] >= x.DV) {
34067 x[j] -= x.DV
34068 x[++j]++
34069 }
34070 }
34071 x.clamp()
34072 x.drShiftTo(this.m.t, x)
34073 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34074 }
34075
34076 // r = "x^2/R mod m"; x != r
34077 function montSqrTo(x, r) {
34078 x.squareTo(r)
34079 this.reduce(r)
34080 }
34081
34082 // r = "xy/R mod m"; x,y != r
34083 function montMulTo(x, y, r) {
34084 x.multiplyTo(y, r)
34085 this.reduce(r)
34086 }
34087
34088 Montgomery.prototype.convert = montConvert
34089 Montgomery.prototype.revert = montRevert
34090 Montgomery.prototype.reduce = montReduce
34091 Montgomery.prototype.mulTo = montMulTo
34092 Montgomery.prototype.sqrTo = montSqrTo
34093
34094 // (protected) true iff this is even
34095 function bnpIsEven() {
34096 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34097 }
34098
34099 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34100 function bnpExp(e, z) {
34101 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34102 var r = new BigInteger(),
34103 r2 = new BigInteger(),
34104 g = z.convert(this),
34105 i = nbits(e) - 1
34106 g.copyTo(r)
34107 while (--i >= 0) {
34108 z.sqrTo(r, r2)
34109 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34110 else {
34111 var t = r
34112 r = r2
34113 r2 = t
34114 }
34115 }
34116 return z.revert(r)
34117 }
34118
34119 // (public) this^e % m, 0 <= e < 2^32
34120 function bnModPowInt(e, m) {
34121 var z
34122 if (e < 256 || m.isEven()) z = new Classic(m)
34123 else z = new Montgomery(m)
34124 return this.exp(e, z)
34125 }
34126
34127 // protected
34128 proto.copyTo = bnpCopyTo
34129 proto.fromInt = bnpFromInt
34130 proto.fromString = bnpFromString
34131 proto.clamp = bnpClamp
34132 proto.dlShiftTo = bnpDLShiftTo
34133 proto.drShiftTo = bnpDRShiftTo
34134 proto.lShiftTo = bnpLShiftTo
34135 proto.rShiftTo = bnpRShiftTo
34136 proto.subTo = bnpSubTo
34137 proto.multiplyTo = bnpMultiplyTo
34138 proto.squareTo = bnpSquareTo
34139 proto.divRemTo = bnpDivRemTo
34140 proto.invDigit = bnpInvDigit
34141 proto.isEven = bnpIsEven
34142 proto.exp = bnpExp
34143
34144 // public
34145 proto.toString = bnToString
34146 proto.negate = bnNegate
34147 proto.abs = bnAbs
34148 proto.compareTo = bnCompareTo
34149 proto.bitLength = bnBitLength
34150 proto.byteLength = bnByteLength
34151 proto.mod = bnMod
34152 proto.modPowInt = bnModPowInt
34153
34154 // (public)
34155 function bnClone() {
34156 var r = new BigInteger()
34157 this.copyTo(r)
34158 return r
34159 }
34160
34161 // (public) return value as integer
34162 function bnIntValue() {
34163 if (this.s < 0) {
34164 if (this.t == 1) return this[0] - this.DV
34165 else if (this.t == 0) return -1
34166 } else if (this.t == 1) return this[0]
34167 else if (this.t == 0) return 0
34168 // assumes 16 < DB < 32
34169 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34170 }
34171
34172 // (public) return value as byte
34173 function bnByteValue() {
34174 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34175 }
34176
34177 // (public) return value as short (assumes DB>=16)
34178 function bnShortValue() {
34179 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34180 }
34181
34182 // (protected) return x s.t. r^x < DV
34183 function bnpChunkSize(r) {
34184 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34185 }
34186
34187 // (public) 0 if this == 0, 1 if this > 0
34188 function bnSigNum() {
34189 if (this.s < 0) return -1
34190 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34191 else return 1
34192 }
34193
34194 // (protected) convert to radix string
34195 function bnpToRadix(b) {
34196 if (b == null) b = 10
34197 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34198 var cs = this.chunkSize(b)
34199 var a = Math.pow(b, cs)
34200 var d = nbv(a),
34201 y = new BigInteger(),
34202 z = new BigInteger(),
34203 r = ""
34204 this.divRemTo(d, y, z)
34205 while (y.signum() > 0) {
34206 r = (a + z.intValue())
34207 .toString(b)
34208 .substr(1) + r
34209 y.divRemTo(d, y, z)
34210 }
34211 return z.intValue()
34212 .toString(b) + r
34213 }
34214
34215 // (protected) convert from radix string
34216 function bnpFromRadix(s, b) {
34217 var self = this
34218 self.fromInt(0)
34219 if (b == null) b = 10
34220 var cs = self.chunkSize(b)
34221 var d = Math.pow(b, cs),
34222 mi = false,
34223 j = 0,
34224 w = 0
34225 for (var i = 0; i < s.length; ++i) {
34226 var x = intAt(s, i)
34227 if (x < 0) {
34228 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34229 continue
34230 }
34231 w = b * w + x
34232 if (++j >= cs) {
34233 self.dMultiply(d)
34234 self.dAddOffset(w, 0)
34235 j = 0
34236 w = 0
34237 }
34238 }
34239 if (j > 0) {
34240 self.dMultiply(Math.pow(b, j))
34241 self.dAddOffset(w, 0)
34242 }
34243 if (mi) BigInteger.ZERO.subTo(self, self)
34244 }
34245
34246 // (protected) alternate constructor
34247 function bnpFromNumber(a, b, c) {
34248 var self = this
34249 if ("number" == typeof b) {
34250 // new BigInteger(int,int,RNG)
34251 if (a < 2) self.fromInt(1)
34252 else {
34253 self.fromNumber(a, c)
34254 if (!self.testBit(a - 1)) // force MSB set
34255 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34256 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34257 while (!self.isProbablePrime(b)) {
34258 self.dAddOffset(2, 0)
34259 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34260 }
34261 }
34262 } else {
34263 // new BigInteger(int,RNG)
34264 var x = new Array(),
34265 t = a & 7
34266 x.length = (a >> 3) + 1
34267 b.nextBytes(x)
34268 if (t > 0) x[0] &= ((1 << t) - 1)
34269 else x[0] = 0
34270 self.fromString(x, 256)
34271 }
34272 }
34273
34274 // (public) convert to bigendian byte array
34275 function bnToByteArray() {
34276 var self = this
34277 var i = self.t,
34278 r = new Array()
34279 r[0] = self.s
34280 var p = self.DB - (i * self.DB) % 8,
34281 d, k = 0
34282 if (i-- > 0) {
34283 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34284 r[k++] = d | (self.s << (self.DB - p))
34285 while (i >= 0) {
34286 if (p < 8) {
34287 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34288 d |= self[--i] >> (p += self.DB - 8)
34289 } else {
34290 d = (self[i] >> (p -= 8)) & 0xff
34291 if (p <= 0) {
34292 p += self.DB
34293 --i
34294 }
34295 }
34296 if ((d & 0x80) != 0) d |= -256
34297 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34298 if (k > 0 || d != self.s) r[k++] = d
34299 }
34300 }
34301 return r
34302 }
34303
34304 function bnEquals(a) {
34305 return (this.compareTo(a) == 0)
34306 }
34307
34308 function bnMin(a) {
34309 return (this.compareTo(a) < 0) ? this : a
34310 }
34311
34312 function bnMax(a) {
34313 return (this.compareTo(a) > 0) ? this : a
34314 }
34315
34316 // (protected) r = this op a (bitwise)
34317 function bnpBitwiseTo(a, op, r) {
34318 var self = this
34319 var i, f, m = Math.min(a.t, self.t)
34320 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34321 if (a.t < self.t) {
34322 f = a.s & self.DM
34323 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34324 r.t = self.t
34325 } else {
34326 f = self.s & self.DM
34327 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34328 r.t = a.t
34329 }
34330 r.s = op(self.s, a.s)
34331 r.clamp()
34332 }
34333
34334 // (public) this & a
34335 function op_and(x, y) {
34336 return x & y
34337 }
34338
34339 function bnAnd(a) {
34340 var r = new BigInteger()
34341 this.bitwiseTo(a, op_and, r)
34342 return r
34343 }
34344
34345 // (public) this | a
34346 function op_or(x, y) {
34347 return x | y
34348 }
34349
34350 function bnOr(a) {
34351 var r = new BigInteger()
34352 this.bitwiseTo(a, op_or, r)
34353 return r
34354 }
34355
34356 // (public) this ^ a
34357 function op_xor(x, y) {
34358 return x ^ y
34359 }
34360
34361 function bnXor(a) {
34362 var r = new BigInteger()
34363 this.bitwiseTo(a, op_xor, r)
34364 return r
34365 }
34366
34367 // (public) this & ~a
34368 function op_andnot(x, y) {
34369 return x & ~y
34370 }
34371
34372 function bnAndNot(a) {
34373 var r = new BigInteger()
34374 this.bitwiseTo(a, op_andnot, r)
34375 return r
34376 }
34377
34378 // (public) ~this
34379 function bnNot() {
34380 var r = new BigInteger()
34381 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34382 r.t = this.t
34383 r.s = ~this.s
34384 return r
34385 }
34386
34387 // (public) this << n
34388 function bnShiftLeft(n) {
34389 var r = new BigInteger()
34390 if (n < 0) this.rShiftTo(-n, r)
34391 else this.lShiftTo(n, r)
34392 return r
34393 }
34394
34395 // (public) this >> n
34396 function bnShiftRight(n) {
34397 var r = new BigInteger()
34398 if (n < 0) this.lShiftTo(-n, r)
34399 else this.rShiftTo(n, r)
34400 return r
34401 }
34402
34403 // return index of lowest 1-bit in x, x < 2^31
34404 function lbit(x) {
34405 if (x == 0) return -1
34406 var r = 0
34407 if ((x & 0xffff) == 0) {
34408 x >>= 16
34409 r += 16
34410 }
34411 if ((x & 0xff) == 0) {
34412 x >>= 8
34413 r += 8
34414 }
34415 if ((x & 0xf) == 0) {
34416 x >>= 4
34417 r += 4
34418 }
34419 if ((x & 3) == 0) {
34420 x >>= 2
34421 r += 2
34422 }
34423 if ((x & 1) == 0)++r
34424 return r
34425 }
34426
34427 // (public) returns index of lowest 1-bit (or -1 if none)
34428 function bnGetLowestSetBit() {
34429 for (var i = 0; i < this.t; ++i)
34430 if (this[i] != 0) return i * this.DB + lbit(this[i])
34431 if (this.s < 0) return this.t * this.DB
34432 return -1
34433 }
34434
34435 // return number of 1 bits in x
34436 function cbit(x) {
34437 var r = 0
34438 while (x != 0) {
34439 x &= x - 1
34440 ++r
34441 }
34442 return r
34443 }
34444
34445 // (public) return number of set bits
34446 function bnBitCount() {
34447 var r = 0,
34448 x = this.s & this.DM
34449 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34450 return r
34451 }
34452
34453 // (public) true iff nth bit is set
34454 function bnTestBit(n) {
34455 var j = Math.floor(n / this.DB)
34456 if (j >= this.t) return (this.s != 0)
34457 return ((this[j] & (1 << (n % this.DB))) != 0)
34458 }
34459
34460 // (protected) this op (1<<n)
34461 function bnpChangeBit(n, op) {
34462 var r = BigInteger.ONE.shiftLeft(n)
34463 this.bitwiseTo(r, op, r)
34464 return r
34465 }
34466
34467 // (public) this | (1<<n)
34468 function bnSetBit(n) {
34469 return this.changeBit(n, op_or)
34470 }
34471
34472 // (public) this & ~(1<<n)
34473 function bnClearBit(n) {
34474 return this.changeBit(n, op_andnot)
34475 }
34476
34477 // (public) this ^ (1<<n)
34478 function bnFlipBit(n) {
34479 return this.changeBit(n, op_xor)
34480 }
34481
34482 // (protected) r = this + a
34483 function bnpAddTo(a, r) {
34484 var self = this
34485
34486 var i = 0,
34487 c = 0,
34488 m = Math.min(a.t, self.t)
34489 while (i < m) {
34490 c += self[i] + a[i]
34491 r[i++] = c & self.DM
34492 c >>= self.DB
34493 }
34494 if (a.t < self.t) {
34495 c += a.s
34496 while (i < self.t) {
34497 c += self[i]
34498 r[i++] = c & self.DM
34499 c >>= self.DB
34500 }
34501 c += self.s
34502 } else {
34503 c += self.s
34504 while (i < a.t) {
34505 c += a[i]
34506 r[i++] = c & self.DM
34507 c >>= self.DB
34508 }
34509 c += a.s
34510 }
34511 r.s = (c < 0) ? -1 : 0
34512 if (c > 0) r[i++] = c
34513 else if (c < -1) r[i++] = self.DV + c
34514 r.t = i
34515 r.clamp()
34516 }
34517
34518 // (public) this + a
34519 function bnAdd(a) {
34520 var r = new BigInteger()
34521 this.addTo(a, r)
34522 return r
34523 }
34524
34525 // (public) this - a
34526 function bnSubtract(a) {
34527 var r = new BigInteger()
34528 this.subTo(a, r)
34529 return r
34530 }
34531
34532 // (public) this * a
34533 function bnMultiply(a) {
34534 var r = new BigInteger()
34535 this.multiplyTo(a, r)
34536 return r
34537 }
34538
34539 // (public) this^2
34540 function bnSquare() {
34541 var r = new BigInteger()
34542 this.squareTo(r)
34543 return r
34544 }
34545
34546 // (public) this / a
34547 function bnDivide(a) {
34548 var r = new BigInteger()
34549 this.divRemTo(a, r, null)
34550 return r
34551 }
34552
34553 // (public) this % a
34554 function bnRemainder(a) {
34555 var r = new BigInteger()
34556 this.divRemTo(a, null, r)
34557 return r
34558 }
34559
34560 // (public) [this/a,this%a]
34561 function bnDivideAndRemainder(a) {
34562 var q = new BigInteger(),
34563 r = new BigInteger()
34564 this.divRemTo(a, q, r)
34565 return new Array(q, r)
34566 }
34567
34568 // (protected) this *= n, this >= 0, 1 < n < DV
34569 function bnpDMultiply(n) {
34570 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34571 ++this.t
34572 this.clamp()
34573 }
34574
34575 // (protected) this += n << w words, this >= 0
34576 function bnpDAddOffset(n, w) {
34577 if (n == 0) return
34578 while (this.t <= w) this[this.t++] = 0
34579 this[w] += n
34580 while (this[w] >= this.DV) {
34581 this[w] -= this.DV
34582 if (++w >= this.t) this[this.t++] = 0
34583 ++this[w]
34584 }
34585 }
34586
34587 // A "null" reducer
34588 function NullExp() {}
34589
34590 function nNop(x) {
34591 return x
34592 }
34593
34594 function nMulTo(x, y, r) {
34595 x.multiplyTo(y, r)
34596 }
34597
34598 function nSqrTo(x, r) {
34599 x.squareTo(r)
34600 }
34601
34602 NullExp.prototype.convert = nNop
34603 NullExp.prototype.revert = nNop
34604 NullExp.prototype.mulTo = nMulTo
34605 NullExp.prototype.sqrTo = nSqrTo
34606
34607 // (public) this^e
34608 function bnPow(e) {
34609 return this.exp(e, new NullExp())
34610 }
34611
34612 // (protected) r = lower n words of "this * a", a.t <= n
34613 // "this" should be the larger one if appropriate.
34614 function bnpMultiplyLowerTo(a, n, r) {
34615 var i = Math.min(this.t + a.t, n)
34616 r.s = 0; // assumes a,this >= 0
34617 r.t = i
34618 while (i > 0) r[--i] = 0
34619 var j
34620 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34621 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34622 r.clamp()
34623 }
34624
34625 // (protected) r = "this * a" without lower n words, n > 0
34626 // "this" should be the larger one if appropriate.
34627 function bnpMultiplyUpperTo(a, n, r) {
34628 --n
34629 var i = r.t = this.t + a.t - n
34630 r.s = 0; // assumes a,this >= 0
34631 while (--i >= 0) r[i] = 0
34632 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34633 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34634 r.clamp()
34635 r.drShiftTo(1, r)
34636 }
34637
34638 // Barrett modular reduction
34639 function Barrett(m) {
34640 // setup Barrett
34641 this.r2 = new BigInteger()
34642 this.q3 = new BigInteger()
34643 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34644 this.mu = this.r2.divide(m)
34645 this.m = m
34646 }
34647
34648 function barrettConvert(x) {
34649 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34650 else if (x.compareTo(this.m) < 0) return x
34651 else {
34652 var r = new BigInteger()
34653 x.copyTo(r)
34654 this.reduce(r)
34655 return r
34656 }
34657 }
34658
34659 function barrettRevert(x) {
34660 return x
34661 }
34662
34663 // x = x mod m (HAC 14.42)
34664 function barrettReduce(x) {
34665 var self = this
34666 x.drShiftTo(self.m.t - 1, self.r2)
34667 if (x.t > self.m.t + 1) {
34668 x.t = self.m.t + 1
34669 x.clamp()
34670 }
34671 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34672 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34673 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34674 x.subTo(self.r2, x)
34675 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34676 }
34677
34678 // r = x^2 mod m; x != r
34679 function barrettSqrTo(x, r) {
34680 x.squareTo(r)
34681 this.reduce(r)
34682 }
34683
34684 // r = x*y mod m; x,y != r
34685 function barrettMulTo(x, y, r) {
34686 x.multiplyTo(y, r)
34687 this.reduce(r)
34688 }
34689
34690 Barrett.prototype.convert = barrettConvert
34691 Barrett.prototype.revert = barrettRevert
34692 Barrett.prototype.reduce = barrettReduce
34693 Barrett.prototype.mulTo = barrettMulTo
34694 Barrett.prototype.sqrTo = barrettSqrTo
34695
34696 // (public) this^e % m (HAC 14.85)
34697 function bnModPow(e, m) {
34698 var i = e.bitLength(),
34699 k, r = nbv(1),
34700 z
34701 if (i <= 0) return r
34702 else if (i < 18) k = 1
34703 else if (i < 48) k = 3
34704 else if (i < 144) k = 4
34705 else if (i < 768) k = 5
34706 else k = 6
34707 if (i < 8)
34708 z = new Classic(m)
34709 else if (m.isEven())
34710 z = new Barrett(m)
34711 else
34712 z = new Montgomery(m)
34713
34714 // precomputation
34715 var g = new Array(),
34716 n = 3,
34717 k1 = k - 1,
34718 km = (1 << k) - 1
34719 g[1] = z.convert(this)
34720 if (k > 1) {
34721 var g2 = new BigInteger()
34722 z.sqrTo(g[1], g2)
34723 while (n <= km) {
34724 g[n] = new BigInteger()
34725 z.mulTo(g2, g[n - 2], g[n])
34726 n += 2
34727 }
34728 }
34729
34730 var j = e.t - 1,
34731 w, is1 = true,
34732 r2 = new BigInteger(),
34733 t
34734 i = nbits(e[j]) - 1
34735 while (j >= 0) {
34736 if (i >= k1) w = (e[j] >> (i - k1)) & km
34737 else {
34738 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34739 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34740 }
34741
34742 n = k
34743 while ((w & 1) == 0) {
34744 w >>= 1
34745 --n
34746 }
34747 if ((i -= n) < 0) {
34748 i += this.DB
34749 --j
34750 }
34751 if (is1) { // ret == 1, don't bother squaring or multiplying it
34752 g[w].copyTo(r)
34753 is1 = false
34754 } else {
34755 while (n > 1) {
34756 z.sqrTo(r, r2)
34757 z.sqrTo(r2, r)
34758 n -= 2
34759 }
34760 if (n > 0) z.sqrTo(r, r2)
34761 else {
34762 t = r
34763 r = r2
34764 r2 = t
34765 }
34766 z.mulTo(r2, g[w], r)
34767 }
34768
34769 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34770 z.sqrTo(r, r2)
34771 t = r
34772 r = r2
34773 r2 = t
34774 if (--i < 0) {
34775 i = this.DB - 1
34776 --j
34777 }
34778 }
34779 }
34780 return z.revert(r)
34781 }
34782
34783 // (public) gcd(this,a) (HAC 14.54)
34784 function bnGCD(a) {
34785 var x = (this.s < 0) ? this.negate() : this.clone()
34786 var y = (a.s < 0) ? a.negate() : a.clone()
34787 if (x.compareTo(y) < 0) {
34788 var t = x
34789 x = y
34790 y = t
34791 }
34792 var i = x.getLowestSetBit(),
34793 g = y.getLowestSetBit()
34794 if (g < 0) return x
34795 if (i < g) g = i
34796 if (g > 0) {
34797 x.rShiftTo(g, x)
34798 y.rShiftTo(g, y)
34799 }
34800 while (x.signum() > 0) {
34801 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34802 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34803 if (x.compareTo(y) >= 0) {
34804 x.subTo(y, x)
34805 x.rShiftTo(1, x)
34806 } else {
34807 y.subTo(x, y)
34808 y.rShiftTo(1, y)
34809 }
34810 }
34811 if (g > 0) y.lShiftTo(g, y)
34812 return y
34813 }
34814
34815 // (protected) this % n, n < 2^26
34816 function bnpModInt(n) {
34817 if (n <= 0) return 0
34818 var d = this.DV % n,
34819 r = (this.s < 0) ? n - 1 : 0
34820 if (this.t > 0)
34821 if (d == 0) r = this[0] % n
34822 else
34823 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34824 return r
34825 }
34826
34827 // (public) 1/this % m (HAC 14.61)
34828 function bnModInverse(m) {
34829 var ac = m.isEven()
34830 if (this.signum() === 0) throw new Error('division by zero')
34831 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34832 var u = m.clone(),
34833 v = this.clone()
34834 var a = nbv(1),
34835 b = nbv(0),
34836 c = nbv(0),
34837 d = nbv(1)
34838 while (u.signum() != 0) {
34839 while (u.isEven()) {
34840 u.rShiftTo(1, u)
34841 if (ac) {
34842 if (!a.isEven() || !b.isEven()) {
34843 a.addTo(this, a)
34844 b.subTo(m, b)
34845 }
34846 a.rShiftTo(1, a)
34847 } else if (!b.isEven()) b.subTo(m, b)
34848 b.rShiftTo(1, b)
34849 }
34850 while (v.isEven()) {
34851 v.rShiftTo(1, v)
34852 if (ac) {
34853 if (!c.isEven() || !d.isEven()) {
34854 c.addTo(this, c)
34855 d.subTo(m, d)
34856 }
34857 c.rShiftTo(1, c)
34858 } else if (!d.isEven()) d.subTo(m, d)
34859 d.rShiftTo(1, d)
34860 }
34861 if (u.compareTo(v) >= 0) {
34862 u.subTo(v, u)
34863 if (ac) a.subTo(c, a)
34864 b.subTo(d, b)
34865 } else {
34866 v.subTo(u, v)
34867 if (ac) c.subTo(a, c)
34868 d.subTo(b, d)
34869 }
34870 }
34871 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34872 while (d.compareTo(m) >= 0) d.subTo(m, d)
34873 while (d.signum() < 0) d.addTo(m, d)
34874 return d
34875 }
34876
34877 var lowprimes = [
34878 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34879 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34880 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34881 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34882 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34883 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34884 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34885 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34886 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34887 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34888 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34889 ]
34890
34891 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34892
34893 // (public) test primality with certainty >= 1-.5^t
34894 function bnIsProbablePrime(t) {
34895 var i, x = this.abs()
34896 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34897 for (i = 0; i < lowprimes.length; ++i)
34898 if (x[0] == lowprimes[i]) return true
34899 return false
34900 }
34901 if (x.isEven()) return false
34902 i = 1
34903 while (i < lowprimes.length) {
34904 var m = lowprimes[i],
34905 j = i + 1
34906 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34907 m = x.modInt(m)
34908 while (i < j) if (m % lowprimes[i++] == 0) return false
34909 }
34910 return x.millerRabin(t)
34911 }
34912
34913 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34914 function bnpMillerRabin(t) {
34915 var n1 = this.subtract(BigInteger.ONE)
34916 var k = n1.getLowestSetBit()
34917 if (k <= 0) return false
34918 var r = n1.shiftRight(k)
34919 t = (t + 1) >> 1
34920 if (t > lowprimes.length) t = lowprimes.length
34921 var a = new BigInteger(null)
34922 var j, bases = []
34923 for (var i = 0; i < t; ++i) {
34924 for (;;) {
34925 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34926 if (bases.indexOf(j) == -1) break
34927 }
34928 bases.push(j)
34929 a.fromInt(j)
34930 var y = a.modPow(r, this)
34931 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34932 var j = 1
34933 while (j++ < k && y.compareTo(n1) != 0) {
34934 y = y.modPowInt(2, this)
34935 if (y.compareTo(BigInteger.ONE) == 0) return false
34936 }
34937 if (y.compareTo(n1) != 0) return false
34938 }
34939 }
34940 return true
34941 }
34942
34943 // protected
34944 proto.chunkSize = bnpChunkSize
34945 proto.toRadix = bnpToRadix
34946 proto.fromRadix = bnpFromRadix
34947 proto.fromNumber = bnpFromNumber
34948 proto.bitwiseTo = bnpBitwiseTo
34949 proto.changeBit = bnpChangeBit
34950 proto.addTo = bnpAddTo
34951 proto.dMultiply = bnpDMultiply
34952 proto.dAddOffset = bnpDAddOffset
34953 proto.multiplyLowerTo = bnpMultiplyLowerTo
34954 proto.multiplyUpperTo = bnpMultiplyUpperTo
34955 proto.modInt = bnpModInt
34956 proto.millerRabin = bnpMillerRabin
34957
34958 // public
34959 proto.clone = bnClone
34960 proto.intValue = bnIntValue
34961 proto.byteValue = bnByteValue
34962 proto.shortValue = bnShortValue
34963 proto.signum = bnSigNum
34964 proto.toByteArray = bnToByteArray
34965 proto.equals = bnEquals
34966 proto.min = bnMin
34967 proto.max = bnMax
34968 proto.and = bnAnd
34969 proto.or = bnOr
34970 proto.xor = bnXor
34971 proto.andNot = bnAndNot
34972 proto.not = bnNot
34973 proto.shiftLeft = bnShiftLeft
34974 proto.shiftRight = bnShiftRight
34975 proto.getLowestSetBit = bnGetLowestSetBit
34976 proto.bitCount = bnBitCount
34977 proto.testBit = bnTestBit
34978 proto.setBit = bnSetBit
34979 proto.clearBit = bnClearBit
34980 proto.flipBit = bnFlipBit
34981 proto.add = bnAdd
34982 proto.subtract = bnSubtract
34983 proto.multiply = bnMultiply
34984 proto.divide = bnDivide
34985 proto.remainder = bnRemainder
34986 proto.divideAndRemainder = bnDivideAndRemainder
34987 proto.modPow = bnModPow
34988 proto.modInverse = bnModInverse
34989 proto.pow = bnPow
34990 proto.gcd = bnGCD
34991 proto.isProbablePrime = bnIsProbablePrime
34992
34993 // JSBN-specific extension
34994 proto.square = bnSquare
34995
34996 // constants
34997 BigInteger.ZERO = nbv(0)
34998 BigInteger.ONE = nbv(1)
34999 BigInteger.valueOf = nbv
35000
35001 module.exports = BigInteger
35002
35003 },{"../package.json":40}],38:[function(require,module,exports){
35004 (function (Buffer){
35005 // FIXME: Kind of a weird way to throw exceptions, consider removing
35006 var assert = require('assert')
35007 var BigInteger = require('./bigi')
35008
35009 /**
35010 * Turns a byte array into a big integer.
35011 *
35012 * This function will interpret a byte array as a big integer in big
35013 * endian notation.
35014 */
35015 BigInteger.fromByteArrayUnsigned = function(byteArray) {
35016 // BigInteger expects a DER integer conformant byte array
35017 if (byteArray[0] & 0x80) {
35018 return new BigInteger([0].concat(byteArray))
35019 }
35020
35021 return new BigInteger(byteArray)
35022 }
35023
35024 /**
35025 * Returns a byte array representation of the big integer.
35026 *
35027 * This returns the absolute of the contained value in big endian
35028 * form. A value of zero results in an empty array.
35029 */
35030 BigInteger.prototype.toByteArrayUnsigned = function() {
35031 var byteArray = this.toByteArray()
35032 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
35033 }
35034
35035 BigInteger.fromDERInteger = function(byteArray) {
35036 return new BigInteger(byteArray)
35037 }
35038
35039 /*
35040 * Converts BigInteger to a DER integer representation.
35041 *
35042 * The format for this value uses the most significant bit as a sign
35043 * bit. If the most significant bit is already set and the integer is
35044 * positive, a 0x00 is prepended.
35045 *
35046 * Examples:
35047 *
35048 * 0 => 0x00
35049 * 1 => 0x01
35050 * -1 => 0xff
35051 * 127 => 0x7f
35052 * -127 => 0x81
35053 * 128 => 0x0080
35054 * -128 => 0x80
35055 * 255 => 0x00ff
35056 * -255 => 0xff01
35057 * 16300 => 0x3fac
35058 * -16300 => 0xc054
35059 * 62300 => 0x00f35c
35060 * -62300 => 0xff0ca4
35061 */
35062 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35063
35064 BigInteger.fromBuffer = function(buffer) {
35065 // BigInteger expects a DER integer conformant byte array
35066 if (buffer[0] & 0x80) {
35067 var byteArray = Array.prototype.slice.call(buffer)
35068
35069 return new BigInteger([0].concat(byteArray))
35070 }
35071
35072 return new BigInteger(buffer)
35073 }
35074
35075 BigInteger.fromHex = function(hex) {
35076 if (hex === '') return BigInteger.ZERO
35077
35078 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35079 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35080 return new BigInteger(hex, 16)
35081 }
35082
35083 BigInteger.prototype.toBuffer = function(size) {
35084 var byteArray = this.toByteArrayUnsigned()
35085 var zeros = []
35086
35087 var padding = size - byteArray.length
35088 while (zeros.length < padding) zeros.push(0)
35089
35090 return new Buffer(zeros.concat(byteArray))
35091 }
35092
35093 BigInteger.prototype.toHex = function(size) {
35094 return this.toBuffer(size).toString('hex')
35095 }
35096
35097 }).call(this,require("buffer").Buffer)
35098 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35099 var BigInteger = require('./bigi')
35100
35101 //addons
35102 require('./convert')
35103
35104 module.exports = BigInteger
35105 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35106 module.exports={
35107 "_args": [
35108 [
35109 "bigi@^1.4.0",
35110 "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib"
35111 ]
35112 ],
35113 "_from": "bigi@>=1.4.0 <2.0.0",
35114 "_id": "bigi@1.4.2",
35115 "_inCache": true,
35116 "_installable": true,
35117 "_location": "/bigi",
35118 "_nodeVersion": "6.1.0",
35119 "_npmOperationalInternal": {
35120 "host": "packages-12-west.internal.npmjs.com",
35121 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35122 },
35123 "_npmUser": {
35124 "email": "jprichardson@gmail.com",
35125 "name": "jprichardson"
35126 },
35127 "_npmVersion": "3.8.6",
35128 "_phantomChildren": {},
35129 "_requested": {
35130 "name": "bigi",
35131 "raw": "bigi@^1.4.0",
35132 "rawSpec": "^1.4.0",
35133 "scope": null,
35134 "spec": ">=1.4.0 <2.0.0",
35135 "type": "range"
35136 },
35137 "_requiredBy": [
35138 "/bitcoinjs-lib",
35139 "/ecurve"
35140 ],
35141 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35142 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35143 "_shrinkwrap": null,
35144 "_spec": "bigi@^1.4.0",
35145 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib",
35146 "bugs": {
35147 "url": "https://github.com/cryptocoinjs/bigi/issues"
35148 },
35149 "dependencies": {},
35150 "description": "Big integers.",
35151 "devDependencies": {
35152 "coveralls": "^2.11.2",
35153 "istanbul": "^0.3.5",
35154 "jshint": "^2.5.1",
35155 "mocha": "^2.1.0",
35156 "mochify": "^2.1.0"
35157 },
35158 "directories": {},
35159 "dist": {
35160 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35161 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35162 },
35163 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35164 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35165 "keywords": [
35166 "cryptography",
35167 "math",
35168 "bitcoin",
35169 "arbitrary",
35170 "precision",
35171 "arithmetic",
35172 "big",
35173 "integer",
35174 "int",
35175 "number",
35176 "biginteger",
35177 "bigint",
35178 "bignumber",
35179 "decimal",
35180 "float"
35181 ],
35182 "main": "./lib/index.js",
35183 "maintainers": [
35184 {
35185 "email": "boydb@midnightdesign.ws",
35186 "name": "midnightlightning"
35187 },
35188 {
35189 "email": "sidazhang89@gmail.com",
35190 "name": "sidazhang"
35191 },
35192 {
35193 "email": "npm@shesek.info",
35194 "name": "nadav"
35195 },
35196 {
35197 "email": "jprichardson@gmail.com",
35198 "name": "jprichardson"
35199 }
35200 ],
35201 "name": "bigi",
35202 "optionalDependencies": {},
35203 "readme": "ERROR: No README data found!",
35204 "repository": {
35205 "type": "git",
35206 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35207 },
35208 "scripts": {
35209 "browser-test": "mochify --wd -R spec",
35210 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35211 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35212 "jshint": "jshint --config jshint.json lib/*.js ; true",
35213 "test": "_mocha -- test/*.js",
35214 "unit": "mocha"
35215 },
35216 "testling": {
35217 "browsers": [
35218 "ie/9..latest",
35219 "firefox/latest",
35220 "chrome/latest",
35221 "safari/6.0..latest",
35222 "iphone/6.0..latest",
35223 "android-browser/4.2..latest"
35224 ],
35225 "files": "test/*.js",
35226 "harness": "mocha"
35227 },
35228 "version": "1.4.2"
35229 }
35230
35231 },{}],41:[function(require,module,exports){
35232 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35233 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35234 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35235
35236 var Buffer = require('safe-buffer').Buffer
35237
35238 function check (buffer) {
35239 if (buffer.length < 8) return false
35240 if (buffer.length > 72) return false
35241 if (buffer[0] !== 0x30) return false
35242 if (buffer[1] !== buffer.length - 2) return false
35243 if (buffer[2] !== 0x02) return false
35244
35245 var lenR = buffer[3]
35246 if (lenR === 0) return false
35247 if (5 + lenR >= buffer.length) return false
35248 if (buffer[4 + lenR] !== 0x02) return false
35249
35250 var lenS = buffer[5 + lenR]
35251 if (lenS === 0) return false
35252 if ((6 + lenR + lenS) !== buffer.length) return false
35253
35254 if (buffer[4] & 0x80) return false
35255 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35256
35257 if (buffer[lenR + 6] & 0x80) return false
35258 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35259 return true
35260 }
35261
35262 function decode (buffer) {
35263 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35264 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35265 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35266 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35267 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35268
35269 var lenR = buffer[3]
35270 if (lenR === 0) throw new Error('R length is zero')
35271 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35272 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35273
35274 var lenS = buffer[5 + lenR]
35275 if (lenS === 0) throw new Error('S length is zero')
35276 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35277
35278 if (buffer[4] & 0x80) throw new Error('R value is negative')
35279 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35280
35281 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35282 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35283
35284 // non-BIP66 - extract R, S values
35285 return {
35286 r: buffer.slice(4, 4 + lenR),
35287 s: buffer.slice(6 + lenR)
35288 }
35289 }
35290
35291 /*
35292 * Expects r and s to be positive DER integers.
35293 *
35294 * The DER format uses the most significant bit as a sign bit (& 0x80).
35295 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35296 *
35297 * Examples:
35298 *
35299 * 0 => 0x00
35300 * 1 => 0x01
35301 * -1 => 0xff
35302 * 127 => 0x7f
35303 * -127 => 0x81
35304 * 128 => 0x0080
35305 * -128 => 0x80
35306 * 255 => 0x00ff
35307 * -255 => 0xff01
35308 * 16300 => 0x3fac
35309 * -16300 => 0xc054
35310 * 62300 => 0x00f35c
35311 * -62300 => 0xff0ca4
35312 */
35313 function encode (r, s) {
35314 var lenR = r.length
35315 var lenS = s.length
35316 if (lenR === 0) throw new Error('R length is zero')
35317 if (lenS === 0) throw new Error('S length is zero')
35318 if (lenR > 33) throw new Error('R length is too long')
35319 if (lenS > 33) throw new Error('S length is too long')
35320 if (r[0] & 0x80) throw new Error('R value is negative')
35321 if (s[0] & 0x80) throw new Error('S value is negative')
35322 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35323 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35324
35325 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35326
35327 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35328 signature[0] = 0x30
35329 signature[1] = signature.length - 2
35330 signature[2] = 0x02
35331 signature[3] = r.length
35332 r.copy(signature, 4)
35333 signature[4 + lenR] = 0x02
35334 signature[5 + lenR] = s.length
35335 s.copy(signature, 6 + lenR)
35336
35337 return signature
35338 }
35339
35340 module.exports = {
35341 check: check,
35342 decode: decode,
35343 encode: encode
35344 }
35345
35346 },{"safe-buffer":101}],42:[function(require,module,exports){
35347 module.exports={
35348 "OP_FALSE": 0,
35349 "OP_0": 0,
35350 "OP_PUSHDATA1": 76,
35351 "OP_PUSHDATA2": 77,
35352 "OP_PUSHDATA4": 78,
35353 "OP_1NEGATE": 79,
35354 "OP_RESERVED": 80,
35355 "OP_TRUE": 81,
35356 "OP_1": 81,
35357 "OP_2": 82,
35358 "OP_3": 83,
35359 "OP_4": 84,
35360 "OP_5": 85,
35361 "OP_6": 86,
35362 "OP_7": 87,
35363 "OP_8": 88,
35364 "OP_9": 89,
35365 "OP_10": 90,
35366 "OP_11": 91,
35367 "OP_12": 92,
35368 "OP_13": 93,
35369 "OP_14": 94,
35370 "OP_15": 95,
35371 "OP_16": 96,
35372
35373 "OP_NOP": 97,
35374 "OP_VER": 98,
35375 "OP_IF": 99,
35376 "OP_NOTIF": 100,
35377 "OP_VERIF": 101,
35378 "OP_VERNOTIF": 102,
35379 "OP_ELSE": 103,
35380 "OP_ENDIF": 104,
35381 "OP_VERIFY": 105,
35382 "OP_RETURN": 106,
35383
35384 "OP_TOALTSTACK": 107,
35385 "OP_FROMALTSTACK": 108,
35386 "OP_2DROP": 109,
35387 "OP_2DUP": 110,
35388 "OP_3DUP": 111,
35389 "OP_2OVER": 112,
35390 "OP_2ROT": 113,
35391 "OP_2SWAP": 114,
35392 "OP_IFDUP": 115,
35393 "OP_DEPTH": 116,
35394 "OP_DROP": 117,
35395 "OP_DUP": 118,
35396 "OP_NIP": 119,
35397 "OP_OVER": 120,
35398 "OP_PICK": 121,
35399 "OP_ROLL": 122,
35400 "OP_ROT": 123,
35401 "OP_SWAP": 124,
35402 "OP_TUCK": 125,
35403
35404 "OP_CAT": 126,
35405 "OP_SUBSTR": 127,
35406 "OP_LEFT": 128,
35407 "OP_RIGHT": 129,
35408 "OP_SIZE": 130,
35409
35410 "OP_INVERT": 131,
35411 "OP_AND": 132,
35412 "OP_OR": 133,
35413 "OP_XOR": 134,
35414 "OP_EQUAL": 135,
35415 "OP_EQUALVERIFY": 136,
35416 "OP_RESERVED1": 137,
35417 "OP_RESERVED2": 138,
35418
35419 "OP_1ADD": 139,
35420 "OP_1SUB": 140,
35421 "OP_2MUL": 141,
35422 "OP_2DIV": 142,
35423 "OP_NEGATE": 143,
35424 "OP_ABS": 144,
35425 "OP_NOT": 145,
35426 "OP_0NOTEQUAL": 146,
35427 "OP_ADD": 147,
35428 "OP_SUB": 148,
35429 "OP_MUL": 149,
35430 "OP_DIV": 150,
35431 "OP_MOD": 151,
35432 "OP_LSHIFT": 152,
35433 "OP_RSHIFT": 153,
35434
35435 "OP_BOOLAND": 154,
35436 "OP_BOOLOR": 155,
35437 "OP_NUMEQUAL": 156,
35438 "OP_NUMEQUALVERIFY": 157,
35439 "OP_NUMNOTEQUAL": 158,
35440 "OP_LESSTHAN": 159,
35441 "OP_GREATERTHAN": 160,
35442 "OP_LESSTHANOREQUAL": 161,
35443 "OP_GREATERTHANOREQUAL": 162,
35444 "OP_MIN": 163,
35445 "OP_MAX": 164,
35446
35447 "OP_WITHIN": 165,
35448
35449 "OP_RIPEMD160": 166,
35450 "OP_SHA1": 167,
35451 "OP_SHA256": 168,
35452 "OP_HASH160": 169,
35453 "OP_HASH256": 170,
35454 "OP_CODESEPARATOR": 171,
35455 "OP_CHECKSIG": 172,
35456 "OP_CHECKSIGVERIFY": 173,
35457 "OP_CHECKMULTISIG": 174,
35458 "OP_CHECKMULTISIGVERIFY": 175,
35459
35460 "OP_NOP1": 176,
35461
35462 "OP_NOP2": 177,
35463 "OP_CHECKLOCKTIMEVERIFY": 177,
35464
35465 "OP_NOP3": 178,
35466 "OP_CHECKSEQUENCEVERIFY": 178,
35467
35468 "OP_NOP4": 179,
35469 "OP_NOP5": 180,
35470 "OP_NOP6": 181,
35471 "OP_NOP7": 182,
35472 "OP_NOP8": 183,
35473 "OP_NOP9": 184,
35474 "OP_NOP10": 185,
35475
35476 "OP_PUBKEYHASH": 253,
35477 "OP_PUBKEY": 254,
35478 "OP_INVALIDOPCODE": 255
35479 }
35480
35481 },{}],43:[function(require,module,exports){
35482 var OPS = require('./index.json')
35483
35484 var map = {}
35485 for (var op in OPS) {
35486 var code = OPS[op]
35487 map[code] = op
35488 }
35489
35490 module.exports = map
35491
35492 },{"./index.json":42}],44:[function(require,module,exports){
35493 var Buffer = require('safe-buffer').Buffer
35494 var bech32 = require('bech32')
35495 var bs58check = require('bs58check')
35496 var bscript = require('./script')
35497 var btemplates = require('./templates')
35498 var networks = require('./networks')
35499 var typeforce = require('typeforce')
35500 var types = require('./types')
35501
35502 function fromBase58Check (address) {
35503 var payload = bs58check.decode(address)
35504
35505 // TODO: 4.0.0, move to "toOutputScript"
35506 if (payload.length < 21) throw new TypeError(address + ' is too short')
35507 if (payload.length > 21) throw new TypeError(address + ' is too long')
35508
35509 var version = payload.readUInt8(0)
35510 var hash = payload.slice(1)
35511
35512 return { version: version, hash: hash }
35513 }
35514
35515 function fromBech32 (address) {
35516 var result = bech32.decode(address)
35517 var data = bech32.fromWords(result.words.slice(1))
35518
35519 return {
35520 version: result.words[0],
35521 prefix: result.prefix,
35522 data: Buffer.from(data)
35523 }
35524 }
35525
35526 function toBase58Check (hash, version) {
35527 if (version < 256){
35528 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35529
35530 var payload = Buffer.allocUnsafe(21)
35531 payload.writeUInt8(version, 0)
35532 hash.copy(payload, 1)
35533
35534 return bs58check.encode(payload)
35535 }
35536 else{
35537 typeforce(types.tuple(types.Hash160bit, types.UInt16), arguments)
35538
35539 var payload = Buffer.allocUnsafe(22)
35540 payload.writeUInt16BE(version, 0)
35541 hash.copy(payload, 2)
35542
35543 return bs58check.encode(payload)
35544 }
35545 }
35546
35547 function toBech32 (data, version, prefix) {
35548 var words = bech32.toWords(data)
35549 words.unshift(version)
35550
35551 return bech32.encode(prefix, words)
35552 }
35553
35554 function fromOutputScript (outputScript, network) {
35555 network = network || networks.bitcoin
35556
35557 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35558 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35559 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35560 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35561
35562 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35563 }
35564
35565 function toOutputScript (address, network) {
35566 network = network || networks.bitcoin
35567
35568 var decode
35569 try {
35570 decode = fromBase58Check(address)
35571 } catch (e) {}
35572
35573 if (decode) {
35574 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35575 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35576 } else {
35577 try {
35578 decode = fromBech32(address)
35579 } catch (e) {}
35580
35581 if (decode) {
35582 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35583 if (decode.version === 0) {
35584 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35585 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35586 }
35587 }
35588 }
35589
35590 throw new Error(address + ' has no matching Script')
35591 }
35592
35593 module.exports = {
35594 fromBase58Check: fromBase58Check,
35595 fromBech32: fromBech32,
35596 fromOutputScript: fromOutputScript,
35597 toBase58Check: toBase58Check,
35598 toBech32: toBech32,
35599 toOutputScript: toOutputScript
35600 }
35601
35602 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":83,"safe-buffer":101,"typeforce":112}],45:[function(require,module,exports){
35603 var Buffer = require('safe-buffer').Buffer
35604 var bcrypto = require('./crypto')
35605 var fastMerkleRoot = require('merkle-lib/fastRoot')
35606 var typeforce = require('typeforce')
35607 var types = require('./types')
35608 var varuint = require('varuint-bitcoin')
35609
35610 var Transaction = require('./transaction')
35611
35612 function Block () {
35613 this.version = 1
35614 this.prevHash = null
35615 this.merkleRoot = null
35616 this.timestamp = 0
35617 this.bits = 0
35618 this.nonce = 0
35619 }
35620
35621 Block.fromBuffer = function (buffer) {
35622 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35623
35624 var offset = 0
35625 function readSlice (n) {
35626 offset += n
35627 return buffer.slice(offset - n, offset)
35628 }
35629
35630 function readUInt32 () {
35631 var i = buffer.readUInt32LE(offset)
35632 offset += 4
35633 return i
35634 }
35635
35636 function readInt32 () {
35637 var i = buffer.readInt32LE(offset)
35638 offset += 4
35639 return i
35640 }
35641
35642 var block = new Block()
35643 block.version = readInt32()
35644 block.prevHash = readSlice(32)
35645 block.merkleRoot = readSlice(32)
35646 block.timestamp = readUInt32()
35647 block.bits = readUInt32()
35648 block.nonce = readUInt32()
35649
35650 if (buffer.length === 80) return block
35651
35652 function readVarInt () {
35653 var vi = varuint.decode(buffer, offset)
35654 offset += varuint.decode.bytes
35655 return vi
35656 }
35657
35658 function readTransaction () {
35659 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35660 offset += tx.byteLength()
35661 return tx
35662 }
35663
35664 var nTransactions = readVarInt()
35665 block.transactions = []
35666
35667 for (var i = 0; i < nTransactions; ++i) {
35668 var tx = readTransaction()
35669 block.transactions.push(tx)
35670 }
35671
35672 return block
35673 }
35674
35675 Block.prototype.byteLength = function (headersOnly) {
35676 if (headersOnly || !this.transactions) return 80
35677
35678 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35679 return a + x.byteLength()
35680 }, 0)
35681 }
35682
35683 Block.fromHex = function (hex) {
35684 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35685 }
35686
35687 Block.prototype.getHash = function () {
35688 return bcrypto.hash256(this.toBuffer(true))
35689 }
35690
35691 Block.prototype.getId = function () {
35692 return this.getHash().reverse().toString('hex')
35693 }
35694
35695 Block.prototype.getUTCDate = function () {
35696 var date = new Date(0) // epoch
35697 date.setUTCSeconds(this.timestamp)
35698
35699 return date
35700 }
35701
35702 // TODO: buffer, offset compatibility
35703 Block.prototype.toBuffer = function (headersOnly) {
35704 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35705
35706 var offset = 0
35707 function writeSlice (slice) {
35708 slice.copy(buffer, offset)
35709 offset += slice.length
35710 }
35711
35712 function writeInt32 (i) {
35713 buffer.writeInt32LE(i, offset)
35714 offset += 4
35715 }
35716 function writeUInt32 (i) {
35717 buffer.writeUInt32LE(i, offset)
35718 offset += 4
35719 }
35720
35721 writeInt32(this.version)
35722 writeSlice(this.prevHash)
35723 writeSlice(this.merkleRoot)
35724 writeUInt32(this.timestamp)
35725 writeUInt32(this.bits)
35726 writeUInt32(this.nonce)
35727
35728 if (headersOnly || !this.transactions) return buffer
35729
35730 varuint.encode(this.transactions.length, buffer, offset)
35731 offset += varuint.encode.bytes
35732
35733 this.transactions.forEach(function (tx) {
35734 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35735 tx.toBuffer(buffer, offset)
35736 offset += txSize
35737 })
35738
35739 return buffer
35740 }
35741
35742 Block.prototype.toHex = function (headersOnly) {
35743 return this.toBuffer(headersOnly).toString('hex')
35744 }
35745
35746 Block.calculateTarget = function (bits) {
35747 var exponent = ((bits & 0xff000000) >> 24) - 3
35748 var mantissa = bits & 0x007fffff
35749 var target = Buffer.alloc(32, 0)
35750 target.writeUInt32BE(mantissa, 28 - exponent)
35751 return target
35752 }
35753
35754 Block.calculateMerkleRoot = function (transactions) {
35755 typeforce([{ getHash: types.Function }], transactions)
35756 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35757
35758 var hashes = transactions.map(function (transaction) {
35759 return transaction.getHash()
35760 })
35761
35762 return fastMerkleRoot(hashes, bcrypto.hash256)
35763 }
35764
35765 Block.prototype.checkMerkleRoot = function () {
35766 if (!this.transactions) return false
35767
35768 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35769 return this.merkleRoot.compare(actualMerkleRoot) === 0
35770 }
35771
35772 Block.prototype.checkProofOfWork = function () {
35773 var hash = this.getHash().reverse()
35774 var target = Block.calculateTarget(this.bits)
35775
35776 return hash.compare(target) <= 0
35777 }
35778
35779 module.exports = Block
35780
35781 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":97,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],46:[function(require,module,exports){
35782 var pushdata = require('pushdata-bitcoin')
35783 var varuint = require('varuint-bitcoin')
35784
35785 // https://github.com/feross/buffer/blob/master/index.js#L1127
35786 function verifuint (value, max) {
35787 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35788 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35789 if (value > max) throw new Error('RangeError: value out of range')
35790 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35791 }
35792
35793 function readUInt64LE (buffer, offset) {
35794 var a = buffer.readUInt32LE(offset)
35795 var b = buffer.readUInt32LE(offset + 4)
35796 b *= 0x100000000
35797
35798 verifuint(b + a, 0x001fffffffffffff)
35799
35800 return b + a
35801 }
35802
35803 function writeUInt64LE (buffer, value, offset) {
35804 verifuint(value, 0x001fffffffffffff)
35805
35806 buffer.writeInt32LE(value & -1, offset)
35807 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35808 return offset + 8
35809 }
35810
35811 // TODO: remove in 4.0.0?
35812 function readVarInt (buffer, offset) {
35813 var result = varuint.decode(buffer, offset)
35814
35815 return {
35816 number: result,
35817 size: varuint.decode.bytes
35818 }
35819 }
35820
35821 // TODO: remove in 4.0.0?
35822 function writeVarInt (buffer, number, offset) {
35823 varuint.encode(number, buffer, offset)
35824 return varuint.encode.bytes
35825 }
35826
35827 module.exports = {
35828 pushDataSize: pushdata.encodingLength,
35829 readPushDataInt: pushdata.decode,
35830 readUInt64LE: readUInt64LE,
35831 readVarInt: readVarInt,
35832 varIntBuffer: varuint.encode,
35833 varIntSize: varuint.encodingLength,
35834 writePushDataInt: pushdata.encode,
35835 writeUInt64LE: writeUInt64LE,
35836 writeVarInt: writeVarInt
35837 }
35838
35839 },{"pushdata-bitcoin":98,"varuint-bitcoin":114}],47:[function(require,module,exports){
35840 var createHash = require('create-hash')
35841
35842 function ripemd160 (buffer) {
35843 return createHash('rmd160').update(buffer).digest()
35844 }
35845
35846 function sha1 (buffer) {
35847 return createHash('sha1').update(buffer).digest()
35848 }
35849
35850 function sha256 (buffer) {
35851 return createHash('sha256').update(buffer).digest()
35852 }
35853
35854 function hash160 (buffer) {
35855 return ripemd160(sha256(buffer))
35856 }
35857
35858 function hash256 (buffer) {
35859 return sha256(sha256(buffer))
35860 }
35861
35862 module.exports = {
35863 hash160: hash160,
35864 hash256: hash256,
35865 ripemd160: ripemd160,
35866 sha1: sha1,
35867 sha256: sha256
35868 }
35869
35870 },{"create-hash":85}],48:[function(require,module,exports){
35871 var Buffer = require('safe-buffer').Buffer
35872 var createHmac = require('create-hmac')
35873 var typeforce = require('typeforce')
35874 var types = require('./types')
35875
35876 var BigInteger = require('bigi')
35877 var ECSignature = require('./ecsignature')
35878
35879 var ZERO = Buffer.alloc(1, 0)
35880 var ONE = Buffer.alloc(1, 1)
35881
35882 var ecurve = require('ecurve')
35883 var secp256k1 = ecurve.getCurveByName('secp256k1')
35884
35885 // https://tools.ietf.org/html/rfc6979#section-3.2
35886 function deterministicGenerateK (hash, x, checkSig) {
35887 typeforce(types.tuple(
35888 types.Hash256bit,
35889 types.Buffer256bit,
35890 types.Function
35891 ), arguments)
35892
35893 // Step A, ignored as hash already provided
35894 // Step B
35895 // Step C
35896 var k = Buffer.alloc(32, 0)
35897 var v = Buffer.alloc(32, 1)
35898
35899 // Step D
35900 k = createHmac('sha256', k)
35901 .update(v)
35902 .update(ZERO)
35903 .update(x)
35904 .update(hash)
35905 .digest()
35906
35907 // Step E
35908 v = createHmac('sha256', k).update(v).digest()
35909
35910 // Step F
35911 k = createHmac('sha256', k)
35912 .update(v)
35913 .update(ONE)
35914 .update(x)
35915 .update(hash)
35916 .digest()
35917
35918 // Step G
35919 v = createHmac('sha256', k).update(v).digest()
35920
35921 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35922 // Step H2b
35923 v = createHmac('sha256', k).update(v).digest()
35924
35925 var T = BigInteger.fromBuffer(v)
35926
35927 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35928 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35929 k = createHmac('sha256', k)
35930 .update(v)
35931 .update(ZERO)
35932 .digest()
35933
35934 v = createHmac('sha256', k).update(v).digest()
35935
35936 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35937 // Step H2b again
35938 v = createHmac('sha256', k).update(v).digest()
35939 T = BigInteger.fromBuffer(v)
35940 }
35941
35942 return T
35943 }
35944
35945 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35946
35947 function sign (hash, d) {
35948 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35949
35950 var x = d.toBuffer(32)
35951 var e = BigInteger.fromBuffer(hash)
35952 var n = secp256k1.n
35953 var G = secp256k1.G
35954
35955 var r, s
35956 deterministicGenerateK(hash, x, function (k) {
35957 var Q = G.multiply(k)
35958
35959 if (secp256k1.isInfinity(Q)) return false
35960
35961 r = Q.affineX.mod(n)
35962 if (r.signum() === 0) return false
35963
35964 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35965 if (s.signum() === 0) return false
35966
35967 return true
35968 })
35969
35970 // enforce low S values, see bip62: 'low s values in signatures'
35971 if (s.compareTo(N_OVER_TWO) > 0) {
35972 s = n.subtract(s)
35973 }
35974
35975 return new ECSignature(r, s)
35976 }
35977
35978 function verify (hash, signature, Q) {
35979 typeforce(types.tuple(
35980 types.Hash256bit,
35981 types.ECSignature,
35982 types.ECPoint
35983 ), arguments)
35984
35985 var n = secp256k1.n
35986 var G = secp256k1.G
35987
35988 var r = signature.r
35989 var s = signature.s
35990
35991 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35992 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35993 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35994
35995 // 1.4.2 H = Hash(M), already done by the user
35996 // 1.4.3 e = H
35997 var e = BigInteger.fromBuffer(hash)
35998
35999 // Compute s^-1
36000 var sInv = s.modInverse(n)
36001
36002 // 1.4.4 Compute u1 = es^−1 mod n
36003 // u2 = rs^−1 mod n
36004 var u1 = e.multiply(sInv).mod(n)
36005 var u2 = r.multiply(sInv).mod(n)
36006
36007 // 1.4.5 Compute R = (xR, yR)
36008 // R = u1G + u2Q
36009 var R = G.multiplyTwo(u1, Q, u2)
36010
36011 // 1.4.5 (cont.) Enforce R is not at infinity
36012 if (secp256k1.isInfinity(R)) return false
36013
36014 // 1.4.6 Convert the field element R.x to an integer
36015 var xR = R.affineX
36016
36017 // 1.4.7 Set v = xR mod n
36018 var v = xR.mod(n)
36019
36020 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
36021 return v.equals(r)
36022 }
36023
36024 module.exports = {
36025 deterministicGenerateK: deterministicGenerateK,
36026 sign: sign,
36027 verify: verify,
36028
36029 // TODO: remove
36030 __curve: secp256k1
36031 }
36032
36033 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":88,"ecurve":92,"safe-buffer":101,"typeforce":112}],49:[function(require,module,exports){
36034 var baddress = require('./address')
36035 var bcrypto = require('./crypto')
36036 var ecdsa = require('./ecdsa')
36037 var randomBytes = require('randombytes')
36038 var typeforce = require('typeforce')
36039 var types = require('./types')
36040 var wif = require('wif')
36041
36042 var NETWORKS = require('./networks')
36043 var BigInteger = require('bigi')
36044
36045 var ecurve = require('ecurve')
36046 var secp256k1 = ecdsa.__curve
36047
36048 function ECPair (d, Q, options) {
36049 if (options) {
36050 typeforce({
36051 compressed: types.maybe(types.Boolean),
36052 network: types.maybe(types.Network)
36053 }, options)
36054 }
36055
36056 options = options || {}
36057
36058 if (d) {
36059 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36060 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36061 if (Q) throw new TypeError('Unexpected publicKey parameter')
36062
36063 this.d = d
36064 } else {
36065 typeforce(types.ECPoint, Q)
36066
36067 this.__Q = Q
36068 }
36069
36070 this.compressed = options.compressed === undefined ? true : options.compressed
36071 this.network = options.network || NETWORKS.bitcoin
36072 }
36073
36074 Object.defineProperty(ECPair.prototype, 'Q', {
36075 get: function () {
36076 if (!this.__Q && this.d) {
36077 this.__Q = secp256k1.G.multiply(this.d)
36078 }
36079
36080 return this.__Q
36081 }
36082 })
36083
36084 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36085 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36086
36087 return new ECPair(null, Q, {
36088 compressed: Q.compressed,
36089 network: network
36090 })
36091 }
36092
36093 ECPair.fromWIF = function (string, network) {
36094 var decoded = wif.decode(string)
36095 var version = decoded.version
36096
36097 // list of networks?
36098 if (types.Array(network)) {
36099 network = network.filter(function (x) {
36100 return version === x.wif
36101 }).pop()
36102
36103 if (!network) throw new Error('Unknown network version')
36104
36105 // otherwise, assume a network object (or default to bitcoin)
36106 } else {
36107 network = network || NETWORKS.bitcoin
36108
36109 if (version !== network.wif) throw new Error('Invalid network version')
36110 }
36111
36112 var d = BigInteger.fromBuffer(decoded.privateKey)
36113
36114 return new ECPair(d, null, {
36115 compressed: decoded.compressed,
36116 network: network
36117 })
36118 }
36119
36120 ECPair.makeRandom = function (options) {
36121 options = options || {}
36122
36123 var rng = options.rng || randomBytes
36124
36125 var d
36126 do {
36127 var buffer = rng(32)
36128 typeforce(types.Buffer256bit, buffer)
36129
36130 d = BigInteger.fromBuffer(buffer)
36131 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36132
36133 return new ECPair(d, null, options)
36134 }
36135
36136 ECPair.prototype.getAddress = function () {
36137 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36138 }
36139
36140 ECPair.prototype.getNetwork = function () {
36141 return this.network
36142 }
36143
36144 ECPair.prototype.getPublicKeyBuffer = function () {
36145 return this.Q.getEncoded(this.compressed)
36146 }
36147
36148 ECPair.prototype.sign = function (hash) {
36149 if (!this.d) throw new Error('Missing private key')
36150
36151 return ecdsa.sign(hash, this.d)
36152 }
36153
36154 ECPair.prototype.toWIF = function () {
36155 if (!this.d) throw new Error('Missing private key')
36156
36157 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36158 }
36159
36160 ECPair.prototype.verify = function (hash, signature) {
36161 return ecdsa.verify(hash, signature, this.Q)
36162 }
36163
36164 module.exports = ECPair
36165
36166 },{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":92,"randombytes":99,"typeforce":112,"wif":115}],50:[function(require,module,exports){
36167 (function (Buffer){
36168 var bip66 = require('bip66')
36169 var typeforce = require('typeforce')
36170 var types = require('./types')
36171
36172 var BigInteger = require('bigi')
36173
36174 function ECSignature (r, s) {
36175 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36176
36177 this.r = r
36178 this.s = s
36179 }
36180
36181 ECSignature.parseCompact = function (buffer) {
36182 typeforce(types.BufferN(65), buffer)
36183
36184 var flagByte = buffer.readUInt8(0) - 27
36185 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36186
36187 var compressed = !!(flagByte & 4)
36188 var recoveryParam = flagByte & 3
36189 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36190
36191 return {
36192 compressed: compressed,
36193 i: recoveryParam,
36194 signature: signature
36195 }
36196 }
36197
36198 ECSignature.fromRSBuffer = function (buffer) {
36199 typeforce(types.BufferN(64), buffer)
36200
36201 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36202 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36203 return new ECSignature(r, s)
36204 }
36205
36206 ECSignature.fromDER = function (buffer) {
36207 var decode = bip66.decode(buffer)
36208 var r = BigInteger.fromDERInteger(decode.r)
36209 var s = BigInteger.fromDERInteger(decode.s)
36210
36211 return new ECSignature(r, s)
36212 }
36213
36214 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36215 ECSignature.parseScriptSignature = function (buffer) {
36216 var hashType = buffer.readUInt8(buffer.length - 1)
36217 var hashTypeMod = hashType & ~0x80
36218
36219 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36220
36221 return {
36222 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36223 hashType: hashType
36224 }
36225 }
36226
36227 ECSignature.prototype.toCompact = function (i, compressed) {
36228 if (compressed) {
36229 i += 4
36230 }
36231
36232 i += 27
36233
36234 var buffer = Buffer.alloc(65)
36235 buffer.writeUInt8(i, 0)
36236 this.toRSBuffer(buffer, 1)
36237 return buffer
36238 }
36239
36240 ECSignature.prototype.toDER = function () {
36241 var r = Buffer.from(this.r.toDERInteger())
36242 var s = Buffer.from(this.s.toDERInteger())
36243
36244 return bip66.encode(r, s)
36245 }
36246
36247 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36248 buffer = buffer || Buffer.alloc(64)
36249 this.r.toBuffer(32).copy(buffer, offset)
36250 this.s.toBuffer(32).copy(buffer, offset + 32)
36251 return buffer
36252 }
36253
36254 ECSignature.prototype.toScriptSignature = function (hashType) {
36255 var hashTypeMod = hashType & ~0x80
36256 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36257
36258 var hashTypeBuffer = Buffer.alloc(1)
36259 hashTypeBuffer.writeUInt8(hashType, 0)
36260
36261 return Buffer.concat([this.toDER(), hashTypeBuffer])
36262 }
36263
36264 module.exports = ECSignature
36265
36266 }).call(this,require("buffer").Buffer)
36267 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":112}],51:[function(require,module,exports){
36268 var Buffer = require('safe-buffer').Buffer
36269 var base58check = require('bs58check')
36270 var bcrypto = require('./crypto')
36271 var createHmac = require('create-hmac')
36272 var typeforce = require('typeforce')
36273 var types = require('./types')
36274 var NETWORKS = require('./networks')
36275
36276 var BigInteger = require('bigi')
36277 var ECPair = require('./ecpair')
36278
36279 var ecurve = require('ecurve')
36280 var curve = ecurve.getCurveByName('secp256k1')
36281
36282 function HDNode (keyPair, chainCode) {
36283 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36284
36285 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36286
36287 this.keyPair = keyPair
36288 this.chainCode = chainCode
36289 this.depth = 0
36290 this.index = 0
36291 this.parentFingerprint = 0x00000000
36292 }
36293
36294 HDNode.HIGHEST_BIT = 0x80000000
36295 HDNode.LENGTH = 78
36296 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36297
36298 HDNode.fromSeedBuffer = function (seed, network) {
36299 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36300
36301 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36302 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36303
36304 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36305 var IL = I.slice(0, 32)
36306 var IR = I.slice(32)
36307
36308 // In case IL is 0 or >= n, the master key is invalid
36309 // This is handled by the ECPair constructor
36310 var pIL = BigInteger.fromBuffer(IL)
36311 var keyPair = new ECPair(pIL, null, {
36312 network: network
36313 })
36314
36315 return new HDNode(keyPair, IR)
36316 }
36317
36318 HDNode.fromSeedHex = function (hex, network) {
36319 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36320 }
36321
36322 HDNode.fromBase58 = function (string, networks) {
36323 var buffer = base58check.decode(string)
36324 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36325
36326 // 4 bytes: version bytes
36327 var version = buffer.readUInt32BE(0)
36328 var network
36329
36330 // list of networks?
36331 if (Array.isArray(networks)) {
36332 network = networks.filter(function (x) {
36333 return version === x.bip32.private ||
36334 version === x.bip32.public
36335 }).pop()
36336
36337 if (!network) throw new Error('Unknown network version')
36338
36339 // otherwise, assume a network object (or default to bitcoin)
36340 } else {
36341 network = networks || NETWORKS.bitcoin
36342 }
36343
36344 if (version !== network.bip32.private &&
36345 version !== network.bip32.public) throw new Error('Invalid network version')
36346
36347 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36348 var depth = buffer[4]
36349
36350 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36351 var parentFingerprint = buffer.readUInt32BE(5)
36352 if (depth === 0) {
36353 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36354 }
36355
36356 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36357 // This is encoded in MSB order. (0x00000000 if master key)
36358 var index = buffer.readUInt32BE(9)
36359 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36360
36361 // 32 bytes: the chain code
36362 var chainCode = buffer.slice(13, 45)
36363 var keyPair
36364
36365 // 33 bytes: private key data (0x00 + k)
36366 if (version === network.bip32.private) {
36367 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36368
36369 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36370 keyPair = new ECPair(d, null, { network: network })
36371
36372 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36373 } else {
36374 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36375 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36376
36377 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36378 // If not, the extended public key is invalid.
36379 curve.validate(Q)
36380
36381 keyPair = new ECPair(null, Q, { network: network })
36382 }
36383
36384 var hd = new HDNode(keyPair, chainCode)
36385 hd.depth = depth
36386 hd.index = index
36387 hd.parentFingerprint = parentFingerprint
36388
36389 return hd
36390 }
36391
36392 HDNode.prototype.getAddress = function () {
36393 return this.keyPair.getAddress()
36394 }
36395
36396 HDNode.prototype.getIdentifier = function () {
36397 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36398 }
36399
36400 HDNode.prototype.getFingerprint = function () {
36401 return this.getIdentifier().slice(0, 4)
36402 }
36403
36404 HDNode.prototype.getNetwork = function () {
36405 return this.keyPair.getNetwork()
36406 }
36407
36408 HDNode.prototype.getPublicKeyBuffer = function () {
36409 return this.keyPair.getPublicKeyBuffer()
36410 }
36411
36412 HDNode.prototype.neutered = function () {
36413 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36414 network: this.keyPair.network
36415 })
36416
36417 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36418 neutered.depth = this.depth
36419 neutered.index = this.index
36420 neutered.parentFingerprint = this.parentFingerprint
36421
36422 return neutered
36423 }
36424
36425 HDNode.prototype.sign = function (hash) {
36426 return this.keyPair.sign(hash)
36427 }
36428
36429 HDNode.prototype.verify = function (hash, signature) {
36430 return this.keyPair.verify(hash, signature)
36431 }
36432
36433 HDNode.prototype.toBase58 = function (__isPrivate) {
36434 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36435
36436 // Version
36437 var network = this.keyPair.network
36438 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36439 var buffer = Buffer.allocUnsafe(78)
36440
36441 // 4 bytes: version bytes
36442 buffer.writeUInt32BE(version, 0)
36443
36444 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36445 buffer.writeUInt8(this.depth, 4)
36446
36447 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36448 buffer.writeUInt32BE(this.parentFingerprint, 5)
36449
36450 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36451 // This is encoded in big endian. (0x00000000 if master key)
36452 buffer.writeUInt32BE(this.index, 9)
36453
36454 // 32 bytes: the chain code
36455 this.chainCode.copy(buffer, 13)
36456
36457 // 33 bytes: the public key or private key data
36458 if (!this.isNeutered()) {
36459 // 0x00 + k for private keys
36460 buffer.writeUInt8(0, 45)
36461 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36462
36463 // 33 bytes: the public key
36464 } else {
36465 // X9.62 encoding for public keys
36466 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36467 }
36468
36469 return base58check.encode(buffer)
36470 }
36471
36472 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36473 HDNode.prototype.derive = function (index) {
36474 typeforce(types.UInt32, index)
36475
36476 var isHardened = index >= HDNode.HIGHEST_BIT
36477 var data = Buffer.allocUnsafe(37)
36478
36479 // Hardened child
36480 if (isHardened) {
36481 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36482
36483 // data = 0x00 || ser256(kpar) || ser32(index)
36484 data[0] = 0x00
36485 this.keyPair.d.toBuffer(32).copy(data, 1)
36486 data.writeUInt32BE(index, 33)
36487
36488 // Normal child
36489 } else {
36490 // data = serP(point(kpar)) || ser32(index)
36491 // = serP(Kpar) || ser32(index)
36492 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36493 data.writeUInt32BE(index, 33)
36494 }
36495
36496 var I = createHmac('sha512', this.chainCode).update(data).digest()
36497 var IL = I.slice(0, 32)
36498 var IR = I.slice(32)
36499
36500 var pIL = BigInteger.fromBuffer(IL)
36501
36502 // In case parse256(IL) >= n, proceed with the next value for i
36503 if (pIL.compareTo(curve.n) >= 0) {
36504 return this.derive(index + 1)
36505 }
36506
36507 // Private parent key -> private child key
36508 var derivedKeyPair
36509 if (!this.isNeutered()) {
36510 // ki = parse256(IL) + kpar (mod n)
36511 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36512
36513 // In case ki == 0, proceed with the next value for i
36514 if (ki.signum() === 0) {
36515 return this.derive(index + 1)
36516 }
36517
36518 derivedKeyPair = new ECPair(ki, null, {
36519 network: this.keyPair.network
36520 })
36521
36522 // Public parent key -> public child key
36523 } else {
36524 // Ki = point(parse256(IL)) + Kpar
36525 // = G*IL + Kpar
36526 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36527
36528 // In case Ki is the point at infinity, proceed with the next value for i
36529 if (curve.isInfinity(Ki)) {
36530 return this.derive(index + 1)
36531 }
36532
36533 derivedKeyPair = new ECPair(null, Ki, {
36534 network: this.keyPair.network
36535 })
36536 }
36537
36538 var hd = new HDNode(derivedKeyPair, IR)
36539 hd.depth = this.depth + 1
36540 hd.index = index
36541 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36542
36543 return hd
36544 }
36545
36546 HDNode.prototype.deriveHardened = function (index) {
36547 typeforce(types.UInt31, index)
36548
36549 // Only derives hardened private keys by default
36550 return this.derive(index + HDNode.HIGHEST_BIT)
36551 }
36552
36553 // Private === not neutered
36554 // Public === neutered
36555 HDNode.prototype.isNeutered = function () {
36556 return !(this.keyPair.d)
36557 }
36558
36559 HDNode.prototype.derivePath = function (path) {
36560 typeforce(types.BIP32Path, path)
36561
36562 var splitPath = path.split('/')
36563 if (splitPath[0] === 'm') {
36564 if (this.parentFingerprint) {
36565 throw new Error('Not a master node')
36566 }
36567
36568 splitPath = splitPath.slice(1)
36569 }
36570
36571 return splitPath.reduce(function (prevHd, indexStr) {
36572 var index
36573 if (indexStr.slice(-1) === "'") {
36574 index = parseInt(indexStr.slice(0, -1), 10)
36575 return prevHd.deriveHardened(index)
36576 } else {
36577 index = parseInt(indexStr, 10)
36578 return prevHd.derive(index)
36579 }
36580 }, this)
36581 }
36582
36583 module.exports = HDNode
36584
36585 },{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":83,"create-hmac":88,"ecurve":92,"safe-buffer":101,"typeforce":112}],52:[function(require,module,exports){
36586 var script = require('./script')
36587
36588 var templates = require('./templates')
36589 for (var key in templates) {
36590 script[key] = templates[key]
36591 }
36592
36593 module.exports = {
36594 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36595
36596 Block: require('./block'),
36597 ECPair: require('./ecpair'),
36598 ECSignature: require('./ecsignature'),
36599 HDNode: require('./hdnode'),
36600 Transaction: require('./transaction'),
36601 TransactionBuilder: require('./transaction_builder'),
36602
36603 address: require('./address'),
36604 crypto: require('./crypto'),
36605 networks: require('./networks'),
36606 opcodes: require('bitcoin-ops'),
36607 script: script
36608 }
36609
36610 },{"./address":44,"./block":45,"./bufferutils":46,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./hdnode":51,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./transaction_builder":79,"bitcoin-ops":42}],53:[function(require,module,exports){
36611 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36612 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36613
36614 module.exports = {
36615 bitcoin: {
36616 messagePrefix: '\x18Bitcoin Signed Message:\n',
36617 bech32: 'bc',
36618 bip32: {
36619 public: 0x0488b21e,
36620 private: 0x0488ade4
36621 },
36622 pubKeyHash: 0x00,
36623 scriptHash: 0x05,
36624 wif: 0x80
36625 },
36626 testnet: {
36627 messagePrefix: '\x18Bitcoin Signed Message:\n',
36628 bech32: 'tb',
36629 bip32: {
36630 public: 0x043587cf,
36631 private: 0x04358394
36632 },
36633 pubKeyHash: 0x6f,
36634 scriptHash: 0xc4,
36635 wif: 0xef
36636 },
36637 litecoin: {
36638 messagePrefix: '\x19Litecoin Signed Message:\n',
36639 bip32: {
36640 public: 0x019da462,
36641 private: 0x019d9cfe
36642 },
36643 pubKeyHash: 0x30,
36644 scriptHash: 0x32,
36645 wif: 0xb0
36646 }
36647 }
36648
36649 },{}],54:[function(require,module,exports){
36650 var Buffer = require('safe-buffer').Buffer
36651 var bip66 = require('bip66')
36652 var pushdata = require('pushdata-bitcoin')
36653 var typeforce = require('typeforce')
36654 var types = require('./types')
36655 var scriptNumber = require('./script_number')
36656
36657 var OPS = require('bitcoin-ops')
36658 var REVERSE_OPS = require('bitcoin-ops/map')
36659 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36660
36661 function isOPInt (value) {
36662 return types.Number(value) &&
36663 ((value === OPS.OP_0) ||
36664 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36665 (value === OPS.OP_1NEGATE))
36666 }
36667
36668 function isPushOnlyChunk (value) {
36669 return types.Buffer(value) || isOPInt(value)
36670 }
36671
36672 function isPushOnly (value) {
36673 return types.Array(value) && value.every(isPushOnlyChunk)
36674 }
36675
36676 function asMinimalOP (buffer) {
36677 if (buffer.length === 0) return OPS.OP_0
36678 if (buffer.length !== 1) return
36679 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36680 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36681 }
36682
36683 function compile (chunks) {
36684 // TODO: remove me
36685 if (Buffer.isBuffer(chunks)) return chunks
36686
36687 typeforce(types.Array, chunks)
36688
36689 var bufferSize = chunks.reduce(function (accum, chunk) {
36690 // data chunk
36691 if (Buffer.isBuffer(chunk)) {
36692 // adhere to BIP62.3, minimal push policy
36693 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36694 return accum + 1
36695 }
36696
36697 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36698 }
36699
36700 // opcode
36701 return accum + 1
36702 }, 0.0)
36703
36704 var buffer = Buffer.allocUnsafe(bufferSize)
36705 var offset = 0
36706
36707 chunks.forEach(function (chunk) {
36708 // data chunk
36709 if (Buffer.isBuffer(chunk)) {
36710 // adhere to BIP62.3, minimal push policy
36711 var opcode = asMinimalOP(chunk)
36712 if (opcode !== undefined) {
36713 buffer.writeUInt8(opcode, offset)
36714 offset += 1
36715 return
36716 }
36717
36718 offset += pushdata.encode(buffer, chunk.length, offset)
36719 chunk.copy(buffer, offset)
36720 offset += chunk.length
36721
36722 // opcode
36723 } else {
36724 buffer.writeUInt8(chunk, offset)
36725 offset += 1
36726 }
36727 })
36728
36729 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36730 return buffer
36731 }
36732
36733 function decompile (buffer) {
36734 // TODO: remove me
36735 if (types.Array(buffer)) return buffer
36736
36737 typeforce(types.Buffer, buffer)
36738
36739 var chunks = []
36740 var i = 0
36741
36742 while (i < buffer.length) {
36743 var opcode = buffer[i]
36744
36745 // data chunk
36746 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36747 var d = pushdata.decode(buffer, i)
36748
36749 // did reading a pushDataInt fail? empty script
36750 if (d === null) return []
36751 i += d.size
36752
36753 // attempt to read too much data? empty script
36754 if (i + d.number > buffer.length) return []
36755
36756 var data = buffer.slice(i, i + d.number)
36757 i += d.number
36758
36759 // decompile minimally
36760 var op = asMinimalOP(data)
36761 if (op !== undefined) {
36762 chunks.push(op)
36763 } else {
36764 chunks.push(data)
36765 }
36766
36767 // opcode
36768 } else {
36769 chunks.push(opcode)
36770
36771 i += 1
36772 }
36773 }
36774
36775 return chunks
36776 }
36777
36778 function toASM (chunks) {
36779 if (Buffer.isBuffer(chunks)) {
36780 chunks = decompile(chunks)
36781 }
36782
36783 return chunks.map(function (chunk) {
36784 // data?
36785 if (Buffer.isBuffer(chunk)) {
36786 var op = asMinimalOP(chunk)
36787 if (op === undefined) return chunk.toString('hex')
36788 chunk = op
36789 }
36790
36791 // opcode!
36792 return REVERSE_OPS[chunk]
36793 }).join(' ')
36794 }
36795
36796 function fromASM (asm) {
36797 typeforce(types.String, asm)
36798
36799 return compile(asm.split(' ').map(function (chunkStr) {
36800 // opcode?
36801 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36802 typeforce(types.Hex, chunkStr)
36803
36804 // data!
36805 return Buffer.from(chunkStr, 'hex')
36806 }))
36807 }
36808
36809 function toStack (chunks) {
36810 chunks = decompile(chunks)
36811 typeforce(isPushOnly, chunks)
36812
36813 return chunks.map(function (op) {
36814 if (Buffer.isBuffer(op)) return op
36815 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36816
36817 return scriptNumber.encode(op - OP_INT_BASE)
36818 })
36819 }
36820
36821 function isCanonicalPubKey (buffer) {
36822 if (!Buffer.isBuffer(buffer)) return false
36823 if (buffer.length < 33) return false
36824
36825 switch (buffer[0]) {
36826 case 0x02:
36827 case 0x03:
36828 return buffer.length === 33
36829 case 0x04:
36830 return buffer.length === 65
36831 }
36832
36833 return false
36834 }
36835
36836 function isDefinedHashType (hashType) {
36837 var hashTypeMod = hashType & ~0x80
36838
36839 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36840 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36841 }
36842
36843 function isCanonicalSignature (buffer) {
36844 if (!Buffer.isBuffer(buffer)) return false
36845 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36846
36847 return bip66.check(buffer.slice(0, -1))
36848 }
36849
36850 module.exports = {
36851 compile: compile,
36852 decompile: decompile,
36853 fromASM: fromASM,
36854 toASM: toASM,
36855 toStack: toStack,
36856
36857 number: require('./script_number'),
36858
36859 isCanonicalPubKey: isCanonicalPubKey,
36860 isCanonicalSignature: isCanonicalSignature,
36861 isPushOnly: isPushOnly,
36862 isDefinedHashType: isDefinedHashType
36863 }
36864
36865 },{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":98,"safe-buffer":101,"typeforce":112}],55:[function(require,module,exports){
36866 var Buffer = require('safe-buffer').Buffer
36867
36868 function decode (buffer, maxLength, minimal) {
36869 maxLength = maxLength || 4
36870 minimal = minimal === undefined ? true : minimal
36871
36872 var length = buffer.length
36873 if (length === 0) return 0
36874 if (length > maxLength) throw new TypeError('Script number overflow')
36875 if (minimal) {
36876 if ((buffer[length - 1] & 0x7f) === 0) {
36877 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36878 }
36879 }
36880
36881 // 40-bit
36882 if (length === 5) {
36883 var a = buffer.readUInt32LE(0)
36884 var b = buffer.readUInt8(4)
36885
36886 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36887 return (b * 0x100000000) + a
36888 }
36889
36890 var result = 0
36891
36892 // 32-bit / 24-bit / 16-bit / 8-bit
36893 for (var i = 0; i < length; ++i) {
36894 result |= buffer[i] << (8 * i)
36895 }
36896
36897 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36898 return result
36899 }
36900
36901 function scriptNumSize (i) {
36902 return i > 0x7fffffff ? 5
36903 : i > 0x7fffff ? 4
36904 : i > 0x7fff ? 3
36905 : i > 0x7f ? 2
36906 : i > 0x00 ? 1
36907 : 0
36908 }
36909
36910 function encode (number) {
36911 var value = Math.abs(number)
36912 var size = scriptNumSize(value)
36913 var buffer = Buffer.allocUnsafe(size)
36914 var negative = number < 0
36915
36916 for (var i = 0; i < size; ++i) {
36917 buffer.writeUInt8(value & 0xff, i)
36918 value >>= 8
36919 }
36920
36921 if (buffer[size - 1] & 0x80) {
36922 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36923 } else if (negative) {
36924 buffer[size - 1] |= 0x80
36925 }
36926
36927 return buffer
36928 }
36929
36930 module.exports = {
36931 decode: decode,
36932 encode: encode
36933 }
36934
36935 },{"safe-buffer":101}],56:[function(require,module,exports){
36936 var decompile = require('../script').decompile
36937 var multisig = require('./multisig')
36938 var nullData = require('./nulldata')
36939 var pubKey = require('./pubkey')
36940 var pubKeyHash = require('./pubkeyhash')
36941 var scriptHash = require('./scripthash')
36942 var witnessPubKeyHash = require('./witnesspubkeyhash')
36943 var witnessScriptHash = require('./witnessscripthash')
36944 var witnessCommitment = require('./witnesscommitment')
36945
36946 var types = {
36947 MULTISIG: 'multisig',
36948 NONSTANDARD: 'nonstandard',
36949 NULLDATA: 'nulldata',
36950 P2PK: 'pubkey',
36951 P2PKH: 'pubkeyhash',
36952 P2SH: 'scripthash',
36953 P2WPKH: 'witnesspubkeyhash',
36954 P2WSH: 'witnessscripthash',
36955 WITNESS_COMMITMENT: 'witnesscommitment'
36956 }
36957
36958 function classifyOutput (script) {
36959 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36960 if (witnessScriptHash.output.check(script)) return types.P2WSH
36961 if (pubKeyHash.output.check(script)) return types.P2PKH
36962 if (scriptHash.output.check(script)) return types.P2SH
36963
36964 // XXX: optimization, below functions .decompile before use
36965 var chunks = decompile(script)
36966 if (multisig.output.check(chunks)) return types.MULTISIG
36967 if (pubKey.output.check(chunks)) return types.P2PK
36968 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36969 if (nullData.output.check(chunks)) return types.NULLDATA
36970
36971 return types.NONSTANDARD
36972 }
36973
36974 function classifyInput (script, allowIncomplete) {
36975 // XXX: optimization, below functions .decompile before use
36976 var chunks = decompile(script)
36977
36978 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36979 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36980 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36981 if (pubKey.input.check(chunks)) return types.P2PK
36982
36983 return types.NONSTANDARD
36984 }
36985
36986 function classifyWitness (script, allowIncomplete) {
36987 // XXX: optimization, below functions .decompile before use
36988 var chunks = decompile(script)
36989
36990 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36991 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36992
36993 return types.NONSTANDARD
36994 }
36995
36996 module.exports = {
36997 classifyInput: classifyInput,
36998 classifyOutput: classifyOutput,
36999 classifyWitness: classifyWitness,
37000 multisig: multisig,
37001 nullData: nullData,
37002 pubKey: pubKey,
37003 pubKeyHash: pubKeyHash,
37004 scriptHash: scriptHash,
37005 witnessPubKeyHash: witnessPubKeyHash,
37006 witnessScriptHash: witnessScriptHash,
37007 witnessCommitment: witnessCommitment,
37008 types: types
37009 }
37010
37011 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
37012 module.exports = {
37013 input: require('./input'),
37014 output: require('./output')
37015 }
37016
37017 },{"./input":58,"./output":59}],58:[function(require,module,exports){
37018 // OP_0 [signatures ...]
37019
37020 var Buffer = require('safe-buffer').Buffer
37021 var bscript = require('../../script')
37022 var p2mso = require('./output')
37023 var typeforce = require('typeforce')
37024 var OPS = require('bitcoin-ops')
37025
37026 function partialSignature (value) {
37027 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
37028 }
37029
37030 function check (script, allowIncomplete) {
37031 var chunks = bscript.decompile(script)
37032 if (chunks.length < 2) return false
37033 if (chunks[0] !== OPS.OP_0) return false
37034
37035 if (allowIncomplete) {
37036 return chunks.slice(1).every(partialSignature)
37037 }
37038
37039 return chunks.slice(1).every(bscript.isCanonicalSignature)
37040 }
37041 check.toJSON = function () { return 'multisig input' }
37042
37043 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
37044
37045 function encodeStack (signatures, scriptPubKey) {
37046 typeforce([partialSignature], signatures)
37047
37048 if (scriptPubKey) {
37049 var scriptData = p2mso.decode(scriptPubKey)
37050
37051 if (signatures.length < scriptData.m) {
37052 throw new TypeError('Not enough signatures provided')
37053 }
37054
37055 if (signatures.length > scriptData.pubKeys.length) {
37056 throw new TypeError('Too many signatures provided')
37057 }
37058 }
37059
37060 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37061 if (sig === OPS.OP_0) {
37062 return EMPTY_BUFFER
37063 }
37064 return sig
37065 }))
37066 }
37067
37068 function encode (signatures, scriptPubKey) {
37069 return bscript.compile(encodeStack(signatures, scriptPubKey))
37070 }
37071
37072 function decodeStack (stack, allowIncomplete) {
37073 typeforce(typeforce.Array, stack)
37074 typeforce(check, stack, allowIncomplete)
37075 return stack.slice(1)
37076 }
37077
37078 function decode (buffer, allowIncomplete) {
37079 var stack = bscript.decompile(buffer)
37080 return decodeStack(stack, allowIncomplete)
37081 }
37082
37083 module.exports = {
37084 check: check,
37085 decode: decode,
37086 decodeStack: decodeStack,
37087 encode: encode,
37088 encodeStack: encodeStack
37089 }
37090
37091 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],59:[function(require,module,exports){
37092 // m [pubKeys ...] n OP_CHECKMULTISIG
37093
37094 var bscript = require('../../script')
37095 var types = require('../../types')
37096 var typeforce = require('typeforce')
37097 var OPS = require('bitcoin-ops')
37098 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37099
37100 function check (script, allowIncomplete) {
37101 var chunks = bscript.decompile(script)
37102
37103 if (chunks.length < 4) return false
37104 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37105 if (!types.Number(chunks[0])) return false
37106 if (!types.Number(chunks[chunks.length - 2])) return false
37107 var m = chunks[0] - OP_INT_BASE
37108 var n = chunks[chunks.length - 2] - OP_INT_BASE
37109
37110 if (m <= 0) return false
37111 if (n > 16) return false
37112 if (m > n) return false
37113 if (n !== chunks.length - 3) return false
37114 if (allowIncomplete) return true
37115
37116 var keys = chunks.slice(1, -2)
37117 return keys.every(bscript.isCanonicalPubKey)
37118 }
37119 check.toJSON = function () { return 'multi-sig output' }
37120
37121 function encode (m, pubKeys) {
37122 typeforce({
37123 m: types.Number,
37124 pubKeys: [bscript.isCanonicalPubKey]
37125 }, {
37126 m: m,
37127 pubKeys: pubKeys
37128 })
37129
37130 var n = pubKeys.length
37131 if (n < m) throw new TypeError('Not enough pubKeys provided')
37132
37133 return bscript.compile([].concat(
37134 OP_INT_BASE + m,
37135 pubKeys,
37136 OP_INT_BASE + n,
37137 OPS.OP_CHECKMULTISIG
37138 ))
37139 }
37140
37141 function decode (buffer, allowIncomplete) {
37142 var chunks = bscript.decompile(buffer)
37143 typeforce(check, chunks, allowIncomplete)
37144
37145 return {
37146 m: chunks[0] - OP_INT_BASE,
37147 pubKeys: chunks.slice(1, -2)
37148 }
37149 }
37150
37151 module.exports = {
37152 check: check,
37153 decode: decode,
37154 encode: encode
37155 }
37156
37157 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],60:[function(require,module,exports){
37158 // OP_RETURN {data}
37159
37160 var bscript = require('../script')
37161 var types = require('../types')
37162 var typeforce = require('typeforce')
37163 var OPS = require('bitcoin-ops')
37164
37165 function check (script) {
37166 var buffer = bscript.compile(script)
37167
37168 return buffer.length > 1 &&
37169 buffer[0] === OPS.OP_RETURN
37170 }
37171 check.toJSON = function () { return 'null data output' }
37172
37173 function encode (data) {
37174 typeforce(types.Buffer, data)
37175
37176 return bscript.compile([OPS.OP_RETURN, data])
37177 }
37178
37179 function decode (buffer) {
37180 typeforce(check, buffer)
37181
37182 return buffer.slice(2)
37183 }
37184
37185 module.exports = {
37186 output: {
37187 check: check,
37188 decode: decode,
37189 encode: encode
37190 }
37191 }
37192
37193 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":112}],61:[function(require,module,exports){
37194 arguments[4][57][0].apply(exports,arguments)
37195 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37196 // {signature}
37197
37198 var bscript = require('../../script')
37199 var typeforce = require('typeforce')
37200
37201 function check (script) {
37202 var chunks = bscript.decompile(script)
37203
37204 return chunks.length === 1 &&
37205 bscript.isCanonicalSignature(chunks[0])
37206 }
37207 check.toJSON = function () { return 'pubKey input' }
37208
37209 function encodeStack (signature) {
37210 typeforce(bscript.isCanonicalSignature, signature)
37211 return [signature]
37212 }
37213
37214 function encode (signature) {
37215 return bscript.compile(encodeStack(signature))
37216 }
37217
37218 function decodeStack (stack) {
37219 typeforce(typeforce.Array, stack)
37220 typeforce(check, stack)
37221 return stack[0]
37222 }
37223
37224 function decode (buffer) {
37225 var stack = bscript.decompile(buffer)
37226 return decodeStack(stack)
37227 }
37228
37229 module.exports = {
37230 check: check,
37231 decode: decode,
37232 decodeStack: decodeStack,
37233 encode: encode,
37234 encodeStack: encodeStack
37235 }
37236
37237 },{"../../script":54,"typeforce":112}],63:[function(require,module,exports){
37238 // {pubKey} OP_CHECKSIG
37239
37240 var bscript = require('../../script')
37241 var typeforce = require('typeforce')
37242 var OPS = require('bitcoin-ops')
37243
37244 function check (script) {
37245 var chunks = bscript.decompile(script)
37246
37247 return chunks.length === 2 &&
37248 bscript.isCanonicalPubKey(chunks[0]) &&
37249 chunks[1] === OPS.OP_CHECKSIG
37250 }
37251 check.toJSON = function () { return 'pubKey output' }
37252
37253 function encode (pubKey) {
37254 typeforce(bscript.isCanonicalPubKey, pubKey)
37255
37256 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37257 }
37258
37259 function decode (buffer) {
37260 var chunks = bscript.decompile(buffer)
37261 typeforce(check, chunks)
37262
37263 return chunks[0]
37264 }
37265
37266 module.exports = {
37267 check: check,
37268 decode: decode,
37269 encode: encode
37270 }
37271
37272 },{"../../script":54,"bitcoin-ops":42,"typeforce":112}],64:[function(require,module,exports){
37273 arguments[4][57][0].apply(exports,arguments)
37274 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37275 // {signature} {pubKey}
37276
37277 var bscript = require('../../script')
37278 var typeforce = require('typeforce')
37279
37280 function check (script) {
37281 var chunks = bscript.decompile(script)
37282
37283 return chunks.length === 2 &&
37284 bscript.isCanonicalSignature(chunks[0]) &&
37285 bscript.isCanonicalPubKey(chunks[1])
37286 }
37287 check.toJSON = function () { return 'pubKeyHash input' }
37288
37289 function encodeStack (signature, pubKey) {
37290 typeforce({
37291 signature: bscript.isCanonicalSignature,
37292 pubKey: bscript.isCanonicalPubKey
37293 }, {
37294 signature: signature,
37295 pubKey: pubKey
37296 })
37297
37298 return [signature, pubKey]
37299 }
37300
37301 function encode (signature, pubKey) {
37302 return bscript.compile(encodeStack(signature, pubKey))
37303 }
37304
37305 function decodeStack (stack) {
37306 typeforce(typeforce.Array, stack)
37307 typeforce(check, stack)
37308
37309 return {
37310 signature: stack[0],
37311 pubKey: stack[1]
37312 }
37313 }
37314
37315 function decode (buffer) {
37316 var stack = bscript.decompile(buffer)
37317 return decodeStack(stack)
37318 }
37319
37320 module.exports = {
37321 check: check,
37322 decode: decode,
37323 decodeStack: decodeStack,
37324 encode: encode,
37325 encodeStack: encodeStack
37326 }
37327
37328 },{"../../script":54,"typeforce":112}],66:[function(require,module,exports){
37329 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37330
37331 var bscript = require('../../script')
37332 var types = require('../../types')
37333 var typeforce = require('typeforce')
37334 var OPS = require('bitcoin-ops')
37335
37336 function check (script) {
37337 var buffer = bscript.compile(script)
37338
37339 return buffer.length === 25 &&
37340 buffer[0] === OPS.OP_DUP &&
37341 buffer[1] === OPS.OP_HASH160 &&
37342 buffer[2] === 0x14 &&
37343 buffer[23] === OPS.OP_EQUALVERIFY &&
37344 buffer[24] === OPS.OP_CHECKSIG
37345 }
37346 check.toJSON = function () { return 'pubKeyHash output' }
37347
37348 function encode (pubKeyHash) {
37349 typeforce(types.Hash160bit, pubKeyHash)
37350
37351 return bscript.compile([
37352 OPS.OP_DUP,
37353 OPS.OP_HASH160,
37354 pubKeyHash,
37355 OPS.OP_EQUALVERIFY,
37356 OPS.OP_CHECKSIG
37357 ])
37358 }
37359
37360 function decode (buffer) {
37361 typeforce(check, buffer)
37362
37363 return buffer.slice(3, 23)
37364 }
37365
37366 module.exports = {
37367 check: check,
37368 decode: decode,
37369 encode: encode
37370 }
37371
37372 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],67:[function(require,module,exports){
37373 arguments[4][57][0].apply(exports,arguments)
37374 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37375 // <scriptSig> {serialized scriptPubKey script}
37376
37377 var Buffer = require('safe-buffer').Buffer
37378 var bscript = require('../../script')
37379 var typeforce = require('typeforce')
37380
37381 var p2ms = require('../multisig/')
37382 var p2pk = require('../pubkey/')
37383 var p2pkh = require('../pubkeyhash/')
37384 var p2wpkho = require('../witnesspubkeyhash/output')
37385 var p2wsho = require('../witnessscripthash/output')
37386
37387 function check (script, allowIncomplete) {
37388 var chunks = bscript.decompile(script)
37389 if (chunks.length < 1) return false
37390
37391 var lastChunk = chunks[chunks.length - 1]
37392 if (!Buffer.isBuffer(lastChunk)) return false
37393
37394 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37395 var redeemScriptChunks = bscript.decompile(lastChunk)
37396
37397 // is redeemScript a valid script?
37398 if (redeemScriptChunks.length === 0) return false
37399
37400 // is redeemScriptSig push only?
37401 if (!bscript.isPushOnly(scriptSigChunks)) return false
37402
37403 // is witness?
37404 if (chunks.length === 1) {
37405 return p2wsho.check(redeemScriptChunks) ||
37406 p2wpkho.check(redeemScriptChunks)
37407 }
37408
37409 // match types
37410 if (p2pkh.input.check(scriptSigChunks) &&
37411 p2pkh.output.check(redeemScriptChunks)) return true
37412
37413 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37414 p2ms.output.check(redeemScriptChunks)) return true
37415
37416 if (p2pk.input.check(scriptSigChunks) &&
37417 p2pk.output.check(redeemScriptChunks)) return true
37418
37419 return false
37420 }
37421 check.toJSON = function () { return 'scriptHash input' }
37422
37423 function encodeStack (redeemScriptStack, redeemScript) {
37424 var serializedScriptPubKey = bscript.compile(redeemScript)
37425
37426 return [].concat(redeemScriptStack, serializedScriptPubKey)
37427 }
37428
37429 function encode (redeemScriptSig, redeemScript) {
37430 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37431
37432 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37433 }
37434
37435 function decodeStack (stack) {
37436 typeforce(typeforce.Array, stack)
37437 typeforce(check, stack)
37438
37439 return {
37440 redeemScriptStack: stack.slice(0, -1),
37441 redeemScript: stack[stack.length - 1]
37442 }
37443 }
37444
37445 function decode (buffer) {
37446 var stack = bscript.decompile(buffer)
37447 var result = decodeStack(stack)
37448 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37449 delete result.redeemScriptStack
37450 return result
37451 }
37452
37453 module.exports = {
37454 check: check,
37455 decode: decode,
37456 decodeStack: decodeStack,
37457 encode: encode,
37458 encodeStack: encodeStack
37459 }
37460
37461 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":101,"typeforce":112}],69:[function(require,module,exports){
37462 // OP_HASH160 {scriptHash} OP_EQUAL
37463
37464 var bscript = require('../../script')
37465 var types = require('../../types')
37466 var typeforce = require('typeforce')
37467 var OPS = require('bitcoin-ops')
37468
37469 function check (script) {
37470 var buffer = bscript.compile(script)
37471
37472 return buffer.length === 23 &&
37473 buffer[0] === OPS.OP_HASH160 &&
37474 buffer[1] === 0x14 &&
37475 buffer[22] === OPS.OP_EQUAL
37476 }
37477 check.toJSON = function () { return 'scriptHash output' }
37478
37479 function encode (scriptHash) {
37480 typeforce(types.Hash160bit, scriptHash)
37481
37482 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37483 }
37484
37485 function decode (buffer) {
37486 typeforce(check, buffer)
37487
37488 return buffer.slice(2, 22)
37489 }
37490
37491 module.exports = {
37492 check: check,
37493 decode: decode,
37494 encode: encode
37495 }
37496
37497 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],70:[function(require,module,exports){
37498 module.exports = {
37499 output: require('./output')
37500 }
37501
37502 },{"./output":71}],71:[function(require,module,exports){
37503 // OP_RETURN {aa21a9ed} {commitment}
37504
37505 var Buffer = require('safe-buffer').Buffer
37506 var bscript = require('../../script')
37507 var types = require('../../types')
37508 var typeforce = require('typeforce')
37509 var OPS = require('bitcoin-ops')
37510
37511 var HEADER = Buffer.from('aa21a9ed', 'hex')
37512
37513 function check (script) {
37514 var buffer = bscript.compile(script)
37515
37516 return buffer.length > 37 &&
37517 buffer[0] === OPS.OP_RETURN &&
37518 buffer[1] === 0x24 &&
37519 buffer.slice(2, 6).equals(HEADER)
37520 }
37521
37522 check.toJSON = function () { return 'Witness commitment output' }
37523
37524 function encode (commitment) {
37525 typeforce(types.Hash256bit, commitment)
37526
37527 var buffer = Buffer.allocUnsafe(36)
37528 HEADER.copy(buffer, 0)
37529 commitment.copy(buffer, 4)
37530
37531 return bscript.compile([OPS.OP_RETURN, buffer])
37532 }
37533
37534 function decode (buffer) {
37535 typeforce(check, buffer)
37536
37537 return bscript.decompile(buffer)[1].slice(4, 36)
37538 }
37539
37540 module.exports = {
37541 check: check,
37542 decode: decode,
37543 encode: encode
37544 }
37545
37546 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],72:[function(require,module,exports){
37547 arguments[4][57][0].apply(exports,arguments)
37548 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37549 // {signature} {pubKey}
37550
37551 var bscript = require('../../script')
37552 var typeforce = require('typeforce')
37553
37554 function isCompressedCanonicalPubKey (pubKey) {
37555 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37556 }
37557
37558 function check (script) {
37559 var chunks = bscript.decompile(script)
37560
37561 return chunks.length === 2 &&
37562 bscript.isCanonicalSignature(chunks[0]) &&
37563 isCompressedCanonicalPubKey(chunks[1])
37564 }
37565 check.toJSON = function () { return 'witnessPubKeyHash input' }
37566
37567 function encodeStack (signature, pubKey) {
37568 typeforce({
37569 signature: bscript.isCanonicalSignature,
37570 pubKey: isCompressedCanonicalPubKey
37571 }, {
37572 signature: signature,
37573 pubKey: pubKey
37574 })
37575
37576 return [signature, pubKey]
37577 }
37578
37579 function decodeStack (stack) {
37580 typeforce(typeforce.Array, stack)
37581 typeforce(check, stack)
37582
37583 return {
37584 signature: stack[0],
37585 pubKey: stack[1]
37586 }
37587 }
37588
37589 module.exports = {
37590 check: check,
37591 decodeStack: decodeStack,
37592 encodeStack: encodeStack
37593 }
37594
37595 },{"../../script":54,"typeforce":112}],74:[function(require,module,exports){
37596 // OP_0 {pubKeyHash}
37597
37598 var bscript = require('../../script')
37599 var types = require('../../types')
37600 var typeforce = require('typeforce')
37601 var OPS = require('bitcoin-ops')
37602
37603 function check (script) {
37604 var buffer = bscript.compile(script)
37605
37606 return buffer.length === 22 &&
37607 buffer[0] === OPS.OP_0 &&
37608 buffer[1] === 0x14
37609 }
37610 check.toJSON = function () { return 'Witness pubKeyHash output' }
37611
37612 function encode (pubKeyHash) {
37613 typeforce(types.Hash160bit, pubKeyHash)
37614
37615 return bscript.compile([OPS.OP_0, pubKeyHash])
37616 }
37617
37618 function decode (buffer) {
37619 typeforce(check, buffer)
37620
37621 return buffer.slice(2)
37622 }
37623
37624 module.exports = {
37625 check: check,
37626 decode: decode,
37627 encode: encode
37628 }
37629
37630 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],75:[function(require,module,exports){
37631 arguments[4][57][0].apply(exports,arguments)
37632 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37633 (function (Buffer){
37634 // <scriptSig> {serialized scriptPubKey script}
37635
37636 var bscript = require('../../script')
37637 var types = require('../../types')
37638 var typeforce = require('typeforce')
37639
37640 var p2ms = require('../multisig/')
37641 var p2pk = require('../pubkey/')
37642 var p2pkh = require('../pubkeyhash/')
37643
37644 function check (chunks, allowIncomplete) {
37645 typeforce(types.Array, chunks)
37646 if (chunks.length < 1) return false
37647
37648 var witnessScript = chunks[chunks.length - 1]
37649 if (!Buffer.isBuffer(witnessScript)) return false
37650
37651 var witnessScriptChunks = bscript.decompile(witnessScript)
37652
37653 // is witnessScript a valid script?
37654 if (witnessScriptChunks.length === 0) return false
37655
37656 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37657
37658 // match types
37659 if (p2pkh.input.check(witnessRawScriptSig) &&
37660 p2pkh.output.check(witnessScriptChunks)) return true
37661
37662 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37663 p2ms.output.check(witnessScriptChunks)) return true
37664
37665 if (p2pk.input.check(witnessRawScriptSig) &&
37666 p2pk.output.check(witnessScriptChunks)) return true
37667
37668 return false
37669 }
37670 check.toJSON = function () { return 'witnessScriptHash input' }
37671
37672 function encodeStack (witnessData, witnessScript) {
37673 typeforce({
37674 witnessData: [types.Buffer],
37675 witnessScript: types.Buffer
37676 }, {
37677 witnessData: witnessData,
37678 witnessScript: witnessScript
37679 })
37680
37681 return [].concat(witnessData, witnessScript)
37682 }
37683
37684 function decodeStack (stack) {
37685 typeforce(typeforce.Array, stack)
37686 typeforce(check, stack)
37687 return {
37688 witnessData: stack.slice(0, -1),
37689 witnessScript: stack[stack.length - 1]
37690 }
37691 }
37692
37693 module.exports = {
37694 check: check,
37695 decodeStack: decodeStack,
37696 encodeStack: encodeStack
37697 }
37698
37699 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37700 },{"../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"../../script":54,"../../types":80,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"typeforce":112}],77:[function(require,module,exports){
37701 // OP_0 {scriptHash}
37702
37703 var bscript = require('../../script')
37704 var types = require('../../types')
37705 var typeforce = require('typeforce')
37706 var OPS = require('bitcoin-ops')
37707
37708 function check (script) {
37709 var buffer = bscript.compile(script)
37710
37711 return buffer.length === 34 &&
37712 buffer[0] === OPS.OP_0 &&
37713 buffer[1] === 0x20
37714 }
37715 check.toJSON = function () { return 'Witness scriptHash output' }
37716
37717 function encode (scriptHash) {
37718 typeforce(types.Hash256bit, scriptHash)
37719
37720 return bscript.compile([OPS.OP_0, scriptHash])
37721 }
37722
37723 function decode (buffer) {
37724 typeforce(check, buffer)
37725
37726 return buffer.slice(2)
37727 }
37728
37729 module.exports = {
37730 check: check,
37731 decode: decode,
37732 encode: encode
37733 }
37734
37735 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],78:[function(require,module,exports){
37736 var Buffer = require('safe-buffer').Buffer
37737 var bcrypto = require('./crypto')
37738 var bscript = require('./script')
37739 var bufferutils = require('./bufferutils')
37740 var opcodes = require('bitcoin-ops')
37741 var typeforce = require('typeforce')
37742 var types = require('./types')
37743 var varuint = require('varuint-bitcoin')
37744
37745 function varSliceSize (someScript) {
37746 var length = someScript.length
37747
37748 return varuint.encodingLength(length) + length
37749 }
37750
37751 function vectorSize (someVector) {
37752 var length = someVector.length
37753
37754 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37755 return sum + varSliceSize(witness)
37756 }, 0)
37757 }
37758
37759 function Transaction () {
37760 this.version = 1
37761 this.locktime = 0
37762 this.ins = []
37763 this.outs = []
37764 }
37765
37766 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37767 Transaction.SIGHASH_ALL = 0x01
37768 Transaction.SIGHASH_NONE = 0x02
37769 Transaction.SIGHASH_SINGLE = 0x03
37770 Transaction.SIGHASH_ANYONECANPAY = 0x80
37771 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37772 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37773
37774 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37775 var EMPTY_WITNESS = []
37776 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37777 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37778 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37779 var BLANK_OUTPUT = {
37780 script: EMPTY_SCRIPT,
37781 valueBuffer: VALUE_UINT64_MAX
37782 }
37783
37784 Transaction.fromBuffer = function (buffer, __noStrict) {
37785 var offset = 0
37786 function readSlice (n) {
37787 offset += n
37788 return buffer.slice(offset - n, offset)
37789 }
37790
37791 function readUInt32 () {
37792 var i = buffer.readUInt32LE(offset)
37793 offset += 4
37794 return i
37795 }
37796
37797 function readInt32 () {
37798 var i = buffer.readInt32LE(offset)
37799 offset += 4
37800 return i
37801 }
37802
37803 function readUInt64 () {
37804 var i = bufferutils.readUInt64LE(buffer, offset)
37805 offset += 8
37806 return i
37807 }
37808
37809 function readVarInt () {
37810 var vi = varuint.decode(buffer, offset)
37811 offset += varuint.decode.bytes
37812 return vi
37813 }
37814
37815 function readVarSlice () {
37816 return readSlice(readVarInt())
37817 }
37818
37819 function readVector () {
37820 var count = readVarInt()
37821 var vector = []
37822 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37823 return vector
37824 }
37825
37826 var tx = new Transaction()
37827 tx.version = readInt32()
37828
37829 var marker = buffer.readUInt8(offset)
37830 var flag = buffer.readUInt8(offset + 1)
37831
37832 var hasWitnesses = false
37833 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37834 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37835 offset += 2
37836 hasWitnesses = true
37837 }
37838
37839 var vinLen = readVarInt()
37840 for (var i = 0; i < vinLen; ++i) {
37841 tx.ins.push({
37842 hash: readSlice(32),
37843 index: readUInt32(),
37844 script: readVarSlice(),
37845 sequence: readUInt32(),
37846 witness: EMPTY_WITNESS
37847 })
37848 }
37849
37850 var voutLen = readVarInt()
37851 for (i = 0; i < voutLen; ++i) {
37852 tx.outs.push({
37853 value: readUInt64(),
37854 script: readVarSlice()
37855 })
37856 }
37857
37858 if (hasWitnesses) {
37859 for (i = 0; i < vinLen; ++i) {
37860 tx.ins[i].witness = readVector()
37861 }
37862
37863 // was this pointless?
37864 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37865 }
37866
37867 tx.locktime = readUInt32()
37868
37869 if (__noStrict) return tx
37870 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37871
37872 return tx
37873 }
37874
37875 Transaction.fromHex = function (hex) {
37876 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37877 }
37878
37879 Transaction.isCoinbaseHash = function (buffer) {
37880 typeforce(types.Hash256bit, buffer)
37881 for (var i = 0; i < 32; ++i) {
37882 if (buffer[i] !== 0) return false
37883 }
37884 return true
37885 }
37886
37887 Transaction.prototype.isCoinbase = function () {
37888 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37889 }
37890
37891 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37892 typeforce(types.tuple(
37893 types.Hash256bit,
37894 types.UInt32,
37895 types.maybe(types.UInt32),
37896 types.maybe(types.Buffer)
37897 ), arguments)
37898
37899 if (types.Null(sequence)) {
37900 sequence = Transaction.DEFAULT_SEQUENCE
37901 }
37902
37903 // Add the input and return the input's index
37904 return (this.ins.push({
37905 hash: hash,
37906 index: index,
37907 script: scriptSig || EMPTY_SCRIPT,
37908 sequence: sequence,
37909 witness: EMPTY_WITNESS
37910 }) - 1)
37911 }
37912
37913 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37914 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37915
37916 // Add the output and return the output's index
37917 return (this.outs.push({
37918 script: scriptPubKey,
37919 value: value
37920 }) - 1)
37921 }
37922
37923 Transaction.prototype.hasWitnesses = function () {
37924 return this.ins.some(function (x) {
37925 return x.witness.length !== 0
37926 })
37927 }
37928
37929 Transaction.prototype.weight = function () {
37930 var base = this.__byteLength(false)
37931 var total = this.__byteLength(true)
37932 return base * 3 + total
37933 }
37934
37935 Transaction.prototype.virtualSize = function () {
37936 return Math.ceil(this.weight() / 4)
37937 }
37938
37939 Transaction.prototype.byteLength = function () {
37940 return this.__byteLength(true)
37941 }
37942
37943 Transaction.prototype.__byteLength = function (__allowWitness) {
37944 var hasWitnesses = __allowWitness && this.hasWitnesses()
37945
37946 return (
37947 (hasWitnesses ? 10 : 8) +
37948 varuint.encodingLength(this.ins.length) +
37949 varuint.encodingLength(this.outs.length) +
37950 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37951 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37952 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37953 )
37954 }
37955
37956 Transaction.prototype.clone = function () {
37957 var newTx = new Transaction()
37958 newTx.version = this.version
37959 newTx.locktime = this.locktime
37960
37961 newTx.ins = this.ins.map(function (txIn) {
37962 return {
37963 hash: txIn.hash,
37964 index: txIn.index,
37965 script: txIn.script,
37966 sequence: txIn.sequence,
37967 witness: txIn.witness
37968 }
37969 })
37970
37971 newTx.outs = this.outs.map(function (txOut) {
37972 return {
37973 script: txOut.script,
37974 value: txOut.value
37975 }
37976 })
37977
37978 return newTx
37979 }
37980
37981 /**
37982 * Hash transaction for signing a specific input.
37983 *
37984 * Bitcoin uses a different hash for each signed transaction input.
37985 * This method copies the transaction, makes the necessary changes based on the
37986 * hashType, and then hashes the result.
37987 * This hash can then be used to sign the provided transaction input.
37988 */
37989 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37990 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37991
37992 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37993 if (inIndex >= this.ins.length) return ONE
37994
37995 // ignore OP_CODESEPARATOR
37996 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37997 return x !== opcodes.OP_CODESEPARATOR
37998 }))
37999
38000 var txTmp = this.clone()
38001
38002 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
38003 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
38004 txTmp.outs = []
38005
38006 // ignore sequence numbers (except at inIndex)
38007 txTmp.ins.forEach(function (input, i) {
38008 if (i === inIndex) return
38009
38010 input.sequence = 0
38011 })
38012
38013 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
38014 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
38015 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
38016 if (inIndex >= this.outs.length) return ONE
38017
38018 // truncate outputs after
38019 txTmp.outs.length = inIndex + 1
38020
38021 // "blank" outputs before
38022 for (var i = 0; i < inIndex; i++) {
38023 txTmp.outs[i] = BLANK_OUTPUT
38024 }
38025
38026 // ignore sequence numbers (except at inIndex)
38027 txTmp.ins.forEach(function (input, y) {
38028 if (y === inIndex) return
38029
38030 input.sequence = 0
38031 })
38032 }
38033
38034 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
38035 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
38036 txTmp.ins = [txTmp.ins[inIndex]]
38037 txTmp.ins[0].script = ourScript
38038
38039 // SIGHASH_ALL: only ignore input scripts
38040 } else {
38041 // "blank" others input scripts
38042 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
38043 txTmp.ins[inIndex].script = ourScript
38044 }
38045
38046 // serialize and hash
38047 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
38048 buffer.writeInt32LE(hashType, buffer.length - 4)
38049 txTmp.__toBuffer(buffer, 0, false)
38050
38051 return bcrypto.hash256(buffer)
38052 }
38053
38054 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38055 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38056
38057 var tbuffer, toffset
38058 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38059 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38060 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38061 function writeVarInt (i) {
38062 varuint.encode(i, tbuffer, toffset)
38063 toffset += varuint.encode.bytes
38064 }
38065 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38066
38067 var hashOutputs = ZERO
38068 var hashPrevouts = ZERO
38069 var hashSequence = ZERO
38070
38071 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38072 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38073 toffset = 0
38074
38075 this.ins.forEach(function (txIn) {
38076 writeSlice(txIn.hash)
38077 writeUInt32(txIn.index)
38078 })
38079
38080 hashPrevouts = bcrypto.hash256(tbuffer)
38081 }
38082
38083 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38084 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38085 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38086 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38087 toffset = 0
38088
38089 this.ins.forEach(function (txIn) {
38090 writeUInt32(txIn.sequence)
38091 })
38092
38093 hashSequence = bcrypto.hash256(tbuffer)
38094 }
38095
38096 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38097 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38098 var txOutsSize = this.outs.reduce(function (sum, output) {
38099 return sum + 8 + varSliceSize(output.script)
38100 }, 0)
38101
38102 tbuffer = Buffer.allocUnsafe(txOutsSize)
38103 toffset = 0
38104
38105 this.outs.forEach(function (out) {
38106 writeUInt64(out.value)
38107 writeVarSlice(out.script)
38108 })
38109
38110 hashOutputs = bcrypto.hash256(tbuffer)
38111 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38112 var output = this.outs[inIndex]
38113
38114 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38115 toffset = 0
38116 writeUInt64(output.value)
38117 writeVarSlice(output.script)
38118
38119 hashOutputs = bcrypto.hash256(tbuffer)
38120 }
38121
38122 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38123 toffset = 0
38124
38125 var input = this.ins[inIndex]
38126 writeUInt32(this.version)
38127 writeSlice(hashPrevouts)
38128 writeSlice(hashSequence)
38129 writeSlice(input.hash)
38130 writeUInt32(input.index)
38131 writeVarSlice(prevOutScript)
38132 writeUInt64(value)
38133 writeUInt32(input.sequence)
38134 writeSlice(hashOutputs)
38135 writeUInt32(this.locktime)
38136 writeUInt32(hashType)
38137 return bcrypto.hash256(tbuffer)
38138 }
38139
38140 Transaction.prototype.getHash = function () {
38141 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38142 }
38143
38144 Transaction.prototype.getId = function () {
38145 // transaction hash's are displayed in reverse order
38146 return this.getHash().reverse().toString('hex')
38147 }
38148
38149 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38150 return this.__toBuffer(buffer, initialOffset, true)
38151 }
38152
38153 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38154 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38155
38156 var offset = initialOffset || 0
38157 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38158 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38159 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38160 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38161 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38162 function writeVarInt (i) {
38163 varuint.encode(i, buffer, offset)
38164 offset += varuint.encode.bytes
38165 }
38166 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38167 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38168
38169 writeInt32(this.version)
38170
38171 var hasWitnesses = __allowWitness && this.hasWitnesses()
38172
38173 if (hasWitnesses) {
38174 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38175 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38176 }
38177
38178 writeVarInt(this.ins.length)
38179
38180 this.ins.forEach(function (txIn) {
38181 writeSlice(txIn.hash)
38182 writeUInt32(txIn.index)
38183 writeVarSlice(txIn.script)
38184 writeUInt32(txIn.sequence)
38185 })
38186
38187 writeVarInt(this.outs.length)
38188 this.outs.forEach(function (txOut) {
38189 if (!txOut.valueBuffer) {
38190 writeUInt64(txOut.value)
38191 } else {
38192 writeSlice(txOut.valueBuffer)
38193 }
38194
38195 writeVarSlice(txOut.script)
38196 })
38197
38198 if (hasWitnesses) {
38199 this.ins.forEach(function (input) {
38200 writeVector(input.witness)
38201 })
38202 }
38203
38204 writeUInt32(this.locktime)
38205
38206 // avoid slicing unless necessary
38207 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38208 return buffer
38209 }
38210
38211 Transaction.prototype.toHex = function () {
38212 return this.toBuffer().toString('hex')
38213 }
38214
38215 Transaction.prototype.setInputScript = function (index, scriptSig) {
38216 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38217
38218 this.ins[index].script = scriptSig
38219 }
38220
38221 Transaction.prototype.setWitness = function (index, witness) {
38222 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38223
38224 this.ins[index].witness = witness
38225 }
38226
38227 module.exports = Transaction
38228
38229 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],79:[function(require,module,exports){
38230 var Buffer = require('safe-buffer').Buffer
38231 var baddress = require('./address')
38232 var bcrypto = require('./crypto')
38233 var bscript = require('./script')
38234 var btemplates = require('./templates')
38235 var networks = require('./networks')
38236 var ops = require('bitcoin-ops')
38237 var typeforce = require('typeforce')
38238 var types = require('./types')
38239 var scriptTypes = btemplates.types
38240 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38241 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38242
38243 var ECPair = require('./ecpair')
38244 var ECSignature = require('./ecsignature')
38245 var Transaction = require('./transaction')
38246
38247 function supportedType (type) {
38248 return SIGNABLE.indexOf(type) !== -1
38249 }
38250
38251 function supportedP2SHType (type) {
38252 return P2SH.indexOf(type) !== -1
38253 }
38254
38255 function extractChunks (type, chunks, script) {
38256 var pubKeys = []
38257 var signatures = []
38258 switch (type) {
38259 case scriptTypes.P2PKH:
38260 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38261 pubKeys = chunks.slice(1)
38262 signatures = chunks.slice(0, 1)
38263 break
38264
38265 case scriptTypes.P2PK:
38266 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38267 signatures = chunks.slice(0, 1)
38268 break
38269
38270 case scriptTypes.MULTISIG:
38271 if (script) {
38272 var multisig = btemplates.multisig.output.decode(script)
38273 pubKeys = multisig.pubKeys
38274 }
38275
38276 signatures = chunks.slice(1).map(function (chunk) {
38277 return chunk.length === 0 ? undefined : chunk
38278 })
38279 break
38280 }
38281
38282 return {
38283 pubKeys: pubKeys,
38284 signatures: signatures
38285 }
38286 }
38287 function expandInput (scriptSig, witnessStack) {
38288 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38289
38290 var prevOutScript
38291 var prevOutType
38292 var scriptType
38293 var script
38294 var redeemScript
38295 var witnessScript
38296 var witnessScriptType
38297 var redeemScriptType
38298 var witness = false
38299 var p2wsh = false
38300 var p2sh = false
38301 var witnessProgram
38302 var chunks
38303
38304 var scriptSigChunks = bscript.decompile(scriptSig)
38305 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38306 if (sigType === scriptTypes.P2SH) {
38307 p2sh = true
38308 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38309 redeemScriptType = btemplates.classifyOutput(redeemScript)
38310 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38311 prevOutType = scriptTypes.P2SH
38312 script = redeemScript
38313 }
38314
38315 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38316 if (classifyWitness === scriptTypes.P2WSH) {
38317 witnessScript = witnessStack[witnessStack.length - 1]
38318 witnessScriptType = btemplates.classifyOutput(witnessScript)
38319 p2wsh = true
38320 witness = true
38321 if (scriptSig.length === 0) {
38322 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38323 prevOutType = scriptTypes.P2WSH
38324 if (redeemScript !== undefined) {
38325 throw new Error('Redeem script given when unnecessary')
38326 }
38327 // bare witness
38328 } else {
38329 if (!redeemScript) {
38330 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38331 }
38332 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38333 if (!redeemScript.equals(witnessProgram)) {
38334 throw new Error('Redeem script didn\'t match witnessScript')
38335 }
38336 }
38337
38338 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38339 throw new Error('unsupported witness script')
38340 }
38341
38342 script = witnessScript
38343 scriptType = witnessScriptType
38344 chunks = witnessStack.slice(0, -1)
38345 } else if (classifyWitness === scriptTypes.P2WPKH) {
38346 witness = true
38347 var key = witnessStack[witnessStack.length - 1]
38348 var keyHash = bcrypto.hash160(key)
38349 if (scriptSig.length === 0) {
38350 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38351 prevOutType = scriptTypes.P2WPKH
38352 if (typeof redeemScript !== 'undefined') {
38353 throw new Error('Redeem script given when unnecessary')
38354 }
38355 } else {
38356 if (!redeemScript) {
38357 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38358 }
38359 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38360 if (!redeemScript.equals(witnessProgram)) {
38361 throw new Error('Redeem script did not have the right witness program')
38362 }
38363 }
38364
38365 scriptType = scriptTypes.P2PKH
38366 chunks = witnessStack
38367 } else if (redeemScript) {
38368 if (!supportedP2SHType(redeemScriptType)) {
38369 throw new Error('Bad redeemscript!')
38370 }
38371
38372 script = redeemScript
38373 scriptType = redeemScriptType
38374 chunks = scriptSigChunks.slice(0, -1)
38375 } else {
38376 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38377 chunks = scriptSigChunks
38378 }
38379
38380 var expanded = extractChunks(scriptType, chunks, script)
38381
38382 var result = {
38383 pubKeys: expanded.pubKeys,
38384 signatures: expanded.signatures,
38385 prevOutScript: prevOutScript,
38386 prevOutType: prevOutType,
38387 signType: scriptType,
38388 signScript: script,
38389 witness: Boolean(witness)
38390 }
38391
38392 if (p2sh) {
38393 result.redeemScript = redeemScript
38394 result.redeemScriptType = redeemScriptType
38395 }
38396
38397 if (p2wsh) {
38398 result.witnessScript = witnessScript
38399 result.witnessScriptType = witnessScriptType
38400 }
38401
38402 return result
38403 }
38404
38405 // could be done in expandInput, but requires the original Transaction for hashForSignature
38406 function fixMultisigOrder (input, transaction, vin) {
38407 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38408 if (input.pubKeys.length === input.signatures.length) return
38409
38410 var unmatched = input.signatures.concat()
38411
38412 input.signatures = input.pubKeys.map(function (pubKey) {
38413 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38414 var match
38415
38416 // check for a signature
38417 unmatched.some(function (signature, i) {
38418 // skip if undefined || OP_0
38419 if (!signature) return false
38420
38421 // TODO: avoid O(n) hashForSignature
38422 var parsed = ECSignature.parseScriptSignature(signature)
38423 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38424
38425 // skip if signature does not match pubKey
38426 if (!keyPair.verify(hash, parsed.signature)) return false
38427
38428 // remove matched signature from unmatched
38429 unmatched[i] = undefined
38430 match = signature
38431
38432 return true
38433 })
38434
38435 return match
38436 })
38437 }
38438
38439 function expandOutput (script, scriptType, ourPubKey) {
38440 typeforce(types.Buffer, script)
38441
38442 var scriptChunks = bscript.decompile(script)
38443 if (!scriptType) {
38444 scriptType = btemplates.classifyOutput(script)
38445 }
38446
38447 var pubKeys = []
38448
38449 switch (scriptType) {
38450 // does our hash160(pubKey) match the output scripts?
38451 case scriptTypes.P2PKH:
38452 if (!ourPubKey) break
38453
38454 var pkh1 = scriptChunks[2]
38455 var pkh2 = bcrypto.hash160(ourPubKey)
38456 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38457 break
38458
38459 // does our hash160(pubKey) match the output scripts?
38460 case scriptTypes.P2WPKH:
38461 if (!ourPubKey) break
38462
38463 var wpkh1 = scriptChunks[1]
38464 var wpkh2 = bcrypto.hash160(ourPubKey)
38465 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38466 break
38467
38468 case scriptTypes.P2PK:
38469 pubKeys = scriptChunks.slice(0, 1)
38470 break
38471
38472 case scriptTypes.MULTISIG:
38473 pubKeys = scriptChunks.slice(1, -2)
38474 break
38475
38476 default: return { scriptType: scriptType }
38477 }
38478
38479 return {
38480 pubKeys: pubKeys,
38481 scriptType: scriptType,
38482 signatures: pubKeys.map(function () { return undefined })
38483 }
38484 }
38485
38486 function checkP2SHInput (input, redeemScriptHash) {
38487 if (input.prevOutType) {
38488 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38489
38490 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38491 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38492 }
38493 }
38494
38495 function checkP2WSHInput (input, witnessScriptHash) {
38496 if (input.prevOutType) {
38497 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38498
38499 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38500 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38501 }
38502 }
38503
38504 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38505 var expanded
38506 var prevOutType
38507 var prevOutScript
38508
38509 var p2sh = false
38510 var p2shType
38511 var redeemScriptHash
38512
38513 var witness = false
38514 var p2wsh = false
38515 var witnessType
38516 var witnessScriptHash
38517
38518 var signType
38519 var signScript
38520
38521 if (redeemScript && witnessScript) {
38522 redeemScriptHash = bcrypto.hash160(redeemScript)
38523 witnessScriptHash = bcrypto.sha256(witnessScript)
38524 checkP2SHInput(input, redeemScriptHash)
38525
38526 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38527
38528 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38529 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38530
38531 prevOutType = btemplates.types.P2SH
38532 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38533 p2sh = witness = p2wsh = true
38534 p2shType = btemplates.types.P2WSH
38535 signType = witnessType = expanded.scriptType
38536 signScript = witnessScript
38537 } else if (redeemScript) {
38538 redeemScriptHash = bcrypto.hash160(redeemScript)
38539 checkP2SHInput(input, redeemScriptHash)
38540
38541 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38542 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38543
38544 prevOutType = btemplates.types.P2SH
38545 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38546 p2sh = true
38547 signType = p2shType = expanded.scriptType
38548 signScript = redeemScript
38549 witness = signType === btemplates.types.P2WPKH
38550 } else if (witnessScript) {
38551 witnessScriptHash = bcrypto.sha256(witnessScript)
38552 checkP2WSHInput(input, witnessScriptHash)
38553
38554 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38555 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38556
38557 prevOutType = btemplates.types.P2WSH
38558 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38559 witness = p2wsh = true
38560 signType = witnessType = expanded.scriptType
38561 signScript = witnessScript
38562 } else if (input.prevOutType) {
38563 // embedded scripts are not possible without a redeemScript
38564 if (input.prevOutType === scriptTypes.P2SH ||
38565 input.prevOutType === scriptTypes.P2WSH) {
38566 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38567 }
38568
38569 prevOutType = input.prevOutType
38570 prevOutScript = input.prevOutScript
38571 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38572 if (!expanded.pubKeys) return
38573
38574 witness = (input.prevOutType === scriptTypes.P2WPKH)
38575 signType = prevOutType
38576 signScript = prevOutScript
38577 } else {
38578 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38579 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38580
38581 prevOutType = scriptTypes.P2PKH
38582 witness = false
38583 signType = prevOutType
38584 signScript = prevOutScript
38585 }
38586
38587 if (signType === scriptTypes.P2WPKH) {
38588 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38589 }
38590
38591 if (p2sh) {
38592 input.redeemScript = redeemScript
38593 input.redeemScriptType = p2shType
38594 }
38595
38596 if (p2wsh) {
38597 input.witnessScript = witnessScript
38598 input.witnessScriptType = witnessType
38599 }
38600
38601 input.pubKeys = expanded.pubKeys
38602 input.signatures = expanded.signatures
38603 input.signScript = signScript
38604 input.signType = signType
38605 input.prevOutScript = prevOutScript
38606 input.prevOutType = prevOutType
38607 input.witness = witness
38608 }
38609
38610 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38611 if (type === scriptTypes.P2PKH) {
38612 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38613 } else if (type === scriptTypes.P2PK) {
38614 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38615 } else if (type === scriptTypes.MULTISIG) {
38616 if (signatures.length > 0) {
38617 signatures = signatures.map(function (signature) {
38618 return signature || ops.OP_0
38619 })
38620 if (!allowIncomplete) {
38621 // remove blank signatures
38622 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38623 }
38624
38625 return btemplates.multisig.input.encodeStack(signatures)
38626 }
38627 } else {
38628 throw new Error('Not yet supported')
38629 }
38630
38631 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38632 return []
38633 }
38634
38635 function buildInput (input, allowIncomplete) {
38636 var scriptType = input.prevOutType
38637 var sig = []
38638 var witness = []
38639
38640 if (supportedType(scriptType)) {
38641 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38642 }
38643
38644 var p2sh = false
38645 if (scriptType === btemplates.types.P2SH) {
38646 // We can remove this error later when we have a guarantee prepareInput
38647 // rejects unsignable scripts - it MUST be signable at this point.
38648 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38649 throw new Error('Impossible to sign this type')
38650 }
38651
38652 if (supportedType(input.redeemScriptType)) {
38653 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38654 }
38655
38656 // If it wasn't SIGNABLE, it's witness, defer to that
38657 if (input.redeemScriptType) {
38658 p2sh = true
38659 scriptType = input.redeemScriptType
38660 }
38661 }
38662
38663 switch (scriptType) {
38664 // P2WPKH is a special case of P2PKH
38665 case btemplates.types.P2WPKH:
38666 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38667 break
38668
38669 case btemplates.types.P2WSH:
38670 // We can remove this check later
38671 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38672 throw new Error('Impossible to sign this type')
38673 }
38674
38675 if (supportedType(input.witnessScriptType)) {
38676 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38677 witness.push(input.witnessScript)
38678 scriptType = input.witnessScriptType
38679 }
38680
38681 break
38682 }
38683
38684 // append redeemScript if necessary
38685 if (p2sh) {
38686 sig.push(input.redeemScript)
38687 }
38688
38689 return {
38690 type: scriptType,
38691 script: bscript.compile(sig),
38692 witness: witness
38693 }
38694 }
38695
38696 function TransactionBuilder (network, maximumFeeRate) {
38697 this.prevTxMap = {}
38698 this.network = network || networks.bitcoin
38699
38700 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38701 this.maximumFeeRate = maximumFeeRate || 2500
38702
38703 this.inputs = []
38704 this.tx = new Transaction()
38705 }
38706
38707 TransactionBuilder.prototype.setLockTime = function (locktime) {
38708 typeforce(types.UInt32, locktime)
38709
38710 // if any signatures exist, throw
38711 if (this.inputs.some(function (input) {
38712 if (!input.signatures) return false
38713
38714 return input.signatures.some(function (s) { return s })
38715 })) {
38716 throw new Error('No, this would invalidate signatures')
38717 }
38718
38719 this.tx.locktime = locktime
38720 }
38721
38722 TransactionBuilder.prototype.setVersion = function (version) {
38723 typeforce(types.UInt32, version)
38724
38725 // XXX: this might eventually become more complex depending on what the versions represent
38726 this.tx.version = version
38727 }
38728
38729 TransactionBuilder.fromTransaction = function (transaction, network) {
38730 var txb = new TransactionBuilder(network)
38731
38732 // Copy transaction fields
38733 txb.setVersion(transaction.version)
38734 txb.setLockTime(transaction.locktime)
38735
38736 // Copy outputs (done first to avoid signature invalidation)
38737 transaction.outs.forEach(function (txOut) {
38738 txb.addOutput(txOut.script, txOut.value)
38739 })
38740
38741 // Copy inputs
38742 transaction.ins.forEach(function (txIn) {
38743 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38744 sequence: txIn.sequence,
38745 script: txIn.script,
38746 witness: txIn.witness
38747 })
38748 })
38749
38750 // fix some things not possible through the public API
38751 txb.inputs.forEach(function (input, i) {
38752 fixMultisigOrder(input, transaction, i)
38753 })
38754
38755 return txb
38756 }
38757
38758 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38759 if (!this.__canModifyInputs()) {
38760 throw new Error('No, this would invalidate signatures')
38761 }
38762
38763 var value
38764
38765 // is it a hex string?
38766 if (typeof txHash === 'string') {
38767 // transaction hashs's are displayed in reverse order, un-reverse it
38768 txHash = Buffer.from(txHash, 'hex').reverse()
38769
38770 // is it a Transaction object?
38771 } else if (txHash instanceof Transaction) {
38772 var txOut = txHash.outs[vout]
38773 prevOutScript = txOut.script
38774 value = txOut.value
38775
38776 txHash = txHash.getHash()
38777 }
38778
38779 return this.__addInputUnsafe(txHash, vout, {
38780 sequence: sequence,
38781 prevOutScript: prevOutScript,
38782 value: value
38783 })
38784 }
38785
38786 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38787 if (Transaction.isCoinbaseHash(txHash)) {
38788 throw new Error('coinbase inputs not supported')
38789 }
38790
38791 var prevTxOut = txHash.toString('hex') + ':' + vout
38792 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38793
38794 var input = {}
38795
38796 // derive what we can from the scriptSig
38797 if (options.script !== undefined) {
38798 input = expandInput(options.script, options.witness || [])
38799 }
38800
38801 // if an input value was given, retain it
38802 if (options.value !== undefined) {
38803 input.value = options.value
38804 }
38805
38806 // derive what we can from the previous transactions output script
38807 if (!input.prevOutScript && options.prevOutScript) {
38808 var prevOutType
38809
38810 if (!input.pubKeys && !input.signatures) {
38811 var expanded = expandOutput(options.prevOutScript)
38812
38813 if (expanded.pubKeys) {
38814 input.pubKeys = expanded.pubKeys
38815 input.signatures = expanded.signatures
38816 }
38817
38818 prevOutType = expanded.scriptType
38819 }
38820
38821 input.prevOutScript = options.prevOutScript
38822 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38823 }
38824
38825 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38826 this.inputs[vin] = input
38827 this.prevTxMap[prevTxOut] = vin
38828 return vin
38829 }
38830
38831 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38832 if (!this.__canModifyOutputs()) {
38833 throw new Error('No, this would invalidate signatures')
38834 }
38835
38836 // Attempt to get a script if it's a base58 address string
38837 if (typeof scriptPubKey === 'string') {
38838 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38839 }
38840
38841 return this.tx.addOutput(scriptPubKey, value)
38842 }
38843
38844 TransactionBuilder.prototype.build = function () {
38845 return this.__build(false)
38846 }
38847 TransactionBuilder.prototype.buildIncomplete = function () {
38848 return this.__build(true)
38849 }
38850
38851 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38852 if (!allowIncomplete) {
38853 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38854 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38855 }
38856
38857 var tx = this.tx.clone()
38858 // Create script signatures from inputs
38859 this.inputs.forEach(function (input, i) {
38860 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38861 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38862 var result = buildInput(input, allowIncomplete)
38863
38864 // skip if no result
38865 if (!allowIncomplete) {
38866 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38867 throw new Error(result.type + ' not supported')
38868 }
38869 }
38870
38871 tx.setInputScript(i, result.script)
38872 tx.setWitness(i, result.witness)
38873 })
38874
38875 if (!allowIncomplete) {
38876 // do not rely on this, its merely a last resort
38877 if (this.__overMaximumFees(tx.virtualSize())) {
38878 throw new Error('Transaction has absurd fees')
38879 }
38880 }
38881
38882 return tx
38883 }
38884
38885 function canSign (input) {
38886 return input.prevOutScript !== undefined &&
38887 input.signScript !== undefined &&
38888 input.pubKeys !== undefined &&
38889 input.signatures !== undefined &&
38890 input.signatures.length === input.pubKeys.length &&
38891 input.pubKeys.length > 0 &&
38892 (
38893 input.witness === false ||
38894 (input.witness === true && input.value !== undefined)
38895 )
38896 }
38897
38898 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38899 // TODO: remove keyPair.network matching in 4.0.0
38900 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38901 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38902 hashType = hashType || Transaction.SIGHASH_ALL
38903
38904 var input = this.inputs[vin]
38905
38906 // if redeemScript was previously provided, enforce consistency
38907 if (input.redeemScript !== undefined &&
38908 redeemScript &&
38909 !input.redeemScript.equals(redeemScript)) {
38910 throw new Error('Inconsistent redeemScript')
38911 }
38912
38913 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38914 if (!canSign(input)) {
38915 if (witnessValue !== undefined) {
38916 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38917 typeforce(types.Satoshi, witnessValue)
38918 input.value = witnessValue
38919 }
38920
38921 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38922 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38923 }
38924
38925 // ready to sign
38926 var signatureHash
38927 if (input.witness) {
38928 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38929 } else {
38930 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38931 }
38932
38933 // enforce in order signing of public keys
38934 var signed = input.pubKeys.some(function (pubKey, i) {
38935 if (!kpPubKey.equals(pubKey)) return false
38936 if (input.signatures[i]) throw new Error('Signature already exists')
38937 if (kpPubKey.length !== 33 &&
38938 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38939
38940 var signature = keyPair.sign(signatureHash)
38941 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38942
38943 input.signatures[i] = signature.toScriptSignature(hashType)
38944 return true
38945 })
38946
38947 if (!signed) throw new Error('Key pair cannot sign for this input')
38948 }
38949
38950 function signatureHashType (buffer) {
38951 return buffer.readUInt8(buffer.length - 1)
38952 }
38953
38954 TransactionBuilder.prototype.__canModifyInputs = function () {
38955 return this.inputs.every(function (input) {
38956 // any signatures?
38957 if (input.signatures === undefined) return true
38958
38959 return input.signatures.every(function (signature) {
38960 if (!signature) return true
38961 var hashType = signatureHashType(signature)
38962
38963 // if SIGHASH_ANYONECANPAY is set, signatures would not
38964 // be invalidated by more inputs
38965 return hashType & Transaction.SIGHASH_ANYONECANPAY
38966 })
38967 })
38968 }
38969
38970 TransactionBuilder.prototype.__canModifyOutputs = function () {
38971 var nInputs = this.tx.ins.length
38972 var nOutputs = this.tx.outs.length
38973
38974 return this.inputs.every(function (input) {
38975 if (input.signatures === undefined) return true
38976
38977 return input.signatures.every(function (signature) {
38978 if (!signature) return true
38979 var hashType = signatureHashType(signature)
38980
38981 var hashTypeMod = hashType & 0x1f
38982 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38983 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38984 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38985 // some signatures would be invalidated by the addition
38986 // of more outputs
38987 return nInputs <= nOutputs
38988 }
38989 })
38990 })
38991 }
38992
38993 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38994 // not all inputs will have .value defined
38995 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38996
38997 // but all outputs do, and if we have any input value
38998 // we can immediately determine if the outputs are too small
38999 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
39000 var fee = incoming - outgoing
39001 var feeRate = fee / bytes
39002
39003 return feeRate > this.maximumFeeRate
39004 }
39005
39006 module.exports = TransactionBuilder
39007
39008 },{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],80:[function(require,module,exports){
39009 var typeforce = require('typeforce')
39010
39011 var UINT31_MAX = Math.pow(2, 31) - 1
39012 function UInt31 (value) {
39013 return typeforce.UInt32(value) && value <= UINT31_MAX
39014 }
39015
39016 function BIP32Path (value) {
39017 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
39018 }
39019 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
39020
39021 var SATOSHI_MAX = 21 * 1e14
39022 function Satoshi (value) {
39023 return typeforce.UInt53(value) && value <= SATOSHI_MAX
39024 }
39025
39026 // external dependent types
39027 var BigInt = typeforce.quacksLike('BigInteger')
39028 var ECPoint = typeforce.quacksLike('Point')
39029
39030 // exposed, external API
39031 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
39032 var Network = typeforce.compile({
39033 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
39034 bip32: {
39035 public: typeforce.UInt32,
39036 private: typeforce.UInt32
39037 },
39038 pubKeyHash: typeforce.oneOf(typeforce.UInt8, typeforce.UInt16),
39039 scriptHash: typeforce.oneOf(typeforce.UInt8, typeforce.UInt16),
39040 wif: typeforce.UInt8
39041 })
39042
39043 // extend typeforce types with ours
39044 var types = {
39045 BigInt: BigInt,
39046 BIP32Path: BIP32Path,
39047 Buffer256bit: typeforce.BufferN(32),
39048 ECPoint: ECPoint,
39049 ECSignature: ECSignature,
39050 Hash160bit: typeforce.BufferN(20),
39051 Hash256bit: typeforce.BufferN(32),
39052 Network: Network,
39053 Satoshi: Satoshi,
39054 UInt31: UInt31
39055 }
39056
39057 for (var typeName in typeforce) {
39058 types[typeName] = typeforce[typeName]
39059 }
39060
39061 module.exports = types
39062
39063 },{"typeforce":112}],81:[function(require,module,exports){
39064 var basex = require('base-x')
39065 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
39066
39067 module.exports = basex(ALPHABET)
39068
39069 },{"base-x":35}],82:[function(require,module,exports){
39070 'use strict'
39071
39072 var base58 = require('bs58')
39073 var Buffer = require('safe-buffer').Buffer
39074
39075 module.exports = function (checksumFn) {
39076 // Encode a buffer as a base58-check encoded string
39077 function encode (payload) {
39078 var checksum = checksumFn(payload)
39079
39080 return base58.encode(Buffer.concat([
39081 payload,
39082 checksum
39083 ], payload.length + 4))
39084 }
39085
39086 function decodeRaw (buffer) {
39087 var payload = buffer.slice(0, -4)
39088 var checksum = buffer.slice(-4)
39089 var newChecksum = checksumFn(payload)
39090
39091 if (checksum[0] ^ newChecksum[0] |
39092 checksum[1] ^ newChecksum[1] |
39093 checksum[2] ^ newChecksum[2] |
39094 checksum[3] ^ newChecksum[3]) return
39095
39096 return payload
39097 }
39098
39099 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
39100 function decodeUnsafe (string) {
39101 var buffer = base58.decodeUnsafe(string)
39102 if (!buffer) return
39103
39104 return decodeRaw(buffer)
39105 }
39106
39107 function decode (string) {
39108 var buffer = base58.decode(string)
39109 var payload = decodeRaw(buffer, checksumFn)
39110 if (!payload) throw new Error('Invalid checksum')
39111 return payload
39112 }
39113
39114 return {
39115 encode: encode,
39116 decode: decode,
39117 decodeUnsafe: decodeUnsafe
39118 }
39119 }
39120
39121 },{"bs58":81,"safe-buffer":101}],83:[function(require,module,exports){
39122 'use strict'
39123
39124 var createHash = require('create-hash')
39125 var bs58checkBase = require('./base')
39126
39127 // SHA256(SHA256(buffer))
39128 function sha256x2 (buffer) {
39129 var tmp = createHash('sha256').update(buffer).digest()
39130 return createHash('sha256').update(tmp).digest()
39131 }
39132
39133 module.exports = bs58checkBase(sha256x2)
39134
39135 },{"./base":82,"create-hash":85}],84:[function(require,module,exports){
39136 var Buffer = require('safe-buffer').Buffer
39137 var Transform = require('stream').Transform
39138 var StringDecoder = require('string_decoder').StringDecoder
39139 var inherits = require('inherits')
39140
39141 function CipherBase (hashMode) {
39142 Transform.call(this)
39143 this.hashMode = typeof hashMode === 'string'
39144 if (this.hashMode) {
39145 this[hashMode] = this._finalOrDigest
39146 } else {
39147 this.final = this._finalOrDigest
39148 }
39149 if (this._final) {
39150 this.__final = this._final
39151 this._final = null
39152 }
39153 this._decoder = null
39154 this._encoding = null
39155 }
39156 inherits(CipherBase, Transform)
39157
39158 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
39159 if (typeof data === 'string') {
39160 data = Buffer.from(data, inputEnc)
39161 }
39162
39163 var outData = this._update(data)
39164 if (this.hashMode) return this
39165
39166 if (outputEnc) {
39167 outData = this._toString(outData, outputEnc)
39168 }
39169
39170 return outData
39171 }
39172
39173 CipherBase.prototype.setAutoPadding = function () {}
39174 CipherBase.prototype.getAuthTag = function () {
39175 throw new Error('trying to get auth tag in unsupported state')
39176 }
39177
39178 CipherBase.prototype.setAuthTag = function () {
39179 throw new Error('trying to set auth tag in unsupported state')
39180 }
39181
39182 CipherBase.prototype.setAAD = function () {
39183 throw new Error('trying to set aad in unsupported state')
39184 }
39185
39186 CipherBase.prototype._transform = function (data, _, next) {
39187 var err
39188 try {
39189 if (this.hashMode) {
39190 this._update(data)
39191 } else {
39192 this.push(this._update(data))
39193 }
39194 } catch (e) {
39195 err = e
39196 } finally {
39197 next(err)
39198 }
39199 }
39200 CipherBase.prototype._flush = function (done) {
39201 var err
39202 try {
39203 this.push(this.__final())
39204 } catch (e) {
39205 err = e
39206 }
39207
39208 done(err)
39209 }
39210 CipherBase.prototype._finalOrDigest = function (outputEnc) {
39211 var outData = this.__final() || Buffer.alloc(0)
39212 if (outputEnc) {
39213 outData = this._toString(outData, outputEnc, true)
39214 }
39215 return outData
39216 }
39217
39218 CipherBase.prototype._toString = function (value, enc, fin) {
39219 if (!this._decoder) {
39220 this._decoder = new StringDecoder(enc)
39221 this._encoding = enc
39222 }
39223
39224 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
39225
39226 var out = this._decoder.write(value)
39227 if (fin) {
39228 out += this._decoder.end()
39229 }
39230
39231 return out
39232 }
39233
39234 module.exports = CipherBase
39235
39236 },{"inherits":96,"safe-buffer":101,"stream":28,"string_decoder":29}],85:[function(require,module,exports){
39237 (function (Buffer){
39238 'use strict'
39239 var inherits = require('inherits')
39240 var md5 = require('./md5')
39241 var RIPEMD160 = require('ripemd160')
39242 var sha = require('sha.js')
39243
39244 var Base = require('cipher-base')
39245
39246 function HashNoConstructor (hash) {
39247 Base.call(this, 'digest')
39248
39249 this._hash = hash
39250 this.buffers = []
39251 }
39252
39253 inherits(HashNoConstructor, Base)
39254
39255 HashNoConstructor.prototype._update = function (data) {
39256 this.buffers.push(data)
39257 }
39258
39259 HashNoConstructor.prototype._final = function () {
39260 var buf = Buffer.concat(this.buffers)
39261 var r = this._hash(buf)
39262 this.buffers = null
39263
39264 return r
39265 }
39266
39267 function Hash (hash) {
39268 Base.call(this, 'digest')
39269
39270 this._hash = hash
39271 }
39272
39273 inherits(Hash, Base)
39274
39275 Hash.prototype._update = function (data) {
39276 this._hash.update(data)
39277 }
39278
39279 Hash.prototype._final = function () {
39280 return this._hash.digest()
39281 }
39282
39283 module.exports = function createHash (alg) {
39284 alg = alg.toLowerCase()
39285 if (alg === 'md5') return new HashNoConstructor(md5)
39286 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
39287
39288 return new Hash(sha(alg))
39289 }
39290
39291 }).call(this,require("buffer").Buffer)
39292 },{"./md5":87,"buffer":5,"cipher-base":84,"inherits":96,"ripemd160":100,"sha.js":103}],86:[function(require,module,exports){
39293 (function (Buffer){
39294 'use strict'
39295 var intSize = 4
39296 var zeroBuffer = new Buffer(intSize)
39297 zeroBuffer.fill(0)
39298
39299 var charSize = 8
39300 var hashSize = 16
39301
39302 function toArray (buf) {
39303 if ((buf.length % intSize) !== 0) {
39304 var len = buf.length + (intSize - (buf.length % intSize))
39305 buf = Buffer.concat([buf, zeroBuffer], len)
39306 }
39307
39308 var arr = new Array(buf.length >>> 2)
39309 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
39310 arr[j] = buf.readInt32LE(i)
39311 }
39312
39313 return arr
39314 }
39315
39316 module.exports = function hash (buf, fn) {
39317 var arr = fn(toArray(buf), buf.length * charSize)
39318 buf = new Buffer(hashSize)
39319 for (var i = 0; i < arr.length; i++) {
39320 buf.writeInt32LE(arr[i], i << 2, true)
39321 }
39322 return buf
39323 }
39324
39325 }).call(this,require("buffer").Buffer)
39326 },{"buffer":5}],87:[function(require,module,exports){
39327 'use strict'
39328 /*
39329 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
39330 * Digest Algorithm, as defined in RFC 1321.
39331 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
39332 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
39333 * Distributed under the BSD License
39334 * See http://pajhome.org.uk/crypt/md5 for more info.
39335 */
39336
39337 var makeHash = require('./make-hash')
39338
39339 /*
39340 * Calculate the MD5 of an array of little-endian words, and a bit length
39341 */
39342 function core_md5 (x, len) {
39343 /* append padding */
39344 x[len >> 5] |= 0x80 << ((len) % 32)
39345 x[(((len + 64) >>> 9) << 4) + 14] = len
39346
39347 var a = 1732584193
39348 var b = -271733879
39349 var c = -1732584194
39350 var d = 271733878
39351
39352 for (var i = 0; i < x.length; i += 16) {
39353 var olda = a
39354 var oldb = b
39355 var oldc = c
39356 var oldd = d
39357
39358 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
39359 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
39360 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
39361 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
39362 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
39363 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
39364 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
39365 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
39366 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
39367 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
39368 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
39369 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
39370 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
39371 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
39372 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
39373 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
39374
39375 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
39376 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
39377 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
39378 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
39379 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
39380 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
39381 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
39382 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
39383 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
39384 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
39385 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
39386 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
39387 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
39388 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
39389 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
39390 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
39391
39392 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
39393 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
39394 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
39395 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
39396 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
39397 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
39398 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
39399 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
39400 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
39401 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
39402 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
39403 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
39404 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
39405 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
39406 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
39407 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
39408
39409 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
39410 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
39411 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
39412 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
39413 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
39414 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
39415 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
39416 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
39417 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
39418 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
39419 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
39420 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
39421 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
39422 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
39423 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
39424 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
39425
39426 a = safe_add(a, olda)
39427 b = safe_add(b, oldb)
39428 c = safe_add(c, oldc)
39429 d = safe_add(d, oldd)
39430 }
39431
39432 return [a, b, c, d]
39433 }
39434
39435 /*
39436 * These functions implement the four basic operations the algorithm uses.
39437 */
39438 function md5_cmn (q, a, b, x, s, t) {
39439 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
39440 }
39441
39442 function md5_ff (a, b, c, d, x, s, t) {
39443 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
39444 }
39445
39446 function md5_gg (a, b, c, d, x, s, t) {
39447 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
39448 }
39449
39450 function md5_hh (a, b, c, d, x, s, t) {
39451 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
39452 }
39453
39454 function md5_ii (a, b, c, d, x, s, t) {
39455 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
39456 }
39457
39458 /*
39459 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
39460 * to work around bugs in some JS interpreters.
39461 */
39462 function safe_add (x, y) {
39463 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
39464 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
39465 return (msw << 16) | (lsw & 0xFFFF)
39466 }
39467
39468 /*
39469 * Bitwise rotate a 32-bit number to the left.
39470 */
39471 function bit_rol (num, cnt) {
39472 return (num << cnt) | (num >>> (32 - cnt))
39473 }
39474
39475 module.exports = function md5 (buf) {
39476 return makeHash(buf, core_md5)
39477 }
39478
39479 },{"./make-hash":86}],88:[function(require,module,exports){
39480 'use strict'
39481 var inherits = require('inherits')
39482 var Legacy = require('./legacy')
39483 var Base = require('cipher-base')
39484 var Buffer = require('safe-buffer').Buffer
39485 var md5 = require('create-hash/md5')
39486 var RIPEMD160 = require('ripemd160')
39487
39488 var sha = require('sha.js')
39489
39490 var ZEROS = Buffer.alloc(128)
39491
39492 function Hmac (alg, key) {
39493 Base.call(this, 'digest')
39494 if (typeof key === 'string') {
39495 key = Buffer.from(key)
39496 }
39497
39498 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
39499
39500 this._alg = alg
39501 this._key = key
39502 if (key.length > blocksize) {
39503 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39504 key = hash.update(key).digest()
39505 } else if (key.length < blocksize) {
39506 key = Buffer.concat([key, ZEROS], blocksize)
39507 }
39508
39509 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39510 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39511
39512 for (var i = 0; i < blocksize; i++) {
39513 ipad[i] = key[i] ^ 0x36
39514 opad[i] = key[i] ^ 0x5C
39515 }
39516 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39517 this._hash.update(ipad)
39518 }
39519
39520 inherits(Hmac, Base)
39521
39522 Hmac.prototype._update = function (data) {
39523 this._hash.update(data)
39524 }
39525
39526 Hmac.prototype._final = function () {
39527 var h = this._hash.digest()
39528 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
39529 return hash.update(this._opad).update(h).digest()
39530 }
39531
39532 module.exports = function createHmac (alg, key) {
39533 alg = alg.toLowerCase()
39534 if (alg === 'rmd160' || alg === 'ripemd160') {
39535 return new Hmac('rmd160', key)
39536 }
39537 if (alg === 'md5') {
39538 return new Legacy(md5, key)
39539 }
39540 return new Hmac(alg, key)
39541 }
39542
39543 },{"./legacy":89,"cipher-base":84,"create-hash/md5":87,"inherits":96,"ripemd160":100,"safe-buffer":101,"sha.js":103}],89:[function(require,module,exports){
39544 'use strict'
39545 var inherits = require('inherits')
39546 var Buffer = require('safe-buffer').Buffer
39547
39548 var Base = require('cipher-base')
39549
39550 var ZEROS = Buffer.alloc(128)
39551 var blocksize = 64
39552
39553 function Hmac (alg, key) {
39554 Base.call(this, 'digest')
39555 if (typeof key === 'string') {
39556 key = Buffer.from(key)
39557 }
39558
39559 this._alg = alg
39560 this._key = key
39561
39562 if (key.length > blocksize) {
39563 key = alg(key)
39564 } else if (key.length < blocksize) {
39565 key = Buffer.concat([key, ZEROS], blocksize)
39566 }
39567
39568 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39569 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39570
39571 for (var i = 0; i < blocksize; i++) {
39572 ipad[i] = key[i] ^ 0x36
39573 opad[i] = key[i] ^ 0x5C
39574 }
39575
39576 this._hash = [ipad]
39577 }
39578
39579 inherits(Hmac, Base)
39580
39581 Hmac.prototype._update = function (data) {
39582 this._hash.push(data)
39583 }
39584
39585 Hmac.prototype._final = function () {
39586 var h = this._alg(Buffer.concat(this._hash))
39587 return this._alg(Buffer.concat([this._opad, h]))
39588 }
39589 module.exports = Hmac
39590
39591 },{"cipher-base":84,"inherits":96,"safe-buffer":101}],90:[function(require,module,exports){
39592 var assert = require('assert')
39593 var BigInteger = require('bigi')
39594
39595 var Point = require('./point')
39596
39597 function Curve (p, a, b, Gx, Gy, n, h) {
39598 this.p = p
39599 this.a = a
39600 this.b = b
39601 this.G = Point.fromAffine(this, Gx, Gy)
39602 this.n = n
39603 this.h = h
39604
39605 this.infinity = new Point(this, null, null, BigInteger.ZERO)
39606
39607 // result caching
39608 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
39609
39610 // determine size of p in bytes
39611 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
39612 }
39613
39614 Curve.prototype.pointFromX = function (isOdd, x) {
39615 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
39616 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
39617
39618 var y = beta
39619 if (beta.isEven() ^ !isOdd) {
39620 y = this.p.subtract(y) // -y % p
39621 }
39622
39623 return Point.fromAffine(this, x, y)
39624 }
39625
39626 Curve.prototype.isInfinity = function (Q) {
39627 if (Q === this.infinity) return true
39628
39629 return Q.z.signum() === 0 && Q.y.signum() !== 0
39630 }
39631
39632 Curve.prototype.isOnCurve = function (Q) {
39633 if (this.isInfinity(Q)) return true
39634
39635 var x = Q.affineX
39636 var y = Q.affineY
39637 var a = this.a
39638 var b = this.b
39639 var p = this.p
39640
39641 // Check that xQ and yQ are integers in the interval [0, p - 1]
39642 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
39643 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
39644
39645 // and check that y^2 = x^3 + ax + b (mod p)
39646 var lhs = y.square().mod(p)
39647 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
39648 return lhs.equals(rhs)
39649 }
39650
39651 /**
39652 * Validate an elliptic curve point.
39653 *
39654 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
39655 */
39656 Curve.prototype.validate = function (Q) {
39657 // Check Q != O
39658 assert(!this.isInfinity(Q), 'Point is at infinity')
39659 assert(this.isOnCurve(Q), 'Point is not on the curve')
39660
39661 // Check nQ = O (where Q is a scalar multiple of G)
39662 var nQ = Q.multiply(this.n)
39663 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
39664
39665 return true
39666 }
39667
39668 module.exports = Curve
39669
39670 },{"./point":94,"assert":1,"bigi":39}],91:[function(require,module,exports){
39671 module.exports={
39672 "secp128r1": {
39673 "p": "fffffffdffffffffffffffffffffffff",
39674 "a": "fffffffdfffffffffffffffffffffffc",
39675 "b": "e87579c11079f43dd824993c2cee5ed3",
39676 "n": "fffffffe0000000075a30d1b9038a115",
39677 "h": "01",
39678 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
39679 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
39680 },
39681 "secp160k1": {
39682 "p": "fffffffffffffffffffffffffffffffeffffac73",
39683 "a": "00",
39684 "b": "07",
39685 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
39686 "h": "01",
39687 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
39688 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
39689 },
39690 "secp160r1": {
39691 "p": "ffffffffffffffffffffffffffffffff7fffffff",
39692 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
39693 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
39694 "n": "0100000000000000000001f4c8f927aed3ca752257",
39695 "h": "01",
39696 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
39697 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
39698 },
39699 "secp192k1": {
39700 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
39701 "a": "00",
39702 "b": "03",
39703 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
39704 "h": "01",
39705 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
39706 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
39707 },
39708 "secp192r1": {
39709 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
39710 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
39711 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
39712 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
39713 "h": "01",
39714 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
39715 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
39716 },
39717 "secp256k1": {
39718 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
39719 "a": "00",
39720 "b": "07",
39721 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
39722 "h": "01",
39723 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
39724 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
39725 },
39726 "secp256r1": {
39727 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
39728 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
39729 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
39730 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
39731 "h": "01",
39732 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
39733 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
39734 }
39735 }
39736
39737 },{}],92:[function(require,module,exports){
39738 var Point = require('./point')
39739 var Curve = require('./curve')
39740
39741 var getCurveByName = require('./names')
39742
39743 module.exports = {
39744 Curve: Curve,
39745 Point: Point,
39746 getCurveByName: getCurveByName
39747 }
39748
39749 },{"./curve":90,"./names":93,"./point":94}],93:[function(require,module,exports){
39750 var BigInteger = require('bigi')
39751
39752 var curves = require('./curves.json')
39753 var Curve = require('./curve')
39754
39755 function getCurveByName (name) {
39756 var curve = curves[name]
39757 if (!curve) return null
39758
39759 var p = new BigInteger(curve.p, 16)
39760 var a = new BigInteger(curve.a, 16)
39761 var b = new BigInteger(curve.b, 16)
39762 var n = new BigInteger(curve.n, 16)
39763 var h = new BigInteger(curve.h, 16)
39764 var Gx = new BigInteger(curve.Gx, 16)
39765 var Gy = new BigInteger(curve.Gy, 16)
39766
39767 return new Curve(p, a, b, Gx, Gy, n, h)
39768 }
39769
39770 module.exports = getCurveByName
39771
39772 },{"./curve":90,"./curves.json":91,"bigi":39}],94:[function(require,module,exports){
39773 var assert = require('assert')
39774 var Buffer = require('safe-buffer').Buffer
39775 var BigInteger = require('bigi')
39776
39777 var THREE = BigInteger.valueOf(3)
39778
39779 function Point (curve, x, y, z) {
39780 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
39781
39782 this.curve = curve
39783 this.x = x
39784 this.y = y
39785 this.z = z
39786 this._zInv = null
39787
39788 this.compressed = true
39789 }
39790
39791 Object.defineProperty(Point.prototype, 'zInv', {
39792 get: function () {
39793 if (this._zInv === null) {
39794 this._zInv = this.z.modInverse(this.curve.p)
39795 }
39796
39797 return this._zInv
39798 }
39799 })
39800
39801 Object.defineProperty(Point.prototype, 'affineX', {
39802 get: function () {
39803 return this.x.multiply(this.zInv).mod(this.curve.p)
39804 }
39805 })
39806
39807 Object.defineProperty(Point.prototype, 'affineY', {
39808 get: function () {
39809 return this.y.multiply(this.zInv).mod(this.curve.p)
39810 }
39811 })
39812
39813 Point.fromAffine = function (curve, x, y) {
39814 return new Point(curve, x, y, BigInteger.ONE)
39815 }
39816
39817 Point.prototype.equals = function (other) {
39818 if (other === this) return true
39819 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
39820 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
39821
39822 // u = Y2 * Z1 - Y1 * Z2
39823 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
39824
39825 if (u.signum() !== 0) return false
39826
39827 // v = X2 * Z1 - X1 * Z2
39828 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
39829
39830 return v.signum() === 0
39831 }
39832
39833 Point.prototype.negate = function () {
39834 var y = this.curve.p.subtract(this.y)
39835
39836 return new Point(this.curve, this.x, y, this.z)
39837 }
39838
39839 Point.prototype.add = function (b) {
39840 if (this.curve.isInfinity(this)) return b
39841 if (this.curve.isInfinity(b)) return this
39842
39843 var x1 = this.x
39844 var y1 = this.y
39845 var x2 = b.x
39846 var y2 = b.y
39847
39848 // u = Y2 * Z1 - Y1 * Z2
39849 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
39850 // v = X2 * Z1 - X1 * Z2
39851 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
39852
39853 if (v.signum() === 0) {
39854 if (u.signum() === 0) {
39855 return this.twice() // this == b, so double
39856 }
39857
39858 return this.curve.infinity // this = -b, so infinity
39859 }
39860
39861 var v2 = v.square()
39862 var v3 = v2.multiply(v)
39863 var x1v2 = x1.multiply(v2)
39864 var zu2 = u.square().multiply(this.z)
39865
39866 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
39867 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
39868 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
39869 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)
39870 // z3 = v^3 * z1 * z2
39871 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
39872
39873 return new Point(this.curve, x3, y3, z3)
39874 }
39875
39876 Point.prototype.twice = function () {
39877 if (this.curve.isInfinity(this)) return this
39878 if (this.y.signum() === 0) return this.curve.infinity
39879
39880 var x1 = this.x
39881 var y1 = this.y
39882
39883 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
39884 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
39885 var a = this.curve.a
39886
39887 // w = 3 * x1^2 + a * z1^2
39888 var w = x1.square().multiply(THREE)
39889
39890 if (a.signum() !== 0) {
39891 w = w.add(this.z.square().multiply(a))
39892 }
39893
39894 w = w.mod(this.curve.p)
39895 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
39896 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
39897 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
39898 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
39899 // z3 = 8 * (y1 * z1)^3
39900 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
39901
39902 return new Point(this.curve, x3, y3, z3)
39903 }
39904
39905 // Simple NAF (Non-Adjacent Form) multiplication algorithm
39906 // TODO: modularize the multiplication algorithm
39907 Point.prototype.multiply = function (k) {
39908 if (this.curve.isInfinity(this)) return this
39909 if (k.signum() === 0) return this.curve.infinity
39910
39911 var e = k
39912 var h = e.multiply(THREE)
39913
39914 var neg = this.negate()
39915 var R = this
39916
39917 for (var i = h.bitLength() - 2; i > 0; --i) {
39918 var hBit = h.testBit(i)
39919 var eBit = e.testBit(i)
39920
39921 R = R.twice()
39922
39923 if (hBit !== eBit) {
39924 R = R.add(hBit ? this : neg)
39925 }
39926 }
39927
39928 return R
39929 }
39930
39931 // Compute this*j + x*k (simultaneous multiplication)
39932 Point.prototype.multiplyTwo = function (j, x, k) {
39933 var i = Math.max(j.bitLength(), k.bitLength()) - 1
39934 var R = this.curve.infinity
39935 var both = this.add(x)
39936
39937 while (i >= 0) {
39938 var jBit = j.testBit(i)
39939 var kBit = k.testBit(i)
39940
39941 R = R.twice()
39942
39943 if (jBit) {
39944 if (kBit) {
39945 R = R.add(both)
39946 } else {
39947 R = R.add(this)
39948 }
39949 } else if (kBit) {
39950 R = R.add(x)
39951 }
39952 --i
39953 }
39954
39955 return R
39956 }
39957
39958 Point.prototype.getEncoded = function (compressed) {
39959 if (compressed == null) compressed = this.compressed
39960 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
39961
39962 var x = this.affineX
39963 var y = this.affineY
39964 var byteLength = this.curve.pLength
39965 var buffer
39966
39967 // 0x02/0x03 | X
39968 if (compressed) {
39969 buffer = Buffer.allocUnsafe(1 + byteLength)
39970 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
39971
39972 // 0x04 | X | Y
39973 } else {
39974 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
39975 buffer.writeUInt8(0x04, 0)
39976
39977 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
39978 }
39979
39980 x.toBuffer(byteLength).copy(buffer, 1)
39981
39982 return buffer
39983 }
39984
39985 Point.decodeFrom = function (curve, buffer) {
39986 var type = buffer.readUInt8(0)
39987 var compressed = (type !== 4)
39988
39989 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
39990 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
39991
39992 var Q
39993 if (compressed) {
39994 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
39995 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
39996
39997 var isOdd = (type === 0x03)
39998 Q = curve.pointFromX(isOdd, x)
39999 } else {
40000 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
40001
40002 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
40003 Q = Point.fromAffine(curve, x, y)
40004 }
40005
40006 Q.compressed = compressed
40007 return Q
40008 }
40009
40010 Point.prototype.toString = function () {
40011 if (this.curve.isInfinity(this)) return '(INFINITY)'
40012
40013 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
40014 }
40015
40016 module.exports = Point
40017
40018 },{"assert":1,"bigi":39,"safe-buffer":101}],95:[function(require,module,exports){
40019 (function (Buffer){
40020 'use strict'
40021 var Transform = require('stream').Transform
40022 var inherits = require('inherits')
40023
40024 function HashBase (blockSize) {
40025 Transform.call(this)
40026
40027 this._block = new Buffer(blockSize)
40028 this._blockSize = blockSize
40029 this._blockOffset = 0
40030 this._length = [0, 0, 0, 0]
40031
40032 this._finalized = false
40033 }
40034
40035 inherits(HashBase, Transform)
40036
40037 HashBase.prototype._transform = function (chunk, encoding, callback) {
40038 var error = null
40039 try {
40040 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
40041 this.update(chunk)
40042 } catch (err) {
40043 error = err
40044 }
40045
40046 callback(error)
40047 }
40048
40049 HashBase.prototype._flush = function (callback) {
40050 var error = null
40051 try {
40052 this.push(this._digest())
40053 } catch (err) {
40054 error = err
40055 }
40056
40057 callback(error)
40058 }
40059
40060 HashBase.prototype.update = function (data, encoding) {
40061 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
40062 if (this._finalized) throw new Error('Digest already called')
40063 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
40064
40065 // consume data
40066 var block = this._block
40067 var offset = 0
40068 while (this._blockOffset + data.length - offset >= this._blockSize) {
40069 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
40070 this._update()
40071 this._blockOffset = 0
40072 }
40073 while (offset < data.length) block[this._blockOffset++] = data[offset++]
40074
40075 // update length
40076 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
40077 this._length[j] += carry
40078 carry = (this._length[j] / 0x0100000000) | 0
40079 if (carry > 0) this._length[j] -= 0x0100000000 * carry
40080 }
40081
40082 return this
40083 }
40084
40085 HashBase.prototype._update = function (data) {
40086 throw new Error('_update is not implemented')
40087 }
40088
40089 HashBase.prototype.digest = function (encoding) {
40090 if (this._finalized) throw new Error('Digest already called')
40091 this._finalized = true
40092
40093 var digest = this._digest()
40094 if (encoding !== undefined) digest = digest.toString(encoding)
40095 return digest
40096 }
40097
40098 HashBase.prototype._digest = function () {
40099 throw new Error('_digest is not implemented')
40100 }
40101
40102 module.exports = HashBase
40103
40104 }).call(this,require("buffer").Buffer)
40105 },{"buffer":5,"inherits":96,"stream":28}],96:[function(require,module,exports){
40106 arguments[4][9][0].apply(exports,arguments)
40107 },{"dup":9}],97:[function(require,module,exports){
40108 (function (Buffer){
40109 // constant-space merkle root calculation algorithm
40110 module.exports = function fastRoot (values, digestFn) {
40111 if (!Array.isArray(values)) throw TypeError('Expected values Array')
40112 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
40113
40114 var length = values.length
40115 var results = values.concat()
40116
40117 while (length > 1) {
40118 var j = 0
40119
40120 for (var i = 0; i < length; i += 2, ++j) {
40121 var left = results[i]
40122 var right = i + 1 === length ? left : results[i + 1]
40123 var data = Buffer.concat([left, right])
40124
40125 results[j] = digestFn(data)
40126 }
40127
40128 length = j
40129 }
40130
40131 return results[0]
40132 }
40133
40134 }).call(this,require("buffer").Buffer)
40135 },{"buffer":5}],98:[function(require,module,exports){
40136 var OPS = require('bitcoin-ops')
40137
40138 function encodingLength (i) {
40139 return i < OPS.OP_PUSHDATA1 ? 1
40140 : i <= 0xff ? 2
40141 : i <= 0xffff ? 3
40142 : 5
40143 }
40144
40145 function encode (buffer, number, offset) {
40146 var size = encodingLength(number)
40147
40148 // ~6 bit
40149 if (size === 1) {
40150 buffer.writeUInt8(number, offset)
40151
40152 // 8 bit
40153 } else if (size === 2) {
40154 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
40155 buffer.writeUInt8(number, offset + 1)
40156
40157 // 16 bit
40158 } else if (size === 3) {
40159 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
40160 buffer.writeUInt16LE(number, offset + 1)
40161
40162 // 32 bit
40163 } else {
40164 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
40165 buffer.writeUInt32LE(number, offset + 1)
40166 }
40167
40168 return size
40169 }
40170
40171 function decode (buffer, offset) {
40172 var opcode = buffer.readUInt8(offset)
40173 var number, size
40174
40175 // ~6 bit
40176 if (opcode < OPS.OP_PUSHDATA1) {
40177 number = opcode
40178 size = 1
40179
40180 // 8 bit
40181 } else if (opcode === OPS.OP_PUSHDATA1) {
40182 if (offset + 2 > buffer.length) return null
40183 number = buffer.readUInt8(offset + 1)
40184 size = 2
40185
40186 // 16 bit
40187 } else if (opcode === OPS.OP_PUSHDATA2) {
40188 if (offset + 3 > buffer.length) return null
40189 number = buffer.readUInt16LE(offset + 1)
40190 size = 3
40191
40192 // 32 bit
40193 } else {
40194 if (offset + 5 > buffer.length) return null
40195 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
40196
40197 number = buffer.readUInt32LE(offset + 1)
40198 size = 5
40199 }
40200
40201 return {
40202 opcode: opcode,
40203 number: number,
40204 size: size
40205 }
40206 }
40207
40208 module.exports = {
40209 encodingLength: encodingLength,
40210 encode: encode,
40211 decode: decode
40212 }
40213
40214 },{"bitcoin-ops":42}],99:[function(require,module,exports){
40215 (function (process,global){
40216 'use strict'
40217
40218 function oldBrowser () {
40219 throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
40220 }
40221
40222 var Buffer = require('safe-buffer').Buffer
40223 var crypto = global.crypto || global.msCrypto
40224
40225 if (crypto && crypto.getRandomValues) {
40226 module.exports = randomBytes
40227 } else {
40228 module.exports = oldBrowser
40229 }
40230
40231 function randomBytes (size, cb) {
40232 // phantomjs needs to throw
40233 if (size > 65536) throw new Error('requested too many random bytes')
40234 // in case browserify isn't using the Uint8Array version
40235 var rawBytes = new global.Uint8Array(size)
40236
40237 // This will not work in older browsers.
40238 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
40239 if (size > 0) { // getRandomValues fails on IE if size == 0
40240 crypto.getRandomValues(rawBytes)
40241 }
40242
40243 // XXX: phantomjs doesn't like a buffer being passed here
40244 var bytes = Buffer.from(rawBytes.buffer)
40245
40246 if (typeof cb === 'function') {
40247 return process.nextTick(function () {
40248 cb(null, bytes)
40249 })
40250 }
40251
40252 return bytes
40253 }
40254
40255 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
40256 },{"_process":13,"safe-buffer":101}],100:[function(require,module,exports){
40257 (function (Buffer){
40258 'use strict'
40259 var inherits = require('inherits')
40260 var HashBase = require('hash-base')
40261
40262 function RIPEMD160 () {
40263 HashBase.call(this, 64)
40264
40265 // state
40266 this._a = 0x67452301
40267 this._b = 0xefcdab89
40268 this._c = 0x98badcfe
40269 this._d = 0x10325476
40270 this._e = 0xc3d2e1f0
40271 }
40272
40273 inherits(RIPEMD160, HashBase)
40274
40275 RIPEMD160.prototype._update = function () {
40276 var m = new Array(16)
40277 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
40278
40279 var al = this._a
40280 var bl = this._b
40281 var cl = this._c
40282 var dl = this._d
40283 var el = this._e
40284
40285 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
40286 // K = 0x00000000
40287 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
40288 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
40289 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
40290 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
40291 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
40292 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
40293 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
40294 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
40295 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
40296 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
40297 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
40298 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
40299 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
40300 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
40301 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
40302 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
40303 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
40304
40305 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
40306 // K = 0x5a827999
40307 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
40308 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
40309 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
40310 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
40311 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
40312 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
40313 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
40314 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
40315 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
40316 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
40317 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
40318 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
40319 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
40320 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
40321 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
40322 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
40323 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
40324
40325 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
40326 // K = 0x6ed9eba1
40327 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
40328 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
40329 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
40330 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
40331 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
40332 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
40333 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
40334 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
40335 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
40336 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
40337 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
40338 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
40339 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
40340 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
40341 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
40342 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
40343 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
40344
40345 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
40346 // K = 0x8f1bbcdc
40347 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
40348 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
40349 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
40350 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
40351 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
40352 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
40353 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
40354 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
40355 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40356 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
40357 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
40358 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
40359 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
40360 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40361 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
40362 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
40363 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
40364
40365 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
40366 // K = 0xa953fd4e
40367 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
40368 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
40369 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
40370 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
40371 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
40372 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
40373 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
40374 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
40375 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
40376 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
40377 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
40378 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
40379 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
40380 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
40381 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
40382 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
40383 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
40384
40385 var ar = this._a
40386 var br = this._b
40387 var cr = this._c
40388 var dr = this._d
40389 var er = this._e
40390
40391 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
40392 // K' = 0x50a28be6
40393 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
40394 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
40395 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
40396 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
40397 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
40398 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
40399 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
40400 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
40401 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
40402 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
40403 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
40404 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
40405 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
40406 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
40407 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
40408 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
40409 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
40410
40411 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
40412 // K' = 0x5c4dd124
40413 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
40414 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
40415 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
40416 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
40417 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
40418 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
40419 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
40420 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
40421 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
40422 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
40423 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
40424 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
40425 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
40426 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
40427 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
40428 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
40429 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
40430
40431 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
40432 // K' = 0x6d703ef3
40433 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
40434 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
40435 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
40436 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
40437 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
40438 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
40439 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
40440 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
40441 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
40442 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
40443 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
40444 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
40445 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
40446 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
40447 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
40448 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
40449 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
40450
40451 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
40452 // K' = 0x7a6d76e9
40453 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
40454 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
40455 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
40456 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
40457 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
40458 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
40459 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
40460 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
40461 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
40462 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
40463 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
40464 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
40465 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
40466 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
40467 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
40468 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
40469 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
40470
40471 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
40472 // K' = 0x00000000
40473 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
40474 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
40475 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
40476 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
40477 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
40478 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
40479 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
40480 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
40481 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
40482 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
40483 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
40484 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
40485 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
40486 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
40487 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
40488 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
40489 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
40490
40491 // change state
40492 var t = (this._b + cl + dr) | 0
40493 this._b = (this._c + dl + er) | 0
40494 this._c = (this._d + el + ar) | 0
40495 this._d = (this._e + al + br) | 0
40496 this._e = (this._a + bl + cr) | 0
40497 this._a = t
40498 }
40499
40500 RIPEMD160.prototype._digest = function () {
40501 // create padding and handle blocks
40502 this._block[this._blockOffset++] = 0x80
40503 if (this._blockOffset > 56) {
40504 this._block.fill(0, this._blockOffset, 64)
40505 this._update()
40506 this._blockOffset = 0
40507 }
40508
40509 this._block.fill(0, this._blockOffset, 56)
40510 this._block.writeUInt32LE(this._length[0], 56)
40511 this._block.writeUInt32LE(this._length[1], 60)
40512 this._update()
40513
40514 // produce result
40515 var buffer = new Buffer(20)
40516 buffer.writeInt32LE(this._a, 0)
40517 buffer.writeInt32LE(this._b, 4)
40518 buffer.writeInt32LE(this._c, 8)
40519 buffer.writeInt32LE(this._d, 12)
40520 buffer.writeInt32LE(this._e, 16)
40521 return buffer
40522 }
40523
40524 function rotl (x, n) {
40525 return (x << n) | (x >>> (32 - n))
40526 }
40527
40528 function fn1 (a, b, c, d, e, m, k, s) {
40529 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
40530 }
40531
40532 function fn2 (a, b, c, d, e, m, k, s) {
40533 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
40534 }
40535
40536 function fn3 (a, b, c, d, e, m, k, s) {
40537 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
40538 }
40539
40540 function fn4 (a, b, c, d, e, m, k, s) {
40541 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
40542 }
40543
40544 function fn5 (a, b, c, d, e, m, k, s) {
40545 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
40546 }
40547
40548 module.exports = RIPEMD160
40549
40550 }).call(this,require("buffer").Buffer)
40551 },{"buffer":5,"hash-base":95,"inherits":96}],101:[function(require,module,exports){
40552 /* eslint-disable node/no-deprecated-api */
40553 var buffer = require('buffer')
40554 var Buffer = buffer.Buffer
40555
40556 // alternative to using Object.keys for old browsers
40557 function copyProps (src, dst) {
40558 for (var key in src) {
40559 dst[key] = src[key]
40560 }
40561 }
40562 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
40563 module.exports = buffer
40564 } else {
40565 // Copy properties from require('buffer')
40566 copyProps(buffer, exports)
40567 exports.Buffer = SafeBuffer
40568 }
40569
40570 function SafeBuffer (arg, encodingOrOffset, length) {
40571 return Buffer(arg, encodingOrOffset, length)
40572 }
40573
40574 // Copy static methods from Buffer
40575 copyProps(Buffer, SafeBuffer)
40576
40577 SafeBuffer.from = function (arg, encodingOrOffset, length) {
40578 if (typeof arg === 'number') {
40579 throw new TypeError('Argument must not be a number')
40580 }
40581 return Buffer(arg, encodingOrOffset, length)
40582 }
40583
40584 SafeBuffer.alloc = function (size, fill, encoding) {
40585 if (typeof size !== 'number') {
40586 throw new TypeError('Argument must be a number')
40587 }
40588 var buf = Buffer(size)
40589 if (fill !== undefined) {
40590 if (typeof encoding === 'string') {
40591 buf.fill(fill, encoding)
40592 } else {
40593 buf.fill(fill)
40594 }
40595 } else {
40596 buf.fill(0)
40597 }
40598 return buf
40599 }
40600
40601 SafeBuffer.allocUnsafe = function (size) {
40602 if (typeof size !== 'number') {
40603 throw new TypeError('Argument must be a number')
40604 }
40605 return Buffer(size)
40606 }
40607
40608 SafeBuffer.allocUnsafeSlow = function (size) {
40609 if (typeof size !== 'number') {
40610 throw new TypeError('Argument must be a number')
40611 }
40612 return buffer.SlowBuffer(size)
40613 }
40614
40615 },{"buffer":5}],102:[function(require,module,exports){
40616 var Buffer = require('safe-buffer').Buffer
40617
40618 // prototype class for hash functions
40619 function Hash (blockSize, finalSize) {
40620 this._block = Buffer.alloc(blockSize)
40621 this._finalSize = finalSize
40622 this._blockSize = blockSize
40623 this._len = 0
40624 }
40625
40626 Hash.prototype.update = function (data, enc) {
40627 if (typeof data === 'string') {
40628 enc = enc || 'utf8'
40629 data = Buffer.from(data, enc)
40630 }
40631
40632 var block = this._block
40633 var blockSize = this._blockSize
40634 var length = data.length
40635 var accum = this._len
40636
40637 for (var offset = 0; offset < length;) {
40638 var assigned = accum % blockSize
40639 var remainder = Math.min(length - offset, blockSize - assigned)
40640
40641 for (var i = 0; i < remainder; i++) {
40642 block[assigned + i] = data[offset + i]
40643 }
40644
40645 accum += remainder
40646 offset += remainder
40647
40648 if ((accum % blockSize) === 0) {
40649 this._update(block)
40650 }
40651 }
40652
40653 this._len += length
40654 return this
40655 }
40656
40657 Hash.prototype.digest = function (enc) {
40658 var rem = this._len % this._blockSize
40659
40660 this._block[rem] = 0x80
40661
40662 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
40663 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
40664 this._block.fill(0, rem + 1)
40665
40666 if (rem >= this._finalSize) {
40667 this._update(this._block)
40668 this._block.fill(0)
40669 }
40670
40671 var bits = this._len * 8
40672
40673 // uint32
40674 if (bits <= 0xffffffff) {
40675 this._block.writeUInt32BE(bits, this._blockSize - 4)
40676
40677 // uint64
40678 } else {
40679 var lowBits = (bits & 0xffffffff) >>> 0
40680 var highBits = (bits - lowBits) / 0x100000000
40681
40682 this._block.writeUInt32BE(highBits, this._blockSize - 8)
40683 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
40684 }
40685
40686 this._update(this._block)
40687 var hash = this._hash()
40688
40689 return enc ? hash.toString(enc) : hash
40690 }
40691
40692 Hash.prototype._update = function () {
40693 throw new Error('_update must be implemented by subclass')
40694 }
40695
40696 module.exports = Hash
40697
40698 },{"safe-buffer":101}],103:[function(require,module,exports){
40699 var exports = module.exports = function SHA (algorithm) {
40700 algorithm = algorithm.toLowerCase()
40701
40702 var Algorithm = exports[algorithm]
40703 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40704
40705 return new Algorithm()
40706 }
40707
40708 exports.sha = require('./sha')
40709 exports.sha1 = require('./sha1')
40710 exports.sha224 = require('./sha224')
40711 exports.sha256 = require('./sha256')
40712 exports.sha384 = require('./sha384')
40713 exports.sha512 = require('./sha512')
40714
40715 },{"./sha":104,"./sha1":105,"./sha224":106,"./sha256":107,"./sha384":108,"./sha512":109}],104:[function(require,module,exports){
40716 /*
40717 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40718 * in FIPS PUB 180-1
40719 * This source code is derived from sha1.js of the same repository.
40720 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40721 * operation was added.
40722 */
40723
40724 var inherits = require('inherits')
40725 var Hash = require('./hash')
40726 var Buffer = require('safe-buffer').Buffer
40727
40728 var K = [
40729 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40730 ]
40731
40732 var W = new Array(80)
40733
40734 function Sha () {
40735 this.init()
40736 this._w = W
40737
40738 Hash.call(this, 64, 56)
40739 }
40740
40741 inherits(Sha, Hash)
40742
40743 Sha.prototype.init = function () {
40744 this._a = 0x67452301
40745 this._b = 0xefcdab89
40746 this._c = 0x98badcfe
40747 this._d = 0x10325476
40748 this._e = 0xc3d2e1f0
40749
40750 return this
40751 }
40752
40753 function rotl5 (num) {
40754 return (num << 5) | (num >>> 27)
40755 }
40756
40757 function rotl30 (num) {
40758 return (num << 30) | (num >>> 2)
40759 }
40760
40761 function ft (s, b, c, d) {
40762 if (s === 0) return (b & c) | ((~b) & d)
40763 if (s === 2) return (b & c) | (b & d) | (c & d)
40764 return b ^ c ^ d
40765 }
40766
40767 Sha.prototype._update = function (M) {
40768 var W = this._w
40769
40770 var a = this._a | 0
40771 var b = this._b | 0
40772 var c = this._c | 0
40773 var d = this._d | 0
40774 var e = this._e | 0
40775
40776 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40777 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
40778
40779 for (var j = 0; j < 80; ++j) {
40780 var s = ~~(j / 20)
40781 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40782
40783 e = d
40784 d = c
40785 c = rotl30(b)
40786 b = a
40787 a = t
40788 }
40789
40790 this._a = (a + this._a) | 0
40791 this._b = (b + this._b) | 0
40792 this._c = (c + this._c) | 0
40793 this._d = (d + this._d) | 0
40794 this._e = (e + this._e) | 0
40795 }
40796
40797 Sha.prototype._hash = function () {
40798 var H = Buffer.allocUnsafe(20)
40799
40800 H.writeInt32BE(this._a | 0, 0)
40801 H.writeInt32BE(this._b | 0, 4)
40802 H.writeInt32BE(this._c | 0, 8)
40803 H.writeInt32BE(this._d | 0, 12)
40804 H.writeInt32BE(this._e | 0, 16)
40805
40806 return H
40807 }
40808
40809 module.exports = Sha
40810
40811 },{"./hash":102,"inherits":96,"safe-buffer":101}],105:[function(require,module,exports){
40812 /*
40813 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40814 * in FIPS PUB 180-1
40815 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40816 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40817 * Distributed under the BSD License
40818 * See http://pajhome.org.uk/crypt/md5 for details.
40819 */
40820
40821 var inherits = require('inherits')
40822 var Hash = require('./hash')
40823 var Buffer = require('safe-buffer').Buffer
40824
40825 var K = [
40826 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40827 ]
40828
40829 var W = new Array(80)
40830
40831 function Sha1 () {
40832 this.init()
40833 this._w = W
40834
40835 Hash.call(this, 64, 56)
40836 }
40837
40838 inherits(Sha1, Hash)
40839
40840 Sha1.prototype.init = function () {
40841 this._a = 0x67452301
40842 this._b = 0xefcdab89
40843 this._c = 0x98badcfe
40844 this._d = 0x10325476
40845 this._e = 0xc3d2e1f0
40846
40847 return this
40848 }
40849
40850 function rotl1 (num) {
40851 return (num << 1) | (num >>> 31)
40852 }
40853
40854 function rotl5 (num) {
40855 return (num << 5) | (num >>> 27)
40856 }
40857
40858 function rotl30 (num) {
40859 return (num << 30) | (num >>> 2)
40860 }
40861
40862 function ft (s, b, c, d) {
40863 if (s === 0) return (b & c) | ((~b) & d)
40864 if (s === 2) return (b & c) | (b & d) | (c & d)
40865 return b ^ c ^ d
40866 }
40867
40868 Sha1.prototype._update = function (M) {
40869 var W = this._w
40870
40871 var a = this._a | 0
40872 var b = this._b | 0
40873 var c = this._c | 0
40874 var d = this._d | 0
40875 var e = this._e | 0
40876
40877 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40878 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40879
40880 for (var j = 0; j < 80; ++j) {
40881 var s = ~~(j / 20)
40882 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40883
40884 e = d
40885 d = c
40886 c = rotl30(b)
40887 b = a
40888 a = t
40889 }
40890
40891 this._a = (a + this._a) | 0
40892 this._b = (b + this._b) | 0
40893 this._c = (c + this._c) | 0
40894 this._d = (d + this._d) | 0
40895 this._e = (e + this._e) | 0
40896 }
40897
40898 Sha1.prototype._hash = function () {
40899 var H = Buffer.allocUnsafe(20)
40900
40901 H.writeInt32BE(this._a | 0, 0)
40902 H.writeInt32BE(this._b | 0, 4)
40903 H.writeInt32BE(this._c | 0, 8)
40904 H.writeInt32BE(this._d | 0, 12)
40905 H.writeInt32BE(this._e | 0, 16)
40906
40907 return H
40908 }
40909
40910 module.exports = Sha1
40911
40912 },{"./hash":102,"inherits":96,"safe-buffer":101}],106:[function(require,module,exports){
40913 /**
40914 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40915 * in FIPS 180-2
40916 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40917 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40918 *
40919 */
40920
40921 var inherits = require('inherits')
40922 var Sha256 = require('./sha256')
40923 var Hash = require('./hash')
40924 var Buffer = require('safe-buffer').Buffer
40925
40926 var W = new Array(64)
40927
40928 function Sha224 () {
40929 this.init()
40930
40931 this._w = W // new Array(64)
40932
40933 Hash.call(this, 64, 56)
40934 }
40935
40936 inherits(Sha224, Sha256)
40937
40938 Sha224.prototype.init = function () {
40939 this._a = 0xc1059ed8
40940 this._b = 0x367cd507
40941 this._c = 0x3070dd17
40942 this._d = 0xf70e5939
40943 this._e = 0xffc00b31
40944 this._f = 0x68581511
40945 this._g = 0x64f98fa7
40946 this._h = 0xbefa4fa4
40947
40948 return this
40949 }
40950
40951 Sha224.prototype._hash = function () {
40952 var H = Buffer.allocUnsafe(28)
40953
40954 H.writeInt32BE(this._a, 0)
40955 H.writeInt32BE(this._b, 4)
40956 H.writeInt32BE(this._c, 8)
40957 H.writeInt32BE(this._d, 12)
40958 H.writeInt32BE(this._e, 16)
40959 H.writeInt32BE(this._f, 20)
40960 H.writeInt32BE(this._g, 24)
40961
40962 return H
40963 }
40964
40965 module.exports = Sha224
40966
40967 },{"./hash":102,"./sha256":107,"inherits":96,"safe-buffer":101}],107:[function(require,module,exports){
40968 /**
40969 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40970 * in FIPS 180-2
40971 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40972 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40973 *
40974 */
40975
40976 var inherits = require('inherits')
40977 var Hash = require('./hash')
40978 var Buffer = require('safe-buffer').Buffer
40979
40980 var K = [
40981 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40982 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40983 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40984 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40985 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40986 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40987 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40988 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40989 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40990 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40991 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40992 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40993 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40994 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40995 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40996 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40997 ]
40998
40999 var W = new Array(64)
41000
41001 function Sha256 () {
41002 this.init()
41003
41004 this._w = W // new Array(64)
41005
41006 Hash.call(this, 64, 56)
41007 }
41008
41009 inherits(Sha256, Hash)
41010
41011 Sha256.prototype.init = function () {
41012 this._a = 0x6a09e667
41013 this._b = 0xbb67ae85
41014 this._c = 0x3c6ef372
41015 this._d = 0xa54ff53a
41016 this._e = 0x510e527f
41017 this._f = 0x9b05688c
41018 this._g = 0x1f83d9ab
41019 this._h = 0x5be0cd19
41020
41021 return this
41022 }
41023
41024 function ch (x, y, z) {
41025 return z ^ (x & (y ^ z))
41026 }
41027
41028 function maj (x, y, z) {
41029 return (x & y) | (z & (x | y))
41030 }
41031
41032 function sigma0 (x) {
41033 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
41034 }
41035
41036 function sigma1 (x) {
41037 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
41038 }
41039
41040 function gamma0 (x) {
41041 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
41042 }
41043
41044 function gamma1 (x) {
41045 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
41046 }
41047
41048 Sha256.prototype._update = function (M) {
41049 var W = this._w
41050
41051 var a = this._a | 0
41052 var b = this._b | 0
41053 var c = this._c | 0
41054 var d = this._d | 0
41055 var e = this._e | 0
41056 var f = this._f | 0
41057 var g = this._g | 0
41058 var h = this._h | 0
41059
41060 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
41061 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
41062
41063 for (var j = 0; j < 64; ++j) {
41064 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
41065 var T2 = (sigma0(a) + maj(a, b, c)) | 0
41066
41067 h = g
41068 g = f
41069 f = e
41070 e = (d + T1) | 0
41071 d = c
41072 c = b
41073 b = a
41074 a = (T1 + T2) | 0
41075 }
41076
41077 this._a = (a + this._a) | 0
41078 this._b = (b + this._b) | 0
41079 this._c = (c + this._c) | 0
41080 this._d = (d + this._d) | 0
41081 this._e = (e + this._e) | 0
41082 this._f = (f + this._f) | 0
41083 this._g = (g + this._g) | 0
41084 this._h = (h + this._h) | 0
41085 }
41086
41087 Sha256.prototype._hash = function () {
41088 var H = Buffer.allocUnsafe(32)
41089
41090 H.writeInt32BE(this._a, 0)
41091 H.writeInt32BE(this._b, 4)
41092 H.writeInt32BE(this._c, 8)
41093 H.writeInt32BE(this._d, 12)
41094 H.writeInt32BE(this._e, 16)
41095 H.writeInt32BE(this._f, 20)
41096 H.writeInt32BE(this._g, 24)
41097 H.writeInt32BE(this._h, 28)
41098
41099 return H
41100 }
41101
41102 module.exports = Sha256
41103
41104 },{"./hash":102,"inherits":96,"safe-buffer":101}],108:[function(require,module,exports){
41105 var inherits = require('inherits')
41106 var SHA512 = require('./sha512')
41107 var Hash = require('./hash')
41108 var Buffer = require('safe-buffer').Buffer
41109
41110 var W = new Array(160)
41111
41112 function Sha384 () {
41113 this.init()
41114 this._w = W
41115
41116 Hash.call(this, 128, 112)
41117 }
41118
41119 inherits(Sha384, SHA512)
41120
41121 Sha384.prototype.init = function () {
41122 this._ah = 0xcbbb9d5d
41123 this._bh = 0x629a292a
41124 this._ch = 0x9159015a
41125 this._dh = 0x152fecd8
41126 this._eh = 0x67332667
41127 this._fh = 0x8eb44a87
41128 this._gh = 0xdb0c2e0d
41129 this._hh = 0x47b5481d
41130
41131 this._al = 0xc1059ed8
41132 this._bl = 0x367cd507
41133 this._cl = 0x3070dd17
41134 this._dl = 0xf70e5939
41135 this._el = 0xffc00b31
41136 this._fl = 0x68581511
41137 this._gl = 0x64f98fa7
41138 this._hl = 0xbefa4fa4
41139
41140 return this
41141 }
41142
41143 Sha384.prototype._hash = function () {
41144 var H = Buffer.allocUnsafe(48)
41145
41146 function writeInt64BE (h, l, offset) {
41147 H.writeInt32BE(h, offset)
41148 H.writeInt32BE(l, offset + 4)
41149 }
41150
41151 writeInt64BE(this._ah, this._al, 0)
41152 writeInt64BE(this._bh, this._bl, 8)
41153 writeInt64BE(this._ch, this._cl, 16)
41154 writeInt64BE(this._dh, this._dl, 24)
41155 writeInt64BE(this._eh, this._el, 32)
41156 writeInt64BE(this._fh, this._fl, 40)
41157
41158 return H
41159 }
41160
41161 module.exports = Sha384
41162
41163 },{"./hash":102,"./sha512":109,"inherits":96,"safe-buffer":101}],109:[function(require,module,exports){
41164 var inherits = require('inherits')
41165 var Hash = require('./hash')
41166 var Buffer = require('safe-buffer').Buffer
41167
41168 var K = [
41169 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
41170 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41171 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
41172 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41173 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
41174 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41175 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
41176 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41177 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
41178 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41179 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
41180 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41181 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
41182 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41183 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
41184 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41185 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
41186 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41187 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
41188 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41189 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
41190 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41191 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
41192 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41193 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
41194 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41195 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
41196 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41197 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
41198 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41199 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
41200 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41201 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
41202 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41203 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
41204 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41205 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
41206 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41207 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
41208 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
41209 ]
41210
41211 var W = new Array(160)
41212
41213 function Sha512 () {
41214 this.init()
41215 this._w = W
41216
41217 Hash.call(this, 128, 112)
41218 }
41219
41220 inherits(Sha512, Hash)
41221
41222 Sha512.prototype.init = function () {
41223 this._ah = 0x6a09e667
41224 this._bh = 0xbb67ae85
41225 this._ch = 0x3c6ef372
41226 this._dh = 0xa54ff53a
41227 this._eh = 0x510e527f
41228 this._fh = 0x9b05688c
41229 this._gh = 0x1f83d9ab
41230 this._hh = 0x5be0cd19
41231
41232 this._al = 0xf3bcc908
41233 this._bl = 0x84caa73b
41234 this._cl = 0xfe94f82b
41235 this._dl = 0x5f1d36f1
41236 this._el = 0xade682d1
41237 this._fl = 0x2b3e6c1f
41238 this._gl = 0xfb41bd6b
41239 this._hl = 0x137e2179
41240
41241 return this
41242 }
41243
41244 function Ch (x, y, z) {
41245 return z ^ (x & (y ^ z))
41246 }
41247
41248 function maj (x, y, z) {
41249 return (x & y) | (z & (x | y))
41250 }
41251
41252 function sigma0 (x, xl) {
41253 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
41254 }
41255
41256 function sigma1 (x, xl) {
41257 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
41258 }
41259
41260 function Gamma0 (x, xl) {
41261 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
41262 }
41263
41264 function Gamma0l (x, xl) {
41265 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
41266 }
41267
41268 function Gamma1 (x, xl) {
41269 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
41270 }
41271
41272 function Gamma1l (x, xl) {
41273 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
41274 }
41275
41276 function getCarry (a, b) {
41277 return (a >>> 0) < (b >>> 0) ? 1 : 0
41278 }
41279
41280 Sha512.prototype._update = function (M) {
41281 var W = this._w
41282
41283 var ah = this._ah | 0
41284 var bh = this._bh | 0
41285 var ch = this._ch | 0
41286 var dh = this._dh | 0
41287 var eh = this._eh | 0
41288 var fh = this._fh | 0
41289 var gh = this._gh | 0
41290 var hh = this._hh | 0
41291
41292 var al = this._al | 0
41293 var bl = this._bl | 0
41294 var cl = this._cl | 0
41295 var dl = this._dl | 0
41296 var el = this._el | 0
41297 var fl = this._fl | 0
41298 var gl = this._gl | 0
41299 var hl = this._hl | 0
41300
41301 for (var i = 0; i < 32; i += 2) {
41302 W[i] = M.readInt32BE(i * 4)
41303 W[i + 1] = M.readInt32BE(i * 4 + 4)
41304 }
41305 for (; i < 160; i += 2) {
41306 var xh = W[i - 15 * 2]
41307 var xl = W[i - 15 * 2 + 1]
41308 var gamma0 = Gamma0(xh, xl)
41309 var gamma0l = Gamma0l(xl, xh)
41310
41311 xh = W[i - 2 * 2]
41312 xl = W[i - 2 * 2 + 1]
41313 var gamma1 = Gamma1(xh, xl)
41314 var gamma1l = Gamma1l(xl, xh)
41315
41316 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41317 var Wi7h = W[i - 7 * 2]
41318 var Wi7l = W[i - 7 * 2 + 1]
41319
41320 var Wi16h = W[i - 16 * 2]
41321 var Wi16l = W[i - 16 * 2 + 1]
41322
41323 var Wil = (gamma0l + Wi7l) | 0
41324 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41325 Wil = (Wil + gamma1l) | 0
41326 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41327 Wil = (Wil + Wi16l) | 0
41328 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
41329
41330 W[i] = Wih
41331 W[i + 1] = Wil
41332 }
41333
41334 for (var j = 0; j < 160; j += 2) {
41335 Wih = W[j]
41336 Wil = W[j + 1]
41337
41338 var majh = maj(ah, bh, ch)
41339 var majl = maj(al, bl, cl)
41340
41341 var sigma0h = sigma0(ah, al)
41342 var sigma0l = sigma0(al, ah)
41343 var sigma1h = sigma1(eh, el)
41344 var sigma1l = sigma1(el, eh)
41345
41346 // t1 = h + sigma1 + ch + K[j] + W[j]
41347 var Kih = K[j]
41348 var Kil = K[j + 1]
41349
41350 var chh = Ch(eh, fh, gh)
41351 var chl = Ch(el, fl, gl)
41352
41353 var t1l = (hl + sigma1l) | 0
41354 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41355 t1l = (t1l + chl) | 0
41356 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41357 t1l = (t1l + Kil) | 0
41358 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41359 t1l = (t1l + Wil) | 0
41360 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
41361
41362 // t2 = sigma0 + maj
41363 var t2l = (sigma0l + majl) | 0
41364 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
41365
41366 hh = gh
41367 hl = gl
41368 gh = fh
41369 gl = fl
41370 fh = eh
41371 fl = el
41372 el = (dl + t1l) | 0
41373 eh = (dh + t1h + getCarry(el, dl)) | 0
41374 dh = ch
41375 dl = cl
41376 ch = bh
41377 cl = bl
41378 bh = ah
41379 bl = al
41380 al = (t1l + t2l) | 0
41381 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41382 }
41383
41384 this._al = (this._al + al) | 0
41385 this._bl = (this._bl + bl) | 0
41386 this._cl = (this._cl + cl) | 0
41387 this._dl = (this._dl + dl) | 0
41388 this._el = (this._el + el) | 0
41389 this._fl = (this._fl + fl) | 0
41390 this._gl = (this._gl + gl) | 0
41391 this._hl = (this._hl + hl) | 0
41392
41393 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41394 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41395 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41396 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41397 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41398 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41399 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41400 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
41401 }
41402
41403 Sha512.prototype._hash = function () {
41404 var H = Buffer.allocUnsafe(64)
41405
41406 function writeInt64BE (h, l, offset) {
41407 H.writeInt32BE(h, offset)
41408 H.writeInt32BE(l, offset + 4)
41409 }
41410
41411 writeInt64BE(this._ah, this._al, 0)
41412 writeInt64BE(this._bh, this._bl, 8)
41413 writeInt64BE(this._ch, this._cl, 16)
41414 writeInt64BE(this._dh, this._dl, 24)
41415 writeInt64BE(this._eh, this._el, 32)
41416 writeInt64BE(this._fh, this._fl, 40)
41417 writeInt64BE(this._gh, this._gl, 48)
41418 writeInt64BE(this._hh, this._hl, 56)
41419
41420 return H
41421 }
41422
41423 module.exports = Sha512
41424
41425 },{"./hash":102,"inherits":96,"safe-buffer":101}],110:[function(require,module,exports){
41426 var native = require('./native')
41427
41428 function getTypeName (fn) {
41429 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
41430 }
41431
41432 function getValueTypeName (value) {
41433 return native.Nil(value) ? '' : getTypeName(value.constructor)
41434 }
41435
41436 function getValue (value) {
41437 if (native.Function(value)) return ''
41438 if (native.String(value)) return JSON.stringify(value)
41439 if (value && native.Object(value)) return ''
41440 return value
41441 }
41442
41443 function tfJSON (type) {
41444 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
41445 if (native.Array(type)) return 'Array'
41446 if (type && native.Object(type)) return 'Object'
41447
41448 return type !== undefined ? type : ''
41449 }
41450
41451 function tfErrorString (type, value, valueTypeName) {
41452 var valueJson = getValue(value)
41453
41454 return 'Expected ' + tfJSON(type) + ', got' +
41455 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
41456 (valueJson !== '' ? ' ' + valueJson : '')
41457 }
41458
41459 function TfTypeError (type, value, valueTypeName) {
41460 valueTypeName = valueTypeName || getValueTypeName(value)
41461 this.message = tfErrorString(type, value, valueTypeName)
41462
41463 Error.captureStackTrace(this, TfTypeError)
41464 this.__type = type
41465 this.__value = value
41466 this.__valueTypeName = valueTypeName
41467 }
41468
41469 TfTypeError.prototype = Object.create(Error.prototype)
41470 TfTypeError.prototype.constructor = TfTypeError
41471
41472 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
41473 var description = '" of type '
41474 if (label === 'key') description = '" with key type '
41475
41476 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
41477 }
41478
41479 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
41480 if (type) {
41481 valueTypeName = valueTypeName || getValueTypeName(value)
41482 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
41483 } else {
41484 this.message = 'Unexpected property "' + property + '"'
41485 }
41486
41487 Error.captureStackTrace(this, TfTypeError)
41488 this.__label = label
41489 this.__property = property
41490 this.__type = type
41491 this.__value = value
41492 this.__valueTypeName = valueTypeName
41493 }
41494
41495 TfPropertyTypeError.prototype = Object.create(Error.prototype)
41496 TfPropertyTypeError.prototype.constructor = TfTypeError
41497
41498 function tfCustomError (expected, actual) {
41499 return new TfTypeError(expected, {}, actual)
41500 }
41501
41502 function tfSubError (e, property, label) {
41503 // sub child?
41504 if (e instanceof TfPropertyTypeError) {
41505 property = property + '.' + e.__property
41506
41507 e = new TfPropertyTypeError(
41508 e.__type, property, e.__label, e.__value, e.__valueTypeName
41509 )
41510
41511 // child?
41512 } else if (e instanceof TfTypeError) {
41513 e = new TfPropertyTypeError(
41514 e.__type, property, label, e.__value, e.__valueTypeName
41515 )
41516 }
41517
41518 Error.captureStackTrace(e)
41519 return e
41520 }
41521
41522 module.exports = {
41523 TfTypeError: TfTypeError,
41524 TfPropertyTypeError: TfPropertyTypeError,
41525 tfCustomError: tfCustomError,
41526 tfSubError: tfSubError,
41527 tfJSON: tfJSON,
41528 getValueTypeName: getValueTypeName
41529 }
41530
41531 },{"./native":113}],111:[function(require,module,exports){
41532 (function (Buffer){
41533 var NATIVE = require('./native')
41534 var ERRORS = require('./errors')
41535
41536 function _Buffer (value) {
41537 return Buffer.isBuffer(value)
41538 }
41539
41540 function Hex (value) {
41541 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
41542 }
41543
41544 function _LengthN (type, length) {
41545 var name = type.toJSON()
41546
41547 function Length (value) {
41548 if (!type(value)) return false
41549 if (value.length === length) return true
41550
41551 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
41552 }
41553 Length.toJSON = function () { return name }
41554
41555 return Length
41556 }
41557
41558 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
41559 var _BufferN = _LengthN.bind(null, _Buffer)
41560 var _HexN = _LengthN.bind(null, Hex)
41561 var _StringN = _LengthN.bind(null, NATIVE.String)
41562
41563 var UINT53_MAX = Math.pow(2, 53) - 1
41564
41565 function Finite (value) {
41566 return typeof value === 'number' && isFinite(value)
41567 }
41568 function Int8 (value) { return ((value << 24) >> 24) === value }
41569 function Int16 (value) { return ((value << 16) >> 16) === value }
41570 function Int32 (value) { return (value | 0) === value }
41571 function UInt8 (value) { return (value & 0xff) === value }
41572 function UInt16 (value) { return (value & 0xffff) === value }
41573 function UInt32 (value) { return (value >>> 0) === value }
41574 function UInt53 (value) {
41575 return typeof value === 'number' &&
41576 value >= 0 &&
41577 value <= UINT53_MAX &&
41578 Math.floor(value) === value
41579 }
41580
41581 var types = {
41582 ArrayN: _ArrayN,
41583 Buffer: _Buffer,
41584 BufferN: _BufferN,
41585 Finite: Finite,
41586 Hex: Hex,
41587 HexN: _HexN,
41588 Int8: Int8,
41589 Int16: Int16,
41590 Int32: Int32,
41591 StringN: _StringN,
41592 UInt8: UInt8,
41593 UInt16: UInt16,
41594 UInt32: UInt32,
41595 UInt53: UInt53
41596 }
41597
41598 for (var typeName in types) {
41599 types[typeName].toJSON = function (t) {
41600 return t
41601 }.bind(null, typeName)
41602 }
41603
41604 module.exports = types
41605
41606 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
41607 },{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":110,"./native":113}],112:[function(require,module,exports){
41608 var ERRORS = require('./errors')
41609 var NATIVE = require('./native')
41610
41611 // short-hand
41612 var tfJSON = ERRORS.tfJSON
41613 var TfTypeError = ERRORS.TfTypeError
41614 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
41615 var tfSubError = ERRORS.tfSubError
41616 var getValueTypeName = ERRORS.getValueTypeName
41617
41618 var TYPES = {
41619 arrayOf: function arrayOf (type) {
41620 type = compile(type)
41621
41622 function _arrayOf (array, strict) {
41623 if (!NATIVE.Array(array)) return false
41624 if (NATIVE.Nil(array)) return false
41625
41626 return array.every(function (value, i) {
41627 try {
41628 return typeforce(type, value, strict)
41629 } catch (e) {
41630 throw tfSubError(e, i)
41631 }
41632 })
41633 }
41634 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
41635
41636 return _arrayOf
41637 },
41638
41639 maybe: function maybe (type) {
41640 type = compile(type)
41641
41642 function _maybe (value, strict) {
41643 return NATIVE.Nil(value) || type(value, strict, maybe)
41644 }
41645 _maybe.toJSON = function () { return '?' + tfJSON(type) }
41646
41647 return _maybe
41648 },
41649
41650 map: function map (propertyType, propertyKeyType) {
41651 propertyType = compile(propertyType)
41652 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
41653
41654 function _map (value, strict) {
41655 if (!NATIVE.Object(value)) return false
41656 if (NATIVE.Nil(value)) return false
41657
41658 for (var propertyName in value) {
41659 try {
41660 if (propertyKeyType) {
41661 typeforce(propertyKeyType, propertyName, strict)
41662 }
41663 } catch (e) {
41664 throw tfSubError(e, propertyName, 'key')
41665 }
41666
41667 try {
41668 var propertyValue = value[propertyName]
41669 typeforce(propertyType, propertyValue, strict)
41670 } catch (e) {
41671 throw tfSubError(e, propertyName)
41672 }
41673 }
41674
41675 return true
41676 }
41677
41678 if (propertyKeyType) {
41679 _map.toJSON = function () {
41680 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
41681 }
41682 } else {
41683 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
41684 }
41685
41686 return _map
41687 },
41688
41689 object: function object (uncompiled) {
41690 var type = {}
41691
41692 for (var typePropertyName in uncompiled) {
41693 type[typePropertyName] = compile(uncompiled[typePropertyName])
41694 }
41695
41696 function _object (value, strict) {
41697 if (!NATIVE.Object(value)) return false
41698 if (NATIVE.Nil(value)) return false
41699
41700 var propertyName
41701
41702 try {
41703 for (propertyName in type) {
41704 var propertyType = type[propertyName]
41705 var propertyValue = value[propertyName]
41706
41707 typeforce(propertyType, propertyValue, strict)
41708 }
41709 } catch (e) {
41710 throw tfSubError(e, propertyName)
41711 }
41712
41713 if (strict) {
41714 for (propertyName in value) {
41715 if (type[propertyName]) continue
41716
41717 throw new TfPropertyTypeError(undefined, propertyName)
41718 }
41719 }
41720
41721 return true
41722 }
41723 _object.toJSON = function () { return tfJSON(type) }
41724
41725 return _object
41726 },
41727
41728 oneOf: function oneOf () {
41729 var types = [].slice.call(arguments).map(compile)
41730
41731 function _oneOf (value, strict) {
41732 return types.some(function (type) {
41733 try {
41734 return typeforce(type, value, strict)
41735 } catch (e) {
41736 return false
41737 }
41738 })
41739 }
41740 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
41741
41742 return _oneOf
41743 },
41744
41745 quacksLike: function quacksLike (type) {
41746 function _quacksLike (value) {
41747 return type === getValueTypeName(value)
41748 }
41749 _quacksLike.toJSON = function () { return type }
41750
41751 return _quacksLike
41752 },
41753
41754 tuple: function tuple () {
41755 var types = [].slice.call(arguments).map(compile)
41756
41757 function _tuple (values, strict) {
41758 if (NATIVE.Nil(values)) return false
41759 if (NATIVE.Nil(values.length)) return false
41760 if (strict && (values.length !== types.length)) return false
41761
41762 return types.every(function (type, i) {
41763 try {
41764 return typeforce(type, values[i], strict)
41765 } catch (e) {
41766 throw tfSubError(e, i)
41767 }
41768 })
41769 }
41770 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
41771
41772 return _tuple
41773 },
41774
41775 value: function value (expected) {
41776 function _value (actual) {
41777 return actual === expected
41778 }
41779 _value.toJSON = function () { return expected }
41780
41781 return _value
41782 }
41783 }
41784
41785 function compile (type) {
41786 if (NATIVE.String(type)) {
41787 if (type[0] === '?') return TYPES.maybe(type.slice(1))
41788
41789 return NATIVE[type] || TYPES.quacksLike(type)
41790 } else if (type && NATIVE.Object(type)) {
41791 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
41792
41793 return TYPES.object(type)
41794 } else if (NATIVE.Function(type)) {
41795 return type
41796 }
41797
41798 return TYPES.value(type)
41799 }
41800
41801 function typeforce (type, value, strict, surrogate) {
41802 if (NATIVE.Function(type)) {
41803 if (type(value, strict)) return true
41804
41805 throw new TfTypeError(surrogate || type, value)
41806 }
41807
41808 // JIT
41809 return typeforce(compile(type), value, strict)
41810 }
41811
41812 // assign types to typeforce function
41813 for (var typeName in NATIVE) {
41814 typeforce[typeName] = NATIVE[typeName]
41815 }
41816
41817 for (typeName in TYPES) {
41818 typeforce[typeName] = TYPES[typeName]
41819 }
41820
41821 var EXTRA = require('./extra')
41822 for (typeName in EXTRA) {
41823 typeforce[typeName] = EXTRA[typeName]
41824 }
41825
41826 // async wrapper
41827 function __async (type, value, strict, callback) {
41828 // default to falsy strict if using shorthand overload
41829 if (typeof strict === 'function') return __async(type, value, false, strict)
41830
41831 try {
41832 typeforce(type, value, strict)
41833 } catch (e) {
41834 return callback(e)
41835 }
41836
41837 callback()
41838 }
41839
41840 typeforce.async = __async
41841 typeforce.compile = compile
41842 typeforce.TfTypeError = TfTypeError
41843 typeforce.TfPropertyTypeError = TfPropertyTypeError
41844
41845 module.exports = typeforce
41846
41847 },{"./errors":110,"./extra":111,"./native":113}],113:[function(require,module,exports){
41848 var types = {
41849 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
41850 Boolean: function (value) { return typeof value === 'boolean' },
41851 Function: function (value) { return typeof value === 'function' },
41852 Nil: function (value) { return value === undefined || value === null },
41853 Number: function (value) { return typeof value === 'number' },
41854 Object: function (value) { return typeof value === 'object' },
41855 String: function (value) { return typeof value === 'string' },
41856 '': function () { return true }
41857 }
41858
41859 // TODO: deprecate
41860 types.Null = types.Nil
41861
41862 for (var typeName in types) {
41863 types[typeName].toJSON = function (t) {
41864 return t
41865 }.bind(null, typeName)
41866 }
41867
41868 module.exports = types
41869
41870 },{}],114:[function(require,module,exports){
41871 'use strict'
41872 var Buffer = require('safe-buffer').Buffer
41873
41874 // Number.MAX_SAFE_INTEGER
41875 var MAX_SAFE_INTEGER = 9007199254740991
41876
41877 function checkUInt53 (n) {
41878 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
41879 }
41880
41881 function encode (number, buffer, offset) {
41882 checkUInt53(number)
41883
41884 if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number))
41885 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41886 if (!offset) offset = 0
41887
41888 // 8 bit
41889 if (number < 0xfd) {
41890 buffer.writeUInt8(number, offset)
41891 encode.bytes = 1
41892
41893 // 16 bit
41894 } else if (number <= 0xffff) {
41895 buffer.writeUInt8(0xfd, offset)
41896 buffer.writeUInt16LE(number, offset + 1)
41897 encode.bytes = 3
41898
41899 // 32 bit
41900 } else if (number <= 0xffffffff) {
41901 buffer.writeUInt8(0xfe, offset)
41902 buffer.writeUInt32LE(number, offset + 1)
41903 encode.bytes = 5
41904
41905 // 64 bit
41906 } else {
41907 buffer.writeUInt8(0xff, offset)
41908 buffer.writeUInt32LE(number >>> 0, offset + 1)
41909 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
41910 encode.bytes = 9
41911 }
41912
41913 return buffer
41914 }
41915
41916 function decode (buffer, offset) {
41917 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41918 if (!offset) offset = 0
41919
41920 var first = buffer.readUInt8(offset)
41921
41922 // 8 bit
41923 if (first < 0xfd) {
41924 decode.bytes = 1
41925 return first
41926
41927 // 16 bit
41928 } else if (first === 0xfd) {
41929 decode.bytes = 3
41930 return buffer.readUInt16LE(offset + 1)
41931
41932 // 32 bit
41933 } else if (first === 0xfe) {
41934 decode.bytes = 5
41935 return buffer.readUInt32LE(offset + 1)
41936
41937 // 64 bit
41938 } else {
41939 decode.bytes = 9
41940 var lo = buffer.readUInt32LE(offset + 1)
41941 var hi = buffer.readUInt32LE(offset + 5)
41942 var number = hi * 0x0100000000 + lo
41943 checkUInt53(number)
41944
41945 return number
41946 }
41947 }
41948
41949 function encodingLength (number) {
41950 checkUInt53(number)
41951
41952 return (
41953 number < 0xfd ? 1
41954 : number <= 0xffff ? 3
41955 : number <= 0xffffffff ? 5
41956 : 9
41957 )
41958 }
41959
41960 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
41961
41962 },{"safe-buffer":101}],115:[function(require,module,exports){
41963 (function (Buffer){
41964 var bs58check = require('bs58check')
41965
41966 function decodeRaw (buffer, version) {
41967 // check version only if defined
41968 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
41969
41970 // uncompressed
41971 if (buffer.length === 33) {
41972 return {
41973 version: buffer[0],
41974 privateKey: buffer.slice(1, 33),
41975 compressed: false
41976 }
41977 }
41978
41979 // invalid length
41980 if (buffer.length !== 34) throw new Error('Invalid WIF length')
41981
41982 // invalid compression flag
41983 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
41984
41985 return {
41986 version: buffer[0],
41987 privateKey: buffer.slice(1, 33),
41988 compressed: true
41989 }
41990 }
41991
41992 function encodeRaw (version, privateKey, compressed) {
41993 var result = new Buffer(compressed ? 34 : 33)
41994
41995 result.writeUInt8(version, 0)
41996 privateKey.copy(result, 1)
41997
41998 if (compressed) {
41999 result[33] = 0x01
42000 }
42001
42002 return result
42003 }
42004
42005 function decode (string, version) {
42006 return decodeRaw(bs58check.decode(string), version)
42007 }
42008
42009 function encode (version, privateKey, compressed) {
42010 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
42011
42012 return bs58check.encode(
42013 encodeRaw(
42014 version.version,
42015 version.privateKey,
42016 version.compressed
42017 )
42018 )
42019 }
42020
42021 module.exports = {
42022 decode: decode,
42023 decodeRaw: decodeRaw,
42024 encode: encode,
42025 encodeRaw: encodeRaw
42026 }
42027
42028 }).call(this,require("buffer").Buffer)
42029 },{"bs58check":83,"buffer":5}]},{},[34])(34)
42030 });</script>
42031 <script>bitcoinjs.bitcoin.networks.shadow = {
42032 messagePrefix: 'unused',
42033 bip32: {
42034 public: 0xEE80286A,
42035 private: 0xEE8031E8
42036 },
42037 pubKeyHash: 0x3f,
42038 scriptHash: 0x7d,
42039 wif: 0xbf
42040 };
42041
42042 bitcoinjs.bitcoin.networks.shadowtn = {
42043 messagePrefix: 'unused',
42044 bip32: {
42045 public: 0x76C0FDFB,
42046 private: 0x76C1077A
42047 },
42048 pubKeyHash: 0x7f,
42049 scriptHash: 0xc4,
42050 wif: 0xff
42051 };
42052
42053 bitcoinjs.bitcoin.networks.clam = {
42054 messagePrefix: 'unused',
42055 bip32: {
42056 public: 0xa8c26d64,
42057 private: 0xa8c17826
42058 },
42059 pubKeyHash: 0x89,
42060 scriptHash: 0x00, // TODO set this correctly
42061 wif: 0x85
42062 };
42063
42064 bitcoinjs.bitcoin.networks.crown = {
42065 messagePrefix: 'unused',
42066 bip32: {
42067 public: 0x0488b21e,
42068 private: 0x0488ade4
42069 },
42070 pubKeyHash: 0x00,
42071 scriptHash: 0x05,
42072 wif: 0x80
42073 };
42074
42075 bitcoinjs.bitcoin.networks.dash = {
42076 messagePrefix: 'unused',
42077 bip32: {
42078 public: 0x0488b21e,
42079 private: 0x0488ade4
42080 },
42081 pubKeyHash: 0x4c,
42082 scriptHash: 0x10,
42083 wif: 0xcc
42084 };
42085
42086 bitcoinjs.bitcoin.networks.maza = {
42087 messagePrefix: 'unused',
42088 bip32: {
42089 public: 0x0488b21e,
42090 private: 0x0488ade4
42091 },
42092 pubKeyHash: 0x32,
42093 scriptHash: 0x09,
42094 wif: 0xe0
42095 };
42096
42097 bitcoinjs.bitcoin.networks.dashtn = {
42098 messagePrefix: 'unused',
42099 bip32: {
42100 public: 0x043587cf,
42101 private: 0x04358394
42102 },
42103 pubKeyHash: 0x8c,
42104 scriptHash: 0x13,
42105 wif: 0xef
42106 };
42107
42108 bitcoinjs.bitcoin.networks.game = {
42109 messagePrefix: 'unused',
42110 bip32: {
42111 public: 0x0488b21e,
42112 private: 0x0488ade4
42113 },
42114 pubKeyHash: 0x26,
42115 scriptHash: 0x05,
42116 wif: 0xa6
42117 };
42118
42119 bitcoinjs.bitcoin.networks.namecoin = {
42120 messagePrefix: 'unused',
42121 bip32: {
42122 public: 0x0488b21e,
42123 private: 0x0488ade4
42124 },
42125 pubKeyHash: 0x34,
42126 scriptHash: 0x00, // TODO set this correctly
42127 wif: 0x80
42128 };
42129
42130 bitcoinjs.bitcoin.networks.peercoin = {
42131 messagePrefix: 'unused',
42132 bip32: {
42133 public: 0x0488b21e,
42134 private: 0x0488ade4
42135 },
42136 pubKeyHash: 0x37,
42137 scriptHash: 0x00, // TODO set this correctly
42138 wif: 0xb7
42139 };
42140
42141 bitcoinjs.bitcoin.networks.axe = {
42142 messagePrefix: 'unused',
42143 bip32: {
42144 public: 0x0488b21e,
42145 private: 0x0488ade4
42146 },
42147 pubKeyHash: 0x4B,
42148 scriptHash: 0xCB, // TODO set this correctly
42149 wif: 0xCB
42150 };
42151
42152 bitcoinjs.bitcoin.networks.slimcoin = {
42153 messagePrefix: 'unused',
42154 bip32: {
42155 public: 0xef6adf10,
42156 private: 0xef69ea80
42157 },
42158 pubKeyHash: 0x3f,
42159 scriptHash: 0x7d,
42160 wif: 0x46
42161 };
42162
42163 bitcoinjs.bitcoin.networks.slimcointn = {
42164 messagePrefix: 'unused',
42165 bip32: {
42166 public: 0x043587CF,
42167 private: 0x04358394
42168 },
42169 pubKeyHash: 0x6f,
42170 scriptHash: 0xc4,
42171 wif: 0x57
42172 };
42173
42174 bitcoinjs.bitcoin.networks.dogecoin = {
42175 messagePrefix: '\x19Dogecoin Signed Message:\n',
42176 bip32: {
42177 public: 0x02facafd,
42178 private: 0x02fac398
42179 },
42180 pubKeyHash: 0x1e,
42181 scriptHash: 0x16,
42182 wif: 0x9e
42183 };
42184
42185 bitcoinjs.bitcoin.networks.denarius = {
42186 messagePrefix: '\x19Denarius Signed Message:\n',
42187 bip32: {
42188 public: 0x0488b21e,
42189 private: 0x0488ade4
42190 },
42191 pubKeyHash: 0x1e,
42192 scriptHash: 0x5a,
42193 wif: 0x9e
42194 };
42195
42196 bitcoinjs.bitcoin.networks.neblio = {
42197 messagePrefix: '\x18Neblio Signed Message:\n',
42198 bip32: {
42199 public: 0x0488b21e,
42200 private: 0x0488ade4
42201 },
42202 pubKeyHash: 0x35,
42203 scriptHash: 0x70,
42204 wif: 0xb5
42205 };
42206
42207 bitcoinjs.bitcoin.networks.viacoin = {
42208 messagePrefix: '\x18Viacoin Signed Message:\n',
42209 bip32: {
42210 public: 0x0488b21e,
42211 private: 0x0488ade4
42212 },
42213 pubKeyHash: 0x47,
42214 scriptHash: 0x21,
42215 wif: 0xc7
42216 };
42217
42218 bitcoinjs.bitcoin.networks.viacointestnet = {
42219 messagePrefix: '\x18Viacoin Signed Message:\n',
42220 bip32: {
42221 public: 0x043587cf,
42222 private: 0x04358394
42223 },
42224 pubKeyHash: 0x7f,
42225 scriptHash: 0xc4,
42226 wif: 0xff
42227 };
42228
42229 bitcoinjs.bitcoin.networks.gamerscoin = {
42230 messagePrefix: '\x19Gamerscoin Signed Message:\n',
42231 bip32: {
42232 public: 0x019da462,
42233 private: 0x019d9cfe
42234 },
42235 pubKeyHash: 0x26,
42236 scriptHash: 0x05,
42237 wif: 0xA6
42238 };
42239
42240 bitcoinjs.bitcoin.networks.jumbucks = {
42241 messagePrefix: '\x19Jumbucks Signed Message:\n',
42242 bip32: {
42243 public: 0x037a689a,
42244 private: 0x037a6460
42245 },
42246 pubKeyHash: 0x2b,
42247 scriptHash: 0x05,
42248 wif: 0xab
42249 };
42250
42251 bitcoinjs.bitcoin.networks.zetacoin = {
42252 messagePrefix: '\x18Zetacoin Signed Message:\n',
42253 bip32: {
42254 public: 0x0488b21e,
42255 private: 0x0488ade4
42256 },
42257 pubKeyHash: 0x50,
42258 scriptHash: 0x09,
42259 wif: 0xe0
42260 };
42261
42262 bitcoinjs.bitcoin.networks.myriadcoin = {
42263 messagePrefix: 'unused',
42264 bip32: {
42265 public: 0x0488b21e,
42266 private: 0x0488ade4
42267 },
42268 pubKeyHash: 0x32,
42269 scriptHash: 0x00, // TODO set this correctly
42270 wif: 0xb2
42271 };
42272
42273
42274 bitcoinjs.bitcoin.networks.onixcoin = {
42275 messagePrefix: 'unused',
42276 bip32: {
42277 public: 0x049d7cb2,
42278 private: 0x049d7878
42279 },
42280 pubKeyHash: 0x4B,
42281 scriptHash: 0x05,
42282 wif: 0x80
42283 };
42284
42285 bitcoinjs.bitcoin.networks.pivx = {
42286 messagePrefix: 'unused',
42287 bip32: {
42288 public: 0x022d2533,
42289 private: 0x0221312b
42290 },
42291 pubKeyHash: 0x1e,
42292 scriptHash: 0x0d,
42293 wif: 0xd4
42294 };
42295
42296 bitcoinjs.bitcoin.networks.pivxtestnet = {
42297 messagePrefix: 'unused',
42298 bip32: {
42299 public: 0x3a8061a0,
42300 private: 0x3a805837
42301 },
42302 pubKeyHash: 0x8b,
42303 scriptHash: 0x13,
42304 wif: 0xef
42305 };
42306
42307 bitcoinjs.bitcoin.networks.fujicoin = {
42308 messagePrefix: '\x19FujiCoin Signed Message:\n',
42309 bip32: {
42310 public: 0x0488b21e,
42311 private: 0x0488ade4
42312 },
42313 pubKeyHash: 0x24,
42314 scriptHash: 0x10,
42315 wif: 0xa4
42316 };
42317
42318 bitcoinjs.bitcoin.networks.nubits = {
42319 messagePrefix: '\x18Nu Signed Message:\n',
42320 bip32: {
42321 public: 0x0488b21e,
42322 private: 0x0488ade4
42323 },
42324 pubKeyHash: 0x19,
42325 scriptHash: 0x1a,
42326 wif: 0x96,
42327 };
42328
42329 bitcoinjs.bitcoin.networks.bgold = {
42330 messagePrefix: 'unused',
42331 bip32: {
42332 public: 0x0488b21e,
42333 private: 0x0488ade4
42334 },
42335 pubKeyHash: 38,
42336 scriptHash: 23,
42337 wif: 128
42338 };
42339
42340 bitcoinjs.bitcoin.networks.monacoin = {
42341 messagePrefix: '\x18Monacoin Signed Message:\n',
42342 bip32: {
42343 public: 0x0488b21e,
42344 private: 0x0488ade4
42345 },
42346 pubKeyHash: 0x32,
42347 scriptHash: 0x37,
42348 wif: 0xb0
42349 };
42350
42351 bitcoinjs.bitcoin.networks.litecoinXprv = {
42352 messagePrefix: '\x19Litecoin Signed Message:\n',
42353 bip32: {
42354 public: 0x0488b21e,
42355 private: 0x0488ade4,
42356 },
42357 pubKeyHash: 0x30,
42358 scriptHash: 0x32,
42359 wif: 0xb0
42360 };
42361
42362 bitcoinjs.bitcoin.networks.komodo = {
42363 messagePrefix: '\x18Komodo Signed Message:\n',
42364 bip32: {
42365 public: 0x0488B21E,
42366 private: 0x0488ADE4
42367 },
42368 pubKeyHash: 0x3c,
42369 scriptHash: 0x55,
42370 wif: 0xbc
42371 };
42372
42373 bitcoinjs.bitcoin.networks.blackcoin = {
42374 messagePrefix: '\x18BlackCoin Signed Message:\n',
42375 bip32: {
42376 public: 0x02CFBEDE,
42377 private: 0x02CFBF60
42378 },
42379 pubKeyHash: 0x19,
42380 scriptHash: 0x55,
42381 wif: 0x99
42382 };
42383
42384 bitcoinjs.bitcoin.networks.beetlecoin = {
42385 messagePrefix: '\x19Beetlecoin Signed Message:\n',
42386 bip32: {
42387 public: 0x0488b21e,
42388 private: 0x0488ade4
42389 },
42390 pubKeyHash: 0x1A,
42391 scriptHash: 0x55,
42392 wif: 0x99,
42393 };
42394
42395
42396 bitcoinjs.bitcoin.networks.adcoin = {
42397 messagePrefix: '\x18AdCoin Signed Message:\n',
42398 bip32: {
42399 public: 0x0488B21E,
42400 private: 0x0488ADE4,
42401 },
42402 pubKeyHash: 0x17,
42403 scriptHash: 0x05,
42404 wif: 0xb0,
42405 };
42406
42407 bitcoinjs.bitcoin.networks.asiacoin = {
42408 messagePrefix: '\x18AsiaCoin Signed Message:\n',
42409 bip32: {
42410 public: 0x0488b21e,
42411 private: 0x0488ade4,
42412 },
42413 pubKeyHash: 0x17,
42414 scriptHash: 0x08,
42415 wif: 0x97,
42416 };
42417
42418 bitcoinjs.bitcoin.networks.auroracoin = {
42419 messagePrefix: '\x18AuroraCoin Signed Message:\n',
42420 bip32: {
42421 public: 0x0488b21e,
42422 private: 0x0488ade4,
42423 },
42424 pubKeyHash: 0x17,
42425 scriptHash: 0x05,
42426 wif: 0x97,
42427 };
42428
42429 bitcoinjs.bitcoin.networks.bata = {
42430 messagePrefix: '\x18Bata Signed Message:\n',
42431 bip32: {
42432 public: 0xA40C86FA,
42433 private: 0xA40B91BD,
42434 },
42435 pubKeyHash: 0x19,
42436 scriptHash: 0x05,
42437 wif: 0xa4,
42438 };
42439
42440 bitcoinjs.bitcoin.networks.belacoin = {
42441 messagePrefix: '\x18BelaCoin Signed Message:\n',
42442 bip32: {
42443 public: 0x0488b21e,
42444 private: 0x0488ade4,
42445 },
42446 pubKeyHash: 0x19,
42447 scriptHash: 0x05,
42448 wif: 0x99,
42449 };
42450
42451 bitcoinjs.bitcoin.networks.atom = {
42452 messagePrefix: '\x18Bitcoin Signed Message:\n',
42453 bip32: {
42454 public: 0x0488B21E,
42455 private: 0x0488ADE4,
42456 },
42457 pubKeyHash: 0x17,
42458 scriptHash: 0x0a,
42459 wif: 0x80,
42460 };
42461
42462 bitcoinjs.bitcoin.networks.bitcoinplus = {
42463 messagePrefix: '\x18BitcoinPlus Signed Message:\n',
42464 bip32: {
42465 public: 0x0488b21e,
42466 private: 0x0488ade4,
42467 },
42468 pubKeyHash: 0x19,
42469 scriptHash: 0x08,
42470 wif: 0x99,
42471 };
42472
42473 bitcoinjs.bitcoin.networks.bitcore = {
42474 messagePrefix: '\x18BitCore Signed Message:\n',
42475 bip32: {
42476 public: 0x0488B21E,
42477 private: 0x0488ADE4,
42478 },
42479 pubKeyHash: 0x00,
42480 scriptHash: 0x05,
42481 wif: 0x80,
42482 };
42483
42484 bitcoinjs.bitcoin.networks.bitsend = {
42485 messagePrefix: '\x18Bitsend Signed Message:\n',
42486 bip32: {
42487 public: 0x0488B21E,
42488 private: 0x0488ADE4,
42489 },
42490 pubKeyHash: 0x66,
42491 scriptHash: 0x05,
42492 wif: 0xcc,
42493 };
42494
42495 bitcoinjs.bitcoin.networks.britcoin = {
42496 messagePrefix: '\x18BritCoin Signed Message:\n',
42497 bip32: {
42498 public: 0x0488b21e,
42499 private: 0x0488ade4,
42500 },
42501 pubKeyHash: 0x19,
42502 scriptHash: 0x55,
42503 wif: 0x99,
42504 };
42505
42506 bitcoinjs.bitcoin.networks.canadaecoin = {
42507 messagePrefix: '\x18Canada eCoin Signed Message:\n',
42508 bip32: {
42509 public: 0x0488b21e,
42510 private: 0x0488ade4,
42511 },
42512 pubKeyHash: 0x1c,
42513 scriptHash: 0x05,
42514 wif: 0x9c,
42515 };
42516
42517 bitcoinjs.bitcoin.networks.cannacoin = {
42518 messagePrefix: '\x18Cannacoin Signed Message:\n',
42519 bip32: {
42520 public: 0x0488b21e,
42521 private: 0x0488ade4,
42522 },
42523 pubKeyHash: 0x1c,
42524 scriptHash: 0x05,
42525 wif: 0x9c,
42526 };
42527
42528 bitcoinjs.bitcoin.networks.clubcoin = {
42529 messagePrefix: '\x18ClubCoin Signed Message:\n',
42530 bip32: {
42531 public: 0x0488B21E,
42532 private: 0x0488ADE4,
42533 },
42534 pubKeyHash: 0x1c,
42535 scriptHash: 0x55,
42536 wif: 0x99,
42537 };
42538
42539 bitcoinjs.bitcoin.networks.compcoin = {
42540 messagePrefix: '\x18CompCoin Signed Message:\n',
42541 bip32: {
42542 public: 0x0488b21e,
42543 private: 0x0488ade4,
42544 },
42545 pubKeyHash: 0x1c,
42546 scriptHash: 0x55,
42547 wif: 0x9c,
42548 };
42549
42550 bitcoinjs.bitcoin.networks.crave = {
42551 messagePrefix: '\x18DarkNet Signed Message:\n',
42552 bip32: {
42553 public: 0x0488B21E,
42554 private: 0x0488ADE4,
42555 },
42556 pubKeyHash: 0x46,
42557 scriptHash: 0x55,
42558 wif: 0x99,
42559 };
42560
42561 bitcoinjs.bitcoin.networks.defcoin = {
42562 messagePrefix: '\x18defcoin Signed Message:\n',
42563 bip32: {
42564 public: 0x0488b21e,
42565 private: 0x0488ade4,
42566 },
42567 pubKeyHash: 0x1e,
42568 scriptHash: 0x05,
42569 wif: 0x9e,
42570 };
42571
42572 bitcoinjs.bitcoin.networks.diamond = {
42573 messagePrefix: '\x18Diamond Signed Message:\n',
42574 bip32: {
42575 public: 0x0488B21E,
42576 private: 0x0488ADE4,
42577 },
42578 pubKeyHash: 0x5a,
42579 scriptHash: 0x08,
42580 wif: 0xda,
42581 };
42582
42583 bitcoinjs.bitcoin.networks.digibyte = {
42584 messagePrefix: '\x18DigiByte Signed Message:\n',
42585 bip32: {
42586 public: 0x0488B21E,
42587 private: 0x0488ADE4,
42588 },
42589 pubKeyHash: 0x1e,
42590 scriptHash: 0x05,
42591 wif: 0x80,
42592 };
42593
42594 bitcoinjs.bitcoin.networks.digitalcoin = {
42595 messagePrefix: '\x18Digitalcoin Signed Message:\n',
42596 bip32: {
42597 public: 0x9e0488B2,
42598 private: 0x0488ADE4,
42599 },
42600 pubKeyHash: 0x1e,
42601 scriptHash: 0x05,
42602 wif: 0x9e,
42603 };
42604
42605 bitcoinjs.bitcoin.networks.ecoin = {
42606 messagePrefix: '\x18eCoin Signed Message:\n',
42607 bip32: {
42608 public: 0x0488b21e,
42609 private: 0x0488ade4,
42610 },
42611 pubKeyHash: 0x5c,
42612 scriptHash: 0x14,
42613 wif: 0xdc,
42614 };
42615
42616 bitcoinjs.bitcoin.networks.edrcoin = {
42617 messagePrefix: '\x18EDRcoin Signed Message:\n',
42618 bip32: {
42619 public: 0x0488b21e,
42620 private: 0x0488ade4,
42621 },
42622 pubKeyHash: 0x5d,
42623 scriptHash: 0x1c,
42624 wif: 0xdd,
42625 };
42626
42627 bitcoinjs.bitcoin.networks.egulden = {
42628 messagePrefix: '\x18Egulden Signed Message:\n',
42629 bip32: {
42630 public: 0x0488B21E,
42631 private: 0x0488ADE4,
42632 },
42633 pubKeyHash: 0x30,
42634 scriptHash: 0x05,
42635 wif: 0xb0,
42636 };
42637
42638 bitcoinjs.bitcoin.networks.einsteinium = {
42639 messagePrefix: '\x18Einsteinium Signed Message:\n',
42640 bip32: {
42641 public: 0x0488b21e,
42642 private: 0x0488ade4,
42643 },
42644 pubKeyHash: 0x21,
42645 scriptHash: 0x05,
42646 wif: 0xa1,
42647 };
42648
42649 bitcoinjs.bitcoin.networks.europecoin = {
42650 messagePrefix: '\x18Bitcoin Signed Message:\n',
42651 bip32: {
42652 public: 0x0488B21E,
42653 private: 0x0488ADE4,
42654 },
42655 pubKeyHash: 0x21,
42656 scriptHash: 0x05,
42657 wif: 0xa8,
42658 };
42659
42660 bitcoinjs.bitcoin.networks.exclusivecoin = {
42661 messagePrefix: '\x18ExclusiveCoin Signed Message:\n',
42662 bip32: {
42663 public: 0x0488B21E,
42664 private: 0x0488ADE4,
42665 },
42666 pubKeyHash: 0x21,
42667 scriptHash: 0x89,
42668 wif: 0xa1,
42669 };
42670
42671 bitcoinjs.bitcoin.networks.feathercoin = {
42672 messagePrefix: '\x18Feathercoin Signed Message:\n',
42673 bip32: {
42674 public: 0x0488BC26,
42675 private: 0x0488DAEE,
42676 },
42677 pubKeyHash: 0x0e,
42678 scriptHash: 0x05,
42679 wif: 0x8e,
42680 };
42681
42682 bitcoinjs.bitcoin.networks.firstcoin = {
42683 messagePrefix: '\x18FirstCoin Signed Message:\n',
42684 bip32: {
42685 public: 0x0488b21e,
42686 private: 0x0488ade4,
42687 },
42688 pubKeyHash: 0x23,
42689 scriptHash: 0x05,
42690 wif: 0xa3,
42691 };
42692
42693 bitcoinjs.bitcoin.networks.flashcoin = {
42694 messagePrefix: '\x18Flashcoin Signed Message:\n',
42695 bip32: {
42696 public: 0x0488b21e,
42697 private: 0x0488ade4,
42698 },
42699 pubKeyHash: 0x44,
42700 scriptHash: 0x82,
42701 wif: 0xc4,
42702 };
42703
42704 bitcoinjs.bitcoin.networks.gcr = {
42705 messagePrefix: '\x18GCR Signed Message:\n',
42706 bip32: {
42707 public: 0x0488B21E,
42708 private: 0x0488ADE4,
42709 },
42710 pubKeyHash: 0x26,
42711 scriptHash: 0x61,
42712 wif: 0x9a,
42713 };
42714
42715 bitcoinjs.bitcoin.networks.gobyte = {
42716 messagePrefix: '\x18DarkCoin Signed Message:\n',
42717 bip32: {
42718 public: 0x0488B21E,
42719 private: 0x0488ADE4,
42720 },
42721 pubKeyHash: 0x26,
42722 scriptHash: 0x0a,
42723 wif: 0xc6,
42724 };
42725
42726 bitcoinjs.bitcoin.networks.gridcoin = {
42727 messagePrefix: '\x18Gridcoin Signed Message:\n',
42728 bip32: {
42729 public: 0x0488b21e,
42730 private: 0x0488ade4,
42731 },
42732 pubKeyHash: 0x3e,
42733 scriptHash: 0x55,
42734 wif: 0xbe,
42735 };
42736
42737 bitcoinjs.bitcoin.networks.gulden = {
42738 messagePrefix: '\x18Guldencoin Signed Message:\n',
42739 bip32: {
42740 public: 0x0488B21E,
42741 private: 0x0488ADE4,
42742 },
42743 pubKeyHash: 0x26,
42744 scriptHash: 0x62,
42745 wif: 0x62,
42746 };
42747
42748 bitcoinjs.bitcoin.networks.helleniccoin = {
42749 messagePrefix: '\x18helleniccoin Signed Message:\n',
42750 bip32: {
42751 public: 0x0488b21e,
42752 private: 0x0488ade4,
42753 },
42754 pubKeyHash: 0x30,
42755 scriptHash: 0x05,
42756 wif: 0xb0,
42757 };
42758
42759 bitcoinjs.bitcoin.networks.hempcoin = {
42760 messagePrefix: '\x18Hempcoin Signed Message:\n',
42761 bip32: {
42762 public: 0x0488b21e,
42763 private: 0x0488ade4,
42764 },
42765 pubKeyHash: 0x28,
42766 scriptHash: 0x08,
42767 wif: 0xa8,
42768 };
42769
42770 bitcoinjs.bitcoin.networks.insane = {
42771 messagePrefix: '\x18INSaNe Signed Message:\n',
42772 bip32: {
42773 public: 0x0488B21E,
42774 private: 0x0488ADE4,
42775 },
42776 pubKeyHash: 0x66,
42777 scriptHash: 0x39,
42778 wif: 0x37,
42779 };
42780
42781 bitcoinjs.bitcoin.networks.iop = {
42782 messagePrefix: '\x18IoP Signed Message:\n',
42783 bip32: {
42784 public: 0x2780915F,
42785 private: 0xAE3416F6,
42786 },
42787 pubKeyHash: 0x75,
42788 scriptHash: 0xae,
42789 wif: 0x31,
42790 };
42791
42792 bitcoinjs.bitcoin.networks.ixcoin = {
42793 messagePrefix: '\x18Ixcoin Signed Message:\n',
42794 bip32: {
42795 public: 0x0488B21E,
42796 private: 0x0488ADE4,
42797 },
42798 pubKeyHash: 0x8a,
42799 scriptHash: 0x05,
42800 wif: 0x80,
42801 };
42802
42803 bitcoinjs.bitcoin.networks.kobocoin = {
42804 messagePrefix: '\x18Kobocoin Signed Message:\n',
42805 bip32: {
42806 public: 0x0488B21E,
42807 private: 0x0488ADE4,
42808 },
42809 pubKeyHash: 0x23,
42810 scriptHash: 0x1c,
42811 wif: 0xa3,
42812 };
42813
42814 bitcoinjs.bitcoin.networks.landcoin = {
42815 messagePrefix: '\x18Landcoin Signed Message:\n',
42816 bip32: {
42817 public: 0x0488B21E,
42818 private: 0x0488ADE4,
42819 },
42820 pubKeyHash: 0x30,
42821 scriptHash: 0x7a,
42822 wif: 0xb0,
42823 };
42824
42825 bitcoinjs.bitcoin.networks.lbry = {
42826 messagePrefix: '\x18LBRYcrd Signed Message:\n',
42827 bip32: {
42828 public: 0x0488B21E,
42829 private: 0x0488ADE4,
42830 },
42831 pubKeyHash: 0x55,
42832 scriptHash: 0x7a,
42833 wif: 0x1c,
42834 };
42835
42836 bitcoinjs.bitcoin.networks.linx = {
42837 messagePrefix: '\x18LinX Signed Message:\n',
42838 bip32: {
42839 public: 0x0488b21e,
42840 private: 0x0488ade4,
42841 },
42842 pubKeyHash: 0x4b,
42843 scriptHash: 0x05,
42844 wif: 0xcb,
42845 };
42846
42847 bitcoinjs.bitcoin.networks.litecoincash = {
42848 messagePrefix: '\x18Litecoin Signed Message:\n',
42849 bip32: {
42850 public: 0x0488B21E,
42851 private: 0x0488ADE4,
42852 },
42853 pubKeyHash: 0x1c,
42854 scriptHash: 0x05,
42855 wif: 0xb0,
42856 };
42857
42858 bitcoinjs.bitcoin.networks.lynx = {
42859 messagePrefix: '\x18Lynx Signed Message:\n',
42860 bip32: {
42861 public: 0x0488B21E,
42862 private: 0x0488ADE4,
42863 },
42864 pubKeyHash: 0x2d,
42865 scriptHash: 0x32,
42866 wif: 0xad,
42867 };
42868
42869 bitcoinjs.bitcoin.networks.minexcoin = {
42870 messagePrefix: '\x18Bitcoin Signed Message:\n',
42871 bip32: {
42872 public: 0x0488B21E,
42873 private: 0x0488ADE4,
42874 },
42875 pubKeyHash: 0x4b,
42876 scriptHash: 0x05,
42877 wif: 0x80,
42878 };
42879
42880 bitcoinjs.bitcoin.networks.navcoin = {
42881 messagePrefix: '\x18Navcoin Signed Message:\n',
42882 bip32: {
42883 public: 0x0488B21E,
42884 private: 0x0488ADE4,
42885 },
42886 pubKeyHash: 0x35,
42887 scriptHash: 0x55,
42888 wif: 0x96,
42889 };
42890
42891 bitcoinjs.bitcoin.networks.neoscoin = {
42892 messagePrefix: '\x18NeosCoin Signed Message:\n',
42893 bip32: {
42894 public: 0x0488B21E,
42895 private: 0x0488ADE4,
42896 },
42897 pubKeyHash: 0x35,
42898 scriptHash: 0x05,
42899 wif: 0xb1,
42900 };
42901
42902 bitcoinjs.bitcoin.networks.neurocoin = {
42903 messagePrefix: '\x18PPCoin Signed Message:\n',
42904 bip32: {
42905 public: 0x0488B21E,
42906 private: 0x0488ADE4,
42907 },
42908 pubKeyHash: 0x35,
42909 scriptHash: 0x75,
42910 wif: 0xb5,
42911 };
42912
42913 bitcoinjs.bitcoin.networks.newyorkc = {
42914 messagePrefix: '\x18newyorkc Signed Message:\n',
42915 bip32: {
42916 public: 0x0488b21e,
42917 private: 0x0488ade4,
42918 },
42919 pubKeyHash: 0x3c,
42920 scriptHash: 0x16,
42921 wif: 0xbc,
42922 };
42923
42924 bitcoinjs.bitcoin.networks.novacoin = {
42925 messagePrefix: '\x18NovaCoin Signed Message:\n',
42926 bip32: {
42927 public: 0x0488b21e,
42928 private: 0x0488ade4,
42929 },
42930 pubKeyHash: 0x08,
42931 scriptHash: 0x14,
42932 wif: 0x88,
42933 };
42934
42935 bitcoinjs.bitcoin.networks.nushares = {
42936 messagePrefix: '\x18Nu Signed Message:\n',
42937 bip32: {
42938 public: 0x0488b21e,
42939 private: 0x0488ade4,
42940 },
42941 pubKeyHash: 0x3f,
42942 scriptHash: 0x40,
42943 wif: 0x95,
42944 };
42945
42946 bitcoinjs.bitcoin.networks.okcash = {
42947 messagePrefix: '\x18OKCash Signed Message:\n',
42948 bip32: {
42949 public: 0x03CC23D7,
42950 private: 0x03CC1C73,
42951 },
42952 pubKeyHash: 0x37,
42953 scriptHash: 0x1c,
42954 wif: 0x03,
42955 };
42956
42957 bitcoinjs.bitcoin.networks.omnicore = {
42958 messagePrefix: '\x18Bitcoin Signed Message:\n',
42959 bip32: {
42960 public: 0x0488B21E,
42961 private: 0x0488ADE4,
42962 },
42963 pubKeyHash: 0x00,
42964 scriptHash: 0x05,
42965 wif: 0x80,
42966 };
42967
42968 bitcoinjs.bitcoin.networks.pesobit = {
42969 messagePrefix: '\x18Pesobit Signed Message:\n',
42970 bip32: {
42971 public: 0x0488b21e,
42972 private: 0x0488ade4,
42973 },
42974 pubKeyHash: 0x37,
42975 scriptHash: 0x55,
42976 wif: 0xb7,
42977 };
42978
42979 bitcoinjs.bitcoin.networks.pinkcoin = {
42980 messagePrefix: '\x18Pinkcoin Signed Message:\n',
42981 bip32: {
42982 public: 0x0488b21e,
42983 private: 0x0488ade4,
42984 },
42985 pubKeyHash: 0x03,
42986 scriptHash: 0x1c,
42987 wif: 0x83,
42988 };
42989
42990 bitcoinjs.bitcoin.networks.poswcoin = {
42991 messagePrefix: '\x18Poswcoin Signed Message:\n',
42992 bip32: {
42993 public: 0x0488b21e,
42994 private: 0x0488ade4,
42995 },
42996 pubKeyHash: 0x37,
42997 scriptHash: 0x55,
42998 wif: 0xb7,
42999 };
43000
43001 bitcoinjs.bitcoin.networks.potcoin = {
43002 messagePrefix: '\x18Potcoin Signed Message:\n',
43003 bip32: {
43004 public: 0x0488b21e,
43005 private: 0x0488ade4,
43006 },
43007 pubKeyHash: 0x37,
43008 scriptHash: 0x05,
43009 wif: 0xb7,
43010 };
43011
43012 bitcoinjs.bitcoin.networks.putincoin = {
43013 messagePrefix: '\x18PutinCoin Signed Message:\n',
43014 bip32: {
43015 public: 0x0488b21e,
43016 private: 0x0488ade4,
43017 },
43018 pubKeyHash: 0x37,
43019 scriptHash: 0x14,
43020 wif: 0xb7,
43021 };
43022
43023 bitcoinjs.bitcoin.networks.reddcoin = {
43024 messagePrefix: '\x18Reddcoin Signed Message:\n',
43025 bip32: {
43026 public: 0x0488B21E,
43027 private: 0x0488ADE4,
43028 },
43029 pubKeyHash: 0x3d,
43030 scriptHash: 0x05,
43031 wif: 0xbd,
43032 };
43033
43034 bitcoinjs.bitcoin.networks.revolutionvr = {
43035 messagePrefix: '\x18Voxels Signed Message:\n',
43036 bip32: {
43037 public: 0x0488B21E,
43038 private: 0x0488ADE4,
43039 },
43040 pubKeyHash: 0x46,
43041 scriptHash: 0x05,
43042 wif: 0xc6,
43043 };
43044
43045 bitcoinjs.bitcoin.networks.rubycoin = {
43046 messagePrefix: '\x18Rubycoin Signed Message:\n',
43047 bip32: {
43048 public: 0x0488B21E,
43049 private: 0x0488ADE4,
43050 },
43051 pubKeyHash: 0x3c,
43052 scriptHash: 0x55,
43053 wif: 0xbc,
43054 };
43055
43056 bitcoinjs.bitcoin.networks.smileycoin = {
43057 messagePrefix: '\x18Smileycoin Signed Message:\n',
43058 bip32: {
43059 public: 0x1E562D9A,
43060 private: 0x1E5631BC,
43061 },
43062 pubKeyHash: 0x19,
43063 scriptHash: 0x05,
43064 wif: 0x05,
43065 };
43066
43067 bitcoinjs.bitcoin.networks.solarcoin = {
43068 messagePrefix: '\x18SolarCoin Signed Message:\n',
43069 bip32: {
43070 public: 0x0488b21e,
43071 private: 0x0488ade4,
43072 },
43073 pubKeyHash: 0x12,
43074 scriptHash: 0x05,
43075 wif: 0x92,
43076 };
43077
43078 bitcoinjs.bitcoin.networks.stratis = {
43079 messagePrefix: '\x18Stratis Signed Message:\n',
43080 bip32: {
43081 public: 0x0488B21E,
43082 private: 0x0488ADE4,
43083 },
43084 pubKeyHash: 0x3f,
43085 scriptHash: 0x7d,
43086 wif: 0xbf,
43087 };
43088
43089 bitcoinjs.bitcoin.networks.syscoin = {
43090 messagePrefix: '\x18Syscoin Signed Message:\n',
43091 bip32: {
43092 public: 0x0488B21E,
43093 private: 0x0488ADE4,
43094 },
43095 pubKeyHash: 0x3f,
43096 scriptHash: 0x05,
43097 wif: 0xbf,
43098 };
43099
43100
43101 bitcoinjs.bitcoin.networks.toa = {
43102 messagePrefix: '\x18TOA Signed Message:\n',
43103 bip32: {
43104 public: 0x0488b21e,
43105 private: 0x0488ade4,
43106 },
43107 pubKeyHash: 0x41,
43108 scriptHash: 0x17,
43109 wif: 0xc1,
43110 };
43111
43112 bitcoinjs.bitcoin.networks.ultimatesecurecash = {
43113 messagePrefix: '\x18UltimateSecureCash Signed Message:\n',
43114 bip32: {
43115 public: 0xEE80286A,
43116 private: 0xEE8031E8,
43117 },
43118 pubKeyHash: 0x44,
43119 scriptHash: 0x7d,
43120 wif: 0xbf,
43121 };
43122
43123 bitcoinjs.bitcoin.networks.unobtanium = {
43124 messagePrefix: '\x18Unobtanium Signed Message:\n',
43125 bip32: {
43126 public: 0x0488B21E,
43127 private: 0x0488ADE4,
43128 },
43129 pubKeyHash: 0x82,
43130 scriptHash: 0x1e,
43131 wif: 0xe0,
43132 };
43133
43134 bitcoinjs.bitcoin.networks.vcash = {
43135 messagePrefix: '\x18Vcash Signed Message:\n',
43136 bip32: {
43137 public: 0x0488b21e,
43138 private: 0x0488ade4,
43139 },
43140 pubKeyHash: 0x47,
43141 scriptHash: 0x08,
43142 wif: 0xc7,
43143 };
43144
43145 bitcoinjs.bitcoin.networks.verge = {
43146 messagePrefix: '\x18VERGE Signed Message:\n',
43147 bip32: {
43148 public: 0x0488b21e,
43149 private: 0x0488ade4,
43150 },
43151 pubKeyHash: 0x1e,
43152 scriptHash: 0x21,
43153 wif: 0x9e,
43154 };
43155
43156 bitcoinjs.bitcoin.networks.vertcoin = {
43157 messagePrefix: '\x18Vertcoin Signed Message:\n',
43158 bip32: {
43159 public: 0x0488b21e,
43160 private: 0x0488ade4,
43161 },
43162 pubKeyHash: 0x47,
43163 scriptHash: 0x05,
43164 wif: 0x80,
43165 };
43166
43167 bitcoinjs.bitcoin.networks.vivo = {
43168 messagePrefix: '\x18DarkCoin Signed Message:\n',
43169 bip32: {
43170 public: 0x0488B21E,
43171 private: 0x0488ADE4,
43172 },
43173 pubKeyHash: 0x46,
43174 scriptHash: 0x0a,
43175 wif: 0xc6,
43176 };
43177
43178 bitcoinjs.bitcoin.networks.vpncoin = {
43179 messagePrefix: '\x18VpnCoin Signed Message:\n',
43180 bip32: {
43181 public: 0x0488b21e,
43182 private: 0x0488ade4,
43183 },
43184 pubKeyHash: 0x47,
43185 scriptHash: 0x05,
43186 wif: 0xc7,
43187 };
43188
43189 bitcoinjs.bitcoin.networks.whitecoin = {
43190 messagePrefix: '\x18Whitecoin Signed Message:\n',
43191 bip32: {
43192 public: 0x04887F1E,
43193 private: 0x048894ED,
43194 },
43195 pubKeyHash: 0x49,
43196 scriptHash: 0x57,
43197 wif: 0xc9,
43198 };
43199
43200 bitcoinjs.bitcoin.networks.wincoin = {
43201 messagePrefix: '\x18WinCoin Signed Message:\n',
43202 bip32: {
43203 public: 0x0488b21e,
43204 private: 0x0488ade4,
43205 },
43206 pubKeyHash: 0x49,
43207 scriptHash: 0x1c,
43208 wif: 0xc9,
43209 };
43210
43211 bitcoinjs.bitcoin.networks.zcoin = {
43212 messagePrefix: '\x18Zcoin Signed Message:\n',
43213 bip32: {
43214 public: 0x0488B21E,
43215 private: 0x0488ADE4,
43216 },
43217 pubKeyHash: 0x52,
43218 scriptHash: 0x07,
43219 wif: 0xd2,
43220 };
43221
43222 bitcoinjs.bitcoin.networks.zcash = {
43223 messagePrefix: '\x18Zcash Signed Message:\n',
43224 bip32: {
43225 public: 0x0488B21E,
43226 private: 0x0488ADE4,
43227 },
43228 pubKeyHash: 0x1CB8,
43229 scriptHash: 0x1CBD,
43230 wif: 0x80,
43231 };
43232 </script>
43233 <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.bitcoinjsBip38 = 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){
43234 var asn1 = exports;
43235
43236 asn1.bignum = require('bn.js');
43237
43238 asn1.define = require('./asn1/api').define;
43239 asn1.base = require('./asn1/base');
43240 asn1.constants = require('./asn1/constants');
43241 asn1.decoders = require('./asn1/decoders');
43242 asn1.encoders = require('./asn1/encoders');
43243
43244 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
43245 var asn1 = require('../asn1');
43246 var inherits = require('inherits');
43247
43248 var api = exports;
43249
43250 api.define = function define(name, body) {
43251 return new Entity(name, body);
43252 };
43253
43254 function Entity(name, body) {
43255 this.name = name;
43256 this.body = body;
43257
43258 this.decoders = {};
43259 this.encoders = {};
43260 };
43261
43262 Entity.prototype._createNamed = function createNamed(base) {
43263 var named;
43264 try {
43265 named = require('vm').runInThisContext(
43266 '(function ' + this.name + '(entity) {\n' +
43267 ' this._initNamed(entity);\n' +
43268 '})'
43269 );
43270 } catch (e) {
43271 named = function (entity) {
43272 this._initNamed(entity);
43273 };
43274 }
43275 inherits(named, base);
43276 named.prototype._initNamed = function initnamed(entity) {
43277 base.call(this, entity);
43278 };
43279
43280 return new named(this);
43281 };
43282
43283 Entity.prototype._getDecoder = function _getDecoder(enc) {
43284 enc = enc || 'der';
43285 // Lazily create decoder
43286 if (!this.decoders.hasOwnProperty(enc))
43287 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
43288 return this.decoders[enc];
43289 };
43290
43291 Entity.prototype.decode = function decode(data, enc, options) {
43292 return this._getDecoder(enc).decode(data, options);
43293 };
43294
43295 Entity.prototype._getEncoder = function _getEncoder(enc) {
43296 enc = enc || 'der';
43297 // Lazily create encoder
43298 if (!this.encoders.hasOwnProperty(enc))
43299 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
43300 return this.encoders[enc];
43301 };
43302
43303 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
43304 return this._getEncoder(enc).encode(data, reporter);
43305 };
43306
43307 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
43308 var inherits = require('inherits');
43309 var Reporter = require('../base').Reporter;
43310 var Buffer = require('buffer').Buffer;
43311
43312 function DecoderBuffer(base, options) {
43313 Reporter.call(this, options);
43314 if (!Buffer.isBuffer(base)) {
43315 this.error('Input not Buffer');
43316 return;
43317 }
43318
43319 this.base = base;
43320 this.offset = 0;
43321 this.length = base.length;
43322 }
43323 inherits(DecoderBuffer, Reporter);
43324 exports.DecoderBuffer = DecoderBuffer;
43325
43326 DecoderBuffer.prototype.save = function save() {
43327 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
43328 };
43329
43330 DecoderBuffer.prototype.restore = function restore(save) {
43331 // Return skipped data
43332 var res = new DecoderBuffer(this.base);
43333 res.offset = save.offset;
43334 res.length = this.offset;
43335
43336 this.offset = save.offset;
43337 Reporter.prototype.restore.call(this, save.reporter);
43338
43339 return res;
43340 };
43341
43342 DecoderBuffer.prototype.isEmpty = function isEmpty() {
43343 return this.offset === this.length;
43344 };
43345
43346 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
43347 if (this.offset + 1 <= this.length)
43348 return this.base.readUInt8(this.offset++, true);
43349 else
43350 return this.error(fail || 'DecoderBuffer overrun');
43351 }
43352
43353 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
43354 if (!(this.offset + bytes <= this.length))
43355 return this.error(fail || 'DecoderBuffer overrun');
43356
43357 var res = new DecoderBuffer(this.base);
43358
43359 // Share reporter state
43360 res._reporterState = this._reporterState;
43361
43362 res.offset = this.offset;
43363 res.length = this.offset + bytes;
43364 this.offset += bytes;
43365 return res;
43366 }
43367
43368 DecoderBuffer.prototype.raw = function raw(save) {
43369 return this.base.slice(save ? save.offset : this.offset, this.length);
43370 }
43371
43372 function EncoderBuffer(value, reporter) {
43373 if (Array.isArray(value)) {
43374 this.length = 0;
43375 this.value = value.map(function(item) {
43376 if (!(item instanceof EncoderBuffer))
43377 item = new EncoderBuffer(item, reporter);
43378 this.length += item.length;
43379 return item;
43380 }, this);
43381 } else if (typeof value === 'number') {
43382 if (!(0 <= value && value <= 0xff))
43383 return reporter.error('non-byte EncoderBuffer value');
43384 this.value = value;
43385 this.length = 1;
43386 } else if (typeof value === 'string') {
43387 this.value = value;
43388 this.length = Buffer.byteLength(value);
43389 } else if (Buffer.isBuffer(value)) {
43390 this.value = value;
43391 this.length = value.length;
43392 } else {
43393 return reporter.error('Unsupported type: ' + typeof value);
43394 }
43395 }
43396 exports.EncoderBuffer = EncoderBuffer;
43397
43398 EncoderBuffer.prototype.join = function join(out, offset) {
43399 if (!out)
43400 out = new Buffer(this.length);
43401 if (!offset)
43402 offset = 0;
43403
43404 if (this.length === 0)
43405 return out;
43406
43407 if (Array.isArray(this.value)) {
43408 this.value.forEach(function(item) {
43409 item.join(out, offset);
43410 offset += item.length;
43411 });
43412 } else {
43413 if (typeof this.value === 'number')
43414 out[offset] = this.value;
43415 else if (typeof this.value === 'string')
43416 out.write(this.value, offset);
43417 else if (Buffer.isBuffer(this.value))
43418 this.value.copy(out, offset);
43419 offset += this.length;
43420 }
43421
43422 return out;
43423 };
43424
43425 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
43426 var base = exports;
43427
43428 base.Reporter = require('./reporter').Reporter;
43429 base.DecoderBuffer = require('./buffer').DecoderBuffer;
43430 base.EncoderBuffer = require('./buffer').EncoderBuffer;
43431 base.Node = require('./node');
43432
43433 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
43434 var Reporter = require('../base').Reporter;
43435 var EncoderBuffer = require('../base').EncoderBuffer;
43436 var DecoderBuffer = require('../base').DecoderBuffer;
43437 var assert = require('minimalistic-assert');
43438
43439 // Supported tags
43440 var tags = [
43441 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
43442 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
43443 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
43444 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
43445 ];
43446
43447 // Public methods list
43448 var methods = [
43449 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
43450 'any', 'contains'
43451 ].concat(tags);
43452
43453 // Overrided methods list
43454 var overrided = [
43455 '_peekTag', '_decodeTag', '_use',
43456 '_decodeStr', '_decodeObjid', '_decodeTime',
43457 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
43458
43459 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
43460 '_encodeNull', '_encodeInt', '_encodeBool'
43461 ];
43462
43463 function Node(enc, parent) {
43464 var state = {};
43465 this._baseState = state;
43466
43467 state.enc = enc;
43468
43469 state.parent = parent || null;
43470 state.children = null;
43471
43472 // State
43473 state.tag = null;
43474 state.args = null;
43475 state.reverseArgs = null;
43476 state.choice = null;
43477 state.optional = false;
43478 state.any = false;
43479 state.obj = false;
43480 state.use = null;
43481 state.useDecoder = null;
43482 state.key = null;
43483 state['default'] = null;
43484 state.explicit = null;
43485 state.implicit = null;
43486 state.contains = null;
43487
43488 // Should create new instance on each method
43489 if (!state.parent) {
43490 state.children = [];
43491 this._wrap();
43492 }
43493 }
43494 module.exports = Node;
43495
43496 var stateProps = [
43497 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
43498 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
43499 'implicit', 'contains'
43500 ];
43501
43502 Node.prototype.clone = function clone() {
43503 var state = this._baseState;
43504 var cstate = {};
43505 stateProps.forEach(function(prop) {
43506 cstate[prop] = state[prop];
43507 });
43508 var res = new this.constructor(cstate.parent);
43509 res._baseState = cstate;
43510 return res;
43511 };
43512
43513 Node.prototype._wrap = function wrap() {
43514 var state = this._baseState;
43515 methods.forEach(function(method) {
43516 this[method] = function _wrappedMethod() {
43517 var clone = new this.constructor(this);
43518 state.children.push(clone);
43519 return clone[method].apply(clone, arguments);
43520 };
43521 }, this);
43522 };
43523
43524 Node.prototype._init = function init(body) {
43525 var state = this._baseState;
43526
43527 assert(state.parent === null);
43528 body.call(this);
43529
43530 // Filter children
43531 state.children = state.children.filter(function(child) {
43532 return child._baseState.parent === this;
43533 }, this);
43534 assert.equal(state.children.length, 1, 'Root node can have only one child');
43535 };
43536
43537 Node.prototype._useArgs = function useArgs(args) {
43538 var state = this._baseState;
43539
43540 // Filter children and args
43541 var children = args.filter(function(arg) {
43542 return arg instanceof this.constructor;
43543 }, this);
43544 args = args.filter(function(arg) {
43545 return !(arg instanceof this.constructor);
43546 }, this);
43547
43548 if (children.length !== 0) {
43549 assert(state.children === null);
43550 state.children = children;
43551
43552 // Replace parent to maintain backward link
43553 children.forEach(function(child) {
43554 child._baseState.parent = this;
43555 }, this);
43556 }
43557 if (args.length !== 0) {
43558 assert(state.args === null);
43559 state.args = args;
43560 state.reverseArgs = args.map(function(arg) {
43561 if (typeof arg !== 'object' || arg.constructor !== Object)
43562 return arg;
43563
43564 var res = {};
43565 Object.keys(arg).forEach(function(key) {
43566 if (key == (key | 0))
43567 key |= 0;
43568 var value = arg[key];
43569 res[value] = key;
43570 });
43571 return res;
43572 });
43573 }
43574 };
43575
43576 //
43577 // Overrided methods
43578 //
43579
43580 overrided.forEach(function(method) {
43581 Node.prototype[method] = function _overrided() {
43582 var state = this._baseState;
43583 throw new Error(method + ' not implemented for encoding: ' + state.enc);
43584 };
43585 });
43586
43587 //
43588 // Public methods
43589 //
43590
43591 tags.forEach(function(tag) {
43592 Node.prototype[tag] = function _tagMethod() {
43593 var state = this._baseState;
43594 var args = Array.prototype.slice.call(arguments);
43595
43596 assert(state.tag === null);
43597 state.tag = tag;
43598
43599 this._useArgs(args);
43600
43601 return this;
43602 };
43603 });
43604
43605 Node.prototype.use = function use(item) {
43606 assert(item);
43607 var state = this._baseState;
43608
43609 assert(state.use === null);
43610 state.use = item;
43611
43612 return this;
43613 };
43614
43615 Node.prototype.optional = function optional() {
43616 var state = this._baseState;
43617
43618 state.optional = true;
43619
43620 return this;
43621 };
43622
43623 Node.prototype.def = function def(val) {
43624 var state = this._baseState;
43625
43626 assert(state['default'] === null);
43627 state['default'] = val;
43628 state.optional = true;
43629
43630 return this;
43631 };
43632
43633 Node.prototype.explicit = function explicit(num) {
43634 var state = this._baseState;
43635
43636 assert(state.explicit === null && state.implicit === null);
43637 state.explicit = num;
43638
43639 return this;
43640 };
43641
43642 Node.prototype.implicit = function implicit(num) {
43643 var state = this._baseState;
43644
43645 assert(state.explicit === null && state.implicit === null);
43646 state.implicit = num;
43647
43648 return this;
43649 };
43650
43651 Node.prototype.obj = function obj() {
43652 var state = this._baseState;
43653 var args = Array.prototype.slice.call(arguments);
43654
43655 state.obj = true;
43656
43657 if (args.length !== 0)
43658 this._useArgs(args);
43659
43660 return this;
43661 };
43662
43663 Node.prototype.key = function key(newKey) {
43664 var state = this._baseState;
43665
43666 assert(state.key === null);
43667 state.key = newKey;
43668
43669 return this;
43670 };
43671
43672 Node.prototype.any = function any() {
43673 var state = this._baseState;
43674
43675 state.any = true;
43676
43677 return this;
43678 };
43679
43680 Node.prototype.choice = function choice(obj) {
43681 var state = this._baseState;
43682
43683 assert(state.choice === null);
43684 state.choice = obj;
43685 this._useArgs(Object.keys(obj).map(function(key) {
43686 return obj[key];
43687 }));
43688
43689 return this;
43690 };
43691
43692 Node.prototype.contains = function contains(item) {
43693 var state = this._baseState;
43694
43695 assert(state.use === null);
43696 state.contains = item;
43697
43698 return this;
43699 };
43700
43701 //
43702 // Decoding
43703 //
43704
43705 Node.prototype._decode = function decode(input, options) {
43706 var state = this._baseState;
43707
43708 // Decode root node
43709 if (state.parent === null)
43710 return input.wrapResult(state.children[0]._decode(input, options));
43711
43712 var result = state['default'];
43713 var present = true;
43714
43715 var prevKey = null;
43716 if (state.key !== null)
43717 prevKey = input.enterKey(state.key);
43718
43719 // Check if tag is there
43720 if (state.optional) {
43721 var tag = null;
43722 if (state.explicit !== null)
43723 tag = state.explicit;
43724 else if (state.implicit !== null)
43725 tag = state.implicit;
43726 else if (state.tag !== null)
43727 tag = state.tag;
43728
43729 if (tag === null && !state.any) {
43730 // Trial and Error
43731 var save = input.save();
43732 try {
43733 if (state.choice === null)
43734 this._decodeGeneric(state.tag, input, options);
43735 else
43736 this._decodeChoice(input, options);
43737 present = true;
43738 } catch (e) {
43739 present = false;
43740 }
43741 input.restore(save);
43742 } else {
43743 present = this._peekTag(input, tag, state.any);
43744
43745 if (input.isError(present))
43746 return present;
43747 }
43748 }
43749
43750 // Push object on stack
43751 var prevObj;
43752 if (state.obj && present)
43753 prevObj = input.enterObject();
43754
43755 if (present) {
43756 // Unwrap explicit values
43757 if (state.explicit !== null) {
43758 var explicit = this._decodeTag(input, state.explicit);
43759 if (input.isError(explicit))
43760 return explicit;
43761 input = explicit;
43762 }
43763
43764 var start = input.offset;
43765
43766 // Unwrap implicit and normal values
43767 if (state.use === null && state.choice === null) {
43768 if (state.any)
43769 var save = input.save();
43770 var body = this._decodeTag(
43771 input,
43772 state.implicit !== null ? state.implicit : state.tag,
43773 state.any
43774 );
43775 if (input.isError(body))
43776 return body;
43777
43778 if (state.any)
43779 result = input.raw(save);
43780 else
43781 input = body;
43782 }
43783
43784 if (options && options.track && state.tag !== null)
43785 options.track(input.path(), start, input.length, 'tagged');
43786
43787 if (options && options.track && state.tag !== null)
43788 options.track(input.path(), input.offset, input.length, 'content');
43789
43790 // Select proper method for tag
43791 if (state.any)
43792 result = result;
43793 else if (state.choice === null)
43794 result = this._decodeGeneric(state.tag, input, options);
43795 else
43796 result = this._decodeChoice(input, options);
43797
43798 if (input.isError(result))
43799 return result;
43800
43801 // Decode children
43802 if (!state.any && state.choice === null && state.children !== null) {
43803 state.children.forEach(function decodeChildren(child) {
43804 // NOTE: We are ignoring errors here, to let parser continue with other
43805 // parts of encoded data
43806 child._decode(input, options);
43807 });
43808 }
43809
43810 // Decode contained/encoded by schema, only in bit or octet strings
43811 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
43812 var data = new DecoderBuffer(result);
43813 result = this._getUse(state.contains, input._reporterState.obj)
43814 ._decode(data, options);
43815 }
43816 }
43817
43818 // Pop object
43819 if (state.obj && present)
43820 result = input.leaveObject(prevObj);
43821
43822 // Set key
43823 if (state.key !== null && (result !== null || present === true))
43824 input.leaveKey(prevKey, state.key, result);
43825 else if (prevKey !== null)
43826 input.exitKey(prevKey);
43827
43828 return result;
43829 };
43830
43831 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
43832 var state = this._baseState;
43833
43834 if (tag === 'seq' || tag === 'set')
43835 return null;
43836 if (tag === 'seqof' || tag === 'setof')
43837 return this._decodeList(input, tag, state.args[0], options);
43838 else if (/str$/.test(tag))
43839 return this._decodeStr(input, tag, options);
43840 else if (tag === 'objid' && state.args)
43841 return this._decodeObjid(input, state.args[0], state.args[1], options);
43842 else if (tag === 'objid')
43843 return this._decodeObjid(input, null, null, options);
43844 else if (tag === 'gentime' || tag === 'utctime')
43845 return this._decodeTime(input, tag, options);
43846 else if (tag === 'null_')
43847 return this._decodeNull(input, options);
43848 else if (tag === 'bool')
43849 return this._decodeBool(input, options);
43850 else if (tag === 'objDesc')
43851 return this._decodeStr(input, tag, options);
43852 else if (tag === 'int' || tag === 'enum')
43853 return this._decodeInt(input, state.args && state.args[0], options);
43854
43855 if (state.use !== null) {
43856 return this._getUse(state.use, input._reporterState.obj)
43857 ._decode(input, options);
43858 } else {
43859 return input.error('unknown tag: ' + tag);
43860 }
43861 };
43862
43863 Node.prototype._getUse = function _getUse(entity, obj) {
43864
43865 var state = this._baseState;
43866 // Create altered use decoder if implicit is set
43867 state.useDecoder = this._use(entity, obj);
43868 assert(state.useDecoder._baseState.parent === null);
43869 state.useDecoder = state.useDecoder._baseState.children[0];
43870 if (state.implicit !== state.useDecoder._baseState.implicit) {
43871 state.useDecoder = state.useDecoder.clone();
43872 state.useDecoder._baseState.implicit = state.implicit;
43873 }
43874 return state.useDecoder;
43875 };
43876
43877 Node.prototype._decodeChoice = function decodeChoice(input, options) {
43878 var state = this._baseState;
43879 var result = null;
43880 var match = false;
43881
43882 Object.keys(state.choice).some(function(key) {
43883 var save = input.save();
43884 var node = state.choice[key];
43885 try {
43886 var value = node._decode(input, options);
43887 if (input.isError(value))
43888 return false;
43889
43890 result = { type: key, value: value };
43891 match = true;
43892 } catch (e) {
43893 input.restore(save);
43894 return false;
43895 }
43896 return true;
43897 }, this);
43898
43899 if (!match)
43900 return input.error('Choice not matched');
43901
43902 return result;
43903 };
43904
43905 //
43906 // Encoding
43907 //
43908
43909 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
43910 return new EncoderBuffer(data, this.reporter);
43911 };
43912
43913 Node.prototype._encode = function encode(data, reporter, parent) {
43914 var state = this._baseState;
43915 if (state['default'] !== null && state['default'] === data)
43916 return;
43917
43918 var result = this._encodeValue(data, reporter, parent);
43919 if (result === undefined)
43920 return;
43921
43922 if (this._skipDefault(result, reporter, parent))
43923 return;
43924
43925 return result;
43926 };
43927
43928 Node.prototype._encodeValue = function encode(data, reporter, parent) {
43929 var state = this._baseState;
43930
43931 // Decode root node
43932 if (state.parent === null)
43933 return state.children[0]._encode(data, reporter || new Reporter());
43934
43935 var result = null;
43936
43937 // Set reporter to share it with a child class
43938 this.reporter = reporter;
43939
43940 // Check if data is there
43941 if (state.optional && data === undefined) {
43942 if (state['default'] !== null)
43943 data = state['default']
43944 else
43945 return;
43946 }
43947
43948 // Encode children first
43949 var content = null;
43950 var primitive = false;
43951 if (state.any) {
43952 // Anything that was given is translated to buffer
43953 result = this._createEncoderBuffer(data);
43954 } else if (state.choice) {
43955 result = this._encodeChoice(data, reporter);
43956 } else if (state.contains) {
43957 content = this._getUse(state.contains, parent)._encode(data, reporter);
43958 primitive = true;
43959 } else if (state.children) {
43960 content = state.children.map(function(child) {
43961 if (child._baseState.tag === 'null_')
43962 return child._encode(null, reporter, data);
43963
43964 if (child._baseState.key === null)
43965 return reporter.error('Child should have a key');
43966 var prevKey = reporter.enterKey(child._baseState.key);
43967
43968 if (typeof data !== 'object')
43969 return reporter.error('Child expected, but input is not object');
43970
43971 var res = child._encode(data[child._baseState.key], reporter, data);
43972 reporter.leaveKey(prevKey);
43973
43974 return res;
43975 }, this).filter(function(child) {
43976 return child;
43977 });
43978 content = this._createEncoderBuffer(content);
43979 } else {
43980 if (state.tag === 'seqof' || state.tag === 'setof') {
43981 // TODO(indutny): this should be thrown on DSL level
43982 if (!(state.args && state.args.length === 1))
43983 return reporter.error('Too many args for : ' + state.tag);
43984
43985 if (!Array.isArray(data))
43986 return reporter.error('seqof/setof, but data is not Array');
43987
43988 var child = this.clone();
43989 child._baseState.implicit = null;
43990 content = this._createEncoderBuffer(data.map(function(item) {
43991 var state = this._baseState;
43992
43993 return this._getUse(state.args[0], data)._encode(item, reporter);
43994 }, child));
43995 } else if (state.use !== null) {
43996 result = this._getUse(state.use, parent)._encode(data, reporter);
43997 } else {
43998 content = this._encodePrimitive(state.tag, data);
43999 primitive = true;
44000 }
44001 }
44002
44003 // Encode data itself
44004 var result;
44005 if (!state.any && state.choice === null) {
44006 var tag = state.implicit !== null ? state.implicit : state.tag;
44007 var cls = state.implicit === null ? 'universal' : 'context';
44008
44009 if (tag === null) {
44010 if (state.use === null)
44011 reporter.error('Tag could be ommited only for .use()');
44012 } else {
44013 if (state.use === null)
44014 result = this._encodeComposite(tag, primitive, cls, content);
44015 }
44016 }
44017
44018 // Wrap in explicit
44019 if (state.explicit !== null)
44020 result = this._encodeComposite(state.explicit, false, 'context', result);
44021
44022 return result;
44023 };
44024
44025 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
44026 var state = this._baseState;
44027
44028 var node = state.choice[data.type];
44029 if (!node) {
44030 assert(
44031 false,
44032 data.type + ' not found in ' +
44033 JSON.stringify(Object.keys(state.choice)));
44034 }
44035 return node._encode(data.value, reporter);
44036 };
44037
44038 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
44039 var state = this._baseState;
44040
44041 if (/str$/.test(tag))
44042 return this._encodeStr(data, tag);
44043 else if (tag === 'objid' && state.args)
44044 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
44045 else if (tag === 'objid')
44046 return this._encodeObjid(data, null, null);
44047 else if (tag === 'gentime' || tag === 'utctime')
44048 return this._encodeTime(data, tag);
44049 else if (tag === 'null_')
44050 return this._encodeNull();
44051 else if (tag === 'int' || tag === 'enum')
44052 return this._encodeInt(data, state.args && state.reverseArgs[0]);
44053 else if (tag === 'bool')
44054 return this._encodeBool(data);
44055 else if (tag === 'objDesc')
44056 return this._encodeStr(data, tag);
44057 else
44058 throw new Error('Unsupported tag: ' + tag);
44059 };
44060
44061 Node.prototype._isNumstr = function isNumstr(str) {
44062 return /^[0-9 ]*$/.test(str);
44063 };
44064
44065 Node.prototype._isPrintstr = function isPrintstr(str) {
44066 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
44067 };
44068
44069 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
44070 var inherits = require('inherits');
44071
44072 function Reporter(options) {
44073 this._reporterState = {
44074 obj: null,
44075 path: [],
44076 options: options || {},
44077 errors: []
44078 };
44079 }
44080 exports.Reporter = Reporter;
44081
44082 Reporter.prototype.isError = function isError(obj) {
44083 return obj instanceof ReporterError;
44084 };
44085
44086 Reporter.prototype.save = function save() {
44087 var state = this._reporterState;
44088
44089 return { obj: state.obj, pathLen: state.path.length };
44090 };
44091
44092 Reporter.prototype.restore = function restore(data) {
44093 var state = this._reporterState;
44094
44095 state.obj = data.obj;
44096 state.path = state.path.slice(0, data.pathLen);
44097 };
44098
44099 Reporter.prototype.enterKey = function enterKey(key) {
44100 return this._reporterState.path.push(key);
44101 };
44102
44103 Reporter.prototype.exitKey = function exitKey(index) {
44104 var state = this._reporterState;
44105
44106 state.path = state.path.slice(0, index - 1);
44107 };
44108
44109 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
44110 var state = this._reporterState;
44111
44112 this.exitKey(index);
44113 if (state.obj !== null)
44114 state.obj[key] = value;
44115 };
44116
44117 Reporter.prototype.path = function path() {
44118 return this._reporterState.path.join('/');
44119 };
44120
44121 Reporter.prototype.enterObject = function enterObject() {
44122 var state = this._reporterState;
44123
44124 var prev = state.obj;
44125 state.obj = {};
44126 return prev;
44127 };
44128
44129 Reporter.prototype.leaveObject = function leaveObject(prev) {
44130 var state = this._reporterState;
44131
44132 var now = state.obj;
44133 state.obj = prev;
44134 return now;
44135 };
44136
44137 Reporter.prototype.error = function error(msg) {
44138 var err;
44139 var state = this._reporterState;
44140
44141 var inherited = msg instanceof ReporterError;
44142 if (inherited) {
44143 err = msg;
44144 } else {
44145 err = new ReporterError(state.path.map(function(elem) {
44146 return '[' + JSON.stringify(elem) + ']';
44147 }).join(''), msg.message || msg, msg.stack);
44148 }
44149
44150 if (!state.options.partial)
44151 throw err;
44152
44153 if (!inherited)
44154 state.errors.push(err);
44155
44156 return err;
44157 };
44158
44159 Reporter.prototype.wrapResult = function wrapResult(result) {
44160 var state = this._reporterState;
44161 if (!state.options.partial)
44162 return result;
44163
44164 return {
44165 result: this.isError(result) ? null : result,
44166 errors: state.errors
44167 };
44168 };
44169
44170 function ReporterError(path, msg) {
44171 this.path = path;
44172 this.rethrow(msg);
44173 };
44174 inherits(ReporterError, Error);
44175
44176 ReporterError.prototype.rethrow = function rethrow(msg) {
44177 this.message = msg + ' at: ' + (this.path || '(shallow)');
44178 if (Error.captureStackTrace)
44179 Error.captureStackTrace(this, ReporterError);
44180
44181 if (!this.stack) {
44182 try {
44183 // IE only adds stack when thrown
44184 throw new Error(this.message);
44185 } catch (e) {
44186 this.stack = e.stack;
44187 }
44188 }
44189 return this;
44190 };
44191
44192 },{"inherits":95}],7:[function(require,module,exports){
44193 var constants = require('../constants');
44194
44195 exports.tagClass = {
44196 0: 'universal',
44197 1: 'application',
44198 2: 'context',
44199 3: 'private'
44200 };
44201 exports.tagClassByName = constants._reverse(exports.tagClass);
44202
44203 exports.tag = {
44204 0x00: 'end',
44205 0x01: 'bool',
44206 0x02: 'int',
44207 0x03: 'bitstr',
44208 0x04: 'octstr',
44209 0x05: 'null_',
44210 0x06: 'objid',
44211 0x07: 'objDesc',
44212 0x08: 'external',
44213 0x09: 'real',
44214 0x0a: 'enum',
44215 0x0b: 'embed',
44216 0x0c: 'utf8str',
44217 0x0d: 'relativeOid',
44218 0x10: 'seq',
44219 0x11: 'set',
44220 0x12: 'numstr',
44221 0x13: 'printstr',
44222 0x14: 't61str',
44223 0x15: 'videostr',
44224 0x16: 'ia5str',
44225 0x17: 'utctime',
44226 0x18: 'gentime',
44227 0x19: 'graphstr',
44228 0x1a: 'iso646str',
44229 0x1b: 'genstr',
44230 0x1c: 'unistr',
44231 0x1d: 'charstr',
44232 0x1e: 'bmpstr'
44233 };
44234 exports.tagByName = constants._reverse(exports.tag);
44235
44236 },{"../constants":8}],8:[function(require,module,exports){
44237 var constants = exports;
44238
44239 // Helper
44240 constants._reverse = function reverse(map) {
44241 var res = {};
44242
44243 Object.keys(map).forEach(function(key) {
44244 // Convert key to integer if it is stringified
44245 if ((key | 0) == key)
44246 key = key | 0;
44247
44248 var value = map[key];
44249 res[value] = key;
44250 });
44251
44252 return res;
44253 };
44254
44255 constants.der = require('./der');
44256
44257 },{"./der":7}],9:[function(require,module,exports){
44258 var inherits = require('inherits');
44259
44260 var asn1 = require('../../asn1');
44261 var base = asn1.base;
44262 var bignum = asn1.bignum;
44263
44264 // Import DER constants
44265 var der = asn1.constants.der;
44266
44267 function DERDecoder(entity) {
44268 this.enc = 'der';
44269 this.name = entity.name;
44270 this.entity = entity;
44271
44272 // Construct base tree
44273 this.tree = new DERNode();
44274 this.tree._init(entity.body);
44275 };
44276 module.exports = DERDecoder;
44277
44278 DERDecoder.prototype.decode = function decode(data, options) {
44279 if (!(data instanceof base.DecoderBuffer))
44280 data = new base.DecoderBuffer(data, options);
44281
44282 return this.tree._decode(data, options);
44283 };
44284
44285 // Tree methods
44286
44287 function DERNode(parent) {
44288 base.Node.call(this, 'der', parent);
44289 }
44290 inherits(DERNode, base.Node);
44291
44292 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
44293 if (buffer.isEmpty())
44294 return false;
44295
44296 var state = buffer.save();
44297 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
44298 if (buffer.isError(decodedTag))
44299 return decodedTag;
44300
44301 buffer.restore(state);
44302
44303 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
44304 (decodedTag.tagStr + 'of') === tag || any;
44305 };
44306
44307 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
44308 var decodedTag = derDecodeTag(buffer,
44309 'Failed to decode tag of "' + tag + '"');
44310 if (buffer.isError(decodedTag))
44311 return decodedTag;
44312
44313 var len = derDecodeLen(buffer,
44314 decodedTag.primitive,
44315 'Failed to get length of "' + tag + '"');
44316
44317 // Failure
44318 if (buffer.isError(len))
44319 return len;
44320
44321 if (!any &&
44322 decodedTag.tag !== tag &&
44323 decodedTag.tagStr !== tag &&
44324 decodedTag.tagStr + 'of' !== tag) {
44325 return buffer.error('Failed to match tag: "' + tag + '"');
44326 }
44327
44328 if (decodedTag.primitive || len !== null)
44329 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44330
44331 // Indefinite length... find END tag
44332 var state = buffer.save();
44333 var res = this._skipUntilEnd(
44334 buffer,
44335 'Failed to skip indefinite length body: "' + this.tag + '"');
44336 if (buffer.isError(res))
44337 return res;
44338
44339 len = buffer.offset - state.offset;
44340 buffer.restore(state);
44341 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44342 };
44343
44344 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
44345 while (true) {
44346 var tag = derDecodeTag(buffer, fail);
44347 if (buffer.isError(tag))
44348 return tag;
44349 var len = derDecodeLen(buffer, tag.primitive, fail);
44350 if (buffer.isError(len))
44351 return len;
44352
44353 var res;
44354 if (tag.primitive || len !== null)
44355 res = buffer.skip(len)
44356 else
44357 res = this._skipUntilEnd(buffer, fail);
44358
44359 // Failure
44360 if (buffer.isError(res))
44361 return res;
44362
44363 if (tag.tagStr === 'end')
44364 break;
44365 }
44366 };
44367
44368 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
44369 options) {
44370 var result = [];
44371 while (!buffer.isEmpty()) {
44372 var possibleEnd = this._peekTag(buffer, 'end');
44373 if (buffer.isError(possibleEnd))
44374 return possibleEnd;
44375
44376 var res = decoder.decode(buffer, 'der', options);
44377 if (buffer.isError(res) && possibleEnd)
44378 break;
44379 result.push(res);
44380 }
44381 return result;
44382 };
44383
44384 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
44385 if (tag === 'bitstr') {
44386 var unused = buffer.readUInt8();
44387 if (buffer.isError(unused))
44388 return unused;
44389 return { unused: unused, data: buffer.raw() };
44390 } else if (tag === 'bmpstr') {
44391 var raw = buffer.raw();
44392 if (raw.length % 2 === 1)
44393 return buffer.error('Decoding of string type: bmpstr length mismatch');
44394
44395 var str = '';
44396 for (var i = 0; i < raw.length / 2; i++) {
44397 str += String.fromCharCode(raw.readUInt16BE(i * 2));
44398 }
44399 return str;
44400 } else if (tag === 'numstr') {
44401 var numstr = buffer.raw().toString('ascii');
44402 if (!this._isNumstr(numstr)) {
44403 return buffer.error('Decoding of string type: ' +
44404 'numstr unsupported characters');
44405 }
44406 return numstr;
44407 } else if (tag === 'octstr') {
44408 return buffer.raw();
44409 } else if (tag === 'objDesc') {
44410 return buffer.raw();
44411 } else if (tag === 'printstr') {
44412 var printstr = buffer.raw().toString('ascii');
44413 if (!this._isPrintstr(printstr)) {
44414 return buffer.error('Decoding of string type: ' +
44415 'printstr unsupported characters');
44416 }
44417 return printstr;
44418 } else if (/str$/.test(tag)) {
44419 return buffer.raw().toString();
44420 } else {
44421 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
44422 }
44423 };
44424
44425 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
44426 var result;
44427 var identifiers = [];
44428 var ident = 0;
44429 while (!buffer.isEmpty()) {
44430 var subident = buffer.readUInt8();
44431 ident <<= 7;
44432 ident |= subident & 0x7f;
44433 if ((subident & 0x80) === 0) {
44434 identifiers.push(ident);
44435 ident = 0;
44436 }
44437 }
44438 if (subident & 0x80)
44439 identifiers.push(ident);
44440
44441 var first = (identifiers[0] / 40) | 0;
44442 var second = identifiers[0] % 40;
44443
44444 if (relative)
44445 result = identifiers;
44446 else
44447 result = [first, second].concat(identifiers.slice(1));
44448
44449 if (values) {
44450 var tmp = values[result.join(' ')];
44451 if (tmp === undefined)
44452 tmp = values[result.join('.')];
44453 if (tmp !== undefined)
44454 result = tmp;
44455 }
44456
44457 return result;
44458 };
44459
44460 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
44461 var str = buffer.raw().toString();
44462 if (tag === 'gentime') {
44463 var year = str.slice(0, 4) | 0;
44464 var mon = str.slice(4, 6) | 0;
44465 var day = str.slice(6, 8) | 0;
44466 var hour = str.slice(8, 10) | 0;
44467 var min = str.slice(10, 12) | 0;
44468 var sec = str.slice(12, 14) | 0;
44469 } else if (tag === 'utctime') {
44470 var year = str.slice(0, 2) | 0;
44471 var mon = str.slice(2, 4) | 0;
44472 var day = str.slice(4, 6) | 0;
44473 var hour = str.slice(6, 8) | 0;
44474 var min = str.slice(8, 10) | 0;
44475 var sec = str.slice(10, 12) | 0;
44476 if (year < 70)
44477 year = 2000 + year;
44478 else
44479 year = 1900 + year;
44480 } else {
44481 return buffer.error('Decoding ' + tag + ' time is not supported yet');
44482 }
44483
44484 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
44485 };
44486
44487 DERNode.prototype._decodeNull = function decodeNull(buffer) {
44488 return null;
44489 };
44490
44491 DERNode.prototype._decodeBool = function decodeBool(buffer) {
44492 var res = buffer.readUInt8();
44493 if (buffer.isError(res))
44494 return res;
44495 else
44496 return res !== 0;
44497 };
44498
44499 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
44500 // Bigint, return as it is (assume big endian)
44501 var raw = buffer.raw();
44502 var res = new bignum(raw);
44503
44504 if (values)
44505 res = values[res.toString(10)] || res;
44506
44507 return res;
44508 };
44509
44510 DERNode.prototype._use = function use(entity, obj) {
44511 if (typeof entity === 'function')
44512 entity = entity(obj);
44513 return entity._getDecoder('der').tree;
44514 };
44515
44516 // Utility methods
44517
44518 function derDecodeTag(buf, fail) {
44519 var tag = buf.readUInt8(fail);
44520 if (buf.isError(tag))
44521 return tag;
44522
44523 var cls = der.tagClass[tag >> 6];
44524 var primitive = (tag & 0x20) === 0;
44525
44526 // Multi-octet tag - load
44527 if ((tag & 0x1f) === 0x1f) {
44528 var oct = tag;
44529 tag = 0;
44530 while ((oct & 0x80) === 0x80) {
44531 oct = buf.readUInt8(fail);
44532 if (buf.isError(oct))
44533 return oct;
44534
44535 tag <<= 7;
44536 tag |= oct & 0x7f;
44537 }
44538 } else {
44539 tag &= 0x1f;
44540 }
44541 var tagStr = der.tag[tag];
44542
44543 return {
44544 cls: cls,
44545 primitive: primitive,
44546 tag: tag,
44547 tagStr: tagStr
44548 };
44549 }
44550
44551 function derDecodeLen(buf, primitive, fail) {
44552 var len = buf.readUInt8(fail);
44553 if (buf.isError(len))
44554 return len;
44555
44556 // Indefinite form
44557 if (!primitive && len === 0x80)
44558 return null;
44559
44560 // Definite form
44561 if ((len & 0x80) === 0) {
44562 // Short form
44563 return len;
44564 }
44565
44566 // Long form
44567 var num = len & 0x7f;
44568 if (num > 4)
44569 return buf.error('length octect is too long');
44570
44571 len = 0;
44572 for (var i = 0; i < num; i++) {
44573 len <<= 8;
44574 var j = buf.readUInt8(fail);
44575 if (buf.isError(j))
44576 return j;
44577 len |= j;
44578 }
44579
44580 return len;
44581 }
44582
44583 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
44584 var decoders = exports;
44585
44586 decoders.der = require('./der');
44587 decoders.pem = require('./pem');
44588
44589 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
44590 var inherits = require('inherits');
44591 var Buffer = require('buffer').Buffer;
44592
44593 var DERDecoder = require('./der');
44594
44595 function PEMDecoder(entity) {
44596 DERDecoder.call(this, entity);
44597 this.enc = 'pem';
44598 };
44599 inherits(PEMDecoder, DERDecoder);
44600 module.exports = PEMDecoder;
44601
44602 PEMDecoder.prototype.decode = function decode(data, options) {
44603 var lines = data.toString().split(/[\r\n]+/g);
44604
44605 var label = options.label.toUpperCase();
44606
44607 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
44608 var start = -1;
44609 var end = -1;
44610 for (var i = 0; i < lines.length; i++) {
44611 var match = lines[i].match(re);
44612 if (match === null)
44613 continue;
44614
44615 if (match[2] !== label)
44616 continue;
44617
44618 if (start === -1) {
44619 if (match[1] !== 'BEGIN')
44620 break;
44621 start = i;
44622 } else {
44623 if (match[1] !== 'END')
44624 break;
44625 end = i;
44626 break;
44627 }
44628 }
44629 if (start === -1 || end === -1)
44630 throw new Error('PEM section not found for: ' + label);
44631
44632 var base64 = lines.slice(start + 1, end).join('');
44633 // Remove excessive symbols
44634 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
44635
44636 var input = new Buffer(base64, 'base64');
44637 return DERDecoder.prototype.decode.call(this, input, options);
44638 };
44639
44640 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
44641 var inherits = require('inherits');
44642 var Buffer = require('buffer').Buffer;
44643
44644 var asn1 = require('../../asn1');
44645 var base = asn1.base;
44646
44647 // Import DER constants
44648 var der = asn1.constants.der;
44649
44650 function DEREncoder(entity) {
44651 this.enc = 'der';
44652 this.name = entity.name;
44653 this.entity = entity;
44654
44655 // Construct base tree
44656 this.tree = new DERNode();
44657 this.tree._init(entity.body);
44658 };
44659 module.exports = DEREncoder;
44660
44661 DEREncoder.prototype.encode = function encode(data, reporter) {
44662 return this.tree._encode(data, reporter).join();
44663 };
44664
44665 // Tree methods
44666
44667 function DERNode(parent) {
44668 base.Node.call(this, 'der', parent);
44669 }
44670 inherits(DERNode, base.Node);
44671
44672 DERNode.prototype._encodeComposite = function encodeComposite(tag,
44673 primitive,
44674 cls,
44675 content) {
44676 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
44677
44678 // Short form
44679 if (content.length < 0x80) {
44680 var header = new Buffer(2);
44681 header[0] = encodedTag;
44682 header[1] = content.length;
44683 return this._createEncoderBuffer([ header, content ]);
44684 }
44685
44686 // Long form
44687 // Count octets required to store length
44688 var lenOctets = 1;
44689 for (var i = content.length; i >= 0x100; i >>= 8)
44690 lenOctets++;
44691
44692 var header = new Buffer(1 + 1 + lenOctets);
44693 header[0] = encodedTag;
44694 header[1] = 0x80 | lenOctets;
44695
44696 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
44697 header[i] = j & 0xff;
44698
44699 return this._createEncoderBuffer([ header, content ]);
44700 };
44701
44702 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
44703 if (tag === 'bitstr') {
44704 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
44705 } else if (tag === 'bmpstr') {
44706 var buf = new Buffer(str.length * 2);
44707 for (var i = 0; i < str.length; i++) {
44708 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
44709 }
44710 return this._createEncoderBuffer(buf);
44711 } else if (tag === 'numstr') {
44712 if (!this._isNumstr(str)) {
44713 return this.reporter.error('Encoding of string type: numstr supports ' +
44714 'only digits and space');
44715 }
44716 return this._createEncoderBuffer(str);
44717 } else if (tag === 'printstr') {
44718 if (!this._isPrintstr(str)) {
44719 return this.reporter.error('Encoding of string type: printstr supports ' +
44720 'only latin upper and lower case letters, ' +
44721 'digits, space, apostrophe, left and rigth ' +
44722 'parenthesis, plus sign, comma, hyphen, ' +
44723 'dot, slash, colon, equal sign, ' +
44724 'question mark');
44725 }
44726 return this._createEncoderBuffer(str);
44727 } else if (/str$/.test(tag)) {
44728 return this._createEncoderBuffer(str);
44729 } else if (tag === 'objDesc') {
44730 return this._createEncoderBuffer(str);
44731 } else {
44732 return this.reporter.error('Encoding of string type: ' + tag +
44733 ' unsupported');
44734 }
44735 };
44736
44737 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
44738 if (typeof id === 'string') {
44739 if (!values)
44740 return this.reporter.error('string objid given, but no values map found');
44741 if (!values.hasOwnProperty(id))
44742 return this.reporter.error('objid not found in values map');
44743 id = values[id].split(/[\s\.]+/g);
44744 for (var i = 0; i < id.length; i++)
44745 id[i] |= 0;
44746 } else if (Array.isArray(id)) {
44747 id = id.slice();
44748 for (var i = 0; i < id.length; i++)
44749 id[i] |= 0;
44750 }
44751
44752 if (!Array.isArray(id)) {
44753 return this.reporter.error('objid() should be either array or string, ' +
44754 'got: ' + JSON.stringify(id));
44755 }
44756
44757 if (!relative) {
44758 if (id[1] >= 40)
44759 return this.reporter.error('Second objid identifier OOB');
44760 id.splice(0, 2, id[0] * 40 + id[1]);
44761 }
44762
44763 // Count number of octets
44764 var size = 0;
44765 for (var i = 0; i < id.length; i++) {
44766 var ident = id[i];
44767 for (size++; ident >= 0x80; ident >>= 7)
44768 size++;
44769 }
44770
44771 var objid = new Buffer(size);
44772 var offset = objid.length - 1;
44773 for (var i = id.length - 1; i >= 0; i--) {
44774 var ident = id[i];
44775 objid[offset--] = ident & 0x7f;
44776 while ((ident >>= 7) > 0)
44777 objid[offset--] = 0x80 | (ident & 0x7f);
44778 }
44779
44780 return this._createEncoderBuffer(objid);
44781 };
44782
44783 function two(num) {
44784 if (num < 10)
44785 return '0' + num;
44786 else
44787 return num;
44788 }
44789
44790 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
44791 var str;
44792 var date = new Date(time);
44793
44794 if (tag === 'gentime') {
44795 str = [
44796 two(date.getFullYear()),
44797 two(date.getUTCMonth() + 1),
44798 two(date.getUTCDate()),
44799 two(date.getUTCHours()),
44800 two(date.getUTCMinutes()),
44801 two(date.getUTCSeconds()),
44802 'Z'
44803 ].join('');
44804 } else if (tag === 'utctime') {
44805 str = [
44806 two(date.getFullYear() % 100),
44807 two(date.getUTCMonth() + 1),
44808 two(date.getUTCDate()),
44809 two(date.getUTCHours()),
44810 two(date.getUTCMinutes()),
44811 two(date.getUTCSeconds()),
44812 'Z'
44813 ].join('');
44814 } else {
44815 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
44816 }
44817
44818 return this._encodeStr(str, 'octstr');
44819 };
44820
44821 DERNode.prototype._encodeNull = function encodeNull() {
44822 return this._createEncoderBuffer('');
44823 };
44824
44825 DERNode.prototype._encodeInt = function encodeInt(num, values) {
44826 if (typeof num === 'string') {
44827 if (!values)
44828 return this.reporter.error('String int or enum given, but no values map');
44829 if (!values.hasOwnProperty(num)) {
44830 return this.reporter.error('Values map doesn\'t contain: ' +
44831 JSON.stringify(num));
44832 }
44833 num = values[num];
44834 }
44835
44836 // Bignum, assume big endian
44837 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
44838 var numArray = num.toArray();
44839 if (!num.sign && numArray[0] & 0x80) {
44840 numArray.unshift(0);
44841 }
44842 num = new Buffer(numArray);
44843 }
44844
44845 if (Buffer.isBuffer(num)) {
44846 var size = num.length;
44847 if (num.length === 0)
44848 size++;
44849
44850 var out = new Buffer(size);
44851 num.copy(out);
44852 if (num.length === 0)
44853 out[0] = 0
44854 return this._createEncoderBuffer(out);
44855 }
44856
44857 if (num < 0x80)
44858 return this._createEncoderBuffer(num);
44859
44860 if (num < 0x100)
44861 return this._createEncoderBuffer([0, num]);
44862
44863 var size = 1;
44864 for (var i = num; i >= 0x100; i >>= 8)
44865 size++;
44866
44867 var out = new Array(size);
44868 for (var i = out.length - 1; i >= 0; i--) {
44869 out[i] = num & 0xff;
44870 num >>= 8;
44871 }
44872 if(out[0] & 0x80) {
44873 out.unshift(0);
44874 }
44875
44876 return this._createEncoderBuffer(new Buffer(out));
44877 };
44878
44879 DERNode.prototype._encodeBool = function encodeBool(value) {
44880 return this._createEncoderBuffer(value ? 0xff : 0);
44881 };
44882
44883 DERNode.prototype._use = function use(entity, obj) {
44884 if (typeof entity === 'function')
44885 entity = entity(obj);
44886 return entity._getEncoder('der').tree;
44887 };
44888
44889 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
44890 var state = this._baseState;
44891 var i;
44892 if (state['default'] === null)
44893 return false;
44894
44895 var data = dataBuffer.join();
44896 if (state.defaultBuffer === undefined)
44897 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
44898
44899 if (data.length !== state.defaultBuffer.length)
44900 return false;
44901
44902 for (i=0; i < data.length; i++)
44903 if (data[i] !== state.defaultBuffer[i])
44904 return false;
44905
44906 return true;
44907 };
44908
44909 // Utility methods
44910
44911 function encodeTag(tag, primitive, cls, reporter) {
44912 var res;
44913
44914 if (tag === 'seqof')
44915 tag = 'seq';
44916 else if (tag === 'setof')
44917 tag = 'set';
44918
44919 if (der.tagByName.hasOwnProperty(tag))
44920 res = der.tagByName[tag];
44921 else if (typeof tag === 'number' && (tag | 0) === tag)
44922 res = tag;
44923 else
44924 return reporter.error('Unknown tag: ' + tag);
44925
44926 if (res >= 0x1f)
44927 return reporter.error('Multi-octet tag encoding unsupported');
44928
44929 if (!primitive)
44930 res |= 0x20;
44931
44932 res |= (der.tagClassByName[cls || 'universal'] << 6);
44933
44934 return res;
44935 }
44936
44937 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
44938 var encoders = exports;
44939
44940 encoders.der = require('./der');
44941 encoders.pem = require('./pem');
44942
44943 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
44944 var inherits = require('inherits');
44945
44946 var DEREncoder = require('./der');
44947
44948 function PEMEncoder(entity) {
44949 DEREncoder.call(this, entity);
44950 this.enc = 'pem';
44951 };
44952 inherits(PEMEncoder, DEREncoder);
44953 module.exports = PEMEncoder;
44954
44955 PEMEncoder.prototype.encode = function encode(data, options) {
44956 var buf = DEREncoder.prototype.encode.call(this, data);
44957
44958 var p = buf.toString('base64');
44959 var out = [ '-----BEGIN ' + options.label + '-----' ];
44960 for (var i = 0; i < p.length; i += 64)
44961 out.push(p.slice(i, i + 64));
44962 out.push('-----END ' + options.label + '-----');
44963 return out.join('\n');
44964 };
44965
44966 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
44967 (function (global){
44968 'use strict';
44969
44970 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
44971 // original notice:
44972
44973 /*!
44974 * The buffer module from node.js, for the browser.
44975 *
44976 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
44977 * @license MIT
44978 */
44979 function compare(a, b) {
44980 if (a === b) {
44981 return 0;
44982 }
44983
44984 var x = a.length;
44985 var y = b.length;
44986
44987 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
44988 if (a[i] !== b[i]) {
44989 x = a[i];
44990 y = b[i];
44991 break;
44992 }
44993 }
44994
44995 if (x < y) {
44996 return -1;
44997 }
44998 if (y < x) {
44999 return 1;
45000 }
45001 return 0;
45002 }
45003 function isBuffer(b) {
45004 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
45005 return global.Buffer.isBuffer(b);
45006 }
45007 return !!(b != null && b._isBuffer);
45008 }
45009
45010 // based on node assert, original notice:
45011
45012 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
45013 //
45014 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
45015 //
45016 // Originally from narwhal.js (http://narwhaljs.org)
45017 // Copyright (c) 2009 Thomas Robinson <280north.com>
45018 //
45019 // Permission is hereby granted, free of charge, to any person obtaining a copy
45020 // of this software and associated documentation files (the 'Software'), to
45021 // deal in the Software without restriction, including without limitation the
45022 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
45023 // sell copies of the Software, and to permit persons to whom the Software is
45024 // furnished to do so, subject to the following conditions:
45025 //
45026 // The above copyright notice and this permission notice shall be included in
45027 // all copies or substantial portions of the Software.
45028 //
45029 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45030 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45031 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45032 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
45033 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
45034 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45035
45036 var util = require('util/');
45037 var hasOwn = Object.prototype.hasOwnProperty;
45038 var pSlice = Array.prototype.slice;
45039 var functionsHaveNames = (function () {
45040 return function foo() {}.name === 'foo';
45041 }());
45042 function pToString (obj) {
45043 return Object.prototype.toString.call(obj);
45044 }
45045 function isView(arrbuf) {
45046 if (isBuffer(arrbuf)) {
45047 return false;
45048 }
45049 if (typeof global.ArrayBuffer !== 'function') {
45050 return false;
45051 }
45052 if (typeof ArrayBuffer.isView === 'function') {
45053 return ArrayBuffer.isView(arrbuf);
45054 }
45055 if (!arrbuf) {
45056 return false;
45057 }
45058 if (arrbuf instanceof DataView) {
45059 return true;
45060 }
45061 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
45062 return true;
45063 }
45064 return false;
45065 }
45066 // 1. The assert module provides functions that throw
45067 // AssertionError's when particular conditions are not met. The
45068 // assert module must conform to the following interface.
45069
45070 var assert = module.exports = ok;
45071
45072 // 2. The AssertionError is defined in assert.
45073 // new assert.AssertionError({ message: message,
45074 // actual: actual,
45075 // expected: expected })
45076
45077 var regex = /\s*function\s+([^\(\s]*)\s*/;
45078 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
45079 function getName(func) {
45080 if (!util.isFunction(func)) {
45081 return;
45082 }
45083 if (functionsHaveNames) {
45084 return func.name;
45085 }
45086 var str = func.toString();
45087 var match = str.match(regex);
45088 return match && match[1];
45089 }
45090 assert.AssertionError = function AssertionError(options) {
45091 this.name = 'AssertionError';
45092 this.actual = options.actual;
45093 this.expected = options.expected;
45094 this.operator = options.operator;
45095 if (options.message) {
45096 this.message = options.message;
45097 this.generatedMessage = false;
45098 } else {
45099 this.message = getMessage(this);
45100 this.generatedMessage = true;
45101 }
45102 var stackStartFunction = options.stackStartFunction || fail;
45103 if (Error.captureStackTrace) {
45104 Error.captureStackTrace(this, stackStartFunction);
45105 } else {
45106 // non v8 browsers so we can have a stacktrace
45107 var err = new Error();
45108 if (err.stack) {
45109 var out = err.stack;
45110
45111 // try to strip useless frames
45112 var fn_name = getName(stackStartFunction);
45113 var idx = out.indexOf('\n' + fn_name);
45114 if (idx >= 0) {
45115 // once we have located the function frame
45116 // we need to strip out everything before it (and its line)
45117 var next_line = out.indexOf('\n', idx + 1);
45118 out = out.substring(next_line + 1);
45119 }
45120
45121 this.stack = out;
45122 }
45123 }
45124 };
45125
45126 // assert.AssertionError instanceof Error
45127 util.inherits(assert.AssertionError, Error);
45128
45129 function truncate(s, n) {
45130 if (typeof s === 'string') {
45131 return s.length < n ? s : s.slice(0, n);
45132 } else {
45133 return s;
45134 }
45135 }
45136 function inspect(something) {
45137 if (functionsHaveNames || !util.isFunction(something)) {
45138 return util.inspect(something);
45139 }
45140 var rawname = getName(something);
45141 var name = rawname ? ': ' + rawname : '';
45142 return '[Function' + name + ']';
45143 }
45144 function getMessage(self) {
45145 return truncate(inspect(self.actual), 128) + ' ' +
45146 self.operator + ' ' +
45147 truncate(inspect(self.expected), 128);
45148 }
45149
45150 // At present only the three keys mentioned above are used and
45151 // understood by the spec. Implementations or sub modules can pass
45152 // other keys to the AssertionError's constructor - they will be
45153 // ignored.
45154
45155 // 3. All of the following functions must throw an AssertionError
45156 // when a corresponding condition is not met, with a message that
45157 // may be undefined if not provided. All assertion methods provide
45158 // both the actual and expected values to the assertion error for
45159 // display purposes.
45160
45161 function fail(actual, expected, message, operator, stackStartFunction) {
45162 throw new assert.AssertionError({
45163 message: message,
45164 actual: actual,
45165 expected: expected,
45166 operator: operator,
45167 stackStartFunction: stackStartFunction
45168 });
45169 }
45170
45171 // EXTENSION! allows for well behaved errors defined elsewhere.
45172 assert.fail = fail;
45173
45174 // 4. Pure assertion tests whether a value is truthy, as determined
45175 // by !!guard.
45176 // assert.ok(guard, message_opt);
45177 // This statement is equivalent to assert.equal(true, !!guard,
45178 // message_opt);. To test strictly for the value true, use
45179 // assert.strictEqual(true, guard, message_opt);.
45180
45181 function ok(value, message) {
45182 if (!value) fail(value, true, message, '==', assert.ok);
45183 }
45184 assert.ok = ok;
45185
45186 // 5. The equality assertion tests shallow, coercive equality with
45187 // ==.
45188 // assert.equal(actual, expected, message_opt);
45189
45190 assert.equal = function equal(actual, expected, message) {
45191 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
45192 };
45193
45194 // 6. The non-equality assertion tests for whether two objects are not equal
45195 // with != assert.notEqual(actual, expected, message_opt);
45196
45197 assert.notEqual = function notEqual(actual, expected, message) {
45198 if (actual == expected) {
45199 fail(actual, expected, message, '!=', assert.notEqual);
45200 }
45201 };
45202
45203 // 7. The equivalence assertion tests a deep equality relation.
45204 // assert.deepEqual(actual, expected, message_opt);
45205
45206 assert.deepEqual = function deepEqual(actual, expected, message) {
45207 if (!_deepEqual(actual, expected, false)) {
45208 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
45209 }
45210 };
45211
45212 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
45213 if (!_deepEqual(actual, expected, true)) {
45214 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
45215 }
45216 };
45217
45218 function _deepEqual(actual, expected, strict, memos) {
45219 // 7.1. All identical values are equivalent, as determined by ===.
45220 if (actual === expected) {
45221 return true;
45222 } else if (isBuffer(actual) && isBuffer(expected)) {
45223 return compare(actual, expected) === 0;
45224
45225 // 7.2. If the expected value is a Date object, the actual value is
45226 // equivalent if it is also a Date object that refers to the same time.
45227 } else if (util.isDate(actual) && util.isDate(expected)) {
45228 return actual.getTime() === expected.getTime();
45229
45230 // 7.3 If the expected value is a RegExp object, the actual value is
45231 // equivalent if it is also a RegExp object with the same source and
45232 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
45233 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
45234 return actual.source === expected.source &&
45235 actual.global === expected.global &&
45236 actual.multiline === expected.multiline &&
45237 actual.lastIndex === expected.lastIndex &&
45238 actual.ignoreCase === expected.ignoreCase;
45239
45240 // 7.4. Other pairs that do not both pass typeof value == 'object',
45241 // equivalence is determined by ==.
45242 } else if ((actual === null || typeof actual !== 'object') &&
45243 (expected === null || typeof expected !== 'object')) {
45244 return strict ? actual === expected : actual == expected;
45245
45246 // If both values are instances of typed arrays, wrap their underlying
45247 // ArrayBuffers in a Buffer each to increase performance
45248 // This optimization requires the arrays to have the same type as checked by
45249 // Object.prototype.toString (aka pToString). Never perform binary
45250 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
45251 // bit patterns are not identical.
45252 } else if (isView(actual) && isView(expected) &&
45253 pToString(actual) === pToString(expected) &&
45254 !(actual instanceof Float32Array ||
45255 actual instanceof Float64Array)) {
45256 return compare(new Uint8Array(actual.buffer),
45257 new Uint8Array(expected.buffer)) === 0;
45258
45259 // 7.5 For all other Object pairs, including Array objects, equivalence is
45260 // determined by having the same number of owned properties (as verified
45261 // with Object.prototype.hasOwnProperty.call), the same set of keys
45262 // (although not necessarily the same order), equivalent values for every
45263 // corresponding key, and an identical 'prototype' property. Note: this
45264 // accounts for both named and indexed properties on Arrays.
45265 } else if (isBuffer(actual) !== isBuffer(expected)) {
45266 return false;
45267 } else {
45268 memos = memos || {actual: [], expected: []};
45269
45270 var actualIndex = memos.actual.indexOf(actual);
45271 if (actualIndex !== -1) {
45272 if (actualIndex === memos.expected.indexOf(expected)) {
45273 return true;
45274 }
45275 }
45276
45277 memos.actual.push(actual);
45278 memos.expected.push(expected);
45279
45280 return objEquiv(actual, expected, strict, memos);
45281 }
45282 }
45283
45284 function isArguments(object) {
45285 return Object.prototype.toString.call(object) == '[object Arguments]';
45286 }
45287
45288 function objEquiv(a, b, strict, actualVisitedObjects) {
45289 if (a === null || a === undefined || b === null || b === undefined)
45290 return false;
45291 // if one is a primitive, the other must be same
45292 if (util.isPrimitive(a) || util.isPrimitive(b))
45293 return a === b;
45294 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
45295 return false;
45296 var aIsArgs = isArguments(a);
45297 var bIsArgs = isArguments(b);
45298 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
45299 return false;
45300 if (aIsArgs) {
45301 a = pSlice.call(a);
45302 b = pSlice.call(b);
45303 return _deepEqual(a, b, strict);
45304 }
45305 var ka = objectKeys(a);
45306 var kb = objectKeys(b);
45307 var key, i;
45308 // having the same number of owned properties (keys incorporates
45309 // hasOwnProperty)
45310 if (ka.length !== kb.length)
45311 return false;
45312 //the same set of keys (although not necessarily the same order),
45313 ka.sort();
45314 kb.sort();
45315 //~~~cheap key test
45316 for (i = ka.length - 1; i >= 0; i--) {
45317 if (ka[i] !== kb[i])
45318 return false;
45319 }
45320 //equivalent values for every corresponding key, and
45321 //~~~possibly expensive deep test
45322 for (i = ka.length - 1; i >= 0; i--) {
45323 key = ka[i];
45324 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
45325 return false;
45326 }
45327 return true;
45328 }
45329
45330 // 8. The non-equivalence assertion tests for any deep inequality.
45331 // assert.notDeepEqual(actual, expected, message_opt);
45332
45333 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
45334 if (_deepEqual(actual, expected, false)) {
45335 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
45336 }
45337 };
45338
45339 assert.notDeepStrictEqual = notDeepStrictEqual;
45340 function notDeepStrictEqual(actual, expected, message) {
45341 if (_deepEqual(actual, expected, true)) {
45342 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
45343 }
45344 }
45345
45346
45347 // 9. The strict equality assertion tests strict equality, as determined by ===.
45348 // assert.strictEqual(actual, expected, message_opt);
45349
45350 assert.strictEqual = function strictEqual(actual, expected, message) {
45351 if (actual !== expected) {
45352 fail(actual, expected, message, '===', assert.strictEqual);
45353 }
45354 };
45355
45356 // 10. The strict non-equality assertion tests for strict inequality, as
45357 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
45358
45359 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
45360 if (actual === expected) {
45361 fail(actual, expected, message, '!==', assert.notStrictEqual);
45362 }
45363 };
45364
45365 function expectedException(actual, expected) {
45366 if (!actual || !expected) {
45367 return false;
45368 }
45369
45370 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
45371 return expected.test(actual);
45372 }
45373
45374 try {
45375 if (actual instanceof expected) {
45376 return true;
45377 }
45378 } catch (e) {
45379 // Ignore. The instanceof check doesn't work for arrow functions.
45380 }
45381
45382 if (Error.isPrototypeOf(expected)) {
45383 return false;
45384 }
45385
45386 return expected.call({}, actual) === true;
45387 }
45388
45389 function _tryBlock(block) {
45390 var error;
45391 try {
45392 block();
45393 } catch (e) {
45394 error = e;
45395 }
45396 return error;
45397 }
45398
45399 function _throws(shouldThrow, block, expected, message) {
45400 var actual;
45401
45402 if (typeof block !== 'function') {
45403 throw new TypeError('"block" argument must be a function');
45404 }
45405
45406 if (typeof expected === 'string') {
45407 message = expected;
45408 expected = null;
45409 }
45410
45411 actual = _tryBlock(block);
45412
45413 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
45414 (message ? ' ' + message : '.');
45415
45416 if (shouldThrow && !actual) {
45417 fail(actual, expected, 'Missing expected exception' + message);
45418 }
45419
45420 var userProvidedMessage = typeof message === 'string';
45421 var isUnwantedException = !shouldThrow && util.isError(actual);
45422 var isUnexpectedException = !shouldThrow && actual && !expected;
45423
45424 if ((isUnwantedException &&
45425 userProvidedMessage &&
45426 expectedException(actual, expected)) ||
45427 isUnexpectedException) {
45428 fail(actual, expected, 'Got unwanted exception' + message);
45429 }
45430
45431 if ((shouldThrow && actual && expected &&
45432 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
45433 throw actual;
45434 }
45435 }
45436
45437 // 11. Expected to throw an error:
45438 // assert.throws(block, Error_opt, message_opt);
45439
45440 assert.throws = function(block, /*optional*/error, /*optional*/message) {
45441 _throws(true, block, error, message);
45442 };
45443
45444 // EXTENSION! This is annoying to write outside this module.
45445 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
45446 _throws(false, block, error, message);
45447 };
45448
45449 assert.ifError = function(err) { if (err) throw err; };
45450
45451 var objectKeys = Object.keys || function (obj) {
45452 var keys = [];
45453 for (var key in obj) {
45454 if (hasOwn.call(obj, key)) keys.push(key);
45455 }
45456 return keys;
45457 };
45458
45459 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
45460 },{"util/":148}],16:[function(require,module,exports){
45461 'use strict'
45462
45463 exports.byteLength = byteLength
45464 exports.toByteArray = toByteArray
45465 exports.fromByteArray = fromByteArray
45466
45467 var lookup = []
45468 var revLookup = []
45469 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
45470
45471 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
45472 for (var i = 0, len = code.length; i < len; ++i) {
45473 lookup[i] = code[i]
45474 revLookup[code.charCodeAt(i)] = i
45475 }
45476
45477 revLookup['-'.charCodeAt(0)] = 62
45478 revLookup['_'.charCodeAt(0)] = 63
45479
45480 function placeHoldersCount (b64) {
45481 var len = b64.length
45482 if (len % 4 > 0) {
45483 throw new Error('Invalid string. Length must be a multiple of 4')
45484 }
45485
45486 // the number of equal signs (place holders)
45487 // if there are two placeholders, than the two characters before it
45488 // represent one byte
45489 // if there is only one, then the three characters before it represent 2 bytes
45490 // this is just a cheap hack to not do indexOf twice
45491 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
45492 }
45493
45494 function byteLength (b64) {
45495 // base64 is 4/3 + up to two characters of the original data
45496 return b64.length * 3 / 4 - placeHoldersCount(b64)
45497 }
45498
45499 function toByteArray (b64) {
45500 var i, j, l, tmp, placeHolders, arr
45501 var len = b64.length
45502 placeHolders = placeHoldersCount(b64)
45503
45504 arr = new Arr(len * 3 / 4 - placeHolders)
45505
45506 // if there are placeholders, only get up to the last complete 4 chars
45507 l = placeHolders > 0 ? len - 4 : len
45508
45509 var L = 0
45510
45511 for (i = 0, j = 0; i < l; i += 4, j += 3) {
45512 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
45513 arr[L++] = (tmp >> 16) & 0xFF
45514 arr[L++] = (tmp >> 8) & 0xFF
45515 arr[L++] = tmp & 0xFF
45516 }
45517
45518 if (placeHolders === 2) {
45519 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
45520 arr[L++] = tmp & 0xFF
45521 } else if (placeHolders === 1) {
45522 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
45523 arr[L++] = (tmp >> 8) & 0xFF
45524 arr[L++] = tmp & 0xFF
45525 }
45526
45527 return arr
45528 }
45529
45530 function tripletToBase64 (num) {
45531 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
45532 }
45533
45534 function encodeChunk (uint8, start, end) {
45535 var tmp
45536 var output = []
45537 for (var i = start; i < end; i += 3) {
45538 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
45539 output.push(tripletToBase64(tmp))
45540 }
45541 return output.join('')
45542 }
45543
45544 function fromByteArray (uint8) {
45545 var tmp
45546 var len = uint8.length
45547 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
45548 var output = ''
45549 var parts = []
45550 var maxChunkLength = 16383 // must be multiple of 3
45551
45552 // go through the array every three bytes, we'll deal with trailing stuff later
45553 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
45554 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
45555 }
45556
45557 // pad the end with zeros, but make sure to not forget the extra bytes
45558 if (extraBytes === 1) {
45559 tmp = uint8[len - 1]
45560 output += lookup[tmp >> 2]
45561 output += lookup[(tmp << 4) & 0x3F]
45562 output += '=='
45563 } else if (extraBytes === 2) {
45564 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
45565 output += lookup[tmp >> 10]
45566 output += lookup[(tmp >> 4) & 0x3F]
45567 output += lookup[(tmp << 2) & 0x3F]
45568 output += '='
45569 }
45570
45571 parts.push(output)
45572
45573 return parts.join('')
45574 }
45575
45576 },{}],17:[function(require,module,exports){
45577 (function (module, exports) {
45578 'use strict';
45579
45580 // Utils
45581 function assert (val, msg) {
45582 if (!val) throw new Error(msg || 'Assertion failed');
45583 }
45584
45585 // Could use `inherits` module, but don't want to move from single file
45586 // architecture yet.
45587 function inherits (ctor, superCtor) {
45588 ctor.super_ = superCtor;
45589 var TempCtor = function () {};
45590 TempCtor.prototype = superCtor.prototype;
45591 ctor.prototype = new TempCtor();
45592 ctor.prototype.constructor = ctor;
45593 }
45594
45595 // BN
45596
45597 function BN (number, base, endian) {
45598 if (BN.isBN(number)) {
45599 return number;
45600 }
45601
45602 this.negative = 0;
45603 this.words = null;
45604 this.length = 0;
45605
45606 // Reduction context
45607 this.red = null;
45608
45609 if (number !== null) {
45610 if (base === 'le' || base === 'be') {
45611 endian = base;
45612 base = 10;
45613 }
45614
45615 this._init(number || 0, base || 10, endian || 'be');
45616 }
45617 }
45618 if (typeof module === 'object') {
45619 module.exports = BN;
45620 } else {
45621 exports.BN = BN;
45622 }
45623
45624 BN.BN = BN;
45625 BN.wordSize = 26;
45626
45627 var Buffer;
45628 try {
45629 Buffer = require('buf' + 'fer').Buffer;
45630 } catch (e) {
45631 }
45632
45633 BN.isBN = function isBN (num) {
45634 if (num instanceof BN) {
45635 return true;
45636 }
45637
45638 return num !== null && typeof num === 'object' &&
45639 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
45640 };
45641
45642 BN.max = function max (left, right) {
45643 if (left.cmp(right) > 0) return left;
45644 return right;
45645 };
45646
45647 BN.min = function min (left, right) {
45648 if (left.cmp(right) < 0) return left;
45649 return right;
45650 };
45651
45652 BN.prototype._init = function init (number, base, endian) {
45653 if (typeof number === 'number') {
45654 return this._initNumber(number, base, endian);
45655 }
45656
45657 if (typeof number === 'object') {
45658 return this._initArray(number, base, endian);
45659 }
45660
45661 if (base === 'hex') {
45662 base = 16;
45663 }
45664 assert(base === (base | 0) && base >= 2 && base <= 36);
45665
45666 number = number.toString().replace(/\s+/g, '');
45667 var start = 0;
45668 if (number[0] === '-') {
45669 start++;
45670 }
45671
45672 if (base === 16) {
45673 this._parseHex(number, start);
45674 } else {
45675 this._parseBase(number, base, start);
45676 }
45677
45678 if (number[0] === '-') {
45679 this.negative = 1;
45680 }
45681
45682 this.strip();
45683
45684 if (endian !== 'le') return;
45685
45686 this._initArray(this.toArray(), base, endian);
45687 };
45688
45689 BN.prototype._initNumber = function _initNumber (number, base, endian) {
45690 if (number < 0) {
45691 this.negative = 1;
45692 number = -number;
45693 }
45694 if (number < 0x4000000) {
45695 this.words = [ number & 0x3ffffff ];
45696 this.length = 1;
45697 } else if (number < 0x10000000000000) {
45698 this.words = [
45699 number & 0x3ffffff,
45700 (number / 0x4000000) & 0x3ffffff
45701 ];
45702 this.length = 2;
45703 } else {
45704 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
45705 this.words = [
45706 number & 0x3ffffff,
45707 (number / 0x4000000) & 0x3ffffff,
45708 1
45709 ];
45710 this.length = 3;
45711 }
45712
45713 if (endian !== 'le') return;
45714
45715 // Reverse the bytes
45716 this._initArray(this.toArray(), base, endian);
45717 };
45718
45719 BN.prototype._initArray = function _initArray (number, base, endian) {
45720 // Perhaps a Uint8Array
45721 assert(typeof number.length === 'number');
45722 if (number.length <= 0) {
45723 this.words = [ 0 ];
45724 this.length = 1;
45725 return this;
45726 }
45727
45728 this.length = Math.ceil(number.length / 3);
45729 this.words = new Array(this.length);
45730 for (var i = 0; i < this.length; i++) {
45731 this.words[i] = 0;
45732 }
45733
45734 var j, w;
45735 var off = 0;
45736 if (endian === 'be') {
45737 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
45738 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
45739 this.words[j] |= (w << off) & 0x3ffffff;
45740 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45741 off += 24;
45742 if (off >= 26) {
45743 off -= 26;
45744 j++;
45745 }
45746 }
45747 } else if (endian === 'le') {
45748 for (i = 0, j = 0; i < number.length; i += 3) {
45749 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
45750 this.words[j] |= (w << off) & 0x3ffffff;
45751 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45752 off += 24;
45753 if (off >= 26) {
45754 off -= 26;
45755 j++;
45756 }
45757 }
45758 }
45759 return this.strip();
45760 };
45761
45762 function parseHex (str, start, end) {
45763 var r = 0;
45764 var len = Math.min(str.length, end);
45765 for (var i = start; i < len; i++) {
45766 var c = str.charCodeAt(i) - 48;
45767
45768 r <<= 4;
45769
45770 // 'a' - 'f'
45771 if (c >= 49 && c <= 54) {
45772 r |= c - 49 + 0xa;
45773
45774 // 'A' - 'F'
45775 } else if (c >= 17 && c <= 22) {
45776 r |= c - 17 + 0xa;
45777
45778 // '0' - '9'
45779 } else {
45780 r |= c & 0xf;
45781 }
45782 }
45783 return r;
45784 }
45785
45786 BN.prototype._parseHex = function _parseHex (number, start) {
45787 // Create possibly bigger array to ensure that it fits the number
45788 this.length = Math.ceil((number.length - start) / 6);
45789 this.words = new Array(this.length);
45790 for (var i = 0; i < this.length; i++) {
45791 this.words[i] = 0;
45792 }
45793
45794 var j, w;
45795 // Scan 24-bit chunks and add them to the number
45796 var off = 0;
45797 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
45798 w = parseHex(number, i, i + 6);
45799 this.words[j] |= (w << off) & 0x3ffffff;
45800 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
45801 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45802 off += 24;
45803 if (off >= 26) {
45804 off -= 26;
45805 j++;
45806 }
45807 }
45808 if (i + 6 !== start) {
45809 w = parseHex(number, start, i + 6);
45810 this.words[j] |= (w << off) & 0x3ffffff;
45811 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45812 }
45813 this.strip();
45814 };
45815
45816 function parseBase (str, start, end, mul) {
45817 var r = 0;
45818 var len = Math.min(str.length, end);
45819 for (var i = start; i < len; i++) {
45820 var c = str.charCodeAt(i) - 48;
45821
45822 r *= mul;
45823
45824 // 'a'
45825 if (c >= 49) {
45826 r += c - 49 + 0xa;
45827
45828 // 'A'
45829 } else if (c >= 17) {
45830 r += c - 17 + 0xa;
45831
45832 // '0' - '9'
45833 } else {
45834 r += c;
45835 }
45836 }
45837 return r;
45838 }
45839
45840 BN.prototype._parseBase = function _parseBase (number, base, start) {
45841 // Initialize as zero
45842 this.words = [ 0 ];
45843 this.length = 1;
45844
45845 // Find length of limb in base
45846 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
45847 limbLen++;
45848 }
45849 limbLen--;
45850 limbPow = (limbPow / base) | 0;
45851
45852 var total = number.length - start;
45853 var mod = total % limbLen;
45854 var end = Math.min(total, total - mod) + start;
45855
45856 var word = 0;
45857 for (var i = start; i < end; i += limbLen) {
45858 word = parseBase(number, i, i + limbLen, base);
45859
45860 this.imuln(limbPow);
45861 if (this.words[0] + word < 0x4000000) {
45862 this.words[0] += word;
45863 } else {
45864 this._iaddn(word);
45865 }
45866 }
45867
45868 if (mod !== 0) {
45869 var pow = 1;
45870 word = parseBase(number, i, number.length, base);
45871
45872 for (i = 0; i < mod; i++) {
45873 pow *= base;
45874 }
45875
45876 this.imuln(pow);
45877 if (this.words[0] + word < 0x4000000) {
45878 this.words[0] += word;
45879 } else {
45880 this._iaddn(word);
45881 }
45882 }
45883 };
45884
45885 BN.prototype.copy = function copy (dest) {
45886 dest.words = new Array(this.length);
45887 for (var i = 0; i < this.length; i++) {
45888 dest.words[i] = this.words[i];
45889 }
45890 dest.length = this.length;
45891 dest.negative = this.negative;
45892 dest.red = this.red;
45893 };
45894
45895 BN.prototype.clone = function clone () {
45896 var r = new BN(null);
45897 this.copy(r);
45898 return r;
45899 };
45900
45901 BN.prototype._expand = function _expand (size) {
45902 while (this.length < size) {
45903 this.words[this.length++] = 0;
45904 }
45905 return this;
45906 };
45907
45908 // Remove leading `0` from `this`
45909 BN.prototype.strip = function strip () {
45910 while (this.length > 1 && this.words[this.length - 1] === 0) {
45911 this.length--;
45912 }
45913 return this._normSign();
45914 };
45915
45916 BN.prototype._normSign = function _normSign () {
45917 // -0 = 0
45918 if (this.length === 1 && this.words[0] === 0) {
45919 this.negative = 0;
45920 }
45921 return this;
45922 };
45923
45924 BN.prototype.inspect = function inspect () {
45925 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
45926 };
45927
45928 /*
45929
45930 var zeros = [];
45931 var groupSizes = [];
45932 var groupBases = [];
45933
45934 var s = '';
45935 var i = -1;
45936 while (++i < BN.wordSize) {
45937 zeros[i] = s;
45938 s += '0';
45939 }
45940 groupSizes[0] = 0;
45941 groupSizes[1] = 0;
45942 groupBases[0] = 0;
45943 groupBases[1] = 0;
45944 var base = 2 - 1;
45945 while (++base < 36 + 1) {
45946 var groupSize = 0;
45947 var groupBase = 1;
45948 while (groupBase < (1 << BN.wordSize) / base) {
45949 groupBase *= base;
45950 groupSize += 1;
45951 }
45952 groupSizes[base] = groupSize;
45953 groupBases[base] = groupBase;
45954 }
45955
45956 */
45957
45958 var zeros = [
45959 '',
45960 '0',
45961 '00',
45962 '000',
45963 '0000',
45964 '00000',
45965 '000000',
45966 '0000000',
45967 '00000000',
45968 '000000000',
45969 '0000000000',
45970 '00000000000',
45971 '000000000000',
45972 '0000000000000',
45973 '00000000000000',
45974 '000000000000000',
45975 '0000000000000000',
45976 '00000000000000000',
45977 '000000000000000000',
45978 '0000000000000000000',
45979 '00000000000000000000',
45980 '000000000000000000000',
45981 '0000000000000000000000',
45982 '00000000000000000000000',
45983 '000000000000000000000000',
45984 '0000000000000000000000000'
45985 ];
45986
45987 var groupSizes = [
45988 0, 0,
45989 25, 16, 12, 11, 10, 9, 8,
45990 8, 7, 7, 7, 7, 6, 6,
45991 6, 6, 6, 6, 6, 5, 5,
45992 5, 5, 5, 5, 5, 5, 5,
45993 5, 5, 5, 5, 5, 5, 5
45994 ];
45995
45996 var groupBases = [
45997 0, 0,
45998 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
45999 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
46000 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
46001 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
46002 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
46003 ];
46004
46005 BN.prototype.toString = function toString (base, padding) {
46006 base = base || 10;
46007 padding = padding | 0 || 1;
46008
46009 var out;
46010 if (base === 16 || base === 'hex') {
46011 out = '';
46012 var off = 0;
46013 var carry = 0;
46014 for (var i = 0; i < this.length; i++) {
46015 var w = this.words[i];
46016 var word = (((w << off) | carry) & 0xffffff).toString(16);
46017 carry = (w >>> (24 - off)) & 0xffffff;
46018 if (carry !== 0 || i !== this.length - 1) {
46019 out = zeros[6 - word.length] + word + out;
46020 } else {
46021 out = word + out;
46022 }
46023 off += 2;
46024 if (off >= 26) {
46025 off -= 26;
46026 i--;
46027 }
46028 }
46029 if (carry !== 0) {
46030 out = carry.toString(16) + out;
46031 }
46032 while (out.length % padding !== 0) {
46033 out = '0' + out;
46034 }
46035 if (this.negative !== 0) {
46036 out = '-' + out;
46037 }
46038 return out;
46039 }
46040
46041 if (base === (base | 0) && base >= 2 && base <= 36) {
46042 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
46043 var groupSize = groupSizes[base];
46044 // var groupBase = Math.pow(base, groupSize);
46045 var groupBase = groupBases[base];
46046 out = '';
46047 var c = this.clone();
46048 c.negative = 0;
46049 while (!c.isZero()) {
46050 var r = c.modn(groupBase).toString(base);
46051 c = c.idivn(groupBase);
46052
46053 if (!c.isZero()) {
46054 out = zeros[groupSize - r.length] + r + out;
46055 } else {
46056 out = r + out;
46057 }
46058 }
46059 if (this.isZero()) {
46060 out = '0' + out;
46061 }
46062 while (out.length % padding !== 0) {
46063 out = '0' + out;
46064 }
46065 if (this.negative !== 0) {
46066 out = '-' + out;
46067 }
46068 return out;
46069 }
46070
46071 assert(false, 'Base should be between 2 and 36');
46072 };
46073
46074 BN.prototype.toNumber = function toNumber () {
46075 var ret = this.words[0];
46076 if (this.length === 2) {
46077 ret += this.words[1] * 0x4000000;
46078 } else if (this.length === 3 && this.words[2] === 0x01) {
46079 // NOTE: at this stage it is known that the top bit is set
46080 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
46081 } else if (this.length > 2) {
46082 assert(false, 'Number can only safely store up to 53 bits');
46083 }
46084 return (this.negative !== 0) ? -ret : ret;
46085 };
46086
46087 BN.prototype.toJSON = function toJSON () {
46088 return this.toString(16);
46089 };
46090
46091 BN.prototype.toBuffer = function toBuffer (endian, length) {
46092 assert(typeof Buffer !== 'undefined');
46093 return this.toArrayLike(Buffer, endian, length);
46094 };
46095
46096 BN.prototype.toArray = function toArray (endian, length) {
46097 return this.toArrayLike(Array, endian, length);
46098 };
46099
46100 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
46101 var byteLength = this.byteLength();
46102 var reqLength = length || Math.max(1, byteLength);
46103 assert(byteLength <= reqLength, 'byte array longer than desired length');
46104 assert(reqLength > 0, 'Requested array length <= 0');
46105
46106 this.strip();
46107 var littleEndian = endian === 'le';
46108 var res = new ArrayType(reqLength);
46109
46110 var b, i;
46111 var q = this.clone();
46112 if (!littleEndian) {
46113 // Assume big-endian
46114 for (i = 0; i < reqLength - byteLength; i++) {
46115 res[i] = 0;
46116 }
46117
46118 for (i = 0; !q.isZero(); i++) {
46119 b = q.andln(0xff);
46120 q.iushrn(8);
46121
46122 res[reqLength - i - 1] = b;
46123 }
46124 } else {
46125 for (i = 0; !q.isZero(); i++) {
46126 b = q.andln(0xff);
46127 q.iushrn(8);
46128
46129 res[i] = b;
46130 }
46131
46132 for (; i < reqLength; i++) {
46133 res[i] = 0;
46134 }
46135 }
46136
46137 return res;
46138 };
46139
46140 if (Math.clz32) {
46141 BN.prototype._countBits = function _countBits (w) {
46142 return 32 - Math.clz32(w);
46143 };
46144 } else {
46145 BN.prototype._countBits = function _countBits (w) {
46146 var t = w;
46147 var r = 0;
46148 if (t >= 0x1000) {
46149 r += 13;
46150 t >>>= 13;
46151 }
46152 if (t >= 0x40) {
46153 r += 7;
46154 t >>>= 7;
46155 }
46156 if (t >= 0x8) {
46157 r += 4;
46158 t >>>= 4;
46159 }
46160 if (t >= 0x02) {
46161 r += 2;
46162 t >>>= 2;
46163 }
46164 return r + t;
46165 };
46166 }
46167
46168 BN.prototype._zeroBits = function _zeroBits (w) {
46169 // Short-cut
46170 if (w === 0) return 26;
46171
46172 var t = w;
46173 var r = 0;
46174 if ((t & 0x1fff) === 0) {
46175 r += 13;
46176 t >>>= 13;
46177 }
46178 if ((t & 0x7f) === 0) {
46179 r += 7;
46180 t >>>= 7;
46181 }
46182 if ((t & 0xf) === 0) {
46183 r += 4;
46184 t >>>= 4;
46185 }
46186 if ((t & 0x3) === 0) {
46187 r += 2;
46188 t >>>= 2;
46189 }
46190 if ((t & 0x1) === 0) {
46191 r++;
46192 }
46193 return r;
46194 };
46195
46196 // Return number of used bits in a BN
46197 BN.prototype.bitLength = function bitLength () {
46198 var w = this.words[this.length - 1];
46199 var hi = this._countBits(w);
46200 return (this.length - 1) * 26 + hi;
46201 };
46202
46203 function toBitArray (num) {
46204 var w = new Array(num.bitLength());
46205
46206 for (var bit = 0; bit < w.length; bit++) {
46207 var off = (bit / 26) | 0;
46208 var wbit = bit % 26;
46209
46210 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
46211 }
46212
46213 return w;
46214 }
46215
46216 // Number of trailing zero bits
46217 BN.prototype.zeroBits = function zeroBits () {
46218 if (this.isZero()) return 0;
46219
46220 var r = 0;
46221 for (var i = 0; i < this.length; i++) {
46222 var b = this._zeroBits(this.words[i]);
46223 r += b;
46224 if (b !== 26) break;
46225 }
46226 return r;
46227 };
46228
46229 BN.prototype.byteLength = function byteLength () {
46230 return Math.ceil(this.bitLength() / 8);
46231 };
46232
46233 BN.prototype.toTwos = function toTwos (width) {
46234 if (this.negative !== 0) {
46235 return this.abs().inotn(width).iaddn(1);
46236 }
46237 return this.clone();
46238 };
46239
46240 BN.prototype.fromTwos = function fromTwos (width) {
46241 if (this.testn(width - 1)) {
46242 return this.notn(width).iaddn(1).ineg();
46243 }
46244 return this.clone();
46245 };
46246
46247 BN.prototype.isNeg = function isNeg () {
46248 return this.negative !== 0;
46249 };
46250
46251 // Return negative clone of `this`
46252 BN.prototype.neg = function neg () {
46253 return this.clone().ineg();
46254 };
46255
46256 BN.prototype.ineg = function ineg () {
46257 if (!this.isZero()) {
46258 this.negative ^= 1;
46259 }
46260
46261 return this;
46262 };
46263
46264 // Or `num` with `this` in-place
46265 BN.prototype.iuor = function iuor (num) {
46266 while (this.length < num.length) {
46267 this.words[this.length++] = 0;
46268 }
46269
46270 for (var i = 0; i < num.length; i++) {
46271 this.words[i] = this.words[i] | num.words[i];
46272 }
46273
46274 return this.strip();
46275 };
46276
46277 BN.prototype.ior = function ior (num) {
46278 assert((this.negative | num.negative) === 0);
46279 return this.iuor(num);
46280 };
46281
46282 // Or `num` with `this`
46283 BN.prototype.or = function or (num) {
46284 if (this.length > num.length) return this.clone().ior(num);
46285 return num.clone().ior(this);
46286 };
46287
46288 BN.prototype.uor = function uor (num) {
46289 if (this.length > num.length) return this.clone().iuor(num);
46290 return num.clone().iuor(this);
46291 };
46292
46293 // And `num` with `this` in-place
46294 BN.prototype.iuand = function iuand (num) {
46295 // b = min-length(num, this)
46296 var b;
46297 if (this.length > num.length) {
46298 b = num;
46299 } else {
46300 b = this;
46301 }
46302
46303 for (var i = 0; i < b.length; i++) {
46304 this.words[i] = this.words[i] & num.words[i];
46305 }
46306
46307 this.length = b.length;
46308
46309 return this.strip();
46310 };
46311
46312 BN.prototype.iand = function iand (num) {
46313 assert((this.negative | num.negative) === 0);
46314 return this.iuand(num);
46315 };
46316
46317 // And `num` with `this`
46318 BN.prototype.and = function and (num) {
46319 if (this.length > num.length) return this.clone().iand(num);
46320 return num.clone().iand(this);
46321 };
46322
46323 BN.prototype.uand = function uand (num) {
46324 if (this.length > num.length) return this.clone().iuand(num);
46325 return num.clone().iuand(this);
46326 };
46327
46328 // Xor `num` with `this` in-place
46329 BN.prototype.iuxor = function iuxor (num) {
46330 // a.length > b.length
46331 var a;
46332 var b;
46333 if (this.length > num.length) {
46334 a = this;
46335 b = num;
46336 } else {
46337 a = num;
46338 b = this;
46339 }
46340
46341 for (var i = 0; i < b.length; i++) {
46342 this.words[i] = a.words[i] ^ b.words[i];
46343 }
46344
46345 if (this !== a) {
46346 for (; i < a.length; i++) {
46347 this.words[i] = a.words[i];
46348 }
46349 }
46350
46351 this.length = a.length;
46352
46353 return this.strip();
46354 };
46355
46356 BN.prototype.ixor = function ixor (num) {
46357 assert((this.negative | num.negative) === 0);
46358 return this.iuxor(num);
46359 };
46360
46361 // Xor `num` with `this`
46362 BN.prototype.xor = function xor (num) {
46363 if (this.length > num.length) return this.clone().ixor(num);
46364 return num.clone().ixor(this);
46365 };
46366
46367 BN.prototype.uxor = function uxor (num) {
46368 if (this.length > num.length) return this.clone().iuxor(num);
46369 return num.clone().iuxor(this);
46370 };
46371
46372 // Not ``this`` with ``width`` bitwidth
46373 BN.prototype.inotn = function inotn (width) {
46374 assert(typeof width === 'number' && width >= 0);
46375
46376 var bytesNeeded = Math.ceil(width / 26) | 0;
46377 var bitsLeft = width % 26;
46378
46379 // Extend the buffer with leading zeroes
46380 this._expand(bytesNeeded);
46381
46382 if (bitsLeft > 0) {
46383 bytesNeeded--;
46384 }
46385
46386 // Handle complete words
46387 for (var i = 0; i < bytesNeeded; i++) {
46388 this.words[i] = ~this.words[i] & 0x3ffffff;
46389 }
46390
46391 // Handle the residue
46392 if (bitsLeft > 0) {
46393 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
46394 }
46395
46396 // And remove leading zeroes
46397 return this.strip();
46398 };
46399
46400 BN.prototype.notn = function notn (width) {
46401 return this.clone().inotn(width);
46402 };
46403
46404 // Set `bit` of `this`
46405 BN.prototype.setn = function setn (bit, val) {
46406 assert(typeof bit === 'number' && bit >= 0);
46407
46408 var off = (bit / 26) | 0;
46409 var wbit = bit % 26;
46410
46411 this._expand(off + 1);
46412
46413 if (val) {
46414 this.words[off] = this.words[off] | (1 << wbit);
46415 } else {
46416 this.words[off] = this.words[off] & ~(1 << wbit);
46417 }
46418
46419 return this.strip();
46420 };
46421
46422 // Add `num` to `this` in-place
46423 BN.prototype.iadd = function iadd (num) {
46424 var r;
46425
46426 // negative + positive
46427 if (this.negative !== 0 && num.negative === 0) {
46428 this.negative = 0;
46429 r = this.isub(num);
46430 this.negative ^= 1;
46431 return this._normSign();
46432
46433 // positive + negative
46434 } else if (this.negative === 0 && num.negative !== 0) {
46435 num.negative = 0;
46436 r = this.isub(num);
46437 num.negative = 1;
46438 return r._normSign();
46439 }
46440
46441 // a.length > b.length
46442 var a, b;
46443 if (this.length > num.length) {
46444 a = this;
46445 b = num;
46446 } else {
46447 a = num;
46448 b = this;
46449 }
46450
46451 var carry = 0;
46452 for (var i = 0; i < b.length; i++) {
46453 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
46454 this.words[i] = r & 0x3ffffff;
46455 carry = r >>> 26;
46456 }
46457 for (; carry !== 0 && i < a.length; i++) {
46458 r = (a.words[i] | 0) + carry;
46459 this.words[i] = r & 0x3ffffff;
46460 carry = r >>> 26;
46461 }
46462
46463 this.length = a.length;
46464 if (carry !== 0) {
46465 this.words[this.length] = carry;
46466 this.length++;
46467 // Copy the rest of the words
46468 } else if (a !== this) {
46469 for (; i < a.length; i++) {
46470 this.words[i] = a.words[i];
46471 }
46472 }
46473
46474 return this;
46475 };
46476
46477 // Add `num` to `this`
46478 BN.prototype.add = function add (num) {
46479 var res;
46480 if (num.negative !== 0 && this.negative === 0) {
46481 num.negative = 0;
46482 res = this.sub(num);
46483 num.negative ^= 1;
46484 return res;
46485 } else if (num.negative === 0 && this.negative !== 0) {
46486 this.negative = 0;
46487 res = num.sub(this);
46488 this.negative = 1;
46489 return res;
46490 }
46491
46492 if (this.length > num.length) return this.clone().iadd(num);
46493
46494 return num.clone().iadd(this);
46495 };
46496
46497 // Subtract `num` from `this` in-place
46498 BN.prototype.isub = function isub (num) {
46499 // this - (-num) = this + num
46500 if (num.negative !== 0) {
46501 num.negative = 0;
46502 var r = this.iadd(num);
46503 num.negative = 1;
46504 return r._normSign();
46505
46506 // -this - num = -(this + num)
46507 } else if (this.negative !== 0) {
46508 this.negative = 0;
46509 this.iadd(num);
46510 this.negative = 1;
46511 return this._normSign();
46512 }
46513
46514 // At this point both numbers are positive
46515 var cmp = this.cmp(num);
46516
46517 // Optimization - zeroify
46518 if (cmp === 0) {
46519 this.negative = 0;
46520 this.length = 1;
46521 this.words[0] = 0;
46522 return this;
46523 }
46524
46525 // a > b
46526 var a, b;
46527 if (cmp > 0) {
46528 a = this;
46529 b = num;
46530 } else {
46531 a = num;
46532 b = this;
46533 }
46534
46535 var carry = 0;
46536 for (var i = 0; i < b.length; i++) {
46537 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
46538 carry = r >> 26;
46539 this.words[i] = r & 0x3ffffff;
46540 }
46541 for (; carry !== 0 && i < a.length; i++) {
46542 r = (a.words[i] | 0) + carry;
46543 carry = r >> 26;
46544 this.words[i] = r & 0x3ffffff;
46545 }
46546
46547 // Copy rest of the words
46548 if (carry === 0 && i < a.length && a !== this) {
46549 for (; i < a.length; i++) {
46550 this.words[i] = a.words[i];
46551 }
46552 }
46553
46554 this.length = Math.max(this.length, i);
46555
46556 if (a !== this) {
46557 this.negative = 1;
46558 }
46559
46560 return this.strip();
46561 };
46562
46563 // Subtract `num` from `this`
46564 BN.prototype.sub = function sub (num) {
46565 return this.clone().isub(num);
46566 };
46567
46568 function smallMulTo (self, num, out) {
46569 out.negative = num.negative ^ self.negative;
46570 var len = (self.length + num.length) | 0;
46571 out.length = len;
46572 len = (len - 1) | 0;
46573
46574 // Peel one iteration (compiler can't do it, because of code complexity)
46575 var a = self.words[0] | 0;
46576 var b = num.words[0] | 0;
46577 var r = a * b;
46578
46579 var lo = r & 0x3ffffff;
46580 var carry = (r / 0x4000000) | 0;
46581 out.words[0] = lo;
46582
46583 for (var k = 1; k < len; k++) {
46584 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
46585 // note that ncarry could be >= 0x3ffffff
46586 var ncarry = carry >>> 26;
46587 var rword = carry & 0x3ffffff;
46588 var maxJ = Math.min(k, num.length - 1);
46589 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
46590 var i = (k - j) | 0;
46591 a = self.words[i] | 0;
46592 b = num.words[j] | 0;
46593 r = a * b + rword;
46594 ncarry += (r / 0x4000000) | 0;
46595 rword = r & 0x3ffffff;
46596 }
46597 out.words[k] = rword | 0;
46598 carry = ncarry | 0;
46599 }
46600 if (carry !== 0) {
46601 out.words[k] = carry | 0;
46602 } else {
46603 out.length--;
46604 }
46605
46606 return out.strip();
46607 }
46608
46609 // TODO(indutny): it may be reasonable to omit it for users who don't need
46610 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
46611 // multiplication (like elliptic secp256k1).
46612 var comb10MulTo = function comb10MulTo (self, num, out) {
46613 var a = self.words;
46614 var b = num.words;
46615 var o = out.words;
46616 var c = 0;
46617 var lo;
46618 var mid;
46619 var hi;
46620 var a0 = a[0] | 0;
46621 var al0 = a0 & 0x1fff;
46622 var ah0 = a0 >>> 13;
46623 var a1 = a[1] | 0;
46624 var al1 = a1 & 0x1fff;
46625 var ah1 = a1 >>> 13;
46626 var a2 = a[2] | 0;
46627 var al2 = a2 & 0x1fff;
46628 var ah2 = a2 >>> 13;
46629 var a3 = a[3] | 0;
46630 var al3 = a3 & 0x1fff;
46631 var ah3 = a3 >>> 13;
46632 var a4 = a[4] | 0;
46633 var al4 = a4 & 0x1fff;
46634 var ah4 = a4 >>> 13;
46635 var a5 = a[5] | 0;
46636 var al5 = a5 & 0x1fff;
46637 var ah5 = a5 >>> 13;
46638 var a6 = a[6] | 0;
46639 var al6 = a6 & 0x1fff;
46640 var ah6 = a6 >>> 13;
46641 var a7 = a[7] | 0;
46642 var al7 = a7 & 0x1fff;
46643 var ah7 = a7 >>> 13;
46644 var a8 = a[8] | 0;
46645 var al8 = a8 & 0x1fff;
46646 var ah8 = a8 >>> 13;
46647 var a9 = a[9] | 0;
46648 var al9 = a9 & 0x1fff;
46649 var ah9 = a9 >>> 13;
46650 var b0 = b[0] | 0;
46651 var bl0 = b0 & 0x1fff;
46652 var bh0 = b0 >>> 13;
46653 var b1 = b[1] | 0;
46654 var bl1 = b1 & 0x1fff;
46655 var bh1 = b1 >>> 13;
46656 var b2 = b[2] | 0;
46657 var bl2 = b2 & 0x1fff;
46658 var bh2 = b2 >>> 13;
46659 var b3 = b[3] | 0;
46660 var bl3 = b3 & 0x1fff;
46661 var bh3 = b3 >>> 13;
46662 var b4 = b[4] | 0;
46663 var bl4 = b4 & 0x1fff;
46664 var bh4 = b4 >>> 13;
46665 var b5 = b[5] | 0;
46666 var bl5 = b5 & 0x1fff;
46667 var bh5 = b5 >>> 13;
46668 var b6 = b[6] | 0;
46669 var bl6 = b6 & 0x1fff;
46670 var bh6 = b6 >>> 13;
46671 var b7 = b[7] | 0;
46672 var bl7 = b7 & 0x1fff;
46673 var bh7 = b7 >>> 13;
46674 var b8 = b[8] | 0;
46675 var bl8 = b8 & 0x1fff;
46676 var bh8 = b8 >>> 13;
46677 var b9 = b[9] | 0;
46678 var bl9 = b9 & 0x1fff;
46679 var bh9 = b9 >>> 13;
46680
46681 out.negative = self.negative ^ num.negative;
46682 out.length = 19;
46683 /* k = 0 */
46684 lo = Math.imul(al0, bl0);
46685 mid = Math.imul(al0, bh0);
46686 mid = (mid + Math.imul(ah0, bl0)) | 0;
46687 hi = Math.imul(ah0, bh0);
46688 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46689 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
46690 w0 &= 0x3ffffff;
46691 /* k = 1 */
46692 lo = Math.imul(al1, bl0);
46693 mid = Math.imul(al1, bh0);
46694 mid = (mid + Math.imul(ah1, bl0)) | 0;
46695 hi = Math.imul(ah1, bh0);
46696 lo = (lo + Math.imul(al0, bl1)) | 0;
46697 mid = (mid + Math.imul(al0, bh1)) | 0;
46698 mid = (mid + Math.imul(ah0, bl1)) | 0;
46699 hi = (hi + Math.imul(ah0, bh1)) | 0;
46700 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46701 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
46702 w1 &= 0x3ffffff;
46703 /* k = 2 */
46704 lo = Math.imul(al2, bl0);
46705 mid = Math.imul(al2, bh0);
46706 mid = (mid + Math.imul(ah2, bl0)) | 0;
46707 hi = Math.imul(ah2, bh0);
46708 lo = (lo + Math.imul(al1, bl1)) | 0;
46709 mid = (mid + Math.imul(al1, bh1)) | 0;
46710 mid = (mid + Math.imul(ah1, bl1)) | 0;
46711 hi = (hi + Math.imul(ah1, bh1)) | 0;
46712 lo = (lo + Math.imul(al0, bl2)) | 0;
46713 mid = (mid + Math.imul(al0, bh2)) | 0;
46714 mid = (mid + Math.imul(ah0, bl2)) | 0;
46715 hi = (hi + Math.imul(ah0, bh2)) | 0;
46716 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46717 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
46718 w2 &= 0x3ffffff;
46719 /* k = 3 */
46720 lo = Math.imul(al3, bl0);
46721 mid = Math.imul(al3, bh0);
46722 mid = (mid + Math.imul(ah3, bl0)) | 0;
46723 hi = Math.imul(ah3, bh0);
46724 lo = (lo + Math.imul(al2, bl1)) | 0;
46725 mid = (mid + Math.imul(al2, bh1)) | 0;
46726 mid = (mid + Math.imul(ah2, bl1)) | 0;
46727 hi = (hi + Math.imul(ah2, bh1)) | 0;
46728 lo = (lo + Math.imul(al1, bl2)) | 0;
46729 mid = (mid + Math.imul(al1, bh2)) | 0;
46730 mid = (mid + Math.imul(ah1, bl2)) | 0;
46731 hi = (hi + Math.imul(ah1, bh2)) | 0;
46732 lo = (lo + Math.imul(al0, bl3)) | 0;
46733 mid = (mid + Math.imul(al0, bh3)) | 0;
46734 mid = (mid + Math.imul(ah0, bl3)) | 0;
46735 hi = (hi + Math.imul(ah0, bh3)) | 0;
46736 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46737 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
46738 w3 &= 0x3ffffff;
46739 /* k = 4 */
46740 lo = Math.imul(al4, bl0);
46741 mid = Math.imul(al4, bh0);
46742 mid = (mid + Math.imul(ah4, bl0)) | 0;
46743 hi = Math.imul(ah4, bh0);
46744 lo = (lo + Math.imul(al3, bl1)) | 0;
46745 mid = (mid + Math.imul(al3, bh1)) | 0;
46746 mid = (mid + Math.imul(ah3, bl1)) | 0;
46747 hi = (hi + Math.imul(ah3, bh1)) | 0;
46748 lo = (lo + Math.imul(al2, bl2)) | 0;
46749 mid = (mid + Math.imul(al2, bh2)) | 0;
46750 mid = (mid + Math.imul(ah2, bl2)) | 0;
46751 hi = (hi + Math.imul(ah2, bh2)) | 0;
46752 lo = (lo + Math.imul(al1, bl3)) | 0;
46753 mid = (mid + Math.imul(al1, bh3)) | 0;
46754 mid = (mid + Math.imul(ah1, bl3)) | 0;
46755 hi = (hi + Math.imul(ah1, bh3)) | 0;
46756 lo = (lo + Math.imul(al0, bl4)) | 0;
46757 mid = (mid + Math.imul(al0, bh4)) | 0;
46758 mid = (mid + Math.imul(ah0, bl4)) | 0;
46759 hi = (hi + Math.imul(ah0, bh4)) | 0;
46760 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46761 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
46762 w4 &= 0x3ffffff;
46763 /* k = 5 */
46764 lo = Math.imul(al5, bl0);
46765 mid = Math.imul(al5, bh0);
46766 mid = (mid + Math.imul(ah5, bl0)) | 0;
46767 hi = Math.imul(ah5, bh0);
46768 lo = (lo + Math.imul(al4, bl1)) | 0;
46769 mid = (mid + Math.imul(al4, bh1)) | 0;
46770 mid = (mid + Math.imul(ah4, bl1)) | 0;
46771 hi = (hi + Math.imul(ah4, bh1)) | 0;
46772 lo = (lo + Math.imul(al3, bl2)) | 0;
46773 mid = (mid + Math.imul(al3, bh2)) | 0;
46774 mid = (mid + Math.imul(ah3, bl2)) | 0;
46775 hi = (hi + Math.imul(ah3, bh2)) | 0;
46776 lo = (lo + Math.imul(al2, bl3)) | 0;
46777 mid = (mid + Math.imul(al2, bh3)) | 0;
46778 mid = (mid + Math.imul(ah2, bl3)) | 0;
46779 hi = (hi + Math.imul(ah2, bh3)) | 0;
46780 lo = (lo + Math.imul(al1, bl4)) | 0;
46781 mid = (mid + Math.imul(al1, bh4)) | 0;
46782 mid = (mid + Math.imul(ah1, bl4)) | 0;
46783 hi = (hi + Math.imul(ah1, bh4)) | 0;
46784 lo = (lo + Math.imul(al0, bl5)) | 0;
46785 mid = (mid + Math.imul(al0, bh5)) | 0;
46786 mid = (mid + Math.imul(ah0, bl5)) | 0;
46787 hi = (hi + Math.imul(ah0, bh5)) | 0;
46788 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46789 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
46790 w5 &= 0x3ffffff;
46791 /* k = 6 */
46792 lo = Math.imul(al6, bl0);
46793 mid = Math.imul(al6, bh0);
46794 mid = (mid + Math.imul(ah6, bl0)) | 0;
46795 hi = Math.imul(ah6, bh0);
46796 lo = (lo + Math.imul(al5, bl1)) | 0;
46797 mid = (mid + Math.imul(al5, bh1)) | 0;
46798 mid = (mid + Math.imul(ah5, bl1)) | 0;
46799 hi = (hi + Math.imul(ah5, bh1)) | 0;
46800 lo = (lo + Math.imul(al4, bl2)) | 0;
46801 mid = (mid + Math.imul(al4, bh2)) | 0;
46802 mid = (mid + Math.imul(ah4, bl2)) | 0;
46803 hi = (hi + Math.imul(ah4, bh2)) | 0;
46804 lo = (lo + Math.imul(al3, bl3)) | 0;
46805 mid = (mid + Math.imul(al3, bh3)) | 0;
46806 mid = (mid + Math.imul(ah3, bl3)) | 0;
46807 hi = (hi + Math.imul(ah3, bh3)) | 0;
46808 lo = (lo + Math.imul(al2, bl4)) | 0;
46809 mid = (mid + Math.imul(al2, bh4)) | 0;
46810 mid = (mid + Math.imul(ah2, bl4)) | 0;
46811 hi = (hi + Math.imul(ah2, bh4)) | 0;
46812 lo = (lo + Math.imul(al1, bl5)) | 0;
46813 mid = (mid + Math.imul(al1, bh5)) | 0;
46814 mid = (mid + Math.imul(ah1, bl5)) | 0;
46815 hi = (hi + Math.imul(ah1, bh5)) | 0;
46816 lo = (lo + Math.imul(al0, bl6)) | 0;
46817 mid = (mid + Math.imul(al0, bh6)) | 0;
46818 mid = (mid + Math.imul(ah0, bl6)) | 0;
46819 hi = (hi + Math.imul(ah0, bh6)) | 0;
46820 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46821 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
46822 w6 &= 0x3ffffff;
46823 /* k = 7 */
46824 lo = Math.imul(al7, bl0);
46825 mid = Math.imul(al7, bh0);
46826 mid = (mid + Math.imul(ah7, bl0)) | 0;
46827 hi = Math.imul(ah7, bh0);
46828 lo = (lo + Math.imul(al6, bl1)) | 0;
46829 mid = (mid + Math.imul(al6, bh1)) | 0;
46830 mid = (mid + Math.imul(ah6, bl1)) | 0;
46831 hi = (hi + Math.imul(ah6, bh1)) | 0;
46832 lo = (lo + Math.imul(al5, bl2)) | 0;
46833 mid = (mid + Math.imul(al5, bh2)) | 0;
46834 mid = (mid + Math.imul(ah5, bl2)) | 0;
46835 hi = (hi + Math.imul(ah5, bh2)) | 0;
46836 lo = (lo + Math.imul(al4, bl3)) | 0;
46837 mid = (mid + Math.imul(al4, bh3)) | 0;
46838 mid = (mid + Math.imul(ah4, bl3)) | 0;
46839 hi = (hi + Math.imul(ah4, bh3)) | 0;
46840 lo = (lo + Math.imul(al3, bl4)) | 0;
46841 mid = (mid + Math.imul(al3, bh4)) | 0;
46842 mid = (mid + Math.imul(ah3, bl4)) | 0;
46843 hi = (hi + Math.imul(ah3, bh4)) | 0;
46844 lo = (lo + Math.imul(al2, bl5)) | 0;
46845 mid = (mid + Math.imul(al2, bh5)) | 0;
46846 mid = (mid + Math.imul(ah2, bl5)) | 0;
46847 hi = (hi + Math.imul(ah2, bh5)) | 0;
46848 lo = (lo + Math.imul(al1, bl6)) | 0;
46849 mid = (mid + Math.imul(al1, bh6)) | 0;
46850 mid = (mid + Math.imul(ah1, bl6)) | 0;
46851 hi = (hi + Math.imul(ah1, bh6)) | 0;
46852 lo = (lo + Math.imul(al0, bl7)) | 0;
46853 mid = (mid + Math.imul(al0, bh7)) | 0;
46854 mid = (mid + Math.imul(ah0, bl7)) | 0;
46855 hi = (hi + Math.imul(ah0, bh7)) | 0;
46856 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46857 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
46858 w7 &= 0x3ffffff;
46859 /* k = 8 */
46860 lo = Math.imul(al8, bl0);
46861 mid = Math.imul(al8, bh0);
46862 mid = (mid + Math.imul(ah8, bl0)) | 0;
46863 hi = Math.imul(ah8, bh0);
46864 lo = (lo + Math.imul(al7, bl1)) | 0;
46865 mid = (mid + Math.imul(al7, bh1)) | 0;
46866 mid = (mid + Math.imul(ah7, bl1)) | 0;
46867 hi = (hi + Math.imul(ah7, bh1)) | 0;
46868 lo = (lo + Math.imul(al6, bl2)) | 0;
46869 mid = (mid + Math.imul(al6, bh2)) | 0;
46870 mid = (mid + Math.imul(ah6, bl2)) | 0;
46871 hi = (hi + Math.imul(ah6, bh2)) | 0;
46872 lo = (lo + Math.imul(al5, bl3)) | 0;
46873 mid = (mid + Math.imul(al5, bh3)) | 0;
46874 mid = (mid + Math.imul(ah5, bl3)) | 0;
46875 hi = (hi + Math.imul(ah5, bh3)) | 0;
46876 lo = (lo + Math.imul(al4, bl4)) | 0;
46877 mid = (mid + Math.imul(al4, bh4)) | 0;
46878 mid = (mid + Math.imul(ah4, bl4)) | 0;
46879 hi = (hi + Math.imul(ah4, bh4)) | 0;
46880 lo = (lo + Math.imul(al3, bl5)) | 0;
46881 mid = (mid + Math.imul(al3, bh5)) | 0;
46882 mid = (mid + Math.imul(ah3, bl5)) | 0;
46883 hi = (hi + Math.imul(ah3, bh5)) | 0;
46884 lo = (lo + Math.imul(al2, bl6)) | 0;
46885 mid = (mid + Math.imul(al2, bh6)) | 0;
46886 mid = (mid + Math.imul(ah2, bl6)) | 0;
46887 hi = (hi + Math.imul(ah2, bh6)) | 0;
46888 lo = (lo + Math.imul(al1, bl7)) | 0;
46889 mid = (mid + Math.imul(al1, bh7)) | 0;
46890 mid = (mid + Math.imul(ah1, bl7)) | 0;
46891 hi = (hi + Math.imul(ah1, bh7)) | 0;
46892 lo = (lo + Math.imul(al0, bl8)) | 0;
46893 mid = (mid + Math.imul(al0, bh8)) | 0;
46894 mid = (mid + Math.imul(ah0, bl8)) | 0;
46895 hi = (hi + Math.imul(ah0, bh8)) | 0;
46896 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46897 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
46898 w8 &= 0x3ffffff;
46899 /* k = 9 */
46900 lo = Math.imul(al9, bl0);
46901 mid = Math.imul(al9, bh0);
46902 mid = (mid + Math.imul(ah9, bl0)) | 0;
46903 hi = Math.imul(ah9, bh0);
46904 lo = (lo + Math.imul(al8, bl1)) | 0;
46905 mid = (mid + Math.imul(al8, bh1)) | 0;
46906 mid = (mid + Math.imul(ah8, bl1)) | 0;
46907 hi = (hi + Math.imul(ah8, bh1)) | 0;
46908 lo = (lo + Math.imul(al7, bl2)) | 0;
46909 mid = (mid + Math.imul(al7, bh2)) | 0;
46910 mid = (mid + Math.imul(ah7, bl2)) | 0;
46911 hi = (hi + Math.imul(ah7, bh2)) | 0;
46912 lo = (lo + Math.imul(al6, bl3)) | 0;
46913 mid = (mid + Math.imul(al6, bh3)) | 0;
46914 mid = (mid + Math.imul(ah6, bl3)) | 0;
46915 hi = (hi + Math.imul(ah6, bh3)) | 0;
46916 lo = (lo + Math.imul(al5, bl4)) | 0;
46917 mid = (mid + Math.imul(al5, bh4)) | 0;
46918 mid = (mid + Math.imul(ah5, bl4)) | 0;
46919 hi = (hi + Math.imul(ah5, bh4)) | 0;
46920 lo = (lo + Math.imul(al4, bl5)) | 0;
46921 mid = (mid + Math.imul(al4, bh5)) | 0;
46922 mid = (mid + Math.imul(ah4, bl5)) | 0;
46923 hi = (hi + Math.imul(ah4, bh5)) | 0;
46924 lo = (lo + Math.imul(al3, bl6)) | 0;
46925 mid = (mid + Math.imul(al3, bh6)) | 0;
46926 mid = (mid + Math.imul(ah3, bl6)) | 0;
46927 hi = (hi + Math.imul(ah3, bh6)) | 0;
46928 lo = (lo + Math.imul(al2, bl7)) | 0;
46929 mid = (mid + Math.imul(al2, bh7)) | 0;
46930 mid = (mid + Math.imul(ah2, bl7)) | 0;
46931 hi = (hi + Math.imul(ah2, bh7)) | 0;
46932 lo = (lo + Math.imul(al1, bl8)) | 0;
46933 mid = (mid + Math.imul(al1, bh8)) | 0;
46934 mid = (mid + Math.imul(ah1, bl8)) | 0;
46935 hi = (hi + Math.imul(ah1, bh8)) | 0;
46936 lo = (lo + Math.imul(al0, bl9)) | 0;
46937 mid = (mid + Math.imul(al0, bh9)) | 0;
46938 mid = (mid + Math.imul(ah0, bl9)) | 0;
46939 hi = (hi + Math.imul(ah0, bh9)) | 0;
46940 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46941 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
46942 w9 &= 0x3ffffff;
46943 /* k = 10 */
46944 lo = Math.imul(al9, bl1);
46945 mid = Math.imul(al9, bh1);
46946 mid = (mid + Math.imul(ah9, bl1)) | 0;
46947 hi = Math.imul(ah9, bh1);
46948 lo = (lo + Math.imul(al8, bl2)) | 0;
46949 mid = (mid + Math.imul(al8, bh2)) | 0;
46950 mid = (mid + Math.imul(ah8, bl2)) | 0;
46951 hi = (hi + Math.imul(ah8, bh2)) | 0;
46952 lo = (lo + Math.imul(al7, bl3)) | 0;
46953 mid = (mid + Math.imul(al7, bh3)) | 0;
46954 mid = (mid + Math.imul(ah7, bl3)) | 0;
46955 hi = (hi + Math.imul(ah7, bh3)) | 0;
46956 lo = (lo + Math.imul(al6, bl4)) | 0;
46957 mid = (mid + Math.imul(al6, bh4)) | 0;
46958 mid = (mid + Math.imul(ah6, bl4)) | 0;
46959 hi = (hi + Math.imul(ah6, bh4)) | 0;
46960 lo = (lo + Math.imul(al5, bl5)) | 0;
46961 mid = (mid + Math.imul(al5, bh5)) | 0;
46962 mid = (mid + Math.imul(ah5, bl5)) | 0;
46963 hi = (hi + Math.imul(ah5, bh5)) | 0;
46964 lo = (lo + Math.imul(al4, bl6)) | 0;
46965 mid = (mid + Math.imul(al4, bh6)) | 0;
46966 mid = (mid + Math.imul(ah4, bl6)) | 0;
46967 hi = (hi + Math.imul(ah4, bh6)) | 0;
46968 lo = (lo + Math.imul(al3, bl7)) | 0;
46969 mid = (mid + Math.imul(al3, bh7)) | 0;
46970 mid = (mid + Math.imul(ah3, bl7)) | 0;
46971 hi = (hi + Math.imul(ah3, bh7)) | 0;
46972 lo = (lo + Math.imul(al2, bl8)) | 0;
46973 mid = (mid + Math.imul(al2, bh8)) | 0;
46974 mid = (mid + Math.imul(ah2, bl8)) | 0;
46975 hi = (hi + Math.imul(ah2, bh8)) | 0;
46976 lo = (lo + Math.imul(al1, bl9)) | 0;
46977 mid = (mid + Math.imul(al1, bh9)) | 0;
46978 mid = (mid + Math.imul(ah1, bl9)) | 0;
46979 hi = (hi + Math.imul(ah1, bh9)) | 0;
46980 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46981 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
46982 w10 &= 0x3ffffff;
46983 /* k = 11 */
46984 lo = Math.imul(al9, bl2);
46985 mid = Math.imul(al9, bh2);
46986 mid = (mid + Math.imul(ah9, bl2)) | 0;
46987 hi = Math.imul(ah9, bh2);
46988 lo = (lo + Math.imul(al8, bl3)) | 0;
46989 mid = (mid + Math.imul(al8, bh3)) | 0;
46990 mid = (mid + Math.imul(ah8, bl3)) | 0;
46991 hi = (hi + Math.imul(ah8, bh3)) | 0;
46992 lo = (lo + Math.imul(al7, bl4)) | 0;
46993 mid = (mid + Math.imul(al7, bh4)) | 0;
46994 mid = (mid + Math.imul(ah7, bl4)) | 0;
46995 hi = (hi + Math.imul(ah7, bh4)) | 0;
46996 lo = (lo + Math.imul(al6, bl5)) | 0;
46997 mid = (mid + Math.imul(al6, bh5)) | 0;
46998 mid = (mid + Math.imul(ah6, bl5)) | 0;
46999 hi = (hi + Math.imul(ah6, bh5)) | 0;
47000 lo = (lo + Math.imul(al5, bl6)) | 0;
47001 mid = (mid + Math.imul(al5, bh6)) | 0;
47002 mid = (mid + Math.imul(ah5, bl6)) | 0;
47003 hi = (hi + Math.imul(ah5, bh6)) | 0;
47004 lo = (lo + Math.imul(al4, bl7)) | 0;
47005 mid = (mid + Math.imul(al4, bh7)) | 0;
47006 mid = (mid + Math.imul(ah4, bl7)) | 0;
47007 hi = (hi + Math.imul(ah4, bh7)) | 0;
47008 lo = (lo + Math.imul(al3, bl8)) | 0;
47009 mid = (mid + Math.imul(al3, bh8)) | 0;
47010 mid = (mid + Math.imul(ah3, bl8)) | 0;
47011 hi = (hi + Math.imul(ah3, bh8)) | 0;
47012 lo = (lo + Math.imul(al2, bl9)) | 0;
47013 mid = (mid + Math.imul(al2, bh9)) | 0;
47014 mid = (mid + Math.imul(ah2, bl9)) | 0;
47015 hi = (hi + Math.imul(ah2, bh9)) | 0;
47016 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47017 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
47018 w11 &= 0x3ffffff;
47019 /* k = 12 */
47020 lo = Math.imul(al9, bl3);
47021 mid = Math.imul(al9, bh3);
47022 mid = (mid + Math.imul(ah9, bl3)) | 0;
47023 hi = Math.imul(ah9, bh3);
47024 lo = (lo + Math.imul(al8, bl4)) | 0;
47025 mid = (mid + Math.imul(al8, bh4)) | 0;
47026 mid = (mid + Math.imul(ah8, bl4)) | 0;
47027 hi = (hi + Math.imul(ah8, bh4)) | 0;
47028 lo = (lo + Math.imul(al7, bl5)) | 0;
47029 mid = (mid + Math.imul(al7, bh5)) | 0;
47030 mid = (mid + Math.imul(ah7, bl5)) | 0;
47031 hi = (hi + Math.imul(ah7, bh5)) | 0;
47032 lo = (lo + Math.imul(al6, bl6)) | 0;
47033 mid = (mid + Math.imul(al6, bh6)) | 0;
47034 mid = (mid + Math.imul(ah6, bl6)) | 0;
47035 hi = (hi + Math.imul(ah6, bh6)) | 0;
47036 lo = (lo + Math.imul(al5, bl7)) | 0;
47037 mid = (mid + Math.imul(al5, bh7)) | 0;
47038 mid = (mid + Math.imul(ah5, bl7)) | 0;
47039 hi = (hi + Math.imul(ah5, bh7)) | 0;
47040 lo = (lo + Math.imul(al4, bl8)) | 0;
47041 mid = (mid + Math.imul(al4, bh8)) | 0;
47042 mid = (mid + Math.imul(ah4, bl8)) | 0;
47043 hi = (hi + Math.imul(ah4, bh8)) | 0;
47044 lo = (lo + Math.imul(al3, bl9)) | 0;
47045 mid = (mid + Math.imul(al3, bh9)) | 0;
47046 mid = (mid + Math.imul(ah3, bl9)) | 0;
47047 hi = (hi + Math.imul(ah3, bh9)) | 0;
47048 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47049 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
47050 w12 &= 0x3ffffff;
47051 /* k = 13 */
47052 lo = Math.imul(al9, bl4);
47053 mid = Math.imul(al9, bh4);
47054 mid = (mid + Math.imul(ah9, bl4)) | 0;
47055 hi = Math.imul(ah9, bh4);
47056 lo = (lo + Math.imul(al8, bl5)) | 0;
47057 mid = (mid + Math.imul(al8, bh5)) | 0;
47058 mid = (mid + Math.imul(ah8, bl5)) | 0;
47059 hi = (hi + Math.imul(ah8, bh5)) | 0;
47060 lo = (lo + Math.imul(al7, bl6)) | 0;
47061 mid = (mid + Math.imul(al7, bh6)) | 0;
47062 mid = (mid + Math.imul(ah7, bl6)) | 0;
47063 hi = (hi + Math.imul(ah7, bh6)) | 0;
47064 lo = (lo + Math.imul(al6, bl7)) | 0;
47065 mid = (mid + Math.imul(al6, bh7)) | 0;
47066 mid = (mid + Math.imul(ah6, bl7)) | 0;
47067 hi = (hi + Math.imul(ah6, bh7)) | 0;
47068 lo = (lo + Math.imul(al5, bl8)) | 0;
47069 mid = (mid + Math.imul(al5, bh8)) | 0;
47070 mid = (mid + Math.imul(ah5, bl8)) | 0;
47071 hi = (hi + Math.imul(ah5, bh8)) | 0;
47072 lo = (lo + Math.imul(al4, bl9)) | 0;
47073 mid = (mid + Math.imul(al4, bh9)) | 0;
47074 mid = (mid + Math.imul(ah4, bl9)) | 0;
47075 hi = (hi + Math.imul(ah4, bh9)) | 0;
47076 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47077 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
47078 w13 &= 0x3ffffff;
47079 /* k = 14 */
47080 lo = Math.imul(al9, bl5);
47081 mid = Math.imul(al9, bh5);
47082 mid = (mid + Math.imul(ah9, bl5)) | 0;
47083 hi = Math.imul(ah9, bh5);
47084 lo = (lo + Math.imul(al8, bl6)) | 0;
47085 mid = (mid + Math.imul(al8, bh6)) | 0;
47086 mid = (mid + Math.imul(ah8, bl6)) | 0;
47087 hi = (hi + Math.imul(ah8, bh6)) | 0;
47088 lo = (lo + Math.imul(al7, bl7)) | 0;
47089 mid = (mid + Math.imul(al7, bh7)) | 0;
47090 mid = (mid + Math.imul(ah7, bl7)) | 0;
47091 hi = (hi + Math.imul(ah7, bh7)) | 0;
47092 lo = (lo + Math.imul(al6, bl8)) | 0;
47093 mid = (mid + Math.imul(al6, bh8)) | 0;
47094 mid = (mid + Math.imul(ah6, bl8)) | 0;
47095 hi = (hi + Math.imul(ah6, bh8)) | 0;
47096 lo = (lo + Math.imul(al5, bl9)) | 0;
47097 mid = (mid + Math.imul(al5, bh9)) | 0;
47098 mid = (mid + Math.imul(ah5, bl9)) | 0;
47099 hi = (hi + Math.imul(ah5, bh9)) | 0;
47100 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47101 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
47102 w14 &= 0x3ffffff;
47103 /* k = 15 */
47104 lo = Math.imul(al9, bl6);
47105 mid = Math.imul(al9, bh6);
47106 mid = (mid + Math.imul(ah9, bl6)) | 0;
47107 hi = Math.imul(ah9, bh6);
47108 lo = (lo + Math.imul(al8, bl7)) | 0;
47109 mid = (mid + Math.imul(al8, bh7)) | 0;
47110 mid = (mid + Math.imul(ah8, bl7)) | 0;
47111 hi = (hi + Math.imul(ah8, bh7)) | 0;
47112 lo = (lo + Math.imul(al7, bl8)) | 0;
47113 mid = (mid + Math.imul(al7, bh8)) | 0;
47114 mid = (mid + Math.imul(ah7, bl8)) | 0;
47115 hi = (hi + Math.imul(ah7, bh8)) | 0;
47116 lo = (lo + Math.imul(al6, bl9)) | 0;
47117 mid = (mid + Math.imul(al6, bh9)) | 0;
47118 mid = (mid + Math.imul(ah6, bl9)) | 0;
47119 hi = (hi + Math.imul(ah6, bh9)) | 0;
47120 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47121 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
47122 w15 &= 0x3ffffff;
47123 /* k = 16 */
47124 lo = Math.imul(al9, bl7);
47125 mid = Math.imul(al9, bh7);
47126 mid = (mid + Math.imul(ah9, bl7)) | 0;
47127 hi = Math.imul(ah9, bh7);
47128 lo = (lo + Math.imul(al8, bl8)) | 0;
47129 mid = (mid + Math.imul(al8, bh8)) | 0;
47130 mid = (mid + Math.imul(ah8, bl8)) | 0;
47131 hi = (hi + Math.imul(ah8, bh8)) | 0;
47132 lo = (lo + Math.imul(al7, bl9)) | 0;
47133 mid = (mid + Math.imul(al7, bh9)) | 0;
47134 mid = (mid + Math.imul(ah7, bl9)) | 0;
47135 hi = (hi + Math.imul(ah7, bh9)) | 0;
47136 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47137 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
47138 w16 &= 0x3ffffff;
47139 /* k = 17 */
47140 lo = Math.imul(al9, bl8);
47141 mid = Math.imul(al9, bh8);
47142 mid = (mid + Math.imul(ah9, bl8)) | 0;
47143 hi = Math.imul(ah9, bh8);
47144 lo = (lo + Math.imul(al8, bl9)) | 0;
47145 mid = (mid + Math.imul(al8, bh9)) | 0;
47146 mid = (mid + Math.imul(ah8, bl9)) | 0;
47147 hi = (hi + Math.imul(ah8, bh9)) | 0;
47148 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47149 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
47150 w17 &= 0x3ffffff;
47151 /* k = 18 */
47152 lo = Math.imul(al9, bl9);
47153 mid = Math.imul(al9, bh9);
47154 mid = (mid + Math.imul(ah9, bl9)) | 0;
47155 hi = Math.imul(ah9, bh9);
47156 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47157 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
47158 w18 &= 0x3ffffff;
47159 o[0] = w0;
47160 o[1] = w1;
47161 o[2] = w2;
47162 o[3] = w3;
47163 o[4] = w4;
47164 o[5] = w5;
47165 o[6] = w6;
47166 o[7] = w7;
47167 o[8] = w8;
47168 o[9] = w9;
47169 o[10] = w10;
47170 o[11] = w11;
47171 o[12] = w12;
47172 o[13] = w13;
47173 o[14] = w14;
47174 o[15] = w15;
47175 o[16] = w16;
47176 o[17] = w17;
47177 o[18] = w18;
47178 if (c !== 0) {
47179 o[19] = c;
47180 out.length++;
47181 }
47182 return out;
47183 };
47184
47185 // Polyfill comb
47186 if (!Math.imul) {
47187 comb10MulTo = smallMulTo;
47188 }
47189
47190 function bigMulTo (self, num, out) {
47191 out.negative = num.negative ^ self.negative;
47192 out.length = self.length + num.length;
47193
47194 var carry = 0;
47195 var hncarry = 0;
47196 for (var k = 0; k < out.length - 1; k++) {
47197 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
47198 // note that ncarry could be >= 0x3ffffff
47199 var ncarry = hncarry;
47200 hncarry = 0;
47201 var rword = carry & 0x3ffffff;
47202 var maxJ = Math.min(k, num.length - 1);
47203 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
47204 var i = k - j;
47205 var a = self.words[i] | 0;
47206 var b = num.words[j] | 0;
47207 var r = a * b;
47208
47209 var lo = r & 0x3ffffff;
47210 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
47211 lo = (lo + rword) | 0;
47212 rword = lo & 0x3ffffff;
47213 ncarry = (ncarry + (lo >>> 26)) | 0;
47214
47215 hncarry += ncarry >>> 26;
47216 ncarry &= 0x3ffffff;
47217 }
47218 out.words[k] = rword;
47219 carry = ncarry;
47220 ncarry = hncarry;
47221 }
47222 if (carry !== 0) {
47223 out.words[k] = carry;
47224 } else {
47225 out.length--;
47226 }
47227
47228 return out.strip();
47229 }
47230
47231 function jumboMulTo (self, num, out) {
47232 var fftm = new FFTM();
47233 return fftm.mulp(self, num, out);
47234 }
47235
47236 BN.prototype.mulTo = function mulTo (num, out) {
47237 var res;
47238 var len = this.length + num.length;
47239 if (this.length === 10 && num.length === 10) {
47240 res = comb10MulTo(this, num, out);
47241 } else if (len < 63) {
47242 res = smallMulTo(this, num, out);
47243 } else if (len < 1024) {
47244 res = bigMulTo(this, num, out);
47245 } else {
47246 res = jumboMulTo(this, num, out);
47247 }
47248
47249 return res;
47250 };
47251
47252 // Cooley-Tukey algorithm for FFT
47253 // slightly revisited to rely on looping instead of recursion
47254
47255 function FFTM (x, y) {
47256 this.x = x;
47257 this.y = y;
47258 }
47259
47260 FFTM.prototype.makeRBT = function makeRBT (N) {
47261 var t = new Array(N);
47262 var l = BN.prototype._countBits(N) - 1;
47263 for (var i = 0; i < N; i++) {
47264 t[i] = this.revBin(i, l, N);
47265 }
47266
47267 return t;
47268 };
47269
47270 // Returns binary-reversed representation of `x`
47271 FFTM.prototype.revBin = function revBin (x, l, N) {
47272 if (x === 0 || x === N - 1) return x;
47273
47274 var rb = 0;
47275 for (var i = 0; i < l; i++) {
47276 rb |= (x & 1) << (l - i - 1);
47277 x >>= 1;
47278 }
47279
47280 return rb;
47281 };
47282
47283 // Performs "tweedling" phase, therefore 'emulating'
47284 // behaviour of the recursive algorithm
47285 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
47286 for (var i = 0; i < N; i++) {
47287 rtws[i] = rws[rbt[i]];
47288 itws[i] = iws[rbt[i]];
47289 }
47290 };
47291
47292 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
47293 this.permute(rbt, rws, iws, rtws, itws, N);
47294
47295 for (var s = 1; s < N; s <<= 1) {
47296 var l = s << 1;
47297
47298 var rtwdf = Math.cos(2 * Math.PI / l);
47299 var itwdf = Math.sin(2 * Math.PI / l);
47300
47301 for (var p = 0; p < N; p += l) {
47302 var rtwdf_ = rtwdf;
47303 var itwdf_ = itwdf;
47304
47305 for (var j = 0; j < s; j++) {
47306 var re = rtws[p + j];
47307 var ie = itws[p + j];
47308
47309 var ro = rtws[p + j + s];
47310 var io = itws[p + j + s];
47311
47312 var rx = rtwdf_ * ro - itwdf_ * io;
47313
47314 io = rtwdf_ * io + itwdf_ * ro;
47315 ro = rx;
47316
47317 rtws[p + j] = re + ro;
47318 itws[p + j] = ie + io;
47319
47320 rtws[p + j + s] = re - ro;
47321 itws[p + j + s] = ie - io;
47322
47323 /* jshint maxdepth : false */
47324 if (j !== l) {
47325 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
47326
47327 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
47328 rtwdf_ = rx;
47329 }
47330 }
47331 }
47332 }
47333 };
47334
47335 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
47336 var N = Math.max(m, n) | 1;
47337 var odd = N & 1;
47338 var i = 0;
47339 for (N = N / 2 | 0; N; N = N >>> 1) {
47340 i++;
47341 }
47342
47343 return 1 << i + 1 + odd;
47344 };
47345
47346 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
47347 if (N <= 1) return;
47348
47349 for (var i = 0; i < N / 2; i++) {
47350 var t = rws[i];
47351
47352 rws[i] = rws[N - i - 1];
47353 rws[N - i - 1] = t;
47354
47355 t = iws[i];
47356
47357 iws[i] = -iws[N - i - 1];
47358 iws[N - i - 1] = -t;
47359 }
47360 };
47361
47362 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
47363 var carry = 0;
47364 for (var i = 0; i < N / 2; i++) {
47365 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
47366 Math.round(ws[2 * i] / N) +
47367 carry;
47368
47369 ws[i] = w & 0x3ffffff;
47370
47371 if (w < 0x4000000) {
47372 carry = 0;
47373 } else {
47374 carry = w / 0x4000000 | 0;
47375 }
47376 }
47377
47378 return ws;
47379 };
47380
47381 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
47382 var carry = 0;
47383 for (var i = 0; i < len; i++) {
47384 carry = carry + (ws[i] | 0);
47385
47386 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
47387 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
47388 }
47389
47390 // Pad with zeroes
47391 for (i = 2 * len; i < N; ++i) {
47392 rws[i] = 0;
47393 }
47394
47395 assert(carry === 0);
47396 assert((carry & ~0x1fff) === 0);
47397 };
47398
47399 FFTM.prototype.stub = function stub (N) {
47400 var ph = new Array(N);
47401 for (var i = 0; i < N; i++) {
47402 ph[i] = 0;
47403 }
47404
47405 return ph;
47406 };
47407
47408 FFTM.prototype.mulp = function mulp (x, y, out) {
47409 var N = 2 * this.guessLen13b(x.length, y.length);
47410
47411 var rbt = this.makeRBT(N);
47412
47413 var _ = this.stub(N);
47414
47415 var rws = new Array(N);
47416 var rwst = new Array(N);
47417 var iwst = new Array(N);
47418
47419 var nrws = new Array(N);
47420 var nrwst = new Array(N);
47421 var niwst = new Array(N);
47422
47423 var rmws = out.words;
47424 rmws.length = N;
47425
47426 this.convert13b(x.words, x.length, rws, N);
47427 this.convert13b(y.words, y.length, nrws, N);
47428
47429 this.transform(rws, _, rwst, iwst, N, rbt);
47430 this.transform(nrws, _, nrwst, niwst, N, rbt);
47431
47432 for (var i = 0; i < N; i++) {
47433 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
47434 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
47435 rwst[i] = rx;
47436 }
47437
47438 this.conjugate(rwst, iwst, N);
47439 this.transform(rwst, iwst, rmws, _, N, rbt);
47440 this.conjugate(rmws, _, N);
47441 this.normalize13b(rmws, N);
47442
47443 out.negative = x.negative ^ y.negative;
47444 out.length = x.length + y.length;
47445 return out.strip();
47446 };
47447
47448 // Multiply `this` by `num`
47449 BN.prototype.mul = function mul (num) {
47450 var out = new BN(null);
47451 out.words = new Array(this.length + num.length);
47452 return this.mulTo(num, out);
47453 };
47454
47455 // Multiply employing FFT
47456 BN.prototype.mulf = function mulf (num) {
47457 var out = new BN(null);
47458 out.words = new Array(this.length + num.length);
47459 return jumboMulTo(this, num, out);
47460 };
47461
47462 // In-place Multiplication
47463 BN.prototype.imul = function imul (num) {
47464 return this.clone().mulTo(num, this);
47465 };
47466
47467 BN.prototype.imuln = function imuln (num) {
47468 assert(typeof num === 'number');
47469 assert(num < 0x4000000);
47470
47471 // Carry
47472 var carry = 0;
47473 for (var i = 0; i < this.length; i++) {
47474 var w = (this.words[i] | 0) * num;
47475 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
47476 carry >>= 26;
47477 carry += (w / 0x4000000) | 0;
47478 // NOTE: lo is 27bit maximum
47479 carry += lo >>> 26;
47480 this.words[i] = lo & 0x3ffffff;
47481 }
47482
47483 if (carry !== 0) {
47484 this.words[i] = carry;
47485 this.length++;
47486 }
47487
47488 return this;
47489 };
47490
47491 BN.prototype.muln = function muln (num) {
47492 return this.clone().imuln(num);
47493 };
47494
47495 // `this` * `this`
47496 BN.prototype.sqr = function sqr () {
47497 return this.mul(this);
47498 };
47499
47500 // `this` * `this` in-place
47501 BN.prototype.isqr = function isqr () {
47502 return this.imul(this.clone());
47503 };
47504
47505 // Math.pow(`this`, `num`)
47506 BN.prototype.pow = function pow (num) {
47507 var w = toBitArray(num);
47508 if (w.length === 0) return new BN(1);
47509
47510 // Skip leading zeroes
47511 var res = this;
47512 for (var i = 0; i < w.length; i++, res = res.sqr()) {
47513 if (w[i] !== 0) break;
47514 }
47515
47516 if (++i < w.length) {
47517 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
47518 if (w[i] === 0) continue;
47519
47520 res = res.mul(q);
47521 }
47522 }
47523
47524 return res;
47525 };
47526
47527 // Shift-left in-place
47528 BN.prototype.iushln = function iushln (bits) {
47529 assert(typeof bits === 'number' && bits >= 0);
47530 var r = bits % 26;
47531 var s = (bits - r) / 26;
47532 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
47533 var i;
47534
47535 if (r !== 0) {
47536 var carry = 0;
47537
47538 for (i = 0; i < this.length; i++) {
47539 var newCarry = this.words[i] & carryMask;
47540 var c = ((this.words[i] | 0) - newCarry) << r;
47541 this.words[i] = c | carry;
47542 carry = newCarry >>> (26 - r);
47543 }
47544
47545 if (carry) {
47546 this.words[i] = carry;
47547 this.length++;
47548 }
47549 }
47550
47551 if (s !== 0) {
47552 for (i = this.length - 1; i >= 0; i--) {
47553 this.words[i + s] = this.words[i];
47554 }
47555
47556 for (i = 0; i < s; i++) {
47557 this.words[i] = 0;
47558 }
47559
47560 this.length += s;
47561 }
47562
47563 return this.strip();
47564 };
47565
47566 BN.prototype.ishln = function ishln (bits) {
47567 // TODO(indutny): implement me
47568 assert(this.negative === 0);
47569 return this.iushln(bits);
47570 };
47571
47572 // Shift-right in-place
47573 // NOTE: `hint` is a lowest bit before trailing zeroes
47574 // NOTE: if `extended` is present - it will be filled with destroyed bits
47575 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
47576 assert(typeof bits === 'number' && bits >= 0);
47577 var h;
47578 if (hint) {
47579 h = (hint - (hint % 26)) / 26;
47580 } else {
47581 h = 0;
47582 }
47583
47584 var r = bits % 26;
47585 var s = Math.min((bits - r) / 26, this.length);
47586 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47587 var maskedWords = extended;
47588
47589 h -= s;
47590 h = Math.max(0, h);
47591
47592 // Extended mode, copy masked part
47593 if (maskedWords) {
47594 for (var i = 0; i < s; i++) {
47595 maskedWords.words[i] = this.words[i];
47596 }
47597 maskedWords.length = s;
47598 }
47599
47600 if (s === 0) {
47601 // No-op, we should not move anything at all
47602 } else if (this.length > s) {
47603 this.length -= s;
47604 for (i = 0; i < this.length; i++) {
47605 this.words[i] = this.words[i + s];
47606 }
47607 } else {
47608 this.words[0] = 0;
47609 this.length = 1;
47610 }
47611
47612 var carry = 0;
47613 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
47614 var word = this.words[i] | 0;
47615 this.words[i] = (carry << (26 - r)) | (word >>> r);
47616 carry = word & mask;
47617 }
47618
47619 // Push carried bits as a mask
47620 if (maskedWords && carry !== 0) {
47621 maskedWords.words[maskedWords.length++] = carry;
47622 }
47623
47624 if (this.length === 0) {
47625 this.words[0] = 0;
47626 this.length = 1;
47627 }
47628
47629 return this.strip();
47630 };
47631
47632 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
47633 // TODO(indutny): implement me
47634 assert(this.negative === 0);
47635 return this.iushrn(bits, hint, extended);
47636 };
47637
47638 // Shift-left
47639 BN.prototype.shln = function shln (bits) {
47640 return this.clone().ishln(bits);
47641 };
47642
47643 BN.prototype.ushln = function ushln (bits) {
47644 return this.clone().iushln(bits);
47645 };
47646
47647 // Shift-right
47648 BN.prototype.shrn = function shrn (bits) {
47649 return this.clone().ishrn(bits);
47650 };
47651
47652 BN.prototype.ushrn = function ushrn (bits) {
47653 return this.clone().iushrn(bits);
47654 };
47655
47656 // Test if n bit is set
47657 BN.prototype.testn = function testn (bit) {
47658 assert(typeof bit === 'number' && bit >= 0);
47659 var r = bit % 26;
47660 var s = (bit - r) / 26;
47661 var q = 1 << r;
47662
47663 // Fast case: bit is much higher than all existing words
47664 if (this.length <= s) return false;
47665
47666 // Check bit and return
47667 var w = this.words[s];
47668
47669 return !!(w & q);
47670 };
47671
47672 // Return only lowers bits of number (in-place)
47673 BN.prototype.imaskn = function imaskn (bits) {
47674 assert(typeof bits === 'number' && bits >= 0);
47675 var r = bits % 26;
47676 var s = (bits - r) / 26;
47677
47678 assert(this.negative === 0, 'imaskn works only with positive numbers');
47679
47680 if (this.length <= s) {
47681 return this;
47682 }
47683
47684 if (r !== 0) {
47685 s++;
47686 }
47687 this.length = Math.min(s, this.length);
47688
47689 if (r !== 0) {
47690 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47691 this.words[this.length - 1] &= mask;
47692 }
47693
47694 return this.strip();
47695 };
47696
47697 // Return only lowers bits of number
47698 BN.prototype.maskn = function maskn (bits) {
47699 return this.clone().imaskn(bits);
47700 };
47701
47702 // Add plain number `num` to `this`
47703 BN.prototype.iaddn = function iaddn (num) {
47704 assert(typeof num === 'number');
47705 assert(num < 0x4000000);
47706 if (num < 0) return this.isubn(-num);
47707
47708 // Possible sign change
47709 if (this.negative !== 0) {
47710 if (this.length === 1 && (this.words[0] | 0) < num) {
47711 this.words[0] = num - (this.words[0] | 0);
47712 this.negative = 0;
47713 return this;
47714 }
47715
47716 this.negative = 0;
47717 this.isubn(num);
47718 this.negative = 1;
47719 return this;
47720 }
47721
47722 // Add without checks
47723 return this._iaddn(num);
47724 };
47725
47726 BN.prototype._iaddn = function _iaddn (num) {
47727 this.words[0] += num;
47728
47729 // Carry
47730 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
47731 this.words[i] -= 0x4000000;
47732 if (i === this.length - 1) {
47733 this.words[i + 1] = 1;
47734 } else {
47735 this.words[i + 1]++;
47736 }
47737 }
47738 this.length = Math.max(this.length, i + 1);
47739
47740 return this;
47741 };
47742
47743 // Subtract plain number `num` from `this`
47744 BN.prototype.isubn = function isubn (num) {
47745 assert(typeof num === 'number');
47746 assert(num < 0x4000000);
47747 if (num < 0) return this.iaddn(-num);
47748
47749 if (this.negative !== 0) {
47750 this.negative = 0;
47751 this.iaddn(num);
47752 this.negative = 1;
47753 return this;
47754 }
47755
47756 this.words[0] -= num;
47757
47758 if (this.length === 1 && this.words[0] < 0) {
47759 this.words[0] = -this.words[0];
47760 this.negative = 1;
47761 } else {
47762 // Carry
47763 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
47764 this.words[i] += 0x4000000;
47765 this.words[i + 1] -= 1;
47766 }
47767 }
47768
47769 return this.strip();
47770 };
47771
47772 BN.prototype.addn = function addn (num) {
47773 return this.clone().iaddn(num);
47774 };
47775
47776 BN.prototype.subn = function subn (num) {
47777 return this.clone().isubn(num);
47778 };
47779
47780 BN.prototype.iabs = function iabs () {
47781 this.negative = 0;
47782
47783 return this;
47784 };
47785
47786 BN.prototype.abs = function abs () {
47787 return this.clone().iabs();
47788 };
47789
47790 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
47791 var len = num.length + shift;
47792 var i;
47793
47794 this._expand(len);
47795
47796 var w;
47797 var carry = 0;
47798 for (i = 0; i < num.length; i++) {
47799 w = (this.words[i + shift] | 0) + carry;
47800 var right = (num.words[i] | 0) * mul;
47801 w -= right & 0x3ffffff;
47802 carry = (w >> 26) - ((right / 0x4000000) | 0);
47803 this.words[i + shift] = w & 0x3ffffff;
47804 }
47805 for (; i < this.length - shift; i++) {
47806 w = (this.words[i + shift] | 0) + carry;
47807 carry = w >> 26;
47808 this.words[i + shift] = w & 0x3ffffff;
47809 }
47810
47811 if (carry === 0) return this.strip();
47812
47813 // Subtraction overflow
47814 assert(carry === -1);
47815 carry = 0;
47816 for (i = 0; i < this.length; i++) {
47817 w = -(this.words[i] | 0) + carry;
47818 carry = w >> 26;
47819 this.words[i] = w & 0x3ffffff;
47820 }
47821 this.negative = 1;
47822
47823 return this.strip();
47824 };
47825
47826 BN.prototype._wordDiv = function _wordDiv (num, mode) {
47827 var shift = this.length - num.length;
47828
47829 var a = this.clone();
47830 var b = num;
47831
47832 // Normalize
47833 var bhi = b.words[b.length - 1] | 0;
47834 var bhiBits = this._countBits(bhi);
47835 shift = 26 - bhiBits;
47836 if (shift !== 0) {
47837 b = b.ushln(shift);
47838 a.iushln(shift);
47839 bhi = b.words[b.length - 1] | 0;
47840 }
47841
47842 // Initialize quotient
47843 var m = a.length - b.length;
47844 var q;
47845
47846 if (mode !== 'mod') {
47847 q = new BN(null);
47848 q.length = m + 1;
47849 q.words = new Array(q.length);
47850 for (var i = 0; i < q.length; i++) {
47851 q.words[i] = 0;
47852 }
47853 }
47854
47855 var diff = a.clone()._ishlnsubmul(b, 1, m);
47856 if (diff.negative === 0) {
47857 a = diff;
47858 if (q) {
47859 q.words[m] = 1;
47860 }
47861 }
47862
47863 for (var j = m - 1; j >= 0; j--) {
47864 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
47865 (a.words[b.length + j - 1] | 0);
47866
47867 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
47868 // (0x7ffffff)
47869 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
47870
47871 a._ishlnsubmul(b, qj, j);
47872 while (a.negative !== 0) {
47873 qj--;
47874 a.negative = 0;
47875 a._ishlnsubmul(b, 1, j);
47876 if (!a.isZero()) {
47877 a.negative ^= 1;
47878 }
47879 }
47880 if (q) {
47881 q.words[j] = qj;
47882 }
47883 }
47884 if (q) {
47885 q.strip();
47886 }
47887 a.strip();
47888
47889 // Denormalize
47890 if (mode !== 'div' && shift !== 0) {
47891 a.iushrn(shift);
47892 }
47893
47894 return {
47895 div: q || null,
47896 mod: a
47897 };
47898 };
47899
47900 // NOTE: 1) `mode` can be set to `mod` to request mod only,
47901 // to `div` to request div only, or be absent to
47902 // request both div & mod
47903 // 2) `positive` is true if unsigned mod is requested
47904 BN.prototype.divmod = function divmod (num, mode, positive) {
47905 assert(!num.isZero());
47906
47907 if (this.isZero()) {
47908 return {
47909 div: new BN(0),
47910 mod: new BN(0)
47911 };
47912 }
47913
47914 var div, mod, res;
47915 if (this.negative !== 0 && num.negative === 0) {
47916 res = this.neg().divmod(num, mode);
47917
47918 if (mode !== 'mod') {
47919 div = res.div.neg();
47920 }
47921
47922 if (mode !== 'div') {
47923 mod = res.mod.neg();
47924 if (positive && mod.negative !== 0) {
47925 mod.iadd(num);
47926 }
47927 }
47928
47929 return {
47930 div: div,
47931 mod: mod
47932 };
47933 }
47934
47935 if (this.negative === 0 && num.negative !== 0) {
47936 res = this.divmod(num.neg(), mode);
47937
47938 if (mode !== 'mod') {
47939 div = res.div.neg();
47940 }
47941
47942 return {
47943 div: div,
47944 mod: res.mod
47945 };
47946 }
47947
47948 if ((this.negative & num.negative) !== 0) {
47949 res = this.neg().divmod(num.neg(), mode);
47950
47951 if (mode !== 'div') {
47952 mod = res.mod.neg();
47953 if (positive && mod.negative !== 0) {
47954 mod.isub(num);
47955 }
47956 }
47957
47958 return {
47959 div: res.div,
47960 mod: mod
47961 };
47962 }
47963
47964 // Both numbers are positive at this point
47965
47966 // Strip both numbers to approximate shift value
47967 if (num.length > this.length || this.cmp(num) < 0) {
47968 return {
47969 div: new BN(0),
47970 mod: this
47971 };
47972 }
47973
47974 // Very short reduction
47975 if (num.length === 1) {
47976 if (mode === 'div') {
47977 return {
47978 div: this.divn(num.words[0]),
47979 mod: null
47980 };
47981 }
47982
47983 if (mode === 'mod') {
47984 return {
47985 div: null,
47986 mod: new BN(this.modn(num.words[0]))
47987 };
47988 }
47989
47990 return {
47991 div: this.divn(num.words[0]),
47992 mod: new BN(this.modn(num.words[0]))
47993 };
47994 }
47995
47996 return this._wordDiv(num, mode);
47997 };
47998
47999 // Find `this` / `num`
48000 BN.prototype.div = function div (num) {
48001 return this.divmod(num, 'div', false).div;
48002 };
48003
48004 // Find `this` % `num`
48005 BN.prototype.mod = function mod (num) {
48006 return this.divmod(num, 'mod', false).mod;
48007 };
48008
48009 BN.prototype.umod = function umod (num) {
48010 return this.divmod(num, 'mod', true).mod;
48011 };
48012
48013 // Find Round(`this` / `num`)
48014 BN.prototype.divRound = function divRound (num) {
48015 var dm = this.divmod(num);
48016
48017 // Fast case - exact division
48018 if (dm.mod.isZero()) return dm.div;
48019
48020 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
48021
48022 var half = num.ushrn(1);
48023 var r2 = num.andln(1);
48024 var cmp = mod.cmp(half);
48025
48026 // Round down
48027 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
48028
48029 // Round up
48030 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
48031 };
48032
48033 BN.prototype.modn = function modn (num) {
48034 assert(num <= 0x3ffffff);
48035 var p = (1 << 26) % num;
48036
48037 var acc = 0;
48038 for (var i = this.length - 1; i >= 0; i--) {
48039 acc = (p * acc + (this.words[i] | 0)) % num;
48040 }
48041
48042 return acc;
48043 };
48044
48045 // In-place division by number
48046 BN.prototype.idivn = function idivn (num) {
48047 assert(num <= 0x3ffffff);
48048
48049 var carry = 0;
48050 for (var i = this.length - 1; i >= 0; i--) {
48051 var w = (this.words[i] | 0) + carry * 0x4000000;
48052 this.words[i] = (w / num) | 0;
48053 carry = w % num;
48054 }
48055
48056 return this.strip();
48057 };
48058
48059 BN.prototype.divn = function divn (num) {
48060 return this.clone().idivn(num);
48061 };
48062
48063 BN.prototype.egcd = function egcd (p) {
48064 assert(p.negative === 0);
48065 assert(!p.isZero());
48066
48067 var x = this;
48068 var y = p.clone();
48069
48070 if (x.negative !== 0) {
48071 x = x.umod(p);
48072 } else {
48073 x = x.clone();
48074 }
48075
48076 // A * x + B * y = x
48077 var A = new BN(1);
48078 var B = new BN(0);
48079
48080 // C * x + D * y = y
48081 var C = new BN(0);
48082 var D = new BN(1);
48083
48084 var g = 0;
48085
48086 while (x.isEven() && y.isEven()) {
48087 x.iushrn(1);
48088 y.iushrn(1);
48089 ++g;
48090 }
48091
48092 var yp = y.clone();
48093 var xp = x.clone();
48094
48095 while (!x.isZero()) {
48096 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48097 if (i > 0) {
48098 x.iushrn(i);
48099 while (i-- > 0) {
48100 if (A.isOdd() || B.isOdd()) {
48101 A.iadd(yp);
48102 B.isub(xp);
48103 }
48104
48105 A.iushrn(1);
48106 B.iushrn(1);
48107 }
48108 }
48109
48110 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48111 if (j > 0) {
48112 y.iushrn(j);
48113 while (j-- > 0) {
48114 if (C.isOdd() || D.isOdd()) {
48115 C.iadd(yp);
48116 D.isub(xp);
48117 }
48118
48119 C.iushrn(1);
48120 D.iushrn(1);
48121 }
48122 }
48123
48124 if (x.cmp(y) >= 0) {
48125 x.isub(y);
48126 A.isub(C);
48127 B.isub(D);
48128 } else {
48129 y.isub(x);
48130 C.isub(A);
48131 D.isub(B);
48132 }
48133 }
48134
48135 return {
48136 a: C,
48137 b: D,
48138 gcd: y.iushln(g)
48139 };
48140 };
48141
48142 // This is reduced incarnation of the binary EEA
48143 // above, designated to invert members of the
48144 // _prime_ fields F(p) at a maximal speed
48145 BN.prototype._invmp = function _invmp (p) {
48146 assert(p.negative === 0);
48147 assert(!p.isZero());
48148
48149 var a = this;
48150 var b = p.clone();
48151
48152 if (a.negative !== 0) {
48153 a = a.umod(p);
48154 } else {
48155 a = a.clone();
48156 }
48157
48158 var x1 = new BN(1);
48159 var x2 = new BN(0);
48160
48161 var delta = b.clone();
48162
48163 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
48164 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48165 if (i > 0) {
48166 a.iushrn(i);
48167 while (i-- > 0) {
48168 if (x1.isOdd()) {
48169 x1.iadd(delta);
48170 }
48171
48172 x1.iushrn(1);
48173 }
48174 }
48175
48176 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48177 if (j > 0) {
48178 b.iushrn(j);
48179 while (j-- > 0) {
48180 if (x2.isOdd()) {
48181 x2.iadd(delta);
48182 }
48183
48184 x2.iushrn(1);
48185 }
48186 }
48187
48188 if (a.cmp(b) >= 0) {
48189 a.isub(b);
48190 x1.isub(x2);
48191 } else {
48192 b.isub(a);
48193 x2.isub(x1);
48194 }
48195 }
48196
48197 var res;
48198 if (a.cmpn(1) === 0) {
48199 res = x1;
48200 } else {
48201 res = x2;
48202 }
48203
48204 if (res.cmpn(0) < 0) {
48205 res.iadd(p);
48206 }
48207
48208 return res;
48209 };
48210
48211 BN.prototype.gcd = function gcd (num) {
48212 if (this.isZero()) return num.abs();
48213 if (num.isZero()) return this.abs();
48214
48215 var a = this.clone();
48216 var b = num.clone();
48217 a.negative = 0;
48218 b.negative = 0;
48219
48220 // Remove common factor of two
48221 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
48222 a.iushrn(1);
48223 b.iushrn(1);
48224 }
48225
48226 do {
48227 while (a.isEven()) {
48228 a.iushrn(1);
48229 }
48230 while (b.isEven()) {
48231 b.iushrn(1);
48232 }
48233
48234 var r = a.cmp(b);
48235 if (r < 0) {
48236 // Swap `a` and `b` to make `a` always bigger than `b`
48237 var t = a;
48238 a = b;
48239 b = t;
48240 } else if (r === 0 || b.cmpn(1) === 0) {
48241 break;
48242 }
48243
48244 a.isub(b);
48245 } while (true);
48246
48247 return b.iushln(shift);
48248 };
48249
48250 // Invert number in the field F(num)
48251 BN.prototype.invm = function invm (num) {
48252 return this.egcd(num).a.umod(num);
48253 };
48254
48255 BN.prototype.isEven = function isEven () {
48256 return (this.words[0] & 1) === 0;
48257 };
48258
48259 BN.prototype.isOdd = function isOdd () {
48260 return (this.words[0] & 1) === 1;
48261 };
48262
48263 // And first word and num
48264 BN.prototype.andln = function andln (num) {
48265 return this.words[0] & num;
48266 };
48267
48268 // Increment at the bit position in-line
48269 BN.prototype.bincn = function bincn (bit) {
48270 assert(typeof bit === 'number');
48271 var r = bit % 26;
48272 var s = (bit - r) / 26;
48273 var q = 1 << r;
48274
48275 // Fast case: bit is much higher than all existing words
48276 if (this.length <= s) {
48277 this._expand(s + 1);
48278 this.words[s] |= q;
48279 return this;
48280 }
48281
48282 // Add bit and propagate, if needed
48283 var carry = q;
48284 for (var i = s; carry !== 0 && i < this.length; i++) {
48285 var w = this.words[i] | 0;
48286 w += carry;
48287 carry = w >>> 26;
48288 w &= 0x3ffffff;
48289 this.words[i] = w;
48290 }
48291 if (carry !== 0) {
48292 this.words[i] = carry;
48293 this.length++;
48294 }
48295 return this;
48296 };
48297
48298 BN.prototype.isZero = function isZero () {
48299 return this.length === 1 && this.words[0] === 0;
48300 };
48301
48302 BN.prototype.cmpn = function cmpn (num) {
48303 var negative = num < 0;
48304
48305 if (this.negative !== 0 && !negative) return -1;
48306 if (this.negative === 0 && negative) return 1;
48307
48308 this.strip();
48309
48310 var res;
48311 if (this.length > 1) {
48312 res = 1;
48313 } else {
48314 if (negative) {
48315 num = -num;
48316 }
48317
48318 assert(num <= 0x3ffffff, 'Number is too big');
48319
48320 var w = this.words[0] | 0;
48321 res = w === num ? 0 : w < num ? -1 : 1;
48322 }
48323 if (this.negative !== 0) return -res | 0;
48324 return res;
48325 };
48326
48327 // Compare two numbers and return:
48328 // 1 - if `this` > `num`
48329 // 0 - if `this` == `num`
48330 // -1 - if `this` < `num`
48331 BN.prototype.cmp = function cmp (num) {
48332 if (this.negative !== 0 && num.negative === 0) return -1;
48333 if (this.negative === 0 && num.negative !== 0) return 1;
48334
48335 var res = this.ucmp(num);
48336 if (this.negative !== 0) return -res | 0;
48337 return res;
48338 };
48339
48340 // Unsigned comparison
48341 BN.prototype.ucmp = function ucmp (num) {
48342 // At this point both numbers have the same sign
48343 if (this.length > num.length) return 1;
48344 if (this.length < num.length) return -1;
48345
48346 var res = 0;
48347 for (var i = this.length - 1; i >= 0; i--) {
48348 var a = this.words[i] | 0;
48349 var b = num.words[i] | 0;
48350
48351 if (a === b) continue;
48352 if (a < b) {
48353 res = -1;
48354 } else if (a > b) {
48355 res = 1;
48356 }
48357 break;
48358 }
48359 return res;
48360 };
48361
48362 BN.prototype.gtn = function gtn (num) {
48363 return this.cmpn(num) === 1;
48364 };
48365
48366 BN.prototype.gt = function gt (num) {
48367 return this.cmp(num) === 1;
48368 };
48369
48370 BN.prototype.gten = function gten (num) {
48371 return this.cmpn(num) >= 0;
48372 };
48373
48374 BN.prototype.gte = function gte (num) {
48375 return this.cmp(num) >= 0;
48376 };
48377
48378 BN.prototype.ltn = function ltn (num) {
48379 return this.cmpn(num) === -1;
48380 };
48381
48382 BN.prototype.lt = function lt (num) {
48383 return this.cmp(num) === -1;
48384 };
48385
48386 BN.prototype.lten = function lten (num) {
48387 return this.cmpn(num) <= 0;
48388 };
48389
48390 BN.prototype.lte = function lte (num) {
48391 return this.cmp(num) <= 0;
48392 };
48393
48394 BN.prototype.eqn = function eqn (num) {
48395 return this.cmpn(num) === 0;
48396 };
48397
48398 BN.prototype.eq = function eq (num) {
48399 return this.cmp(num) === 0;
48400 };
48401
48402 //
48403 // A reduce context, could be using montgomery or something better, depending
48404 // on the `m` itself.
48405 //
48406 BN.red = function red (num) {
48407 return new Red(num);
48408 };
48409
48410 BN.prototype.toRed = function toRed (ctx) {
48411 assert(!this.red, 'Already a number in reduction context');
48412 assert(this.negative === 0, 'red works only with positives');
48413 return ctx.convertTo(this)._forceRed(ctx);
48414 };
48415
48416 BN.prototype.fromRed = function fromRed () {
48417 assert(this.red, 'fromRed works only with numbers in reduction context');
48418 return this.red.convertFrom(this);
48419 };
48420
48421 BN.prototype._forceRed = function _forceRed (ctx) {
48422 this.red = ctx;
48423 return this;
48424 };
48425
48426 BN.prototype.forceRed = function forceRed (ctx) {
48427 assert(!this.red, 'Already a number in reduction context');
48428 return this._forceRed(ctx);
48429 };
48430
48431 BN.prototype.redAdd = function redAdd (num) {
48432 assert(this.red, 'redAdd works only with red numbers');
48433 return this.red.add(this, num);
48434 };
48435
48436 BN.prototype.redIAdd = function redIAdd (num) {
48437 assert(this.red, 'redIAdd works only with red numbers');
48438 return this.red.iadd(this, num);
48439 };
48440
48441 BN.prototype.redSub = function redSub (num) {
48442 assert(this.red, 'redSub works only with red numbers');
48443 return this.red.sub(this, num);
48444 };
48445
48446 BN.prototype.redISub = function redISub (num) {
48447 assert(this.red, 'redISub works only with red numbers');
48448 return this.red.isub(this, num);
48449 };
48450
48451 BN.prototype.redShl = function redShl (num) {
48452 assert(this.red, 'redShl works only with red numbers');
48453 return this.red.shl(this, num);
48454 };
48455
48456 BN.prototype.redMul = function redMul (num) {
48457 assert(this.red, 'redMul works only with red numbers');
48458 this.red._verify2(this, num);
48459 return this.red.mul(this, num);
48460 };
48461
48462 BN.prototype.redIMul = function redIMul (num) {
48463 assert(this.red, 'redMul works only with red numbers');
48464 this.red._verify2(this, num);
48465 return this.red.imul(this, num);
48466 };
48467
48468 BN.prototype.redSqr = function redSqr () {
48469 assert(this.red, 'redSqr works only with red numbers');
48470 this.red._verify1(this);
48471 return this.red.sqr(this);
48472 };
48473
48474 BN.prototype.redISqr = function redISqr () {
48475 assert(this.red, 'redISqr works only with red numbers');
48476 this.red._verify1(this);
48477 return this.red.isqr(this);
48478 };
48479
48480 // Square root over p
48481 BN.prototype.redSqrt = function redSqrt () {
48482 assert(this.red, 'redSqrt works only with red numbers');
48483 this.red._verify1(this);
48484 return this.red.sqrt(this);
48485 };
48486
48487 BN.prototype.redInvm = function redInvm () {
48488 assert(this.red, 'redInvm works only with red numbers');
48489 this.red._verify1(this);
48490 return this.red.invm(this);
48491 };
48492
48493 // Return negative clone of `this` % `red modulo`
48494 BN.prototype.redNeg = function redNeg () {
48495 assert(this.red, 'redNeg works only with red numbers');
48496 this.red._verify1(this);
48497 return this.red.neg(this);
48498 };
48499
48500 BN.prototype.redPow = function redPow (num) {
48501 assert(this.red && !num.red, 'redPow(normalNum)');
48502 this.red._verify1(this);
48503 return this.red.pow(this, num);
48504 };
48505
48506 // Prime numbers with efficient reduction
48507 var primes = {
48508 k256: null,
48509 p224: null,
48510 p192: null,
48511 p25519: null
48512 };
48513
48514 // Pseudo-Mersenne prime
48515 function MPrime (name, p) {
48516 // P = 2 ^ N - K
48517 this.name = name;
48518 this.p = new BN(p, 16);
48519 this.n = this.p.bitLength();
48520 this.k = new BN(1).iushln(this.n).isub(this.p);
48521
48522 this.tmp = this._tmp();
48523 }
48524
48525 MPrime.prototype._tmp = function _tmp () {
48526 var tmp = new BN(null);
48527 tmp.words = new Array(Math.ceil(this.n / 13));
48528 return tmp;
48529 };
48530
48531 MPrime.prototype.ireduce = function ireduce (num) {
48532 // Assumes that `num` is less than `P^2`
48533 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
48534 var r = num;
48535 var rlen;
48536
48537 do {
48538 this.split(r, this.tmp);
48539 r = this.imulK(r);
48540 r = r.iadd(this.tmp);
48541 rlen = r.bitLength();
48542 } while (rlen > this.n);
48543
48544 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
48545 if (cmp === 0) {
48546 r.words[0] = 0;
48547 r.length = 1;
48548 } else if (cmp > 0) {
48549 r.isub(this.p);
48550 } else {
48551 r.strip();
48552 }
48553
48554 return r;
48555 };
48556
48557 MPrime.prototype.split = function split (input, out) {
48558 input.iushrn(this.n, 0, out);
48559 };
48560
48561 MPrime.prototype.imulK = function imulK (num) {
48562 return num.imul(this.k);
48563 };
48564
48565 function K256 () {
48566 MPrime.call(
48567 this,
48568 'k256',
48569 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
48570 }
48571 inherits(K256, MPrime);
48572
48573 K256.prototype.split = function split (input, output) {
48574 // 256 = 9 * 26 + 22
48575 var mask = 0x3fffff;
48576
48577 var outLen = Math.min(input.length, 9);
48578 for (var i = 0; i < outLen; i++) {
48579 output.words[i] = input.words[i];
48580 }
48581 output.length = outLen;
48582
48583 if (input.length <= 9) {
48584 input.words[0] = 0;
48585 input.length = 1;
48586 return;
48587 }
48588
48589 // Shift by 9 limbs
48590 var prev = input.words[9];
48591 output.words[output.length++] = prev & mask;
48592
48593 for (i = 10; i < input.length; i++) {
48594 var next = input.words[i] | 0;
48595 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
48596 prev = next;
48597 }
48598 prev >>>= 22;
48599 input.words[i - 10] = prev;
48600 if (prev === 0 && input.length > 10) {
48601 input.length -= 10;
48602 } else {
48603 input.length -= 9;
48604 }
48605 };
48606
48607 K256.prototype.imulK = function imulK (num) {
48608 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
48609 num.words[num.length] = 0;
48610 num.words[num.length + 1] = 0;
48611 num.length += 2;
48612
48613 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
48614 var lo = 0;
48615 for (var i = 0; i < num.length; i++) {
48616 var w = num.words[i] | 0;
48617 lo += w * 0x3d1;
48618 num.words[i] = lo & 0x3ffffff;
48619 lo = w * 0x40 + ((lo / 0x4000000) | 0);
48620 }
48621
48622 // Fast length reduction
48623 if (num.words[num.length - 1] === 0) {
48624 num.length--;
48625 if (num.words[num.length - 1] === 0) {
48626 num.length--;
48627 }
48628 }
48629 return num;
48630 };
48631
48632 function P224 () {
48633 MPrime.call(
48634 this,
48635 'p224',
48636 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
48637 }
48638 inherits(P224, MPrime);
48639
48640 function P192 () {
48641 MPrime.call(
48642 this,
48643 'p192',
48644 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
48645 }
48646 inherits(P192, MPrime);
48647
48648 function P25519 () {
48649 // 2 ^ 255 - 19
48650 MPrime.call(
48651 this,
48652 '25519',
48653 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
48654 }
48655 inherits(P25519, MPrime);
48656
48657 P25519.prototype.imulK = function imulK (num) {
48658 // K = 0x13
48659 var carry = 0;
48660 for (var i = 0; i < num.length; i++) {
48661 var hi = (num.words[i] | 0) * 0x13 + carry;
48662 var lo = hi & 0x3ffffff;
48663 hi >>>= 26;
48664
48665 num.words[i] = lo;
48666 carry = hi;
48667 }
48668 if (carry !== 0) {
48669 num.words[num.length++] = carry;
48670 }
48671 return num;
48672 };
48673
48674 // Exported mostly for testing purposes, use plain name instead
48675 BN._prime = function prime (name) {
48676 // Cached version of prime
48677 if (primes[name]) return primes[name];
48678
48679 var prime;
48680 if (name === 'k256') {
48681 prime = new K256();
48682 } else if (name === 'p224') {
48683 prime = new P224();
48684 } else if (name === 'p192') {
48685 prime = new P192();
48686 } else if (name === 'p25519') {
48687 prime = new P25519();
48688 } else {
48689 throw new Error('Unknown prime ' + name);
48690 }
48691 primes[name] = prime;
48692
48693 return prime;
48694 };
48695
48696 //
48697 // Base reduction engine
48698 //
48699 function Red (m) {
48700 if (typeof m === 'string') {
48701 var prime = BN._prime(m);
48702 this.m = prime.p;
48703 this.prime = prime;
48704 } else {
48705 assert(m.gtn(1), 'modulus must be greater than 1');
48706 this.m = m;
48707 this.prime = null;
48708 }
48709 }
48710
48711 Red.prototype._verify1 = function _verify1 (a) {
48712 assert(a.negative === 0, 'red works only with positives');
48713 assert(a.red, 'red works only with red numbers');
48714 };
48715
48716 Red.prototype._verify2 = function _verify2 (a, b) {
48717 assert((a.negative | b.negative) === 0, 'red works only with positives');
48718 assert(a.red && a.red === b.red,
48719 'red works only with red numbers');
48720 };
48721
48722 Red.prototype.imod = function imod (a) {
48723 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
48724 return a.umod(this.m)._forceRed(this);
48725 };
48726
48727 Red.prototype.neg = function neg (a) {
48728 if (a.isZero()) {
48729 return a.clone();
48730 }
48731
48732 return this.m.sub(a)._forceRed(this);
48733 };
48734
48735 Red.prototype.add = function add (a, b) {
48736 this._verify2(a, b);
48737
48738 var res = a.add(b);
48739 if (res.cmp(this.m) >= 0) {
48740 res.isub(this.m);
48741 }
48742 return res._forceRed(this);
48743 };
48744
48745 Red.prototype.iadd = function iadd (a, b) {
48746 this._verify2(a, b);
48747
48748 var res = a.iadd(b);
48749 if (res.cmp(this.m) >= 0) {
48750 res.isub(this.m);
48751 }
48752 return res;
48753 };
48754
48755 Red.prototype.sub = function sub (a, b) {
48756 this._verify2(a, b);
48757
48758 var res = a.sub(b);
48759 if (res.cmpn(0) < 0) {
48760 res.iadd(this.m);
48761 }
48762 return res._forceRed(this);
48763 };
48764
48765 Red.prototype.isub = function isub (a, b) {
48766 this._verify2(a, b);
48767
48768 var res = a.isub(b);
48769 if (res.cmpn(0) < 0) {
48770 res.iadd(this.m);
48771 }
48772 return res;
48773 };
48774
48775 Red.prototype.shl = function shl (a, num) {
48776 this._verify1(a);
48777 return this.imod(a.ushln(num));
48778 };
48779
48780 Red.prototype.imul = function imul (a, b) {
48781 this._verify2(a, b);
48782 return this.imod(a.imul(b));
48783 };
48784
48785 Red.prototype.mul = function mul (a, b) {
48786 this._verify2(a, b);
48787 return this.imod(a.mul(b));
48788 };
48789
48790 Red.prototype.isqr = function isqr (a) {
48791 return this.imul(a, a.clone());
48792 };
48793
48794 Red.prototype.sqr = function sqr (a) {
48795 return this.mul(a, a);
48796 };
48797
48798 Red.prototype.sqrt = function sqrt (a) {
48799 if (a.isZero()) return a.clone();
48800
48801 var mod3 = this.m.andln(3);
48802 assert(mod3 % 2 === 1);
48803
48804 // Fast case
48805 if (mod3 === 3) {
48806 var pow = this.m.add(new BN(1)).iushrn(2);
48807 return this.pow(a, pow);
48808 }
48809
48810 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
48811 //
48812 // Find Q and S, that Q * 2 ^ S = (P - 1)
48813 var q = this.m.subn(1);
48814 var s = 0;
48815 while (!q.isZero() && q.andln(1) === 0) {
48816 s++;
48817 q.iushrn(1);
48818 }
48819 assert(!q.isZero());
48820
48821 var one = new BN(1).toRed(this);
48822 var nOne = one.redNeg();
48823
48824 // Find quadratic non-residue
48825 // NOTE: Max is such because of generalized Riemann hypothesis.
48826 var lpow = this.m.subn(1).iushrn(1);
48827 var z = this.m.bitLength();
48828 z = new BN(2 * z * z).toRed(this);
48829
48830 while (this.pow(z, lpow).cmp(nOne) !== 0) {
48831 z.redIAdd(nOne);
48832 }
48833
48834 var c = this.pow(z, q);
48835 var r = this.pow(a, q.addn(1).iushrn(1));
48836 var t = this.pow(a, q);
48837 var m = s;
48838 while (t.cmp(one) !== 0) {
48839 var tmp = t;
48840 for (var i = 0; tmp.cmp(one) !== 0; i++) {
48841 tmp = tmp.redSqr();
48842 }
48843 assert(i < m);
48844 var b = this.pow(c, new BN(1).iushln(m - i - 1));
48845
48846 r = r.redMul(b);
48847 c = b.redSqr();
48848 t = t.redMul(c);
48849 m = i;
48850 }
48851
48852 return r;
48853 };
48854
48855 Red.prototype.invm = function invm (a) {
48856 var inv = a._invmp(this.m);
48857 if (inv.negative !== 0) {
48858 inv.negative = 0;
48859 return this.imod(inv).redNeg();
48860 } else {
48861 return this.imod(inv);
48862 }
48863 };
48864
48865 Red.prototype.pow = function pow (a, num) {
48866 if (num.isZero()) return new BN(1);
48867 if (num.cmpn(1) === 0) return a.clone();
48868
48869 var windowSize = 4;
48870 var wnd = new Array(1 << windowSize);
48871 wnd[0] = new BN(1).toRed(this);
48872 wnd[1] = a;
48873 for (var i = 2; i < wnd.length; i++) {
48874 wnd[i] = this.mul(wnd[i - 1], a);
48875 }
48876
48877 var res = wnd[0];
48878 var current = 0;
48879 var currentLen = 0;
48880 var start = num.bitLength() % 26;
48881 if (start === 0) {
48882 start = 26;
48883 }
48884
48885 for (i = num.length - 1; i >= 0; i--) {
48886 var word = num.words[i];
48887 for (var j = start - 1; j >= 0; j--) {
48888 var bit = (word >> j) & 1;
48889 if (res !== wnd[0]) {
48890 res = this.sqr(res);
48891 }
48892
48893 if (bit === 0 && current === 0) {
48894 currentLen = 0;
48895 continue;
48896 }
48897
48898 current <<= 1;
48899 current |= bit;
48900 currentLen++;
48901 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
48902
48903 res = this.mul(res, wnd[current]);
48904 currentLen = 0;
48905 current = 0;
48906 }
48907 start = 26;
48908 }
48909
48910 return res;
48911 };
48912
48913 Red.prototype.convertTo = function convertTo (num) {
48914 var r = num.umod(this.m);
48915
48916 return r === num ? r.clone() : r;
48917 };
48918
48919 Red.prototype.convertFrom = function convertFrom (num) {
48920 var res = num.clone();
48921 res.red = null;
48922 return res;
48923 };
48924
48925 //
48926 // Montgomery method engine
48927 //
48928
48929 BN.mont = function mont (num) {
48930 return new Mont(num);
48931 };
48932
48933 function Mont (m) {
48934 Red.call(this, m);
48935
48936 this.shift = this.m.bitLength();
48937 if (this.shift % 26 !== 0) {
48938 this.shift += 26 - (this.shift % 26);
48939 }
48940
48941 this.r = new BN(1).iushln(this.shift);
48942 this.r2 = this.imod(this.r.sqr());
48943 this.rinv = this.r._invmp(this.m);
48944
48945 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
48946 this.minv = this.minv.umod(this.r);
48947 this.minv = this.r.sub(this.minv);
48948 }
48949 inherits(Mont, Red);
48950
48951 Mont.prototype.convertTo = function convertTo (num) {
48952 return this.imod(num.ushln(this.shift));
48953 };
48954
48955 Mont.prototype.convertFrom = function convertFrom (num) {
48956 var r = this.imod(num.mul(this.rinv));
48957 r.red = null;
48958 return r;
48959 };
48960
48961 Mont.prototype.imul = function imul (a, b) {
48962 if (a.isZero() || b.isZero()) {
48963 a.words[0] = 0;
48964 a.length = 1;
48965 return a;
48966 }
48967
48968 var t = a.imul(b);
48969 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
48970 var u = t.isub(c).iushrn(this.shift);
48971 var res = u;
48972
48973 if (u.cmp(this.m) >= 0) {
48974 res = u.isub(this.m);
48975 } else if (u.cmpn(0) < 0) {
48976 res = u.iadd(this.m);
48977 }
48978
48979 return res._forceRed(this);
48980 };
48981
48982 Mont.prototype.mul = function mul (a, b) {
48983 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
48984
48985 var t = a.mul(b);
48986 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
48987 var u = t.isub(c).iushrn(this.shift);
48988 var res = u;
48989 if (u.cmp(this.m) >= 0) {
48990 res = u.isub(this.m);
48991 } else if (u.cmpn(0) < 0) {
48992 res = u.iadd(this.m);
48993 }
48994
48995 return res._forceRed(this);
48996 };
48997
48998 Mont.prototype.invm = function invm (a) {
48999 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
49000 var res = this.imod(a._invmp(this.m).mul(this.r2));
49001 return res._forceRed(this);
49002 };
49003 })(typeof module === 'undefined' || module, this);
49004
49005 },{}],18:[function(require,module,exports){
49006 var r;
49007
49008 module.exports = function rand(len) {
49009 if (!r)
49010 r = new Rand(null);
49011
49012 return r.generate(len);
49013 };
49014
49015 function Rand(rand) {
49016 this.rand = rand;
49017 }
49018 module.exports.Rand = Rand;
49019
49020 Rand.prototype.generate = function generate(len) {
49021 return this._rand(len);
49022 };
49023
49024 // Emulate crypto API using randy
49025 Rand.prototype._rand = function _rand(n) {
49026 if (this.rand.getBytes)
49027 return this.rand.getBytes(n);
49028
49029 var res = new Uint8Array(n);
49030 for (var i = 0; i < res.length; i++)
49031 res[i] = this.rand.getByte();
49032 return res;
49033 };
49034
49035 if (typeof self === 'object') {
49036 if (self.crypto && self.crypto.getRandomValues) {
49037 // Modern browsers
49038 Rand.prototype._rand = function _rand(n) {
49039 var arr = new Uint8Array(n);
49040 self.crypto.getRandomValues(arr);
49041 return arr;
49042 };
49043 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
49044 // IE
49045 Rand.prototype._rand = function _rand(n) {
49046 var arr = new Uint8Array(n);
49047 self.msCrypto.getRandomValues(arr);
49048 return arr;
49049 };
49050
49051 // Safari's WebWorkers do not have `crypto`
49052 } else if (typeof window === 'object') {
49053 // Old junk
49054 Rand.prototype._rand = function() {
49055 throw new Error('Not implemented yet');
49056 };
49057 }
49058 } else {
49059 // Node.js or Web worker with no crypto support
49060 try {
49061 var crypto = require('crypto');
49062 if (typeof crypto.randomBytes !== 'function')
49063 throw new Error('Not supported');
49064
49065 Rand.prototype._rand = function _rand(n) {
49066 return crypto.randomBytes(n);
49067 };
49068 } catch (e) {
49069 }
49070 }
49071
49072 },{"crypto":19}],19:[function(require,module,exports){
49073
49074 },{}],20:[function(require,module,exports){
49075 (function (Buffer){
49076 // based on the aes implimentation in triple sec
49077 // https://github.com/keybase/triplesec
49078
49079 // which is in turn based on the one from crypto-js
49080 // https://code.google.com/p/crypto-js/
49081
49082 var uint_max = Math.pow(2, 32)
49083 function fixup_uint32 (x) {
49084 var ret, x_pos
49085 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49086 return ret
49087 }
49088 function scrub_vec (v) {
49089 for (var i = 0; i < v.length; v++) {
49090 v[i] = 0
49091 }
49092 return false
49093 }
49094
49095 function Global () {
49096 this.SBOX = []
49097 this.INV_SBOX = []
49098 this.SUB_MIX = [[], [], [], []]
49099 this.INV_SUB_MIX = [[], [], [], []]
49100 this.init()
49101 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
49102 }
49103
49104 Global.prototype.init = function () {
49105 var d, i, sx, t, x, x2, x4, x8, xi, _i
49106 d = (function () {
49107 var _i, _results
49108 _results = []
49109 for (i = _i = 0; _i < 256; i = ++_i) {
49110 if (i < 128) {
49111 _results.push(i << 1)
49112 } else {
49113 _results.push((i << 1) ^ 0x11b)
49114 }
49115 }
49116 return _results
49117 })()
49118 x = 0
49119 xi = 0
49120 for (i = _i = 0; _i < 256; i = ++_i) {
49121 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
49122 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
49123 this.SBOX[x] = sx
49124 this.INV_SBOX[sx] = x
49125 x2 = d[x]
49126 x4 = d[x2]
49127 x8 = d[x4]
49128 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
49129 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
49130 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
49131 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
49132 this.SUB_MIX[3][x] = t
49133 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
49134 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
49135 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
49136 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
49137 this.INV_SUB_MIX[3][sx] = t
49138 if (x === 0) {
49139 x = xi = 1
49140 } else {
49141 x = x2 ^ d[d[d[x8 ^ x2]]]
49142 xi ^= d[d[xi]]
49143 }
49144 }
49145 return true
49146 }
49147
49148 var G = new Global()
49149
49150 AES.blockSize = 4 * 4
49151
49152 AES.prototype.blockSize = AES.blockSize
49153
49154 AES.keySize = 256 / 8
49155
49156 AES.prototype.keySize = AES.keySize
49157
49158 function bufferToArray (buf) {
49159 var len = buf.length / 4
49160 var out = new Array(len)
49161 var i = -1
49162 while (++i < len) {
49163 out[i] = buf.readUInt32BE(i * 4)
49164 }
49165 return out
49166 }
49167 function AES (key) {
49168 this._key = bufferToArray(key)
49169 this._doReset()
49170 }
49171
49172 AES.prototype._doReset = function () {
49173 var invKsRow, keySize, keyWords, ksRow, ksRows, t
49174 keyWords = this._key
49175 keySize = keyWords.length
49176 this._nRounds = keySize + 6
49177 ksRows = (this._nRounds + 1) * 4
49178 this._keySchedule = []
49179 for (ksRow = 0; ksRow < ksRows; ksRow++) {
49180 this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)
49181 }
49182 this._invKeySchedule = []
49183 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
49184 ksRow = ksRows - invKsRow
49185 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
49186 this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]
49187 }
49188 return true
49189 }
49190
49191 AES.prototype.encryptBlock = function (M) {
49192 M = bufferToArray(new Buffer(M))
49193 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
49194 var buf = new Buffer(16)
49195 buf.writeUInt32BE(out[0], 0)
49196 buf.writeUInt32BE(out[1], 4)
49197 buf.writeUInt32BE(out[2], 8)
49198 buf.writeUInt32BE(out[3], 12)
49199 return buf
49200 }
49201
49202 AES.prototype.decryptBlock = function (M) {
49203 M = bufferToArray(new Buffer(M))
49204 var temp = [M[3], M[1]]
49205 M[1] = temp[0]
49206 M[3] = temp[1]
49207 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
49208 var buf = new Buffer(16)
49209 buf.writeUInt32BE(out[0], 0)
49210 buf.writeUInt32BE(out[3], 4)
49211 buf.writeUInt32BE(out[2], 8)
49212 buf.writeUInt32BE(out[1], 12)
49213 return buf
49214 }
49215
49216 AES.prototype.scrub = function () {
49217 scrub_vec(this._keySchedule)
49218 scrub_vec(this._invKeySchedule)
49219 scrub_vec(this._key)
49220 }
49221
49222 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
49223 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
49224
49225 s0 = M[0] ^ keySchedule[0]
49226 s1 = M[1] ^ keySchedule[1]
49227 s2 = M[2] ^ keySchedule[2]
49228 s3 = M[3] ^ keySchedule[3]
49229 ksRow = 4
49230 for (var round = 1; round < this._nRounds; round++) {
49231 t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]
49232 t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]
49233 t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]
49234 t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]
49235 s0 = t0
49236 s1 = t1
49237 s2 = t2
49238 s3 = t3
49239 }
49240 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
49241 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
49242 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
49243 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
49244 return [
49245 fixup_uint32(t0),
49246 fixup_uint32(t1),
49247 fixup_uint32(t2),
49248 fixup_uint32(t3)
49249 ]
49250 }
49251
49252 exports.AES = AES
49253
49254 }).call(this,require("buffer").Buffer)
49255 },{"buffer":47}],21:[function(require,module,exports){
49256 (function (Buffer){
49257 var aes = require('./aes')
49258 var Transform = require('cipher-base')
49259 var inherits = require('inherits')
49260 var GHASH = require('./ghash')
49261 var xor = require('buffer-xor')
49262 inherits(StreamCipher, Transform)
49263 module.exports = StreamCipher
49264
49265 function StreamCipher (mode, key, iv, decrypt) {
49266 if (!(this instanceof StreamCipher)) {
49267 return new StreamCipher(mode, key, iv)
49268 }
49269 Transform.call(this)
49270 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
49271 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
49272 this._cipher = new aes.AES(key)
49273 this._prev = new Buffer(iv.length)
49274 this._cache = new Buffer('')
49275 this._secCache = new Buffer('')
49276 this._decrypt = decrypt
49277 this._alen = 0
49278 this._len = 0
49279 iv.copy(this._prev)
49280 this._mode = mode
49281 var h = new Buffer(4)
49282 h.fill(0)
49283 this._ghash = new GHASH(this._cipher.encryptBlock(h))
49284 this._authTag = null
49285 this._called = false
49286 }
49287 StreamCipher.prototype._update = function (chunk) {
49288 if (!this._called && this._alen) {
49289 var rump = 16 - (this._alen % 16)
49290 if (rump < 16) {
49291 rump = new Buffer(rump)
49292 rump.fill(0)
49293 this._ghash.update(rump)
49294 }
49295 }
49296 this._called = true
49297 var out = this._mode.encrypt(this, chunk)
49298 if (this._decrypt) {
49299 this._ghash.update(chunk)
49300 } else {
49301 this._ghash.update(out)
49302 }
49303 this._len += chunk.length
49304 return out
49305 }
49306 StreamCipher.prototype._final = function () {
49307 if (this._decrypt && !this._authTag) {
49308 throw new Error('Unsupported state or unable to authenticate data')
49309 }
49310 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
49311 if (this._decrypt) {
49312 if (xorTest(tag, this._authTag)) {
49313 throw new Error('Unsupported state or unable to authenticate data')
49314 }
49315 } else {
49316 this._authTag = tag
49317 }
49318 this._cipher.scrub()
49319 }
49320 StreamCipher.prototype.getAuthTag = function getAuthTag () {
49321 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
49322 return this._authTag
49323 } else {
49324 throw new Error('Attempting to get auth tag in unsupported state')
49325 }
49326 }
49327 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
49328 if (this._decrypt) {
49329 this._authTag = tag
49330 } else {
49331 throw new Error('Attempting to set auth tag in unsupported state')
49332 }
49333 }
49334 StreamCipher.prototype.setAAD = function setAAD (buf) {
49335 if (!this._called) {
49336 this._ghash.update(buf)
49337 this._alen += buf.length
49338 } else {
49339 throw new Error('Attempting to set AAD in unsupported state')
49340 }
49341 }
49342 function xorTest (a, b) {
49343 var out = 0
49344 if (a.length !== b.length) {
49345 out++
49346 }
49347 var len = Math.min(a.length, b.length)
49348 var i = -1
49349 while (++i < len) {
49350 out += (a[i] ^ b[i])
49351 }
49352 return out
49353 }
49354
49355 }).call(this,require("buffer").Buffer)
49356 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
49357 var ciphers = require('./encrypter')
49358 exports.createCipher = exports.Cipher = ciphers.createCipher
49359 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
49360 var deciphers = require('./decrypter')
49361 exports.createDecipher = exports.Decipher = deciphers.createDecipher
49362 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
49363 var modes = require('./modes')
49364 function getCiphers () {
49365 return Object.keys(modes)
49366 }
49367 exports.listCiphers = exports.getCiphers = getCiphers
49368
49369 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
49370 (function (Buffer){
49371 var aes = require('./aes')
49372 var Transform = require('cipher-base')
49373 var inherits = require('inherits')
49374 var modes = require('./modes')
49375 var StreamCipher = require('./streamCipher')
49376 var AuthCipher = require('./authCipher')
49377 var ebtk = require('evp_bytestokey')
49378
49379 inherits(Decipher, Transform)
49380 function Decipher (mode, key, iv) {
49381 if (!(this instanceof Decipher)) {
49382 return new Decipher(mode, key, iv)
49383 }
49384 Transform.call(this)
49385 this._cache = new Splitter()
49386 this._last = void 0
49387 this._cipher = new aes.AES(key)
49388 this._prev = new Buffer(iv.length)
49389 iv.copy(this._prev)
49390 this._mode = mode
49391 this._autopadding = true
49392 }
49393 Decipher.prototype._update = function (data) {
49394 this._cache.add(data)
49395 var chunk
49396 var thing
49397 var out = []
49398 while ((chunk = this._cache.get(this._autopadding))) {
49399 thing = this._mode.decrypt(this, chunk)
49400 out.push(thing)
49401 }
49402 return Buffer.concat(out)
49403 }
49404 Decipher.prototype._final = function () {
49405 var chunk = this._cache.flush()
49406 if (this._autopadding) {
49407 return unpad(this._mode.decrypt(this, chunk))
49408 } else if (chunk) {
49409 throw new Error('data not multiple of block length')
49410 }
49411 }
49412 Decipher.prototype.setAutoPadding = function (setTo) {
49413 this._autopadding = !!setTo
49414 return this
49415 }
49416 function Splitter () {
49417 if (!(this instanceof Splitter)) {
49418 return new Splitter()
49419 }
49420 this.cache = new Buffer('')
49421 }
49422 Splitter.prototype.add = function (data) {
49423 this.cache = Buffer.concat([this.cache, data])
49424 }
49425
49426 Splitter.prototype.get = function (autoPadding) {
49427 var out
49428 if (autoPadding) {
49429 if (this.cache.length > 16) {
49430 out = this.cache.slice(0, 16)
49431 this.cache = this.cache.slice(16)
49432 return out
49433 }
49434 } else {
49435 if (this.cache.length >= 16) {
49436 out = this.cache.slice(0, 16)
49437 this.cache = this.cache.slice(16)
49438 return out
49439 }
49440 }
49441 return null
49442 }
49443 Splitter.prototype.flush = function () {
49444 if (this.cache.length) {
49445 return this.cache
49446 }
49447 }
49448 function unpad (last) {
49449 var padded = last[15]
49450 var i = -1
49451 while (++i < padded) {
49452 if (last[(i + (16 - padded))] !== padded) {
49453 throw new Error('unable to decrypt data')
49454 }
49455 }
49456 if (padded === 16) {
49457 return
49458 }
49459 return last.slice(0, 16 - padded)
49460 }
49461
49462 var modelist = {
49463 ECB: require('./modes/ecb'),
49464 CBC: require('./modes/cbc'),
49465 CFB: require('./modes/cfb'),
49466 CFB8: require('./modes/cfb8'),
49467 CFB1: require('./modes/cfb1'),
49468 OFB: require('./modes/ofb'),
49469 CTR: require('./modes/ctr'),
49470 GCM: require('./modes/ctr')
49471 }
49472
49473 function createDecipheriv (suite, password, iv) {
49474 var config = modes[suite.toLowerCase()]
49475 if (!config) {
49476 throw new TypeError('invalid suite type')
49477 }
49478 if (typeof iv === 'string') {
49479 iv = new Buffer(iv)
49480 }
49481 if (typeof password === 'string') {
49482 password = new Buffer(password)
49483 }
49484 if (password.length !== config.key / 8) {
49485 throw new TypeError('invalid key length ' + password.length)
49486 }
49487 if (iv.length !== config.iv) {
49488 throw new TypeError('invalid iv length ' + iv.length)
49489 }
49490 if (config.type === 'stream') {
49491 return new StreamCipher(modelist[config.mode], password, iv, true)
49492 } else if (config.type === 'auth') {
49493 return new AuthCipher(modelist[config.mode], password, iv, true)
49494 }
49495 return new Decipher(modelist[config.mode], password, iv)
49496 }
49497
49498 function createDecipher (suite, password) {
49499 var config = modes[suite.toLowerCase()]
49500 if (!config) {
49501 throw new TypeError('invalid suite type')
49502 }
49503 var keys = ebtk(password, false, config.key, config.iv)
49504 return createDecipheriv(suite, keys.key, keys.iv)
49505 }
49506 exports.createDecipher = createDecipher
49507 exports.createDecipheriv = createDecipheriv
49508
49509 }).call(this,require("buffer").Buffer)
49510 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],24:[function(require,module,exports){
49511 (function (Buffer){
49512 var aes = require('./aes')
49513 var Transform = require('cipher-base')
49514 var inherits = require('inherits')
49515 var modes = require('./modes')
49516 var ebtk = require('evp_bytestokey')
49517 var StreamCipher = require('./streamCipher')
49518 var AuthCipher = require('./authCipher')
49519 inherits(Cipher, Transform)
49520 function Cipher (mode, key, iv) {
49521 if (!(this instanceof Cipher)) {
49522 return new Cipher(mode, key, iv)
49523 }
49524 Transform.call(this)
49525 this._cache = new Splitter()
49526 this._cipher = new aes.AES(key)
49527 this._prev = new Buffer(iv.length)
49528 iv.copy(this._prev)
49529 this._mode = mode
49530 this._autopadding = true
49531 }
49532 Cipher.prototype._update = function (data) {
49533 this._cache.add(data)
49534 var chunk
49535 var thing
49536 var out = []
49537 while ((chunk = this._cache.get())) {
49538 thing = this._mode.encrypt(this, chunk)
49539 out.push(thing)
49540 }
49541 return Buffer.concat(out)
49542 }
49543 Cipher.prototype._final = function () {
49544 var chunk = this._cache.flush()
49545 if (this._autopadding) {
49546 chunk = this._mode.encrypt(this, chunk)
49547 this._cipher.scrub()
49548 return chunk
49549 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
49550 this._cipher.scrub()
49551 throw new Error('data not multiple of block length')
49552 }
49553 }
49554 Cipher.prototype.setAutoPadding = function (setTo) {
49555 this._autopadding = !!setTo
49556 return this
49557 }
49558
49559 function Splitter () {
49560 if (!(this instanceof Splitter)) {
49561 return new Splitter()
49562 }
49563 this.cache = new Buffer('')
49564 }
49565 Splitter.prototype.add = function (data) {
49566 this.cache = Buffer.concat([this.cache, data])
49567 }
49568
49569 Splitter.prototype.get = function () {
49570 if (this.cache.length > 15) {
49571 var out = this.cache.slice(0, 16)
49572 this.cache = this.cache.slice(16)
49573 return out
49574 }
49575 return null
49576 }
49577 Splitter.prototype.flush = function () {
49578 var len = 16 - this.cache.length
49579 var padBuff = new Buffer(len)
49580
49581 var i = -1
49582 while (++i < len) {
49583 padBuff.writeUInt8(len, i)
49584 }
49585 var out = Buffer.concat([this.cache, padBuff])
49586 return out
49587 }
49588 var modelist = {
49589 ECB: require('./modes/ecb'),
49590 CBC: require('./modes/cbc'),
49591 CFB: require('./modes/cfb'),
49592 CFB8: require('./modes/cfb8'),
49593 CFB1: require('./modes/cfb1'),
49594 OFB: require('./modes/ofb'),
49595 CTR: require('./modes/ctr'),
49596 GCM: require('./modes/ctr')
49597 }
49598
49599 function createCipheriv (suite, password, iv) {
49600 var config = modes[suite.toLowerCase()]
49601 if (!config) {
49602 throw new TypeError('invalid suite type')
49603 }
49604 if (typeof iv === 'string') {
49605 iv = new Buffer(iv)
49606 }
49607 if (typeof password === 'string') {
49608 password = new Buffer(password)
49609 }
49610 if (password.length !== config.key / 8) {
49611 throw new TypeError('invalid key length ' + password.length)
49612 }
49613 if (iv.length !== config.iv) {
49614 throw new TypeError('invalid iv length ' + iv.length)
49615 }
49616 if (config.type === 'stream') {
49617 return new StreamCipher(modelist[config.mode], password, iv)
49618 } else if (config.type === 'auth') {
49619 return new AuthCipher(modelist[config.mode], password, iv)
49620 }
49621 return new Cipher(modelist[config.mode], password, iv)
49622 }
49623 function createCipher (suite, password) {
49624 var config = modes[suite.toLowerCase()]
49625 if (!config) {
49626 throw new TypeError('invalid suite type')
49627 }
49628 var keys = ebtk(password, false, config.key, config.iv)
49629 return createCipheriv(suite, keys.key, keys.iv)
49630 }
49631
49632 exports.createCipheriv = createCipheriv
49633 exports.createCipher = createCipher
49634
49635 }).call(this,require("buffer").Buffer)
49636 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],25:[function(require,module,exports){
49637 (function (Buffer){
49638 var zeros = new Buffer(16)
49639 zeros.fill(0)
49640 module.exports = GHASH
49641 function GHASH (key) {
49642 this.h = key
49643 this.state = new Buffer(16)
49644 this.state.fill(0)
49645 this.cache = new Buffer('')
49646 }
49647 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
49648 // by Juho Vähä-Herttua
49649 GHASH.prototype.ghash = function (block) {
49650 var i = -1
49651 while (++i < block.length) {
49652 this.state[i] ^= block[i]
49653 }
49654 this._multiply()
49655 }
49656
49657 GHASH.prototype._multiply = function () {
49658 var Vi = toArray(this.h)
49659 var Zi = [0, 0, 0, 0]
49660 var j, xi, lsb_Vi
49661 var i = -1
49662 while (++i < 128) {
49663 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
49664 if (xi) {
49665 // Z_i+1 = Z_i ^ V_i
49666 Zi = xor(Zi, Vi)
49667 }
49668
49669 // Store the value of LSB(V_i)
49670 lsb_Vi = (Vi[3] & 1) !== 0
49671
49672 // V_i+1 = V_i >> 1
49673 for (j = 3; j > 0; j--) {
49674 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
49675 }
49676 Vi[0] = Vi[0] >>> 1
49677
49678 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
49679 if (lsb_Vi) {
49680 Vi[0] = Vi[0] ^ (0xe1 << 24)
49681 }
49682 }
49683 this.state = fromArray(Zi)
49684 }
49685 GHASH.prototype.update = function (buf) {
49686 this.cache = Buffer.concat([this.cache, buf])
49687 var chunk
49688 while (this.cache.length >= 16) {
49689 chunk = this.cache.slice(0, 16)
49690 this.cache = this.cache.slice(16)
49691 this.ghash(chunk)
49692 }
49693 }
49694 GHASH.prototype.final = function (abl, bl) {
49695 if (this.cache.length) {
49696 this.ghash(Buffer.concat([this.cache, zeros], 16))
49697 }
49698 this.ghash(fromArray([
49699 0, abl,
49700 0, bl
49701 ]))
49702 return this.state
49703 }
49704
49705 function toArray (buf) {
49706 return [
49707 buf.readUInt32BE(0),
49708 buf.readUInt32BE(4),
49709 buf.readUInt32BE(8),
49710 buf.readUInt32BE(12)
49711 ]
49712 }
49713 function fromArray (out) {
49714 out = out.map(fixup_uint32)
49715 var buf = new Buffer(16)
49716 buf.writeUInt32BE(out[0], 0)
49717 buf.writeUInt32BE(out[1], 4)
49718 buf.writeUInt32BE(out[2], 8)
49719 buf.writeUInt32BE(out[3], 12)
49720 return buf
49721 }
49722 var uint_max = Math.pow(2, 32)
49723 function fixup_uint32 (x) {
49724 var ret, x_pos
49725 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49726 return ret
49727 }
49728 function xor (a, b) {
49729 return [
49730 a[0] ^ b[0],
49731 a[1] ^ b[1],
49732 a[2] ^ b[2],
49733 a[3] ^ b[3]
49734 ]
49735 }
49736
49737 }).call(this,require("buffer").Buffer)
49738 },{"buffer":47}],26:[function(require,module,exports){
49739 exports['aes-128-ecb'] = {
49740 cipher: 'AES',
49741 key: 128,
49742 iv: 0,
49743 mode: 'ECB',
49744 type: 'block'
49745 }
49746 exports['aes-192-ecb'] = {
49747 cipher: 'AES',
49748 key: 192,
49749 iv: 0,
49750 mode: 'ECB',
49751 type: 'block'
49752 }
49753 exports['aes-256-ecb'] = {
49754 cipher: 'AES',
49755 key: 256,
49756 iv: 0,
49757 mode: 'ECB',
49758 type: 'block'
49759 }
49760 exports['aes-128-cbc'] = {
49761 cipher: 'AES',
49762 key: 128,
49763 iv: 16,
49764 mode: 'CBC',
49765 type: 'block'
49766 }
49767 exports['aes-192-cbc'] = {
49768 cipher: 'AES',
49769 key: 192,
49770 iv: 16,
49771 mode: 'CBC',
49772 type: 'block'
49773 }
49774 exports['aes-256-cbc'] = {
49775 cipher: 'AES',
49776 key: 256,
49777 iv: 16,
49778 mode: 'CBC',
49779 type: 'block'
49780 }
49781 exports['aes128'] = exports['aes-128-cbc']
49782 exports['aes192'] = exports['aes-192-cbc']
49783 exports['aes256'] = exports['aes-256-cbc']
49784 exports['aes-128-cfb'] = {
49785 cipher: 'AES',
49786 key: 128,
49787 iv: 16,
49788 mode: 'CFB',
49789 type: 'stream'
49790 }
49791 exports['aes-192-cfb'] = {
49792 cipher: 'AES',
49793 key: 192,
49794 iv: 16,
49795 mode: 'CFB',
49796 type: 'stream'
49797 }
49798 exports['aes-256-cfb'] = {
49799 cipher: 'AES',
49800 key: 256,
49801 iv: 16,
49802 mode: 'CFB',
49803 type: 'stream'
49804 }
49805 exports['aes-128-cfb8'] = {
49806 cipher: 'AES',
49807 key: 128,
49808 iv: 16,
49809 mode: 'CFB8',
49810 type: 'stream'
49811 }
49812 exports['aes-192-cfb8'] = {
49813 cipher: 'AES',
49814 key: 192,
49815 iv: 16,
49816 mode: 'CFB8',
49817 type: 'stream'
49818 }
49819 exports['aes-256-cfb8'] = {
49820 cipher: 'AES',
49821 key: 256,
49822 iv: 16,
49823 mode: 'CFB8',
49824 type: 'stream'
49825 }
49826 exports['aes-128-cfb1'] = {
49827 cipher: 'AES',
49828 key: 128,
49829 iv: 16,
49830 mode: 'CFB1',
49831 type: 'stream'
49832 }
49833 exports['aes-192-cfb1'] = {
49834 cipher: 'AES',
49835 key: 192,
49836 iv: 16,
49837 mode: 'CFB1',
49838 type: 'stream'
49839 }
49840 exports['aes-256-cfb1'] = {
49841 cipher: 'AES',
49842 key: 256,
49843 iv: 16,
49844 mode: 'CFB1',
49845 type: 'stream'
49846 }
49847 exports['aes-128-ofb'] = {
49848 cipher: 'AES',
49849 key: 128,
49850 iv: 16,
49851 mode: 'OFB',
49852 type: 'stream'
49853 }
49854 exports['aes-192-ofb'] = {
49855 cipher: 'AES',
49856 key: 192,
49857 iv: 16,
49858 mode: 'OFB',
49859 type: 'stream'
49860 }
49861 exports['aes-256-ofb'] = {
49862 cipher: 'AES',
49863 key: 256,
49864 iv: 16,
49865 mode: 'OFB',
49866 type: 'stream'
49867 }
49868 exports['aes-128-ctr'] = {
49869 cipher: 'AES',
49870 key: 128,
49871 iv: 16,
49872 mode: 'CTR',
49873 type: 'stream'
49874 }
49875 exports['aes-192-ctr'] = {
49876 cipher: 'AES',
49877 key: 192,
49878 iv: 16,
49879 mode: 'CTR',
49880 type: 'stream'
49881 }
49882 exports['aes-256-ctr'] = {
49883 cipher: 'AES',
49884 key: 256,
49885 iv: 16,
49886 mode: 'CTR',
49887 type: 'stream'
49888 }
49889 exports['aes-128-gcm'] = {
49890 cipher: 'AES',
49891 key: 128,
49892 iv: 12,
49893 mode: 'GCM',
49894 type: 'auth'
49895 }
49896 exports['aes-192-gcm'] = {
49897 cipher: 'AES',
49898 key: 192,
49899 iv: 12,
49900 mode: 'GCM',
49901 type: 'auth'
49902 }
49903 exports['aes-256-gcm'] = {
49904 cipher: 'AES',
49905 key: 256,
49906 iv: 12,
49907 mode: 'GCM',
49908 type: 'auth'
49909 }
49910
49911 },{}],27:[function(require,module,exports){
49912 var xor = require('buffer-xor')
49913
49914 exports.encrypt = function (self, block) {
49915 var data = xor(block, self._prev)
49916
49917 self._prev = self._cipher.encryptBlock(data)
49918 return self._prev
49919 }
49920
49921 exports.decrypt = function (self, block) {
49922 var pad = self._prev
49923
49924 self._prev = block
49925 var out = self._cipher.decryptBlock(block)
49926
49927 return xor(out, pad)
49928 }
49929
49930 },{"buffer-xor":46}],28:[function(require,module,exports){
49931 (function (Buffer){
49932 var xor = require('buffer-xor')
49933
49934 exports.encrypt = function (self, data, decrypt) {
49935 var out = new Buffer('')
49936 var len
49937
49938 while (data.length) {
49939 if (self._cache.length === 0) {
49940 self._cache = self._cipher.encryptBlock(self._prev)
49941 self._prev = new Buffer('')
49942 }
49943
49944 if (self._cache.length <= data.length) {
49945 len = self._cache.length
49946 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
49947 data = data.slice(len)
49948 } else {
49949 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
49950 break
49951 }
49952 }
49953
49954 return out
49955 }
49956 function encryptStart (self, data, decrypt) {
49957 var len = data.length
49958 var out = xor(data, self._cache)
49959 self._cache = self._cache.slice(len)
49960 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
49961 return out
49962 }
49963
49964 }).call(this,require("buffer").Buffer)
49965 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
49966 (function (Buffer){
49967 function encryptByte (self, byteParam, decrypt) {
49968 var pad
49969 var i = -1
49970 var len = 8
49971 var out = 0
49972 var bit, value
49973 while (++i < len) {
49974 pad = self._cipher.encryptBlock(self._prev)
49975 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
49976 value = pad[0] ^ bit
49977 out += ((value & 0x80) >> (i % 8))
49978 self._prev = shiftIn(self._prev, decrypt ? bit : value)
49979 }
49980 return out
49981 }
49982 exports.encrypt = function (self, chunk, decrypt) {
49983 var len = chunk.length
49984 var out = new Buffer(len)
49985 var i = -1
49986 while (++i < len) {
49987 out[i] = encryptByte(self, chunk[i], decrypt)
49988 }
49989 return out
49990 }
49991 function shiftIn (buffer, value) {
49992 var len = buffer.length
49993 var i = -1
49994 var out = new Buffer(buffer.length)
49995 buffer = Buffer.concat([buffer, new Buffer([value])])
49996 while (++i < len) {
49997 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
49998 }
49999 return out
50000 }
50001
50002 }).call(this,require("buffer").Buffer)
50003 },{"buffer":47}],30:[function(require,module,exports){
50004 (function (Buffer){
50005 function encryptByte (self, byteParam, decrypt) {
50006 var pad = self._cipher.encryptBlock(self._prev)
50007 var out = pad[0] ^ byteParam
50008 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
50009 return out
50010 }
50011 exports.encrypt = function (self, chunk, decrypt) {
50012 var len = chunk.length
50013 var out = new Buffer(len)
50014 var i = -1
50015 while (++i < len) {
50016 out[i] = encryptByte(self, chunk[i], decrypt)
50017 }
50018 return out
50019 }
50020
50021 }).call(this,require("buffer").Buffer)
50022 },{"buffer":47}],31:[function(require,module,exports){
50023 (function (Buffer){
50024 var xor = require('buffer-xor')
50025
50026 function incr32 (iv) {
50027 var len = iv.length
50028 var item
50029 while (len--) {
50030 item = iv.readUInt8(len)
50031 if (item === 255) {
50032 iv.writeUInt8(0, len)
50033 } else {
50034 item++
50035 iv.writeUInt8(item, len)
50036 break
50037 }
50038 }
50039 }
50040
50041 function getBlock (self) {
50042 var out = self._cipher.encryptBlock(self._prev)
50043 incr32(self._prev)
50044 return out
50045 }
50046
50047 exports.encrypt = function (self, chunk) {
50048 while (self._cache.length < chunk.length) {
50049 self._cache = Buffer.concat([self._cache, getBlock(self)])
50050 }
50051 var pad = self._cache.slice(0, chunk.length)
50052 self._cache = self._cache.slice(chunk.length)
50053 return xor(chunk, pad)
50054 }
50055
50056 }).call(this,require("buffer").Buffer)
50057 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
50058 exports.encrypt = function (self, block) {
50059 return self._cipher.encryptBlock(block)
50060 }
50061 exports.decrypt = function (self, block) {
50062 return self._cipher.decryptBlock(block)
50063 }
50064
50065 },{}],33:[function(require,module,exports){
50066 (function (Buffer){
50067 var xor = require('buffer-xor')
50068
50069 function getBlock (self) {
50070 self._prev = self._cipher.encryptBlock(self._prev)
50071 return self._prev
50072 }
50073
50074 exports.encrypt = function (self, chunk) {
50075 while (self._cache.length < chunk.length) {
50076 self._cache = Buffer.concat([self._cache, getBlock(self)])
50077 }
50078
50079 var pad = self._cache.slice(0, chunk.length)
50080 self._cache = self._cache.slice(chunk.length)
50081 return xor(chunk, pad)
50082 }
50083
50084 }).call(this,require("buffer").Buffer)
50085 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
50086 (function (Buffer){
50087 var aes = require('./aes')
50088 var Transform = require('cipher-base')
50089 var inherits = require('inherits')
50090
50091 inherits(StreamCipher, Transform)
50092 module.exports = StreamCipher
50093 function StreamCipher (mode, key, iv, decrypt) {
50094 if (!(this instanceof StreamCipher)) {
50095 return new StreamCipher(mode, key, iv)
50096 }
50097 Transform.call(this)
50098 this._cipher = new aes.AES(key)
50099 this._prev = new Buffer(iv.length)
50100 this._cache = new Buffer('')
50101 this._secCache = new Buffer('')
50102 this._decrypt = decrypt
50103 iv.copy(this._prev)
50104 this._mode = mode
50105 }
50106 StreamCipher.prototype._update = function (chunk) {
50107 return this._mode.encrypt(this, chunk, this._decrypt)
50108 }
50109 StreamCipher.prototype._final = function () {
50110 this._cipher.scrub()
50111 }
50112
50113 }).call(this,require("buffer").Buffer)
50114 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
50115 var ebtk = require('evp_bytestokey')
50116 var aes = require('browserify-aes/browser')
50117 var DES = require('browserify-des')
50118 var desModes = require('browserify-des/modes')
50119 var aesModes = require('browserify-aes/modes')
50120 function createCipher (suite, password) {
50121 var keyLen, ivLen
50122 suite = suite.toLowerCase()
50123 if (aesModes[suite]) {
50124 keyLen = aesModes[suite].key
50125 ivLen = aesModes[suite].iv
50126 } else if (desModes[suite]) {
50127 keyLen = desModes[suite].key * 8
50128 ivLen = desModes[suite].iv
50129 } else {
50130 throw new TypeError('invalid suite type')
50131 }
50132 var keys = ebtk(password, false, keyLen, ivLen)
50133 return createCipheriv(suite, keys.key, keys.iv)
50134 }
50135 function createDecipher (suite, password) {
50136 var keyLen, ivLen
50137 suite = suite.toLowerCase()
50138 if (aesModes[suite]) {
50139 keyLen = aesModes[suite].key
50140 ivLen = aesModes[suite].iv
50141 } else if (desModes[suite]) {
50142 keyLen = desModes[suite].key * 8
50143 ivLen = desModes[suite].iv
50144 } else {
50145 throw new TypeError('invalid suite type')
50146 }
50147 var keys = ebtk(password, false, keyLen, ivLen)
50148 return createDecipheriv(suite, keys.key, keys.iv)
50149 }
50150
50151 function createCipheriv (suite, key, iv) {
50152 suite = suite.toLowerCase()
50153 if (aesModes[suite]) {
50154 return aes.createCipheriv(suite, key, iv)
50155 } else if (desModes[suite]) {
50156 return new DES({
50157 key: key,
50158 iv: iv,
50159 mode: suite
50160 })
50161 } else {
50162 throw new TypeError('invalid suite type')
50163 }
50164 }
50165 function createDecipheriv (suite, key, iv) {
50166 suite = suite.toLowerCase()
50167 if (aesModes[suite]) {
50168 return aes.createDecipheriv(suite, key, iv)
50169 } else if (desModes[suite]) {
50170 return new DES({
50171 key: key,
50172 iv: iv,
50173 mode: suite,
50174 decrypt: true
50175 })
50176 } else {
50177 throw new TypeError('invalid suite type')
50178 }
50179 }
50180 exports.createCipher = exports.Cipher = createCipher
50181 exports.createCipheriv = exports.Cipheriv = createCipheriv
50182 exports.createDecipher = exports.Decipher = createDecipher
50183 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
50184 function getCiphers () {
50185 return Object.keys(desModes).concat(aes.getCiphers())
50186 }
50187 exports.listCiphers = exports.getCiphers = getCiphers
50188
50189 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
50190 (function (Buffer){
50191 var CipherBase = require('cipher-base')
50192 var des = require('des.js')
50193 var inherits = require('inherits')
50194
50195 var modes = {
50196 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
50197 'des-ede3': des.EDE,
50198 'des-ede-cbc': des.CBC.instantiate(des.EDE),
50199 'des-ede': des.EDE,
50200 'des-cbc': des.CBC.instantiate(des.DES),
50201 'des-ecb': des.DES
50202 }
50203 modes.des = modes['des-cbc']
50204 modes.des3 = modes['des-ede3-cbc']
50205 module.exports = DES
50206 inherits(DES, CipherBase)
50207 function DES (opts) {
50208 CipherBase.call(this)
50209 var modeName = opts.mode.toLowerCase()
50210 var mode = modes[modeName]
50211 var type
50212 if (opts.decrypt) {
50213 type = 'decrypt'
50214 } else {
50215 type = 'encrypt'
50216 }
50217 var key = opts.key
50218 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
50219 key = Buffer.concat([key, key.slice(0, 8)])
50220 }
50221 var iv = opts.iv
50222 this._des = mode.create({
50223 key: key,
50224 iv: iv,
50225 type: type
50226 })
50227 }
50228 DES.prototype._update = function (data) {
50229 return new Buffer(this._des.update(data))
50230 }
50231 DES.prototype._final = function () {
50232 return new Buffer(this._des.final())
50233 }
50234
50235 }).call(this,require("buffer").Buffer)
50236 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
50237 exports['des-ecb'] = {
50238 key: 8,
50239 iv: 0
50240 }
50241 exports['des-cbc'] = exports.des = {
50242 key: 8,
50243 iv: 8
50244 }
50245 exports['des-ede3-cbc'] = exports.des3 = {
50246 key: 24,
50247 iv: 8
50248 }
50249 exports['des-ede3'] = {
50250 key: 24,
50251 iv: 0
50252 }
50253 exports['des-ede-cbc'] = {
50254 key: 16,
50255 iv: 8
50256 }
50257 exports['des-ede'] = {
50258 key: 16,
50259 iv: 0
50260 }
50261
50262 },{}],38:[function(require,module,exports){
50263 (function (Buffer){
50264 var bn = require('bn.js');
50265 var randomBytes = require('randombytes');
50266 module.exports = crt;
50267 function blind(priv) {
50268 var r = getr(priv);
50269 var blinder = r.toRed(bn.mont(priv.modulus))
50270 .redPow(new bn(priv.publicExponent)).fromRed();
50271 return {
50272 blinder: blinder,
50273 unblinder:r.invm(priv.modulus)
50274 };
50275 }
50276 function crt(msg, priv) {
50277 var blinds = blind(priv);
50278 var len = priv.modulus.byteLength();
50279 var mod = bn.mont(priv.modulus);
50280 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
50281 var c1 = blinded.toRed(bn.mont(priv.prime1));
50282 var c2 = blinded.toRed(bn.mont(priv.prime2));
50283 var qinv = priv.coefficient;
50284 var p = priv.prime1;
50285 var q = priv.prime2;
50286 var m1 = c1.redPow(priv.exponent1);
50287 var m2 = c2.redPow(priv.exponent2);
50288 m1 = m1.fromRed();
50289 m2 = m2.fromRed();
50290 var h = m1.isub(m2).imul(qinv).umod(p);
50291 h.imul(q);
50292 m2.iadd(h);
50293 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
50294 }
50295 crt.getr = getr;
50296 function getr(priv) {
50297 var len = priv.modulus.byteLength();
50298 var r = new bn(randomBytes(len));
50299 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
50300 r = new bn(randomBytes(len));
50301 }
50302 return r;
50303 }
50304
50305 }).call(this,require("buffer").Buffer)
50306 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
50307 module.exports = require('./browser/algorithms.json')
50308
50309 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
50310 module.exports={
50311 "sha224WithRSAEncryption": {
50312 "sign": "rsa",
50313 "hash": "sha224",
50314 "id": "302d300d06096086480165030402040500041c"
50315 },
50316 "RSA-SHA224": {
50317 "sign": "ecdsa/rsa",
50318 "hash": "sha224",
50319 "id": "302d300d06096086480165030402040500041c"
50320 },
50321 "sha256WithRSAEncryption": {
50322 "sign": "rsa",
50323 "hash": "sha256",
50324 "id": "3031300d060960864801650304020105000420"
50325 },
50326 "RSA-SHA256": {
50327 "sign": "ecdsa/rsa",
50328 "hash": "sha256",
50329 "id": "3031300d060960864801650304020105000420"
50330 },
50331 "sha384WithRSAEncryption": {
50332 "sign": "rsa",
50333 "hash": "sha384",
50334 "id": "3041300d060960864801650304020205000430"
50335 },
50336 "RSA-SHA384": {
50337 "sign": "ecdsa/rsa",
50338 "hash": "sha384",
50339 "id": "3041300d060960864801650304020205000430"
50340 },
50341 "sha512WithRSAEncryption": {
50342 "sign": "rsa",
50343 "hash": "sha512",
50344 "id": "3051300d060960864801650304020305000440"
50345 },
50346 "RSA-SHA512": {
50347 "sign": "ecdsa/rsa",
50348 "hash": "sha512",
50349 "id": "3051300d060960864801650304020305000440"
50350 },
50351 "RSA-SHA1": {
50352 "sign": "rsa",
50353 "hash": "sha1",
50354 "id": "3021300906052b0e03021a05000414"
50355 },
50356 "ecdsa-with-SHA1": {
50357 "sign": "ecdsa",
50358 "hash": "sha1",
50359 "id": ""
50360 },
50361 "sha256": {
50362 "sign": "ecdsa",
50363 "hash": "sha256",
50364 "id": ""
50365 },
50366 "sha224": {
50367 "sign": "ecdsa",
50368 "hash": "sha224",
50369 "id": ""
50370 },
50371 "sha384": {
50372 "sign": "ecdsa",
50373 "hash": "sha384",
50374 "id": ""
50375 },
50376 "sha512": {
50377 "sign": "ecdsa",
50378 "hash": "sha512",
50379 "id": ""
50380 },
50381 "DSA-SHA": {
50382 "sign": "dsa",
50383 "hash": "sha1",
50384 "id": ""
50385 },
50386 "DSA-SHA1": {
50387 "sign": "dsa",
50388 "hash": "sha1",
50389 "id": ""
50390 },
50391 "DSA": {
50392 "sign": "dsa",
50393 "hash": "sha1",
50394 "id": ""
50395 },
50396 "DSA-WITH-SHA224": {
50397 "sign": "dsa",
50398 "hash": "sha224",
50399 "id": ""
50400 },
50401 "DSA-SHA224": {
50402 "sign": "dsa",
50403 "hash": "sha224",
50404 "id": ""
50405 },
50406 "DSA-WITH-SHA256": {
50407 "sign": "dsa",
50408 "hash": "sha256",
50409 "id": ""
50410 },
50411 "DSA-SHA256": {
50412 "sign": "dsa",
50413 "hash": "sha256",
50414 "id": ""
50415 },
50416 "DSA-WITH-SHA384": {
50417 "sign": "dsa",
50418 "hash": "sha384",
50419 "id": ""
50420 },
50421 "DSA-SHA384": {
50422 "sign": "dsa",
50423 "hash": "sha384",
50424 "id": ""
50425 },
50426 "DSA-WITH-SHA512": {
50427 "sign": "dsa",
50428 "hash": "sha512",
50429 "id": ""
50430 },
50431 "DSA-SHA512": {
50432 "sign": "dsa",
50433 "hash": "sha512",
50434 "id": ""
50435 },
50436 "DSA-RIPEMD160": {
50437 "sign": "dsa",
50438 "hash": "rmd160",
50439 "id": ""
50440 },
50441 "ripemd160WithRSA": {
50442 "sign": "rsa",
50443 "hash": "rmd160",
50444 "id": "3021300906052b2403020105000414"
50445 },
50446 "RSA-RIPEMD160": {
50447 "sign": "rsa",
50448 "hash": "rmd160",
50449 "id": "3021300906052b2403020105000414"
50450 },
50451 "md5WithRSAEncryption": {
50452 "sign": "rsa",
50453 "hash": "md5",
50454 "id": "3020300c06082a864886f70d020505000410"
50455 },
50456 "RSA-MD5": {
50457 "sign": "rsa",
50458 "hash": "md5",
50459 "id": "3020300c06082a864886f70d020505000410"
50460 }
50461 }
50462
50463 },{}],41:[function(require,module,exports){
50464 module.exports={
50465 "1.3.132.0.10": "secp256k1",
50466 "1.3.132.0.33": "p224",
50467 "1.2.840.10045.3.1.1": "p192",
50468 "1.2.840.10045.3.1.7": "p256",
50469 "1.3.132.0.34": "p384",
50470 "1.3.132.0.35": "p521"
50471 }
50472
50473 },{}],42:[function(require,module,exports){
50474 (function (Buffer){
50475 var createHash = require('create-hash')
50476 var stream = require('stream')
50477 var inherits = require('inherits')
50478 var sign = require('./sign')
50479 var verify = require('./verify')
50480
50481 var algorithms = require('./algorithms.json')
50482 Object.keys(algorithms).forEach(function (key) {
50483 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
50484 algorithms[key.toLowerCase()] = algorithms[key]
50485 })
50486
50487 function Sign (algorithm) {
50488 stream.Writable.call(this)
50489
50490 var data = algorithms[algorithm]
50491 if (!data) throw new Error('Unknown message digest')
50492
50493 this._hashType = data.hash
50494 this._hash = createHash(data.hash)
50495 this._tag = data.id
50496 this._signType = data.sign
50497 }
50498 inherits(Sign, stream.Writable)
50499
50500 Sign.prototype._write = function _write (data, _, done) {
50501 this._hash.update(data)
50502 done()
50503 }
50504
50505 Sign.prototype.update = function update (data, enc) {
50506 if (typeof data === 'string') data = new Buffer(data, enc)
50507
50508 this._hash.update(data)
50509 return this
50510 }
50511
50512 Sign.prototype.sign = function signMethod (key, enc) {
50513 this.end()
50514 var hash = this._hash.digest()
50515 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
50516
50517 return enc ? sig.toString(enc) : sig
50518 }
50519
50520 function Verify (algorithm) {
50521 stream.Writable.call(this)
50522
50523 var data = algorithms[algorithm]
50524 if (!data) throw new Error('Unknown message digest')
50525
50526 this._hash = createHash(data.hash)
50527 this._tag = data.id
50528 this._signType = data.sign
50529 }
50530 inherits(Verify, stream.Writable)
50531
50532 Verify.prototype._write = function _write (data, _, done) {
50533 this._hash.update(data)
50534 done()
50535 }
50536
50537 Verify.prototype.update = function update (data, enc) {
50538 if (typeof data === 'string') data = new Buffer(data, enc)
50539
50540 this._hash.update(data)
50541 return this
50542 }
50543
50544 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
50545 if (typeof sig === 'string') sig = new Buffer(sig, enc)
50546
50547 this.end()
50548 var hash = this._hash.digest()
50549 return verify(sig, hash, key, this._signType, this._tag)
50550 }
50551
50552 function createSign (algorithm) {
50553 return new Sign(algorithm)
50554 }
50555
50556 function createVerify (algorithm) {
50557 return new Verify(algorithm)
50558 }
50559
50560 module.exports = {
50561 Sign: createSign,
50562 Verify: createVerify,
50563 createSign: createSign,
50564 createVerify: createVerify
50565 }
50566
50567 }).call(this,require("buffer").Buffer)
50568 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
50569 (function (Buffer){
50570 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50571 var createHmac = require('create-hmac')
50572 var crt = require('browserify-rsa')
50573 var EC = require('elliptic').ec
50574 var BN = require('bn.js')
50575 var parseKeys = require('parse-asn1')
50576 var curves = require('./curves.json')
50577
50578 function sign (hash, key, hashType, signType, tag) {
50579 var priv = parseKeys(key)
50580 if (priv.curve) {
50581 // rsa keys can be interpreted as ecdsa ones in openssl
50582 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50583 return ecSign(hash, priv)
50584 } else if (priv.type === 'dsa') {
50585 if (signType !== 'dsa') throw new Error('wrong private key type')
50586 return dsaSign(hash, priv, hashType)
50587 } else {
50588 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50589 }
50590 hash = Buffer.concat([tag, hash])
50591 var len = priv.modulus.byteLength()
50592 var pad = [ 0, 1 ]
50593 while (hash.length + pad.length + 1 < len) pad.push(0xff)
50594 pad.push(0x00)
50595 var i = -1
50596 while (++i < hash.length) pad.push(hash[i])
50597
50598 var out = crt(pad, priv)
50599 return out
50600 }
50601
50602 function ecSign (hash, priv) {
50603 var curveId = curves[priv.curve.join('.')]
50604 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
50605
50606 var curve = new EC(curveId)
50607 var key = curve.keyFromPrivate(priv.privateKey)
50608 var out = key.sign(hash)
50609
50610 return new Buffer(out.toDER())
50611 }
50612
50613 function dsaSign (hash, priv, algo) {
50614 var x = priv.params.priv_key
50615 var p = priv.params.p
50616 var q = priv.params.q
50617 var g = priv.params.g
50618 var r = new BN(0)
50619 var k
50620 var H = bits2int(hash, q).mod(q)
50621 var s = false
50622 var kv = getKey(x, q, hash, algo)
50623 while (s === false) {
50624 k = makeKey(q, kv, algo)
50625 r = makeR(g, k, p, q)
50626 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
50627 if (s.cmpn(0) === 0) {
50628 s = false
50629 r = new BN(0)
50630 }
50631 }
50632 return toDER(r, s)
50633 }
50634
50635 function toDER (r, s) {
50636 r = r.toArray()
50637 s = s.toArray()
50638
50639 // Pad values
50640 if (r[0] & 0x80) r = [ 0 ].concat(r)
50641 if (s[0] & 0x80) s = [ 0 ].concat(s)
50642
50643 var total = r.length + s.length + 4
50644 var res = [ 0x30, total, 0x02, r.length ]
50645 res = res.concat(r, [ 0x02, s.length ], s)
50646 return new Buffer(res)
50647 }
50648
50649 function getKey (x, q, hash, algo) {
50650 x = new Buffer(x.toArray())
50651 if (x.length < q.byteLength()) {
50652 var zeros = new Buffer(q.byteLength() - x.length)
50653 zeros.fill(0)
50654 x = Buffer.concat([ zeros, x ])
50655 }
50656 var hlen = hash.length
50657 var hbits = bits2octets(hash, q)
50658 var v = new Buffer(hlen)
50659 v.fill(1)
50660 var k = new Buffer(hlen)
50661 k.fill(0)
50662 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
50663 v = createHmac(algo, k).update(v).digest()
50664 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
50665 v = createHmac(algo, k).update(v).digest()
50666 return { k: k, v: v }
50667 }
50668
50669 function bits2int (obits, q) {
50670 var bits = new BN(obits)
50671 var shift = (obits.length << 3) - q.bitLength()
50672 if (shift > 0) bits.ishrn(shift)
50673 return bits
50674 }
50675
50676 function bits2octets (bits, q) {
50677 bits = bits2int(bits, q)
50678 bits = bits.mod(q)
50679 var out = new Buffer(bits.toArray())
50680 if (out.length < q.byteLength()) {
50681 var zeros = new Buffer(q.byteLength() - out.length)
50682 zeros.fill(0)
50683 out = Buffer.concat([ zeros, out ])
50684 }
50685 return out
50686 }
50687
50688 function makeKey (q, kv, algo) {
50689 var t
50690 var k
50691
50692 do {
50693 t = new Buffer(0)
50694
50695 while (t.length * 8 < q.bitLength()) {
50696 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50697 t = Buffer.concat([ t, kv.v ])
50698 }
50699
50700 k = bits2int(t, q)
50701 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
50702 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50703 } while (k.cmp(q) !== -1)
50704
50705 return k
50706 }
50707
50708 function makeR (g, k, p, q) {
50709 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
50710 }
50711
50712 module.exports = sign
50713 module.exports.getKey = getKey
50714 module.exports.makeKey = makeKey
50715
50716 }).call(this,require("buffer").Buffer)
50717 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
50718 (function (Buffer){
50719 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50720 var BN = require('bn.js')
50721 var EC = require('elliptic').ec
50722 var parseKeys = require('parse-asn1')
50723 var curves = require('./curves.json')
50724
50725 function verify (sig, hash, key, signType, tag) {
50726 var pub = parseKeys(key)
50727 if (pub.type === 'ec') {
50728 // rsa keys can be interpreted as ecdsa ones in openssl
50729 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50730 return ecVerify(sig, hash, pub)
50731 } else if (pub.type === 'dsa') {
50732 if (signType !== 'dsa') throw new Error('wrong public key type')
50733 return dsaVerify(sig, hash, pub)
50734 } else {
50735 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50736 }
50737 hash = Buffer.concat([tag, hash])
50738 var len = pub.modulus.byteLength()
50739 var pad = [ 1 ]
50740 var padNum = 0
50741 while (hash.length + pad.length + 2 < len) {
50742 pad.push(0xff)
50743 padNum++
50744 }
50745 pad.push(0x00)
50746 var i = -1
50747 while (++i < hash.length) {
50748 pad.push(hash[i])
50749 }
50750 pad = new Buffer(pad)
50751 var red = BN.mont(pub.modulus)
50752 sig = new BN(sig).toRed(red)
50753
50754 sig = sig.redPow(new BN(pub.publicExponent))
50755 sig = new Buffer(sig.fromRed().toArray())
50756 var out = padNum < 8 ? 1 : 0
50757 len = Math.min(sig.length, pad.length)
50758 if (sig.length !== pad.length) out = 1
50759
50760 i = -1
50761 while (++i < len) out |= sig[i] ^ pad[i]
50762 return out === 0
50763 }
50764
50765 function ecVerify (sig, hash, pub) {
50766 var curveId = curves[pub.data.algorithm.curve.join('.')]
50767 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
50768
50769 var curve = new EC(curveId)
50770 var pubkey = pub.data.subjectPrivateKey.data
50771
50772 return curve.verify(hash, sig, pubkey)
50773 }
50774
50775 function dsaVerify (sig, hash, pub) {
50776 var p = pub.data.p
50777 var q = pub.data.q
50778 var g = pub.data.g
50779 var y = pub.data.pub_key
50780 var unpacked = parseKeys.signature.decode(sig, 'der')
50781 var s = unpacked.s
50782 var r = unpacked.r
50783 checkValue(s, q)
50784 checkValue(r, q)
50785 var montp = BN.mont(p)
50786 var w = s.invm(q)
50787 var v = g.toRed(montp)
50788 .redPow(new BN(hash).mul(w).mod(q))
50789 .fromRed()
50790 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
50791 .mod(p)
50792 .mod(q)
50793 return v.cmp(r) === 0
50794 }
50795
50796 function checkValue (b, q) {
50797 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
50798 if (b.cmp(q) >= q) throw new Error('invalid sig')
50799 }
50800
50801 module.exports = verify
50802
50803 }).call(this,require("buffer").Buffer)
50804 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
50805 (function (global){
50806 'use strict';
50807
50808 var buffer = require('buffer');
50809 var Buffer = buffer.Buffer;
50810 var SlowBuffer = buffer.SlowBuffer;
50811 var MAX_LEN = buffer.kMaxLength || 2147483647;
50812 exports.alloc = function alloc(size, fill, encoding) {
50813 if (typeof Buffer.alloc === 'function') {
50814 return Buffer.alloc(size, fill, encoding);
50815 }
50816 if (typeof encoding === 'number') {
50817 throw new TypeError('encoding must not be number');
50818 }
50819 if (typeof size !== 'number') {
50820 throw new TypeError('size must be a number');
50821 }
50822 if (size > MAX_LEN) {
50823 throw new RangeError('size is too large');
50824 }
50825 var enc = encoding;
50826 var _fill = fill;
50827 if (_fill === undefined) {
50828 enc = undefined;
50829 _fill = 0;
50830 }
50831 var buf = new Buffer(size);
50832 if (typeof _fill === 'string') {
50833 var fillBuf = new Buffer(_fill, enc);
50834 var flen = fillBuf.length;
50835 var i = -1;
50836 while (++i < size) {
50837 buf[i] = fillBuf[i % flen];
50838 }
50839 } else {
50840 buf.fill(_fill);
50841 }
50842 return buf;
50843 }
50844 exports.allocUnsafe = function allocUnsafe(size) {
50845 if (typeof Buffer.allocUnsafe === 'function') {
50846 return Buffer.allocUnsafe(size);
50847 }
50848 if (typeof size !== 'number') {
50849 throw new TypeError('size must be a number');
50850 }
50851 if (size > MAX_LEN) {
50852 throw new RangeError('size is too large');
50853 }
50854 return new Buffer(size);
50855 }
50856 exports.from = function from(value, encodingOrOffset, length) {
50857 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
50858 return Buffer.from(value, encodingOrOffset, length);
50859 }
50860 if (typeof value === 'number') {
50861 throw new TypeError('"value" argument must not be a number');
50862 }
50863 if (typeof value === 'string') {
50864 return new Buffer(value, encodingOrOffset);
50865 }
50866 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
50867 var offset = encodingOrOffset;
50868 if (arguments.length === 1) {
50869 return new Buffer(value);
50870 }
50871 if (typeof offset === 'undefined') {
50872 offset = 0;
50873 }
50874 var len = length;
50875 if (typeof len === 'undefined') {
50876 len = value.byteLength - offset;
50877 }
50878 if (offset >= value.byteLength) {
50879 throw new RangeError('\'offset\' is out of bounds');
50880 }
50881 if (len > value.byteLength - offset) {
50882 throw new RangeError('\'length\' is out of bounds');
50883 }
50884 return new Buffer(value.slice(offset, offset + len));
50885 }
50886 if (Buffer.isBuffer(value)) {
50887 var out = new Buffer(value.length);
50888 value.copy(out, 0, 0, value.length);
50889 return out;
50890 }
50891 if (value) {
50892 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
50893 return new Buffer(value);
50894 }
50895 if (value.type === 'Buffer' && Array.isArray(value.data)) {
50896 return new Buffer(value.data);
50897 }
50898 }
50899
50900 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
50901 }
50902 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
50903 if (typeof Buffer.allocUnsafeSlow === 'function') {
50904 return Buffer.allocUnsafeSlow(size);
50905 }
50906 if (typeof size !== 'number') {
50907 throw new TypeError('size must be a number');
50908 }
50909 if (size >= MAX_LEN) {
50910 throw new RangeError('size is too large');
50911 }
50912 return new SlowBuffer(size);
50913 }
50914
50915 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
50916 },{"buffer":47}],46:[function(require,module,exports){
50917 (function (Buffer){
50918 module.exports = function xor (a, b) {
50919 var length = Math.min(a.length, b.length)
50920 var buffer = new Buffer(length)
50921
50922 for (var i = 0; i < length; ++i) {
50923 buffer[i] = a[i] ^ b[i]
50924 }
50925
50926 return buffer
50927 }
50928
50929 }).call(this,require("buffer").Buffer)
50930 },{"buffer":47}],47:[function(require,module,exports){
50931 /*!
50932 * The buffer module from node.js, for the browser.
50933 *
50934 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
50935 * @license MIT
50936 */
50937 /* eslint-disable no-proto */
50938
50939 'use strict'
50940
50941 var base64 = require('base64-js')
50942 var ieee754 = require('ieee754')
50943
50944 exports.Buffer = Buffer
50945 exports.SlowBuffer = SlowBuffer
50946 exports.INSPECT_MAX_BYTES = 50
50947
50948 var K_MAX_LENGTH = 0x7fffffff
50949 exports.kMaxLength = K_MAX_LENGTH
50950
50951 /**
50952 * If `Buffer.TYPED_ARRAY_SUPPORT`:
50953 * === true Use Uint8Array implementation (fastest)
50954 * === false Print warning and recommend using `buffer` v4.x which has an Object
50955 * implementation (most compatible, even IE6)
50956 *
50957 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
50958 * Opera 11.6+, iOS 4.2+.
50959 *
50960 * We report that the browser does not support typed arrays if the are not subclassable
50961 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
50962 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
50963 * for __proto__ and has a buggy typed array implementation.
50964 */
50965 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
50966
50967 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
50968 typeof console.error === 'function') {
50969 console.error(
50970 'This browser lacks typed array (Uint8Array) support which is required by ' +
50971 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
50972 )
50973 }
50974
50975 function typedArraySupport () {
50976 // Can typed array instances can be augmented?
50977 try {
50978 var arr = new Uint8Array(1)
50979 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
50980 return arr.foo() === 42
50981 } catch (e) {
50982 return false
50983 }
50984 }
50985
50986 function createBuffer (length) {
50987 if (length > K_MAX_LENGTH) {
50988 throw new RangeError('Invalid typed array length')
50989 }
50990 // Return an augmented `Uint8Array` instance
50991 var buf = new Uint8Array(length)
50992 buf.__proto__ = Buffer.prototype
50993 return buf
50994 }
50995
50996 /**
50997 * The Buffer constructor returns instances of `Uint8Array` that have their
50998 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
50999 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
51000 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
51001 * returns a single octet.
51002 *
51003 * The `Uint8Array` prototype remains unmodified.
51004 */
51005
51006 function Buffer (arg, encodingOrOffset, length) {
51007 // Common case.
51008 if (typeof arg === 'number') {
51009 if (typeof encodingOrOffset === 'string') {
51010 throw new Error(
51011 'If encoding is specified then the first argument must be a string'
51012 )
51013 }
51014 return allocUnsafe(arg)
51015 }
51016 return from(arg, encodingOrOffset, length)
51017 }
51018
51019 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
51020 if (typeof Symbol !== 'undefined' && Symbol.species &&
51021 Buffer[Symbol.species] === Buffer) {
51022 Object.defineProperty(Buffer, Symbol.species, {
51023 value: null,
51024 configurable: true,
51025 enumerable: false,
51026 writable: false
51027 })
51028 }
51029
51030 Buffer.poolSize = 8192 // not used by this implementation
51031
51032 function from (value, encodingOrOffset, length) {
51033 if (typeof value === 'number') {
51034 throw new TypeError('"value" argument must not be a number')
51035 }
51036
51037 if (value instanceof ArrayBuffer) {
51038 return fromArrayBuffer(value, encodingOrOffset, length)
51039 }
51040
51041 if (typeof value === 'string') {
51042 return fromString(value, encodingOrOffset)
51043 }
51044
51045 return fromObject(value)
51046 }
51047
51048 /**
51049 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
51050 * if value is a number.
51051 * Buffer.from(str[, encoding])
51052 * Buffer.from(array)
51053 * Buffer.from(buffer)
51054 * Buffer.from(arrayBuffer[, byteOffset[, length]])
51055 **/
51056 Buffer.from = function (value, encodingOrOffset, length) {
51057 return from(value, encodingOrOffset, length)
51058 }
51059
51060 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
51061 // https://github.com/feross/buffer/pull/148
51062 Buffer.prototype.__proto__ = Uint8Array.prototype
51063 Buffer.__proto__ = Uint8Array
51064
51065 function assertSize (size) {
51066 if (typeof size !== 'number') {
51067 throw new TypeError('"size" argument must be a number')
51068 } else if (size < 0) {
51069 throw new RangeError('"size" argument must not be negative')
51070 }
51071 }
51072
51073 function alloc (size, fill, encoding) {
51074 assertSize(size)
51075 if (size <= 0) {
51076 return createBuffer(size)
51077 }
51078 if (fill !== undefined) {
51079 // Only pay attention to encoding if it's a string. This
51080 // prevents accidentally sending in a number that would
51081 // be interpretted as a start offset.
51082 return typeof encoding === 'string'
51083 ? createBuffer(size).fill(fill, encoding)
51084 : createBuffer(size).fill(fill)
51085 }
51086 return createBuffer(size)
51087 }
51088
51089 /**
51090 * Creates a new filled Buffer instance.
51091 * alloc(size[, fill[, encoding]])
51092 **/
51093 Buffer.alloc = function (size, fill, encoding) {
51094 return alloc(size, fill, encoding)
51095 }
51096
51097 function allocUnsafe (size) {
51098 assertSize(size)
51099 return createBuffer(size < 0 ? 0 : checked(size) | 0)
51100 }
51101
51102 /**
51103 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
51104 * */
51105 Buffer.allocUnsafe = function (size) {
51106 return allocUnsafe(size)
51107 }
51108 /**
51109 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
51110 */
51111 Buffer.allocUnsafeSlow = function (size) {
51112 return allocUnsafe(size)
51113 }
51114
51115 function fromString (string, encoding) {
51116 if (typeof encoding !== 'string' || encoding === '') {
51117 encoding = 'utf8'
51118 }
51119
51120 if (!Buffer.isEncoding(encoding)) {
51121 throw new TypeError('"encoding" must be a valid string encoding')
51122 }
51123
51124 var length = byteLength(string, encoding) | 0
51125 var buf = createBuffer(length)
51126
51127 var actual = buf.write(string, encoding)
51128
51129 if (actual !== length) {
51130 // Writing a hex string, for example, that contains invalid characters will
51131 // cause everything after the first invalid character to be ignored. (e.g.
51132 // 'abxxcd' will be treated as 'ab')
51133 buf = buf.slice(0, actual)
51134 }
51135
51136 return buf
51137 }
51138
51139 function fromArrayLike (array) {
51140 var length = array.length < 0 ? 0 : checked(array.length) | 0
51141 var buf = createBuffer(length)
51142 for (var i = 0; i < length; i += 1) {
51143 buf[i] = array[i] & 255
51144 }
51145 return buf
51146 }
51147
51148 function fromArrayBuffer (array, byteOffset, length) {
51149 if (byteOffset < 0 || array.byteLength < byteOffset) {
51150 throw new RangeError('\'offset\' is out of bounds')
51151 }
51152
51153 if (array.byteLength < byteOffset + (length || 0)) {
51154 throw new RangeError('\'length\' is out of bounds')
51155 }
51156
51157 var buf
51158 if (byteOffset === undefined && length === undefined) {
51159 buf = new Uint8Array(array)
51160 } else if (length === undefined) {
51161 buf = new Uint8Array(array, byteOffset)
51162 } else {
51163 buf = new Uint8Array(array, byteOffset, length)
51164 }
51165
51166 // Return an augmented `Uint8Array` instance
51167 buf.__proto__ = Buffer.prototype
51168 return buf
51169 }
51170
51171 function fromObject (obj) {
51172 if (Buffer.isBuffer(obj)) {
51173 var len = checked(obj.length) | 0
51174 var buf = createBuffer(len)
51175
51176 if (buf.length === 0) {
51177 return buf
51178 }
51179
51180 obj.copy(buf, 0, 0, len)
51181 return buf
51182 }
51183
51184 if (obj) {
51185 if (isArrayBufferView(obj) || 'length' in obj) {
51186 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
51187 return createBuffer(0)
51188 }
51189 return fromArrayLike(obj)
51190 }
51191
51192 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
51193 return fromArrayLike(obj.data)
51194 }
51195 }
51196
51197 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
51198 }
51199
51200 function checked (length) {
51201 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
51202 // length is NaN (which is otherwise coerced to zero.)
51203 if (length >= K_MAX_LENGTH) {
51204 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
51205 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
51206 }
51207 return length | 0
51208 }
51209
51210 function SlowBuffer (length) {
51211 if (+length != length) { // eslint-disable-line eqeqeq
51212 length = 0
51213 }
51214 return Buffer.alloc(+length)
51215 }
51216
51217 Buffer.isBuffer = function isBuffer (b) {
51218 return b != null && b._isBuffer === true
51219 }
51220
51221 Buffer.compare = function compare (a, b) {
51222 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
51223 throw new TypeError('Arguments must be Buffers')
51224 }
51225
51226 if (a === b) return 0
51227
51228 var x = a.length
51229 var y = b.length
51230
51231 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
51232 if (a[i] !== b[i]) {
51233 x = a[i]
51234 y = b[i]
51235 break
51236 }
51237 }
51238
51239 if (x < y) return -1
51240 if (y < x) return 1
51241 return 0
51242 }
51243
51244 Buffer.isEncoding = function isEncoding (encoding) {
51245 switch (String(encoding).toLowerCase()) {
51246 case 'hex':
51247 case 'utf8':
51248 case 'utf-8':
51249 case 'ascii':
51250 case 'latin1':
51251 case 'binary':
51252 case 'base64':
51253 case 'ucs2':
51254 case 'ucs-2':
51255 case 'utf16le':
51256 case 'utf-16le':
51257 return true
51258 default:
51259 return false
51260 }
51261 }
51262
51263 Buffer.concat = function concat (list, length) {
51264 if (!Array.isArray(list)) {
51265 throw new TypeError('"list" argument must be an Array of Buffers')
51266 }
51267
51268 if (list.length === 0) {
51269 return Buffer.alloc(0)
51270 }
51271
51272 var i
51273 if (length === undefined) {
51274 length = 0
51275 for (i = 0; i < list.length; ++i) {
51276 length += list[i].length
51277 }
51278 }
51279
51280 var buffer = Buffer.allocUnsafe(length)
51281 var pos = 0
51282 for (i = 0; i < list.length; ++i) {
51283 var buf = list[i]
51284 if (!Buffer.isBuffer(buf)) {
51285 throw new TypeError('"list" argument must be an Array of Buffers')
51286 }
51287 buf.copy(buffer, pos)
51288 pos += buf.length
51289 }
51290 return buffer
51291 }
51292
51293 function byteLength (string, encoding) {
51294 if (Buffer.isBuffer(string)) {
51295 return string.length
51296 }
51297 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
51298 return string.byteLength
51299 }
51300 if (typeof string !== 'string') {
51301 string = '' + string
51302 }
51303
51304 var len = string.length
51305 if (len === 0) return 0
51306
51307 // Use a for loop to avoid recursion
51308 var loweredCase = false
51309 for (;;) {
51310 switch (encoding) {
51311 case 'ascii':
51312 case 'latin1':
51313 case 'binary':
51314 return len
51315 case 'utf8':
51316 case 'utf-8':
51317 case undefined:
51318 return utf8ToBytes(string).length
51319 case 'ucs2':
51320 case 'ucs-2':
51321 case 'utf16le':
51322 case 'utf-16le':
51323 return len * 2
51324 case 'hex':
51325 return len >>> 1
51326 case 'base64':
51327 return base64ToBytes(string).length
51328 default:
51329 if (loweredCase) return utf8ToBytes(string).length // assume utf8
51330 encoding = ('' + encoding).toLowerCase()
51331 loweredCase = true
51332 }
51333 }
51334 }
51335 Buffer.byteLength = byteLength
51336
51337 function slowToString (encoding, start, end) {
51338 var loweredCase = false
51339
51340 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
51341 // property of a typed array.
51342
51343 // This behaves neither like String nor Uint8Array in that we set start/end
51344 // to their upper/lower bounds if the value passed is out of range.
51345 // undefined is handled specially as per ECMA-262 6th Edition,
51346 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
51347 if (start === undefined || start < 0) {
51348 start = 0
51349 }
51350 // Return early if start > this.length. Done here to prevent potential uint32
51351 // coercion fail below.
51352 if (start > this.length) {
51353 return ''
51354 }
51355
51356 if (end === undefined || end > this.length) {
51357 end = this.length
51358 }
51359
51360 if (end <= 0) {
51361 return ''
51362 }
51363
51364 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
51365 end >>>= 0
51366 start >>>= 0
51367
51368 if (end <= start) {
51369 return ''
51370 }
51371
51372 if (!encoding) encoding = 'utf8'
51373
51374 while (true) {
51375 switch (encoding) {
51376 case 'hex':
51377 return hexSlice(this, start, end)
51378
51379 case 'utf8':
51380 case 'utf-8':
51381 return utf8Slice(this, start, end)
51382
51383 case 'ascii':
51384 return asciiSlice(this, start, end)
51385
51386 case 'latin1':
51387 case 'binary':
51388 return latin1Slice(this, start, end)
51389
51390 case 'base64':
51391 return base64Slice(this, start, end)
51392
51393 case 'ucs2':
51394 case 'ucs-2':
51395 case 'utf16le':
51396 case 'utf-16le':
51397 return utf16leSlice(this, start, end)
51398
51399 default:
51400 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51401 encoding = (encoding + '').toLowerCase()
51402 loweredCase = true
51403 }
51404 }
51405 }
51406
51407 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
51408 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
51409 // reliably in a browserify context because there could be multiple different
51410 // copies of the 'buffer' package in use. This method works even for Buffer
51411 // instances that were created from another copy of the `buffer` package.
51412 // See: https://github.com/feross/buffer/issues/154
51413 Buffer.prototype._isBuffer = true
51414
51415 function swap (b, n, m) {
51416 var i = b[n]
51417 b[n] = b[m]
51418 b[m] = i
51419 }
51420
51421 Buffer.prototype.swap16 = function swap16 () {
51422 var len = this.length
51423 if (len % 2 !== 0) {
51424 throw new RangeError('Buffer size must be a multiple of 16-bits')
51425 }
51426 for (var i = 0; i < len; i += 2) {
51427 swap(this, i, i + 1)
51428 }
51429 return this
51430 }
51431
51432 Buffer.prototype.swap32 = function swap32 () {
51433 var len = this.length
51434 if (len % 4 !== 0) {
51435 throw new RangeError('Buffer size must be a multiple of 32-bits')
51436 }
51437 for (var i = 0; i < len; i += 4) {
51438 swap(this, i, i + 3)
51439 swap(this, i + 1, i + 2)
51440 }
51441 return this
51442 }
51443
51444 Buffer.prototype.swap64 = function swap64 () {
51445 var len = this.length
51446 if (len % 8 !== 0) {
51447 throw new RangeError('Buffer size must be a multiple of 64-bits')
51448 }
51449 for (var i = 0; i < len; i += 8) {
51450 swap(this, i, i + 7)
51451 swap(this, i + 1, i + 6)
51452 swap(this, i + 2, i + 5)
51453 swap(this, i + 3, i + 4)
51454 }
51455 return this
51456 }
51457
51458 Buffer.prototype.toString = function toString () {
51459 var length = this.length
51460 if (length === 0) return ''
51461 if (arguments.length === 0) return utf8Slice(this, 0, length)
51462 return slowToString.apply(this, arguments)
51463 }
51464
51465 Buffer.prototype.equals = function equals (b) {
51466 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
51467 if (this === b) return true
51468 return Buffer.compare(this, b) === 0
51469 }
51470
51471 Buffer.prototype.inspect = function inspect () {
51472 var str = ''
51473 var max = exports.INSPECT_MAX_BYTES
51474 if (this.length > 0) {
51475 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
51476 if (this.length > max) str += ' ... '
51477 }
51478 return '<Buffer ' + str + '>'
51479 }
51480
51481 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
51482 if (!Buffer.isBuffer(target)) {
51483 throw new TypeError('Argument must be a Buffer')
51484 }
51485
51486 if (start === undefined) {
51487 start = 0
51488 }
51489 if (end === undefined) {
51490 end = target ? target.length : 0
51491 }
51492 if (thisStart === undefined) {
51493 thisStart = 0
51494 }
51495 if (thisEnd === undefined) {
51496 thisEnd = this.length
51497 }
51498
51499 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
51500 throw new RangeError('out of range index')
51501 }
51502
51503 if (thisStart >= thisEnd && start >= end) {
51504 return 0
51505 }
51506 if (thisStart >= thisEnd) {
51507 return -1
51508 }
51509 if (start >= end) {
51510 return 1
51511 }
51512
51513 start >>>= 0
51514 end >>>= 0
51515 thisStart >>>= 0
51516 thisEnd >>>= 0
51517
51518 if (this === target) return 0
51519
51520 var x = thisEnd - thisStart
51521 var y = end - start
51522 var len = Math.min(x, y)
51523
51524 var thisCopy = this.slice(thisStart, thisEnd)
51525 var targetCopy = target.slice(start, end)
51526
51527 for (var i = 0; i < len; ++i) {
51528 if (thisCopy[i] !== targetCopy[i]) {
51529 x = thisCopy[i]
51530 y = targetCopy[i]
51531 break
51532 }
51533 }
51534
51535 if (x < y) return -1
51536 if (y < x) return 1
51537 return 0
51538 }
51539
51540 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
51541 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
51542 //
51543 // Arguments:
51544 // - buffer - a Buffer to search
51545 // - val - a string, Buffer, or number
51546 // - byteOffset - an index into `buffer`; will be clamped to an int32
51547 // - encoding - an optional encoding, relevant is val is a string
51548 // - dir - true for indexOf, false for lastIndexOf
51549 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
51550 // Empty buffer means no match
51551 if (buffer.length === 0) return -1
51552
51553 // Normalize byteOffset
51554 if (typeof byteOffset === 'string') {
51555 encoding = byteOffset
51556 byteOffset = 0
51557 } else if (byteOffset > 0x7fffffff) {
51558 byteOffset = 0x7fffffff
51559 } else if (byteOffset < -0x80000000) {
51560 byteOffset = -0x80000000
51561 }
51562 byteOffset = +byteOffset // Coerce to Number.
51563 if (numberIsNaN(byteOffset)) {
51564 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
51565 byteOffset = dir ? 0 : (buffer.length - 1)
51566 }
51567
51568 // Normalize byteOffset: negative offsets start from the end of the buffer
51569 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
51570 if (byteOffset >= buffer.length) {
51571 if (dir) return -1
51572 else byteOffset = buffer.length - 1
51573 } else if (byteOffset < 0) {
51574 if (dir) byteOffset = 0
51575 else return -1
51576 }
51577
51578 // Normalize val
51579 if (typeof val === 'string') {
51580 val = Buffer.from(val, encoding)
51581 }
51582
51583 // Finally, search either indexOf (if dir is true) or lastIndexOf
51584 if (Buffer.isBuffer(val)) {
51585 // Special case: looking for empty string/buffer always fails
51586 if (val.length === 0) {
51587 return -1
51588 }
51589 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
51590 } else if (typeof val === 'number') {
51591 val = val & 0xFF // Search for a byte value [0-255]
51592 if (typeof Uint8Array.prototype.indexOf === 'function') {
51593 if (dir) {
51594 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
51595 } else {
51596 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
51597 }
51598 }
51599 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
51600 }
51601
51602 throw new TypeError('val must be string, number or Buffer')
51603 }
51604
51605 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
51606 var indexSize = 1
51607 var arrLength = arr.length
51608 var valLength = val.length
51609
51610 if (encoding !== undefined) {
51611 encoding = String(encoding).toLowerCase()
51612 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
51613 encoding === 'utf16le' || encoding === 'utf-16le') {
51614 if (arr.length < 2 || val.length < 2) {
51615 return -1
51616 }
51617 indexSize = 2
51618 arrLength /= 2
51619 valLength /= 2
51620 byteOffset /= 2
51621 }
51622 }
51623
51624 function read (buf, i) {
51625 if (indexSize === 1) {
51626 return buf[i]
51627 } else {
51628 return buf.readUInt16BE(i * indexSize)
51629 }
51630 }
51631
51632 var i
51633 if (dir) {
51634 var foundIndex = -1
51635 for (i = byteOffset; i < arrLength; i++) {
51636 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
51637 if (foundIndex === -1) foundIndex = i
51638 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
51639 } else {
51640 if (foundIndex !== -1) i -= i - foundIndex
51641 foundIndex = -1
51642 }
51643 }
51644 } else {
51645 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
51646 for (i = byteOffset; i >= 0; i--) {
51647 var found = true
51648 for (var j = 0; j < valLength; j++) {
51649 if (read(arr, i + j) !== read(val, j)) {
51650 found = false
51651 break
51652 }
51653 }
51654 if (found) return i
51655 }
51656 }
51657
51658 return -1
51659 }
51660
51661 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
51662 return this.indexOf(val, byteOffset, encoding) !== -1
51663 }
51664
51665 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
51666 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
51667 }
51668
51669 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
51670 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
51671 }
51672
51673 function hexWrite (buf, string, offset, length) {
51674 offset = Number(offset) || 0
51675 var remaining = buf.length - offset
51676 if (!length) {
51677 length = remaining
51678 } else {
51679 length = Number(length)
51680 if (length > remaining) {
51681 length = remaining
51682 }
51683 }
51684
51685 // must be an even number of digits
51686 var strLen = string.length
51687 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
51688
51689 if (length > strLen / 2) {
51690 length = strLen / 2
51691 }
51692 for (var i = 0; i < length; ++i) {
51693 var parsed = parseInt(string.substr(i * 2, 2), 16)
51694 if (numberIsNaN(parsed)) return i
51695 buf[offset + i] = parsed
51696 }
51697 return i
51698 }
51699
51700 function utf8Write (buf, string, offset, length) {
51701 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
51702 }
51703
51704 function asciiWrite (buf, string, offset, length) {
51705 return blitBuffer(asciiToBytes(string), buf, offset, length)
51706 }
51707
51708 function latin1Write (buf, string, offset, length) {
51709 return asciiWrite(buf, string, offset, length)
51710 }
51711
51712 function base64Write (buf, string, offset, length) {
51713 return blitBuffer(base64ToBytes(string), buf, offset, length)
51714 }
51715
51716 function ucs2Write (buf, string, offset, length) {
51717 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
51718 }
51719
51720 Buffer.prototype.write = function write (string, offset, length, encoding) {
51721 // Buffer#write(string)
51722 if (offset === undefined) {
51723 encoding = 'utf8'
51724 length = this.length
51725 offset = 0
51726 // Buffer#write(string, encoding)
51727 } else if (length === undefined && typeof offset === 'string') {
51728 encoding = offset
51729 length = this.length
51730 offset = 0
51731 // Buffer#write(string, offset[, length][, encoding])
51732 } else if (isFinite(offset)) {
51733 offset = offset >>> 0
51734 if (isFinite(length)) {
51735 length = length >>> 0
51736 if (encoding === undefined) encoding = 'utf8'
51737 } else {
51738 encoding = length
51739 length = undefined
51740 }
51741 } else {
51742 throw new Error(
51743 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
51744 )
51745 }
51746
51747 var remaining = this.length - offset
51748 if (length === undefined || length > remaining) length = remaining
51749
51750 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
51751 throw new RangeError('Attempt to write outside buffer bounds')
51752 }
51753
51754 if (!encoding) encoding = 'utf8'
51755
51756 var loweredCase = false
51757 for (;;) {
51758 switch (encoding) {
51759 case 'hex':
51760 return hexWrite(this, string, offset, length)
51761
51762 case 'utf8':
51763 case 'utf-8':
51764 return utf8Write(this, string, offset, length)
51765
51766 case 'ascii':
51767 return asciiWrite(this, string, offset, length)
51768
51769 case 'latin1':
51770 case 'binary':
51771 return latin1Write(this, string, offset, length)
51772
51773 case 'base64':
51774 // Warning: maxLength not taken into account in base64Write
51775 return base64Write(this, string, offset, length)
51776
51777 case 'ucs2':
51778 case 'ucs-2':
51779 case 'utf16le':
51780 case 'utf-16le':
51781 return ucs2Write(this, string, offset, length)
51782
51783 default:
51784 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51785 encoding = ('' + encoding).toLowerCase()
51786 loweredCase = true
51787 }
51788 }
51789 }
51790
51791 Buffer.prototype.toJSON = function toJSON () {
51792 return {
51793 type: 'Buffer',
51794 data: Array.prototype.slice.call(this._arr || this, 0)
51795 }
51796 }
51797
51798 function base64Slice (buf, start, end) {
51799 if (start === 0 && end === buf.length) {
51800 return base64.fromByteArray(buf)
51801 } else {
51802 return base64.fromByteArray(buf.slice(start, end))
51803 }
51804 }
51805
51806 function utf8Slice (buf, start, end) {
51807 end = Math.min(buf.length, end)
51808 var res = []
51809
51810 var i = start
51811 while (i < end) {
51812 var firstByte = buf[i]
51813 var codePoint = null
51814 var bytesPerSequence = (firstByte > 0xEF) ? 4
51815 : (firstByte > 0xDF) ? 3
51816 : (firstByte > 0xBF) ? 2
51817 : 1
51818
51819 if (i + bytesPerSequence <= end) {
51820 var secondByte, thirdByte, fourthByte, tempCodePoint
51821
51822 switch (bytesPerSequence) {
51823 case 1:
51824 if (firstByte < 0x80) {
51825 codePoint = firstByte
51826 }
51827 break
51828 case 2:
51829 secondByte = buf[i + 1]
51830 if ((secondByte & 0xC0) === 0x80) {
51831 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
51832 if (tempCodePoint > 0x7F) {
51833 codePoint = tempCodePoint
51834 }
51835 }
51836 break
51837 case 3:
51838 secondByte = buf[i + 1]
51839 thirdByte = buf[i + 2]
51840 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
51841 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
51842 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
51843 codePoint = tempCodePoint
51844 }
51845 }
51846 break
51847 case 4:
51848 secondByte = buf[i + 1]
51849 thirdByte = buf[i + 2]
51850 fourthByte = buf[i + 3]
51851 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
51852 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
51853 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
51854 codePoint = tempCodePoint
51855 }
51856 }
51857 }
51858 }
51859
51860 if (codePoint === null) {
51861 // we did not generate a valid codePoint so insert a
51862 // replacement char (U+FFFD) and advance only 1 byte
51863 codePoint = 0xFFFD
51864 bytesPerSequence = 1
51865 } else if (codePoint > 0xFFFF) {
51866 // encode to utf16 (surrogate pair dance)
51867 codePoint -= 0x10000
51868 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
51869 codePoint = 0xDC00 | codePoint & 0x3FF
51870 }
51871
51872 res.push(codePoint)
51873 i += bytesPerSequence
51874 }
51875
51876 return decodeCodePointsArray(res)
51877 }
51878
51879 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
51880 // the lowest limit is Chrome, with 0x10000 args.
51881 // We go 1 magnitude less, for safety
51882 var MAX_ARGUMENTS_LENGTH = 0x1000
51883
51884 function decodeCodePointsArray (codePoints) {
51885 var len = codePoints.length
51886 if (len <= MAX_ARGUMENTS_LENGTH) {
51887 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
51888 }
51889
51890 // Decode in chunks to avoid "call stack size exceeded".
51891 var res = ''
51892 var i = 0
51893 while (i < len) {
51894 res += String.fromCharCode.apply(
51895 String,
51896 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
51897 )
51898 }
51899 return res
51900 }
51901
51902 function asciiSlice (buf, start, end) {
51903 var ret = ''
51904 end = Math.min(buf.length, end)
51905
51906 for (var i = start; i < end; ++i) {
51907 ret += String.fromCharCode(buf[i] & 0x7F)
51908 }
51909 return ret
51910 }
51911
51912 function latin1Slice (buf, start, end) {
51913 var ret = ''
51914 end = Math.min(buf.length, end)
51915
51916 for (var i = start; i < end; ++i) {
51917 ret += String.fromCharCode(buf[i])
51918 }
51919 return ret
51920 }
51921
51922 function hexSlice (buf, start, end) {
51923 var len = buf.length
51924
51925 if (!start || start < 0) start = 0
51926 if (!end || end < 0 || end > len) end = len
51927
51928 var out = ''
51929 for (var i = start; i < end; ++i) {
51930 out += toHex(buf[i])
51931 }
51932 return out
51933 }
51934
51935 function utf16leSlice (buf, start, end) {
51936 var bytes = buf.slice(start, end)
51937 var res = ''
51938 for (var i = 0; i < bytes.length; i += 2) {
51939 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
51940 }
51941 return res
51942 }
51943
51944 Buffer.prototype.slice = function slice (start, end) {
51945 var len = this.length
51946 start = ~~start
51947 end = end === undefined ? len : ~~end
51948
51949 if (start < 0) {
51950 start += len
51951 if (start < 0) start = 0
51952 } else if (start > len) {
51953 start = len
51954 }
51955
51956 if (end < 0) {
51957 end += len
51958 if (end < 0) end = 0
51959 } else if (end > len) {
51960 end = len
51961 }
51962
51963 if (end < start) end = start
51964
51965 var newBuf = this.subarray(start, end)
51966 // Return an augmented `Uint8Array` instance
51967 newBuf.__proto__ = Buffer.prototype
51968 return newBuf
51969 }
51970
51971 /*
51972 * Need to make sure that buffer isn't trying to write out of bounds.
51973 */
51974 function checkOffset (offset, ext, length) {
51975 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
51976 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
51977 }
51978
51979 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
51980 offset = offset >>> 0
51981 byteLength = byteLength >>> 0
51982 if (!noAssert) checkOffset(offset, byteLength, this.length)
51983
51984 var val = this[offset]
51985 var mul = 1
51986 var i = 0
51987 while (++i < byteLength && (mul *= 0x100)) {
51988 val += this[offset + i] * mul
51989 }
51990
51991 return val
51992 }
51993
51994 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
51995 offset = offset >>> 0
51996 byteLength = byteLength >>> 0
51997 if (!noAssert) {
51998 checkOffset(offset, byteLength, this.length)
51999 }
52000
52001 var val = this[offset + --byteLength]
52002 var mul = 1
52003 while (byteLength > 0 && (mul *= 0x100)) {
52004 val += this[offset + --byteLength] * mul
52005 }
52006
52007 return val
52008 }
52009
52010 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
52011 offset = offset >>> 0
52012 if (!noAssert) checkOffset(offset, 1, this.length)
52013 return this[offset]
52014 }
52015
52016 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
52017 offset = offset >>> 0
52018 if (!noAssert) checkOffset(offset, 2, this.length)
52019 return this[offset] | (this[offset + 1] << 8)
52020 }
52021
52022 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
52023 offset = offset >>> 0
52024 if (!noAssert) checkOffset(offset, 2, this.length)
52025 return (this[offset] << 8) | this[offset + 1]
52026 }
52027
52028 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
52029 offset = offset >>> 0
52030 if (!noAssert) checkOffset(offset, 4, this.length)
52031
52032 return ((this[offset]) |
52033 (this[offset + 1] << 8) |
52034 (this[offset + 2] << 16)) +
52035 (this[offset + 3] * 0x1000000)
52036 }
52037
52038 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
52039 offset = offset >>> 0
52040 if (!noAssert) checkOffset(offset, 4, this.length)
52041
52042 return (this[offset] * 0x1000000) +
52043 ((this[offset + 1] << 16) |
52044 (this[offset + 2] << 8) |
52045 this[offset + 3])
52046 }
52047
52048 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
52049 offset = offset >>> 0
52050 byteLength = byteLength >>> 0
52051 if (!noAssert) checkOffset(offset, byteLength, this.length)
52052
52053 var val = this[offset]
52054 var mul = 1
52055 var i = 0
52056 while (++i < byteLength && (mul *= 0x100)) {
52057 val += this[offset + i] * mul
52058 }
52059 mul *= 0x80
52060
52061 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52062
52063 return val
52064 }
52065
52066 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
52067 offset = offset >>> 0
52068 byteLength = byteLength >>> 0
52069 if (!noAssert) checkOffset(offset, byteLength, this.length)
52070
52071 var i = byteLength
52072 var mul = 1
52073 var val = this[offset + --i]
52074 while (i > 0 && (mul *= 0x100)) {
52075 val += this[offset + --i] * mul
52076 }
52077 mul *= 0x80
52078
52079 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52080
52081 return val
52082 }
52083
52084 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
52085 offset = offset >>> 0
52086 if (!noAssert) checkOffset(offset, 1, this.length)
52087 if (!(this[offset] & 0x80)) return (this[offset])
52088 return ((0xff - this[offset] + 1) * -1)
52089 }
52090
52091 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
52092 offset = offset >>> 0
52093 if (!noAssert) checkOffset(offset, 2, this.length)
52094 var val = this[offset] | (this[offset + 1] << 8)
52095 return (val & 0x8000) ? val | 0xFFFF0000 : val
52096 }
52097
52098 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
52099 offset = offset >>> 0
52100 if (!noAssert) checkOffset(offset, 2, this.length)
52101 var val = this[offset + 1] | (this[offset] << 8)
52102 return (val & 0x8000) ? val | 0xFFFF0000 : val
52103 }
52104
52105 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
52106 offset = offset >>> 0
52107 if (!noAssert) checkOffset(offset, 4, this.length)
52108
52109 return (this[offset]) |
52110 (this[offset + 1] << 8) |
52111 (this[offset + 2] << 16) |
52112 (this[offset + 3] << 24)
52113 }
52114
52115 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
52116 offset = offset >>> 0
52117 if (!noAssert) checkOffset(offset, 4, this.length)
52118
52119 return (this[offset] << 24) |
52120 (this[offset + 1] << 16) |
52121 (this[offset + 2] << 8) |
52122 (this[offset + 3])
52123 }
52124
52125 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
52126 offset = offset >>> 0
52127 if (!noAssert) checkOffset(offset, 4, this.length)
52128 return ieee754.read(this, offset, true, 23, 4)
52129 }
52130
52131 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
52132 offset = offset >>> 0
52133 if (!noAssert) checkOffset(offset, 4, this.length)
52134 return ieee754.read(this, offset, false, 23, 4)
52135 }
52136
52137 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
52138 offset = offset >>> 0
52139 if (!noAssert) checkOffset(offset, 8, this.length)
52140 return ieee754.read(this, offset, true, 52, 8)
52141 }
52142
52143 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
52144 offset = offset >>> 0
52145 if (!noAssert) checkOffset(offset, 8, this.length)
52146 return ieee754.read(this, offset, false, 52, 8)
52147 }
52148
52149 function checkInt (buf, value, offset, ext, max, min) {
52150 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
52151 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
52152 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52153 }
52154
52155 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
52156 value = +value
52157 offset = offset >>> 0
52158 byteLength = byteLength >>> 0
52159 if (!noAssert) {
52160 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52161 checkInt(this, value, offset, byteLength, maxBytes, 0)
52162 }
52163
52164 var mul = 1
52165 var i = 0
52166 this[offset] = value & 0xFF
52167 while (++i < byteLength && (mul *= 0x100)) {
52168 this[offset + i] = (value / mul) & 0xFF
52169 }
52170
52171 return offset + byteLength
52172 }
52173
52174 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
52175 value = +value
52176 offset = offset >>> 0
52177 byteLength = byteLength >>> 0
52178 if (!noAssert) {
52179 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52180 checkInt(this, value, offset, byteLength, maxBytes, 0)
52181 }
52182
52183 var i = byteLength - 1
52184 var mul = 1
52185 this[offset + i] = value & 0xFF
52186 while (--i >= 0 && (mul *= 0x100)) {
52187 this[offset + i] = (value / mul) & 0xFF
52188 }
52189
52190 return offset + byteLength
52191 }
52192
52193 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
52194 value = +value
52195 offset = offset >>> 0
52196 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
52197 this[offset] = (value & 0xff)
52198 return offset + 1
52199 }
52200
52201 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
52202 value = +value
52203 offset = offset >>> 0
52204 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52205 this[offset] = (value & 0xff)
52206 this[offset + 1] = (value >>> 8)
52207 return offset + 2
52208 }
52209
52210 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
52211 value = +value
52212 offset = offset >>> 0
52213 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52214 this[offset] = (value >>> 8)
52215 this[offset + 1] = (value & 0xff)
52216 return offset + 2
52217 }
52218
52219 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
52220 value = +value
52221 offset = offset >>> 0
52222 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52223 this[offset + 3] = (value >>> 24)
52224 this[offset + 2] = (value >>> 16)
52225 this[offset + 1] = (value >>> 8)
52226 this[offset] = (value & 0xff)
52227 return offset + 4
52228 }
52229
52230 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
52231 value = +value
52232 offset = offset >>> 0
52233 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52234 this[offset] = (value >>> 24)
52235 this[offset + 1] = (value >>> 16)
52236 this[offset + 2] = (value >>> 8)
52237 this[offset + 3] = (value & 0xff)
52238 return offset + 4
52239 }
52240
52241 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
52242 value = +value
52243 offset = offset >>> 0
52244 if (!noAssert) {
52245 var limit = Math.pow(2, (8 * byteLength) - 1)
52246
52247 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52248 }
52249
52250 var i = 0
52251 var mul = 1
52252 var sub = 0
52253 this[offset] = value & 0xFF
52254 while (++i < byteLength && (mul *= 0x100)) {
52255 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
52256 sub = 1
52257 }
52258 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52259 }
52260
52261 return offset + byteLength
52262 }
52263
52264 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
52265 value = +value
52266 offset = offset >>> 0
52267 if (!noAssert) {
52268 var limit = Math.pow(2, (8 * byteLength) - 1)
52269
52270 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52271 }
52272
52273 var i = byteLength - 1
52274 var mul = 1
52275 var sub = 0
52276 this[offset + i] = value & 0xFF
52277 while (--i >= 0 && (mul *= 0x100)) {
52278 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
52279 sub = 1
52280 }
52281 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52282 }
52283
52284 return offset + byteLength
52285 }
52286
52287 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
52288 value = +value
52289 offset = offset >>> 0
52290 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
52291 if (value < 0) value = 0xff + value + 1
52292 this[offset] = (value & 0xff)
52293 return offset + 1
52294 }
52295
52296 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
52297 value = +value
52298 offset = offset >>> 0
52299 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52300 this[offset] = (value & 0xff)
52301 this[offset + 1] = (value >>> 8)
52302 return offset + 2
52303 }
52304
52305 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
52306 value = +value
52307 offset = offset >>> 0
52308 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52309 this[offset] = (value >>> 8)
52310 this[offset + 1] = (value & 0xff)
52311 return offset + 2
52312 }
52313
52314 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
52315 value = +value
52316 offset = offset >>> 0
52317 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52318 this[offset] = (value & 0xff)
52319 this[offset + 1] = (value >>> 8)
52320 this[offset + 2] = (value >>> 16)
52321 this[offset + 3] = (value >>> 24)
52322 return offset + 4
52323 }
52324
52325 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
52326 value = +value
52327 offset = offset >>> 0
52328 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52329 if (value < 0) value = 0xffffffff + value + 1
52330 this[offset] = (value >>> 24)
52331 this[offset + 1] = (value >>> 16)
52332 this[offset + 2] = (value >>> 8)
52333 this[offset + 3] = (value & 0xff)
52334 return offset + 4
52335 }
52336
52337 function checkIEEE754 (buf, value, offset, ext, max, min) {
52338 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52339 if (offset < 0) throw new RangeError('Index out of range')
52340 }
52341
52342 function writeFloat (buf, value, offset, littleEndian, noAssert) {
52343 value = +value
52344 offset = offset >>> 0
52345 if (!noAssert) {
52346 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
52347 }
52348 ieee754.write(buf, value, offset, littleEndian, 23, 4)
52349 return offset + 4
52350 }
52351
52352 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
52353 return writeFloat(this, value, offset, true, noAssert)
52354 }
52355
52356 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
52357 return writeFloat(this, value, offset, false, noAssert)
52358 }
52359
52360 function writeDouble (buf, value, offset, littleEndian, noAssert) {
52361 value = +value
52362 offset = offset >>> 0
52363 if (!noAssert) {
52364 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
52365 }
52366 ieee754.write(buf, value, offset, littleEndian, 52, 8)
52367 return offset + 8
52368 }
52369
52370 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
52371 return writeDouble(this, value, offset, true, noAssert)
52372 }
52373
52374 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
52375 return writeDouble(this, value, offset, false, noAssert)
52376 }
52377
52378 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
52379 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
52380 if (!start) start = 0
52381 if (!end && end !== 0) end = this.length
52382 if (targetStart >= target.length) targetStart = target.length
52383 if (!targetStart) targetStart = 0
52384 if (end > 0 && end < start) end = start
52385
52386 // Copy 0 bytes; we're done
52387 if (end === start) return 0
52388 if (target.length === 0 || this.length === 0) return 0
52389
52390 // Fatal error conditions
52391 if (targetStart < 0) {
52392 throw new RangeError('targetStart out of bounds')
52393 }
52394 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
52395 if (end < 0) throw new RangeError('sourceEnd out of bounds')
52396
52397 // Are we oob?
52398 if (end > this.length) end = this.length
52399 if (target.length - targetStart < end - start) {
52400 end = target.length - targetStart + start
52401 }
52402
52403 var len = end - start
52404 var i
52405
52406 if (this === target && start < targetStart && targetStart < end) {
52407 // descending copy from end
52408 for (i = len - 1; i >= 0; --i) {
52409 target[i + targetStart] = this[i + start]
52410 }
52411 } else if (len < 1000) {
52412 // ascending copy from start
52413 for (i = 0; i < len; ++i) {
52414 target[i + targetStart] = this[i + start]
52415 }
52416 } else {
52417 Uint8Array.prototype.set.call(
52418 target,
52419 this.subarray(start, start + len),
52420 targetStart
52421 )
52422 }
52423
52424 return len
52425 }
52426
52427 // Usage:
52428 // buffer.fill(number[, offset[, end]])
52429 // buffer.fill(buffer[, offset[, end]])
52430 // buffer.fill(string[, offset[, end]][, encoding])
52431 Buffer.prototype.fill = function fill (val, start, end, encoding) {
52432 // Handle string cases:
52433 if (typeof val === 'string') {
52434 if (typeof start === 'string') {
52435 encoding = start
52436 start = 0
52437 end = this.length
52438 } else if (typeof end === 'string') {
52439 encoding = end
52440 end = this.length
52441 }
52442 if (val.length === 1) {
52443 var code = val.charCodeAt(0)
52444 if (code < 256) {
52445 val = code
52446 }
52447 }
52448 if (encoding !== undefined && typeof encoding !== 'string') {
52449 throw new TypeError('encoding must be a string')
52450 }
52451 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
52452 throw new TypeError('Unknown encoding: ' + encoding)
52453 }
52454 } else if (typeof val === 'number') {
52455 val = val & 255
52456 }
52457
52458 // Invalid ranges are not set to a default, so can range check early.
52459 if (start < 0 || this.length < start || this.length < end) {
52460 throw new RangeError('Out of range index')
52461 }
52462
52463 if (end <= start) {
52464 return this
52465 }
52466
52467 start = start >>> 0
52468 end = end === undefined ? this.length : end >>> 0
52469
52470 if (!val) val = 0
52471
52472 var i
52473 if (typeof val === 'number') {
52474 for (i = start; i < end; ++i) {
52475 this[i] = val
52476 }
52477 } else {
52478 var bytes = Buffer.isBuffer(val)
52479 ? val
52480 : new Buffer(val, encoding)
52481 var len = bytes.length
52482 for (i = 0; i < end - start; ++i) {
52483 this[i + start] = bytes[i % len]
52484 }
52485 }
52486
52487 return this
52488 }
52489
52490 // HELPER FUNCTIONS
52491 // ================
52492
52493 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
52494
52495 function base64clean (str) {
52496 // Node strips out invalid characters like \n and \t from the string, base64-js does not
52497 str = str.trim().replace(INVALID_BASE64_RE, '')
52498 // Node converts strings with length < 2 to ''
52499 if (str.length < 2) return ''
52500 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
52501 while (str.length % 4 !== 0) {
52502 str = str + '='
52503 }
52504 return str
52505 }
52506
52507 function toHex (n) {
52508 if (n < 16) return '0' + n.toString(16)
52509 return n.toString(16)
52510 }
52511
52512 function utf8ToBytes (string, units) {
52513 units = units || Infinity
52514 var codePoint
52515 var length = string.length
52516 var leadSurrogate = null
52517 var bytes = []
52518
52519 for (var i = 0; i < length; ++i) {
52520 codePoint = string.charCodeAt(i)
52521
52522 // is surrogate component
52523 if (codePoint > 0xD7FF && codePoint < 0xE000) {
52524 // last char was a lead
52525 if (!leadSurrogate) {
52526 // no lead yet
52527 if (codePoint > 0xDBFF) {
52528 // unexpected trail
52529 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52530 continue
52531 } else if (i + 1 === length) {
52532 // unpaired lead
52533 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52534 continue
52535 }
52536
52537 // valid lead
52538 leadSurrogate = codePoint
52539
52540 continue
52541 }
52542
52543 // 2 leads in a row
52544 if (codePoint < 0xDC00) {
52545 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52546 leadSurrogate = codePoint
52547 continue
52548 }
52549
52550 // valid surrogate pair
52551 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
52552 } else if (leadSurrogate) {
52553 // valid bmp char, but last char was a lead
52554 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52555 }
52556
52557 leadSurrogate = null
52558
52559 // encode utf8
52560 if (codePoint < 0x80) {
52561 if ((units -= 1) < 0) break
52562 bytes.push(codePoint)
52563 } else if (codePoint < 0x800) {
52564 if ((units -= 2) < 0) break
52565 bytes.push(
52566 codePoint >> 0x6 | 0xC0,
52567 codePoint & 0x3F | 0x80
52568 )
52569 } else if (codePoint < 0x10000) {
52570 if ((units -= 3) < 0) break
52571 bytes.push(
52572 codePoint >> 0xC | 0xE0,
52573 codePoint >> 0x6 & 0x3F | 0x80,
52574 codePoint & 0x3F | 0x80
52575 )
52576 } else if (codePoint < 0x110000) {
52577 if ((units -= 4) < 0) break
52578 bytes.push(
52579 codePoint >> 0x12 | 0xF0,
52580 codePoint >> 0xC & 0x3F | 0x80,
52581 codePoint >> 0x6 & 0x3F | 0x80,
52582 codePoint & 0x3F | 0x80
52583 )
52584 } else {
52585 throw new Error('Invalid code point')
52586 }
52587 }
52588
52589 return bytes
52590 }
52591
52592 function asciiToBytes (str) {
52593 var byteArray = []
52594 for (var i = 0; i < str.length; ++i) {
52595 // Node's code seems to be doing this and not & 0x7F..
52596 byteArray.push(str.charCodeAt(i) & 0xFF)
52597 }
52598 return byteArray
52599 }
52600
52601 function utf16leToBytes (str, units) {
52602 var c, hi, lo
52603 var byteArray = []
52604 for (var i = 0; i < str.length; ++i) {
52605 if ((units -= 2) < 0) break
52606
52607 c = str.charCodeAt(i)
52608 hi = c >> 8
52609 lo = c % 256
52610 byteArray.push(lo)
52611 byteArray.push(hi)
52612 }
52613
52614 return byteArray
52615 }
52616
52617 function base64ToBytes (str) {
52618 return base64.toByteArray(base64clean(str))
52619 }
52620
52621 function blitBuffer (src, dst, offset, length) {
52622 for (var i = 0; i < length; ++i) {
52623 if ((i + offset >= dst.length) || (i >= src.length)) break
52624 dst[i + offset] = src[i]
52625 }
52626 return i
52627 }
52628
52629 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
52630 function isArrayBufferView (obj) {
52631 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
52632 }
52633
52634 function numberIsNaN (obj) {
52635 return obj !== obj // eslint-disable-line no-self-compare
52636 }
52637
52638 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
52639 (function (Buffer){
52640 var Transform = require('stream').Transform
52641 var inherits = require('inherits')
52642 var StringDecoder = require('string_decoder').StringDecoder
52643 module.exports = CipherBase
52644 inherits(CipherBase, Transform)
52645 function CipherBase (hashMode) {
52646 Transform.call(this)
52647 this.hashMode = typeof hashMode === 'string'
52648 if (this.hashMode) {
52649 this[hashMode] = this._finalOrDigest
52650 } else {
52651 this.final = this._finalOrDigest
52652 }
52653 this._decoder = null
52654 this._encoding = null
52655 }
52656 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
52657 if (typeof data === 'string') {
52658 data = new Buffer(data, inputEnc)
52659 }
52660 var outData = this._update(data)
52661 if (this.hashMode) {
52662 return this
52663 }
52664 if (outputEnc) {
52665 outData = this._toString(outData, outputEnc)
52666 }
52667 return outData
52668 }
52669
52670 CipherBase.prototype.setAutoPadding = function () {}
52671
52672 CipherBase.prototype.getAuthTag = function () {
52673 throw new Error('trying to get auth tag in unsupported state')
52674 }
52675
52676 CipherBase.prototype.setAuthTag = function () {
52677 throw new Error('trying to set auth tag in unsupported state')
52678 }
52679
52680 CipherBase.prototype.setAAD = function () {
52681 throw new Error('trying to set aad in unsupported state')
52682 }
52683
52684 CipherBase.prototype._transform = function (data, _, next) {
52685 var err
52686 try {
52687 if (this.hashMode) {
52688 this._update(data)
52689 } else {
52690 this.push(this._update(data))
52691 }
52692 } catch (e) {
52693 err = e
52694 } finally {
52695 next(err)
52696 }
52697 }
52698 CipherBase.prototype._flush = function (done) {
52699 var err
52700 try {
52701 this.push(this._final())
52702 } catch (e) {
52703 err = e
52704 } finally {
52705 done(err)
52706 }
52707 }
52708 CipherBase.prototype._finalOrDigest = function (outputEnc) {
52709 var outData = this._final() || new Buffer('')
52710 if (outputEnc) {
52711 outData = this._toString(outData, outputEnc, true)
52712 }
52713 return outData
52714 }
52715
52716 CipherBase.prototype._toString = function (value, enc, fin) {
52717 if (!this._decoder) {
52718 this._decoder = new StringDecoder(enc)
52719 this._encoding = enc
52720 }
52721 if (this._encoding !== enc) {
52722 throw new Error('can\'t switch encodings')
52723 }
52724 var out = this._decoder.write(value)
52725 if (fin) {
52726 out += this._decoder.end()
52727 }
52728 return out
52729 }
52730
52731 }).call(this,require("buffer").Buffer)
52732 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
52733 (function (Buffer){
52734 // Copyright Joyent, Inc. and other Node contributors.
52735 //
52736 // Permission is hereby granted, free of charge, to any person obtaining a
52737 // copy of this software and associated documentation files (the
52738 // "Software"), to deal in the Software without restriction, including
52739 // without limitation the rights to use, copy, modify, merge, publish,
52740 // distribute, sublicense, and/or sell copies of the Software, and to permit
52741 // persons to whom the Software is furnished to do so, subject to the
52742 // following conditions:
52743 //
52744 // The above copyright notice and this permission notice shall be included
52745 // in all copies or substantial portions of the Software.
52746 //
52747 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
52748 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
52749 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
52750 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
52751 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
52752 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
52753 // USE OR OTHER DEALINGS IN THE SOFTWARE.
52754
52755 // NOTE: These type checking functions intentionally don't use `instanceof`
52756 // because it is fragile and can be easily faked with `Object.create()`.
52757
52758 function isArray(arg) {
52759 if (Array.isArray) {
52760 return Array.isArray(arg);
52761 }
52762 return objectToString(arg) === '[object Array]';
52763 }
52764 exports.isArray = isArray;
52765
52766 function isBoolean(arg) {
52767 return typeof arg === 'boolean';
52768 }
52769 exports.isBoolean = isBoolean;
52770
52771 function isNull(arg) {
52772 return arg === null;
52773 }
52774 exports.isNull = isNull;
52775
52776 function isNullOrUndefined(arg) {
52777 return arg == null;
52778 }
52779 exports.isNullOrUndefined = isNullOrUndefined;
52780
52781 function isNumber(arg) {
52782 return typeof arg === 'number';
52783 }
52784 exports.isNumber = isNumber;
52785
52786 function isString(arg) {
52787 return typeof arg === 'string';
52788 }
52789 exports.isString = isString;
52790
52791 function isSymbol(arg) {
52792 return typeof arg === 'symbol';
52793 }
52794 exports.isSymbol = isSymbol;
52795
52796 function isUndefined(arg) {
52797 return arg === void 0;
52798 }
52799 exports.isUndefined = isUndefined;
52800
52801 function isRegExp(re) {
52802 return objectToString(re) === '[object RegExp]';
52803 }
52804 exports.isRegExp = isRegExp;
52805
52806 function isObject(arg) {
52807 return typeof arg === 'object' && arg !== null;
52808 }
52809 exports.isObject = isObject;
52810
52811 function isDate(d) {
52812 return objectToString(d) === '[object Date]';
52813 }
52814 exports.isDate = isDate;
52815
52816 function isError(e) {
52817 return (objectToString(e) === '[object Error]' || e instanceof Error);
52818 }
52819 exports.isError = isError;
52820
52821 function isFunction(arg) {
52822 return typeof arg === 'function';
52823 }
52824 exports.isFunction = isFunction;
52825
52826 function isPrimitive(arg) {
52827 return arg === null ||
52828 typeof arg === 'boolean' ||
52829 typeof arg === 'number' ||
52830 typeof arg === 'string' ||
52831 typeof arg === 'symbol' || // ES6 symbol
52832 typeof arg === 'undefined';
52833 }
52834 exports.isPrimitive = isPrimitive;
52835
52836 exports.isBuffer = Buffer.isBuffer;
52837
52838 function objectToString(o) {
52839 return Object.prototype.toString.call(o);
52840 }
52841
52842 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
52843 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
52844 (function (Buffer){
52845 var elliptic = require('elliptic');
52846 var BN = require('bn.js');
52847
52848 module.exports = function createECDH(curve) {
52849 return new ECDH(curve);
52850 };
52851
52852 var aliases = {
52853 secp256k1: {
52854 name: 'secp256k1',
52855 byteLength: 32
52856 },
52857 secp224r1: {
52858 name: 'p224',
52859 byteLength: 28
52860 },
52861 prime256v1: {
52862 name: 'p256',
52863 byteLength: 32
52864 },
52865 prime192v1: {
52866 name: 'p192',
52867 byteLength: 24
52868 },
52869 ed25519: {
52870 name: 'ed25519',
52871 byteLength: 32
52872 },
52873 secp384r1: {
52874 name: 'p384',
52875 byteLength: 48
52876 },
52877 secp521r1: {
52878 name: 'p521',
52879 byteLength: 66
52880 }
52881 };
52882
52883 aliases.p224 = aliases.secp224r1;
52884 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
52885 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
52886 aliases.p384 = aliases.secp384r1;
52887 aliases.p521 = aliases.secp521r1;
52888
52889 function ECDH(curve) {
52890 this.curveType = aliases[curve];
52891 if (!this.curveType ) {
52892 this.curveType = {
52893 name: curve
52894 };
52895 }
52896 this.curve = new elliptic.ec(this.curveType.name);
52897 this.keys = void 0;
52898 }
52899
52900 ECDH.prototype.generateKeys = function (enc, format) {
52901 this.keys = this.curve.genKeyPair();
52902 return this.getPublicKey(enc, format);
52903 };
52904
52905 ECDH.prototype.computeSecret = function (other, inenc, enc) {
52906 inenc = inenc || 'utf8';
52907 if (!Buffer.isBuffer(other)) {
52908 other = new Buffer(other, inenc);
52909 }
52910 var otherPub = this.curve.keyFromPublic(other).getPublic();
52911 var out = otherPub.mul(this.keys.getPrivate()).getX();
52912 return formatReturnValue(out, enc, this.curveType.byteLength);
52913 };
52914
52915 ECDH.prototype.getPublicKey = function (enc, format) {
52916 var key = this.keys.getPublic(format === 'compressed', true);
52917 if (format === 'hybrid') {
52918 if (key[key.length - 1] % 2) {
52919 key[0] = 7;
52920 } else {
52921 key [0] = 6;
52922 }
52923 }
52924 return formatReturnValue(key, enc);
52925 };
52926
52927 ECDH.prototype.getPrivateKey = function (enc) {
52928 return formatReturnValue(this.keys.getPrivate(), enc);
52929 };
52930
52931 ECDH.prototype.setPublicKey = function (pub, enc) {
52932 enc = enc || 'utf8';
52933 if (!Buffer.isBuffer(pub)) {
52934 pub = new Buffer(pub, enc);
52935 }
52936 this.keys._importPublic(pub);
52937 return this;
52938 };
52939
52940 ECDH.prototype.setPrivateKey = function (priv, enc) {
52941 enc = enc || 'utf8';
52942 if (!Buffer.isBuffer(priv)) {
52943 priv = new Buffer(priv, enc);
52944 }
52945 var _priv = new BN(priv);
52946 _priv = _priv.toString(16);
52947 this.keys._importPrivate(_priv);
52948 return this;
52949 };
52950
52951 function formatReturnValue(bn, enc, len) {
52952 if (!Array.isArray(bn)) {
52953 bn = bn.toArray();
52954 }
52955 var buf = new Buffer(bn);
52956 if (len && buf.length < len) {
52957 var zeros = new Buffer(len - buf.length);
52958 zeros.fill(0);
52959 buf = Buffer.concat([zeros, buf]);
52960 }
52961 if (!enc) {
52962 return buf;
52963 } else {
52964 return buf.toString(enc);
52965 }
52966 }
52967
52968 }).call(this,require("buffer").Buffer)
52969 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
52970 (function (Buffer){
52971 'use strict'
52972 var inherits = require('inherits')
52973 var md5 = require('./md5')
52974 var RIPEMD160 = require('ripemd160')
52975 var sha = require('sha.js')
52976
52977 var Base = require('cipher-base')
52978
52979 function HashNoConstructor (hash) {
52980 Base.call(this, 'digest')
52981
52982 this._hash = hash
52983 this.buffers = []
52984 }
52985
52986 inherits(HashNoConstructor, Base)
52987
52988 HashNoConstructor.prototype._update = function (data) {
52989 this.buffers.push(data)
52990 }
52991
52992 HashNoConstructor.prototype._final = function () {
52993 var buf = Buffer.concat(this.buffers)
52994 var r = this._hash(buf)
52995 this.buffers = null
52996
52997 return r
52998 }
52999
53000 function Hash (hash) {
53001 Base.call(this, 'digest')
53002
53003 this._hash = hash
53004 }
53005
53006 inherits(Hash, Base)
53007
53008 Hash.prototype._update = function (data) {
53009 this._hash.update(data)
53010 }
53011
53012 Hash.prototype._final = function () {
53013 return this._hash.digest()
53014 }
53015
53016 module.exports = function createHash (alg) {
53017 alg = alg.toLowerCase()
53018 if (alg === 'md5') return new HashNoConstructor(md5)
53019 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
53020
53021 return new Hash(sha(alg))
53022 }
53023
53024 }).call(this,require("buffer").Buffer)
53025 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
53026 (function (Buffer){
53027 'use strict'
53028 var intSize = 4
53029 var zeroBuffer = new Buffer(intSize)
53030 zeroBuffer.fill(0)
53031
53032 var charSize = 8
53033 var hashSize = 16
53034
53035 function toArray (buf) {
53036 if ((buf.length % intSize) !== 0) {
53037 var len = buf.length + (intSize - (buf.length % intSize))
53038 buf = Buffer.concat([buf, zeroBuffer], len)
53039 }
53040
53041 var arr = new Array(buf.length >>> 2)
53042 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
53043 arr[j] = buf.readInt32LE(i)
53044 }
53045
53046 return arr
53047 }
53048
53049 module.exports = function hash (buf, fn) {
53050 var arr = fn(toArray(buf), buf.length * charSize)
53051 buf = new Buffer(hashSize)
53052 for (var i = 0; i < arr.length; i++) {
53053 buf.writeInt32LE(arr[i], i << 2, true)
53054 }
53055 return buf
53056 }
53057
53058 }).call(this,require("buffer").Buffer)
53059 },{"buffer":47}],53:[function(require,module,exports){
53060 'use strict'
53061 /*
53062 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
53063 * Digest Algorithm, as defined in RFC 1321.
53064 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
53065 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
53066 * Distributed under the BSD License
53067 * See http://pajhome.org.uk/crypt/md5 for more info.
53068 */
53069
53070 var makeHash = require('./make-hash')
53071
53072 /*
53073 * Calculate the MD5 of an array of little-endian words, and a bit length
53074 */
53075 function core_md5 (x, len) {
53076 /* append padding */
53077 x[len >> 5] |= 0x80 << ((len) % 32)
53078 x[(((len + 64) >>> 9) << 4) + 14] = len
53079
53080 var a = 1732584193
53081 var b = -271733879
53082 var c = -1732584194
53083 var d = 271733878
53084
53085 for (var i = 0; i < x.length; i += 16) {
53086 var olda = a
53087 var oldb = b
53088 var oldc = c
53089 var oldd = d
53090
53091 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
53092 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
53093 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
53094 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
53095 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
53096 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
53097 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
53098 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
53099 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
53100 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
53101 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
53102 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
53103 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
53104 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
53105 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
53106 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
53107
53108 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
53109 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
53110 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
53111 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
53112 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
53113 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
53114 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
53115 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
53116 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
53117 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
53118 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
53119 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
53120 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
53121 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
53122 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
53123 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
53124
53125 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
53126 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
53127 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
53128 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
53129 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
53130 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
53131 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
53132 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
53133 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
53134 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
53135 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
53136 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
53137 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
53138 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
53139 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
53140 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
53141
53142 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
53143 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
53144 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
53145 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
53146 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
53147 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
53148 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
53149 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
53150 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
53151 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
53152 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
53153 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
53154 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
53155 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
53156 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
53157 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
53158
53159 a = safe_add(a, olda)
53160 b = safe_add(b, oldb)
53161 c = safe_add(c, oldc)
53162 d = safe_add(d, oldd)
53163 }
53164
53165 return [a, b, c, d]
53166 }
53167
53168 /*
53169 * These functions implement the four basic operations the algorithm uses.
53170 */
53171 function md5_cmn (q, a, b, x, s, t) {
53172 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
53173 }
53174
53175 function md5_ff (a, b, c, d, x, s, t) {
53176 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
53177 }
53178
53179 function md5_gg (a, b, c, d, x, s, t) {
53180 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
53181 }
53182
53183 function md5_hh (a, b, c, d, x, s, t) {
53184 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
53185 }
53186
53187 function md5_ii (a, b, c, d, x, s, t) {
53188 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
53189 }
53190
53191 /*
53192 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
53193 * to work around bugs in some JS interpreters.
53194 */
53195 function safe_add (x, y) {
53196 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
53197 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
53198 return (msw << 16) | (lsw & 0xFFFF)
53199 }
53200
53201 /*
53202 * Bitwise rotate a 32-bit number to the left.
53203 */
53204 function bit_rol (num, cnt) {
53205 return (num << cnt) | (num >>> (32 - cnt))
53206 }
53207
53208 module.exports = function md5 (buf) {
53209 return makeHash(buf, core_md5)
53210 }
53211
53212 },{"./make-hash":52}],54:[function(require,module,exports){
53213 'use strict'
53214 var inherits = require('inherits')
53215 var Legacy = require('./legacy')
53216 var Base = require('cipher-base')
53217 var Buffer = require('safe-buffer').Buffer
53218 var md5 = require('create-hash/md5')
53219 var RIPEMD160 = require('ripemd160')
53220
53221 var sha = require('sha.js')
53222
53223 var ZEROS = Buffer.alloc(128)
53224
53225 function Hmac (alg, key) {
53226 Base.call(this, 'digest')
53227 if (typeof key === 'string') {
53228 key = Buffer.from(key)
53229 }
53230
53231 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
53232
53233 this._alg = alg
53234 this._key = key
53235 if (key.length > blocksize) {
53236 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53237 key = hash.update(key).digest()
53238 } else if (key.length < blocksize) {
53239 key = Buffer.concat([key, ZEROS], blocksize)
53240 }
53241
53242 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53243 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53244
53245 for (var i = 0; i < blocksize; i++) {
53246 ipad[i] = key[i] ^ 0x36
53247 opad[i] = key[i] ^ 0x5C
53248 }
53249 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53250 this._hash.update(ipad)
53251 }
53252
53253 inherits(Hmac, Base)
53254
53255 Hmac.prototype._update = function (data) {
53256 this._hash.update(data)
53257 }
53258
53259 Hmac.prototype._final = function () {
53260 var h = this._hash.digest()
53261 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
53262 return hash.update(this._opad).update(h).digest()
53263 }
53264
53265 module.exports = function createHmac (alg, key) {
53266 alg = alg.toLowerCase()
53267 if (alg === 'rmd160' || alg === 'ripemd160') {
53268 return new Hmac('rmd160', key)
53269 }
53270 if (alg === 'md5') {
53271 return new Legacy(md5, key)
53272 }
53273 return new Hmac(alg, key)
53274 }
53275
53276 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
53277 'use strict'
53278 var inherits = require('inherits')
53279 var Buffer = require('safe-buffer').Buffer
53280
53281 var Base = require('cipher-base')
53282
53283 var ZEROS = Buffer.alloc(128)
53284 var blocksize = 64
53285
53286 function Hmac (alg, key) {
53287 Base.call(this, 'digest')
53288 if (typeof key === 'string') {
53289 key = Buffer.from(key)
53290 }
53291
53292 this._alg = alg
53293 this._key = key
53294
53295 if (key.length > blocksize) {
53296 key = alg(key)
53297 } else if (key.length < blocksize) {
53298 key = Buffer.concat([key, ZEROS], blocksize)
53299 }
53300
53301 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53302 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53303
53304 for (var i = 0; i < blocksize; i++) {
53305 ipad[i] = key[i] ^ 0x36
53306 opad[i] = key[i] ^ 0x5C
53307 }
53308
53309 this._hash = [ipad]
53310 }
53311
53312 inherits(Hmac, Base)
53313
53314 Hmac.prototype._update = function (data) {
53315 this._hash.push(data)
53316 }
53317
53318 Hmac.prototype._final = function () {
53319 var h = this._alg(Buffer.concat(this._hash))
53320 return this._alg(Buffer.concat([this._opad, h]))
53321 }
53322 module.exports = Hmac
53323
53324 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
53325 'use strict'
53326
53327 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
53328 exports.createHash = exports.Hash = require('create-hash')
53329 exports.createHmac = exports.Hmac = require('create-hmac')
53330
53331 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
53332 exports.getHashes = function () {
53333 return hashes
53334 }
53335
53336 var p = require('pbkdf2')
53337 exports.pbkdf2 = p.pbkdf2
53338 exports.pbkdf2Sync = p.pbkdf2Sync
53339
53340 var aes = require('browserify-cipher')
53341 ;[
53342 'Cipher',
53343 'createCipher',
53344 'Cipheriv',
53345 'createCipheriv',
53346 'Decipher',
53347 'createDecipher',
53348 'Decipheriv',
53349 'createDecipheriv',
53350 'getCiphers',
53351 'listCiphers'
53352 ].forEach(function (key) {
53353 exports[key] = aes[key]
53354 })
53355
53356 var dh = require('diffie-hellman')
53357 ;[
53358 'DiffieHellmanGroup',
53359 'createDiffieHellmanGroup',
53360 'getDiffieHellman',
53361 'createDiffieHellman',
53362 'DiffieHellman'
53363 ].forEach(function (key) {
53364 exports[key] = dh[key]
53365 })
53366
53367 var sign = require('browserify-sign')
53368 ;[
53369 'createSign',
53370 'Sign',
53371 'createVerify',
53372 'Verify'
53373 ].forEach(function (key) {
53374 exports[key] = sign[key]
53375 })
53376
53377 exports.createECDH = require('create-ecdh')
53378
53379 var publicEncrypt = require('public-encrypt')
53380
53381 ;[
53382 'publicEncrypt',
53383 'privateEncrypt',
53384 'publicDecrypt',
53385 'privateDecrypt'
53386 ].forEach(function (key) {
53387 exports[key] = publicEncrypt[key]
53388 })
53389
53390 // the least I can do is make error messages for the rest of the node.js/crypto api.
53391 ;[
53392 'createCredentials'
53393 ].forEach(function (name) {
53394 exports[name] = function () {
53395 throw new Error([
53396 'sorry, ' + name + ' is not implemented yet',
53397 'we accept pull requests',
53398 'https://github.com/crypto-browserify/crypto-browserify'
53399 ].join('\n'))
53400 }
53401 })
53402
53403 },{"browserify-cipher":35,"browserify-sign":42,"browserify-sign/algos":39,"create-ecdh":50,"create-hash":51,"create-hmac":54,"diffie-hellman":63,"pbkdf2":106,"public-encrypt":113,"randombytes":119}],57:[function(require,module,exports){
53404 'use strict';
53405
53406 exports.utils = require('./des/utils');
53407 exports.Cipher = require('./des/cipher');
53408 exports.DES = require('./des/des');
53409 exports.CBC = require('./des/cbc');
53410 exports.EDE = require('./des/ede');
53411
53412 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
53413 'use strict';
53414
53415 var assert = require('minimalistic-assert');
53416 var inherits = require('inherits');
53417
53418 var proto = {};
53419
53420 function CBCState(iv) {
53421 assert.equal(iv.length, 8, 'Invalid IV length');
53422
53423 this.iv = new Array(8);
53424 for (var i = 0; i < this.iv.length; i++)
53425 this.iv[i] = iv[i];
53426 }
53427
53428 function instantiate(Base) {
53429 function CBC(options) {
53430 Base.call(this, options);
53431 this._cbcInit();
53432 }
53433 inherits(CBC, Base);
53434
53435 var keys = Object.keys(proto);
53436 for (var i = 0; i < keys.length; i++) {
53437 var key = keys[i];
53438 CBC.prototype[key] = proto[key];
53439 }
53440
53441 CBC.create = function create(options) {
53442 return new CBC(options);
53443 };
53444
53445 return CBC;
53446 }
53447
53448 exports.instantiate = instantiate;
53449
53450 proto._cbcInit = function _cbcInit() {
53451 var state = new CBCState(this.options.iv);
53452 this._cbcState = state;
53453 };
53454
53455 proto._update = function _update(inp, inOff, out, outOff) {
53456 var state = this._cbcState;
53457 var superProto = this.constructor.super_.prototype;
53458
53459 var iv = state.iv;
53460 if (this.type === 'encrypt') {
53461 for (var i = 0; i < this.blockSize; i++)
53462 iv[i] ^= inp[inOff + i];
53463
53464 superProto._update.call(this, iv, 0, out, outOff);
53465
53466 for (var i = 0; i < this.blockSize; i++)
53467 iv[i] = out[outOff + i];
53468 } else {
53469 superProto._update.call(this, inp, inOff, out, outOff);
53470
53471 for (var i = 0; i < this.blockSize; i++)
53472 out[outOff + i] ^= iv[i];
53473
53474 for (var i = 0; i < this.blockSize; i++)
53475 iv[i] = inp[inOff + i];
53476 }
53477 };
53478
53479 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
53480 'use strict';
53481
53482 var assert = require('minimalistic-assert');
53483
53484 function Cipher(options) {
53485 this.options = options;
53486
53487 this.type = this.options.type;
53488 this.blockSize = 8;
53489 this._init();
53490
53491 this.buffer = new Array(this.blockSize);
53492 this.bufferOff = 0;
53493 }
53494 module.exports = Cipher;
53495
53496 Cipher.prototype._init = function _init() {
53497 // Might be overrided
53498 };
53499
53500 Cipher.prototype.update = function update(data) {
53501 if (data.length === 0)
53502 return [];
53503
53504 if (this.type === 'decrypt')
53505 return this._updateDecrypt(data);
53506 else
53507 return this._updateEncrypt(data);
53508 };
53509
53510 Cipher.prototype._buffer = function _buffer(data, off) {
53511 // Append data to buffer
53512 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
53513 for (var i = 0; i < min; i++)
53514 this.buffer[this.bufferOff + i] = data[off + i];
53515 this.bufferOff += min;
53516
53517 // Shift next
53518 return min;
53519 };
53520
53521 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
53522 this._update(this.buffer, 0, out, off);
53523 this.bufferOff = 0;
53524 return this.blockSize;
53525 };
53526
53527 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
53528 var inputOff = 0;
53529 var outputOff = 0;
53530
53531 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
53532 var out = new Array(count * this.blockSize);
53533
53534 if (this.bufferOff !== 0) {
53535 inputOff += this._buffer(data, inputOff);
53536
53537 if (this.bufferOff === this.buffer.length)
53538 outputOff += this._flushBuffer(out, outputOff);
53539 }
53540
53541 // Write blocks
53542 var max = data.length - ((data.length - inputOff) % this.blockSize);
53543 for (; inputOff < max; inputOff += this.blockSize) {
53544 this._update(data, inputOff, out, outputOff);
53545 outputOff += this.blockSize;
53546 }
53547
53548 // Queue rest
53549 for (; inputOff < data.length; inputOff++, this.bufferOff++)
53550 this.buffer[this.bufferOff] = data[inputOff];
53551
53552 return out;
53553 };
53554
53555 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
53556 var inputOff = 0;
53557 var outputOff = 0;
53558
53559 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
53560 var out = new Array(count * this.blockSize);
53561
53562 // TODO(indutny): optimize it, this is far from optimal
53563 for (; count > 0; count--) {
53564 inputOff += this._buffer(data, inputOff);
53565 outputOff += this._flushBuffer(out, outputOff);
53566 }
53567
53568 // Buffer rest of the input
53569 inputOff += this._buffer(data, inputOff);
53570
53571 return out;
53572 };
53573
53574 Cipher.prototype.final = function final(buffer) {
53575 var first;
53576 if (buffer)
53577 first = this.update(buffer);
53578
53579 var last;
53580 if (this.type === 'encrypt')
53581 last = this._finalEncrypt();
53582 else
53583 last = this._finalDecrypt();
53584
53585 if (first)
53586 return first.concat(last);
53587 else
53588 return last;
53589 };
53590
53591 Cipher.prototype._pad = function _pad(buffer, off) {
53592 if (off === 0)
53593 return false;
53594
53595 while (off < buffer.length)
53596 buffer[off++] = 0;
53597
53598 return true;
53599 };
53600
53601 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
53602 if (!this._pad(this.buffer, this.bufferOff))
53603 return [];
53604
53605 var out = new Array(this.blockSize);
53606 this._update(this.buffer, 0, out, 0);
53607 return out;
53608 };
53609
53610 Cipher.prototype._unpad = function _unpad(buffer) {
53611 return buffer;
53612 };
53613
53614 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
53615 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
53616 var out = new Array(this.blockSize);
53617 this._flushBuffer(out, 0);
53618
53619 return this._unpad(out);
53620 };
53621
53622 },{"minimalistic-assert":99}],60:[function(require,module,exports){
53623 'use strict';
53624
53625 var assert = require('minimalistic-assert');
53626 var inherits = require('inherits');
53627
53628 var des = require('../des');
53629 var utils = des.utils;
53630 var Cipher = des.Cipher;
53631
53632 function DESState() {
53633 this.tmp = new Array(2);
53634 this.keys = null;
53635 }
53636
53637 function DES(options) {
53638 Cipher.call(this, options);
53639
53640 var state = new DESState();
53641 this._desState = state;
53642
53643 this.deriveKeys(state, options.key);
53644 }
53645 inherits(DES, Cipher);
53646 module.exports = DES;
53647
53648 DES.create = function create(options) {
53649 return new DES(options);
53650 };
53651
53652 var shiftTable = [
53653 1, 1, 2, 2, 2, 2, 2, 2,
53654 1, 2, 2, 2, 2, 2, 2, 1
53655 ];
53656
53657 DES.prototype.deriveKeys = function deriveKeys(state, key) {
53658 state.keys = new Array(16 * 2);
53659
53660 assert.equal(key.length, this.blockSize, 'Invalid key length');
53661
53662 var kL = utils.readUInt32BE(key, 0);
53663 var kR = utils.readUInt32BE(key, 4);
53664
53665 utils.pc1(kL, kR, state.tmp, 0);
53666 kL = state.tmp[0];
53667 kR = state.tmp[1];
53668 for (var i = 0; i < state.keys.length; i += 2) {
53669 var shift = shiftTable[i >>> 1];
53670 kL = utils.r28shl(kL, shift);
53671 kR = utils.r28shl(kR, shift);
53672 utils.pc2(kL, kR, state.keys, i);
53673 }
53674 };
53675
53676 DES.prototype._update = function _update(inp, inOff, out, outOff) {
53677 var state = this._desState;
53678
53679 var l = utils.readUInt32BE(inp, inOff);
53680 var r = utils.readUInt32BE(inp, inOff + 4);
53681
53682 // Initial Permutation
53683 utils.ip(l, r, state.tmp, 0);
53684 l = state.tmp[0];
53685 r = state.tmp[1];
53686
53687 if (this.type === 'encrypt')
53688 this._encrypt(state, l, r, state.tmp, 0);
53689 else
53690 this._decrypt(state, l, r, state.tmp, 0);
53691
53692 l = state.tmp[0];
53693 r = state.tmp[1];
53694
53695 utils.writeUInt32BE(out, l, outOff);
53696 utils.writeUInt32BE(out, r, outOff + 4);
53697 };
53698
53699 DES.prototype._pad = function _pad(buffer, off) {
53700 var value = buffer.length - off;
53701 for (var i = off; i < buffer.length; i++)
53702 buffer[i] = value;
53703
53704 return true;
53705 };
53706
53707 DES.prototype._unpad = function _unpad(buffer) {
53708 var pad = buffer[buffer.length - 1];
53709 for (var i = buffer.length - pad; i < buffer.length; i++)
53710 assert.equal(buffer[i], pad);
53711
53712 return buffer.slice(0, buffer.length - pad);
53713 };
53714
53715 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
53716 var l = lStart;
53717 var r = rStart;
53718
53719 // Apply f() x16 times
53720 for (var i = 0; i < state.keys.length; i += 2) {
53721 var keyL = state.keys[i];
53722 var keyR = state.keys[i + 1];
53723
53724 // f(r, k)
53725 utils.expand(r, state.tmp, 0);
53726
53727 keyL ^= state.tmp[0];
53728 keyR ^= state.tmp[1];
53729 var s = utils.substitute(keyL, keyR);
53730 var f = utils.permute(s);
53731
53732 var t = r;
53733 r = (l ^ f) >>> 0;
53734 l = t;
53735 }
53736
53737 // Reverse Initial Permutation
53738 utils.rip(r, l, out, off);
53739 };
53740
53741 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
53742 var l = rStart;
53743 var r = lStart;
53744
53745 // Apply f() x16 times
53746 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
53747 var keyL = state.keys[i];
53748 var keyR = state.keys[i + 1];
53749
53750 // f(r, k)
53751 utils.expand(l, state.tmp, 0);
53752
53753 keyL ^= state.tmp[0];
53754 keyR ^= state.tmp[1];
53755 var s = utils.substitute(keyL, keyR);
53756 var f = utils.permute(s);
53757
53758 var t = l;
53759 l = (r ^ f) >>> 0;
53760 r = t;
53761 }
53762
53763 // Reverse Initial Permutation
53764 utils.rip(l, r, out, off);
53765 };
53766
53767 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
53768 'use strict';
53769
53770 var assert = require('minimalistic-assert');
53771 var inherits = require('inherits');
53772
53773 var des = require('../des');
53774 var Cipher = des.Cipher;
53775 var DES = des.DES;
53776
53777 function EDEState(type, key) {
53778 assert.equal(key.length, 24, 'Invalid key length');
53779
53780 var k1 = key.slice(0, 8);
53781 var k2 = key.slice(8, 16);
53782 var k3 = key.slice(16, 24);
53783
53784 if (type === 'encrypt') {
53785 this.ciphers = [
53786 DES.create({ type: 'encrypt', key: k1 }),
53787 DES.create({ type: 'decrypt', key: k2 }),
53788 DES.create({ type: 'encrypt', key: k3 })
53789 ];
53790 } else {
53791 this.ciphers = [
53792 DES.create({ type: 'decrypt', key: k3 }),
53793 DES.create({ type: 'encrypt', key: k2 }),
53794 DES.create({ type: 'decrypt', key: k1 })
53795 ];
53796 }
53797 }
53798
53799 function EDE(options) {
53800 Cipher.call(this, options);
53801
53802 var state = new EDEState(this.type, this.options.key);
53803 this._edeState = state;
53804 }
53805 inherits(EDE, Cipher);
53806
53807 module.exports = EDE;
53808
53809 EDE.create = function create(options) {
53810 return new EDE(options);
53811 };
53812
53813 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
53814 var state = this._edeState;
53815
53816 state.ciphers[0]._update(inp, inOff, out, outOff);
53817 state.ciphers[1]._update(out, outOff, out, outOff);
53818 state.ciphers[2]._update(out, outOff, out, outOff);
53819 };
53820
53821 EDE.prototype._pad = DES.prototype._pad;
53822 EDE.prototype._unpad = DES.prototype._unpad;
53823
53824 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
53825 'use strict';
53826
53827 exports.readUInt32BE = function readUInt32BE(bytes, off) {
53828 var res = (bytes[0 + off] << 24) |
53829 (bytes[1 + off] << 16) |
53830 (bytes[2 + off] << 8) |
53831 bytes[3 + off];
53832 return res >>> 0;
53833 };
53834
53835 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
53836 bytes[0 + off] = value >>> 24;
53837 bytes[1 + off] = (value >>> 16) & 0xff;
53838 bytes[2 + off] = (value >>> 8) & 0xff;
53839 bytes[3 + off] = value & 0xff;
53840 };
53841
53842 exports.ip = function ip(inL, inR, out, off) {
53843 var outL = 0;
53844 var outR = 0;
53845
53846 for (var i = 6; i >= 0; i -= 2) {
53847 for (var j = 0; j <= 24; j += 8) {
53848 outL <<= 1;
53849 outL |= (inR >>> (j + i)) & 1;
53850 }
53851 for (var j = 0; j <= 24; j += 8) {
53852 outL <<= 1;
53853 outL |= (inL >>> (j + i)) & 1;
53854 }
53855 }
53856
53857 for (var i = 6; i >= 0; i -= 2) {
53858 for (var j = 1; j <= 25; j += 8) {
53859 outR <<= 1;
53860 outR |= (inR >>> (j + i)) & 1;
53861 }
53862 for (var j = 1; j <= 25; j += 8) {
53863 outR <<= 1;
53864 outR |= (inL >>> (j + i)) & 1;
53865 }
53866 }
53867
53868 out[off + 0] = outL >>> 0;
53869 out[off + 1] = outR >>> 0;
53870 };
53871
53872 exports.rip = function rip(inL, inR, out, off) {
53873 var outL = 0;
53874 var outR = 0;
53875
53876 for (var i = 0; i < 4; i++) {
53877 for (var j = 24; j >= 0; j -= 8) {
53878 outL <<= 1;
53879 outL |= (inR >>> (j + i)) & 1;
53880 outL <<= 1;
53881 outL |= (inL >>> (j + i)) & 1;
53882 }
53883 }
53884 for (var i = 4; i < 8; i++) {
53885 for (var j = 24; j >= 0; j -= 8) {
53886 outR <<= 1;
53887 outR |= (inR >>> (j + i)) & 1;
53888 outR <<= 1;
53889 outR |= (inL >>> (j + i)) & 1;
53890 }
53891 }
53892
53893 out[off + 0] = outL >>> 0;
53894 out[off + 1] = outR >>> 0;
53895 };
53896
53897 exports.pc1 = function pc1(inL, inR, out, off) {
53898 var outL = 0;
53899 var outR = 0;
53900
53901 // 7, 15, 23, 31, 39, 47, 55, 63
53902 // 6, 14, 22, 30, 39, 47, 55, 63
53903 // 5, 13, 21, 29, 39, 47, 55, 63
53904 // 4, 12, 20, 28
53905 for (var i = 7; i >= 5; i--) {
53906 for (var j = 0; j <= 24; j += 8) {
53907 outL <<= 1;
53908 outL |= (inR >> (j + i)) & 1;
53909 }
53910 for (var j = 0; j <= 24; j += 8) {
53911 outL <<= 1;
53912 outL |= (inL >> (j + i)) & 1;
53913 }
53914 }
53915 for (var j = 0; j <= 24; j += 8) {
53916 outL <<= 1;
53917 outL |= (inR >> (j + i)) & 1;
53918 }
53919
53920 // 1, 9, 17, 25, 33, 41, 49, 57
53921 // 2, 10, 18, 26, 34, 42, 50, 58
53922 // 3, 11, 19, 27, 35, 43, 51, 59
53923 // 36, 44, 52, 60
53924 for (var i = 1; i <= 3; i++) {
53925 for (var j = 0; j <= 24; j += 8) {
53926 outR <<= 1;
53927 outR |= (inR >> (j + i)) & 1;
53928 }
53929 for (var j = 0; j <= 24; j += 8) {
53930 outR <<= 1;
53931 outR |= (inL >> (j + i)) & 1;
53932 }
53933 }
53934 for (var j = 0; j <= 24; j += 8) {
53935 outR <<= 1;
53936 outR |= (inL >> (j + i)) & 1;
53937 }
53938
53939 out[off + 0] = outL >>> 0;
53940 out[off + 1] = outR >>> 0;
53941 };
53942
53943 exports.r28shl = function r28shl(num, shift) {
53944 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
53945 };
53946
53947 var pc2table = [
53948 // inL => outL
53949 14, 11, 17, 4, 27, 23, 25, 0,
53950 13, 22, 7, 18, 5, 9, 16, 24,
53951 2, 20, 12, 21, 1, 8, 15, 26,
53952
53953 // inR => outR
53954 15, 4, 25, 19, 9, 1, 26, 16,
53955 5, 11, 23, 8, 12, 7, 17, 0,
53956 22, 3, 10, 14, 6, 20, 27, 24
53957 ];
53958
53959 exports.pc2 = function pc2(inL, inR, out, off) {
53960 var outL = 0;
53961 var outR = 0;
53962
53963 var len = pc2table.length >>> 1;
53964 for (var i = 0; i < len; i++) {
53965 outL <<= 1;
53966 outL |= (inL >>> pc2table[i]) & 0x1;
53967 }
53968 for (var i = len; i < pc2table.length; i++) {
53969 outR <<= 1;
53970 outR |= (inR >>> pc2table[i]) & 0x1;
53971 }
53972
53973 out[off + 0] = outL >>> 0;
53974 out[off + 1] = outR >>> 0;
53975 };
53976
53977 exports.expand = function expand(r, out, off) {
53978 var outL = 0;
53979 var outR = 0;
53980
53981 outL = ((r & 1) << 5) | (r >>> 27);
53982 for (var i = 23; i >= 15; i -= 4) {
53983 outL <<= 6;
53984 outL |= (r >>> i) & 0x3f;
53985 }
53986 for (var i = 11; i >= 3; i -= 4) {
53987 outR |= (r >>> i) & 0x3f;
53988 outR <<= 6;
53989 }
53990 outR |= ((r & 0x1f) << 1) | (r >>> 31);
53991
53992 out[off + 0] = outL >>> 0;
53993 out[off + 1] = outR >>> 0;
53994 };
53995
53996 var sTable = [
53997 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
53998 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
53999 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
54000 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
54001
54002 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
54003 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
54004 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
54005 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
54006
54007 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
54008 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
54009 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
54010 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
54011
54012 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
54013 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
54014 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
54015 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
54016
54017 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
54018 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
54019 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
54020 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
54021
54022 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
54023 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
54024 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
54025 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
54026
54027 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
54028 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
54029 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
54030 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
54031
54032 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
54033 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
54034 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
54035 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
54036 ];
54037
54038 exports.substitute = function substitute(inL, inR) {
54039 var out = 0;
54040 for (var i = 0; i < 4; i++) {
54041 var b = (inL >>> (18 - i * 6)) & 0x3f;
54042 var sb = sTable[i * 0x40 + b];
54043
54044 out <<= 4;
54045 out |= sb;
54046 }
54047 for (var i = 0; i < 4; i++) {
54048 var b = (inR >>> (18 - i * 6)) & 0x3f;
54049 var sb = sTable[4 * 0x40 + i * 0x40 + b];
54050
54051 out <<= 4;
54052 out |= sb;
54053 }
54054 return out >>> 0;
54055 };
54056
54057 var permuteTable = [
54058 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
54059 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
54060 ];
54061
54062 exports.permute = function permute(num) {
54063 var out = 0;
54064 for (var i = 0; i < permuteTable.length; i++) {
54065 out <<= 1;
54066 out |= (num >>> permuteTable[i]) & 0x1;
54067 }
54068 return out >>> 0;
54069 };
54070
54071 exports.padSplit = function padSplit(num, size, group) {
54072 var str = num.toString(2);
54073 while (str.length < size)
54074 str = '0' + str;
54075
54076 var out = [];
54077 for (var i = 0; i < size; i += group)
54078 out.push(str.slice(i, i + group));
54079 return out.join(' ');
54080 };
54081
54082 },{}],63:[function(require,module,exports){
54083 (function (Buffer){
54084 var generatePrime = require('./lib/generatePrime')
54085 var primes = require('./lib/primes.json')
54086
54087 var DH = require('./lib/dh')
54088
54089 function getDiffieHellman (mod) {
54090 var prime = new Buffer(primes[mod].prime, 'hex')
54091 var gen = new Buffer(primes[mod].gen, 'hex')
54092
54093 return new DH(prime, gen)
54094 }
54095
54096 var ENCODINGS = {
54097 'binary': true, 'hex': true, 'base64': true
54098 }
54099
54100 function createDiffieHellman (prime, enc, generator, genc) {
54101 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
54102 return createDiffieHellman(prime, 'binary', enc, generator)
54103 }
54104
54105 enc = enc || 'binary'
54106 genc = genc || 'binary'
54107 generator = generator || new Buffer([2])
54108
54109 if (!Buffer.isBuffer(generator)) {
54110 generator = new Buffer(generator, genc)
54111 }
54112
54113 if (typeof prime === 'number') {
54114 return new DH(generatePrime(prime, generator), generator, true)
54115 }
54116
54117 if (!Buffer.isBuffer(prime)) {
54118 prime = new Buffer(prime, enc)
54119 }
54120
54121 return new DH(prime, generator, true)
54122 }
54123
54124 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
54125 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
54126
54127 }).call(this,require("buffer").Buffer)
54128 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
54129 (function (Buffer){
54130 var BN = require('bn.js');
54131 var MillerRabin = require('miller-rabin');
54132 var millerRabin = new MillerRabin();
54133 var TWENTYFOUR = new BN(24);
54134 var ELEVEN = new BN(11);
54135 var TEN = new BN(10);
54136 var THREE = new BN(3);
54137 var SEVEN = new BN(7);
54138 var primes = require('./generatePrime');
54139 var randomBytes = require('randombytes');
54140 module.exports = DH;
54141
54142 function setPublicKey(pub, enc) {
54143 enc = enc || 'utf8';
54144 if (!Buffer.isBuffer(pub)) {
54145 pub = new Buffer(pub, enc);
54146 }
54147 this._pub = new BN(pub);
54148 return this;
54149 }
54150
54151 function setPrivateKey(priv, enc) {
54152 enc = enc || 'utf8';
54153 if (!Buffer.isBuffer(priv)) {
54154 priv = new Buffer(priv, enc);
54155 }
54156 this._priv = new BN(priv);
54157 return this;
54158 }
54159
54160 var primeCache = {};
54161 function checkPrime(prime, generator) {
54162 var gen = generator.toString('hex');
54163 var hex = [gen, prime.toString(16)].join('_');
54164 if (hex in primeCache) {
54165 return primeCache[hex];
54166 }
54167 var error = 0;
54168
54169 if (prime.isEven() ||
54170 !primes.simpleSieve ||
54171 !primes.fermatTest(prime) ||
54172 !millerRabin.test(prime)) {
54173 //not a prime so +1
54174 error += 1;
54175
54176 if (gen === '02' || gen === '05') {
54177 // we'd be able to check the generator
54178 // it would fail so +8
54179 error += 8;
54180 } else {
54181 //we wouldn't be able to test the generator
54182 // so +4
54183 error += 4;
54184 }
54185 primeCache[hex] = error;
54186 return error;
54187 }
54188 if (!millerRabin.test(prime.shrn(1))) {
54189 //not a safe prime
54190 error += 2;
54191 }
54192 var rem;
54193 switch (gen) {
54194 case '02':
54195 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
54196 // unsuidable generator
54197 error += 8;
54198 }
54199 break;
54200 case '05':
54201 rem = prime.mod(TEN);
54202 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
54203 // prime mod 10 needs to equal 3 or 7
54204 error += 8;
54205 }
54206 break;
54207 default:
54208 error += 4;
54209 }
54210 primeCache[hex] = error;
54211 return error;
54212 }
54213
54214 function DH(prime, generator, malleable) {
54215 this.setGenerator(generator);
54216 this.__prime = new BN(prime);
54217 this._prime = BN.mont(this.__prime);
54218 this._primeLen = prime.length;
54219 this._pub = undefined;
54220 this._priv = undefined;
54221 this._primeCode = undefined;
54222 if (malleable) {
54223 this.setPublicKey = setPublicKey;
54224 this.setPrivateKey = setPrivateKey;
54225 } else {
54226 this._primeCode = 8;
54227 }
54228 }
54229 Object.defineProperty(DH.prototype, 'verifyError', {
54230 enumerable: true,
54231 get: function () {
54232 if (typeof this._primeCode !== 'number') {
54233 this._primeCode = checkPrime(this.__prime, this.__gen);
54234 }
54235 return this._primeCode;
54236 }
54237 });
54238 DH.prototype.generateKeys = function () {
54239 if (!this._priv) {
54240 this._priv = new BN(randomBytes(this._primeLen));
54241 }
54242 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
54243 return this.getPublicKey();
54244 };
54245
54246 DH.prototype.computeSecret = function (other) {
54247 other = new BN(other);
54248 other = other.toRed(this._prime);
54249 var secret = other.redPow(this._priv).fromRed();
54250 var out = new Buffer(secret.toArray());
54251 var prime = this.getPrime();
54252 if (out.length < prime.length) {
54253 var front = new Buffer(prime.length - out.length);
54254 front.fill(0);
54255 out = Buffer.concat([front, out]);
54256 }
54257 return out;
54258 };
54259
54260 DH.prototype.getPublicKey = function getPublicKey(enc) {
54261 return formatReturnValue(this._pub, enc);
54262 };
54263
54264 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
54265 return formatReturnValue(this._priv, enc);
54266 };
54267
54268 DH.prototype.getPrime = function (enc) {
54269 return formatReturnValue(this.__prime, enc);
54270 };
54271
54272 DH.prototype.getGenerator = function (enc) {
54273 return formatReturnValue(this._gen, enc);
54274 };
54275
54276 DH.prototype.setGenerator = function (gen, enc) {
54277 enc = enc || 'utf8';
54278 if (!Buffer.isBuffer(gen)) {
54279 gen = new Buffer(gen, enc);
54280 }
54281 this.__gen = gen;
54282 this._gen = new BN(gen);
54283 return this;
54284 };
54285
54286 function formatReturnValue(bn, enc) {
54287 var buf = new Buffer(bn.toArray());
54288 if (!enc) {
54289 return buf;
54290 } else {
54291 return buf.toString(enc);
54292 }
54293 }
54294
54295 }).call(this,require("buffer").Buffer)
54296 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
54297 var randomBytes = require('randombytes');
54298 module.exports = findPrime;
54299 findPrime.simpleSieve = simpleSieve;
54300 findPrime.fermatTest = fermatTest;
54301 var BN = require('bn.js');
54302 var TWENTYFOUR = new BN(24);
54303 var MillerRabin = require('miller-rabin');
54304 var millerRabin = new MillerRabin();
54305 var ONE = new BN(1);
54306 var TWO = new BN(2);
54307 var FIVE = new BN(5);
54308 var SIXTEEN = new BN(16);
54309 var EIGHT = new BN(8);
54310 var TEN = new BN(10);
54311 var THREE = new BN(3);
54312 var SEVEN = new BN(7);
54313 var ELEVEN = new BN(11);
54314 var FOUR = new BN(4);
54315 var TWELVE = new BN(12);
54316 var primes = null;
54317
54318 function _getPrimes() {
54319 if (primes !== null)
54320 return primes;
54321
54322 var limit = 0x100000;
54323 var res = [];
54324 res[0] = 2;
54325 for (var i = 1, k = 3; k < limit; k += 2) {
54326 var sqrt = Math.ceil(Math.sqrt(k));
54327 for (var j = 0; j < i && res[j] <= sqrt; j++)
54328 if (k % res[j] === 0)
54329 break;
54330
54331 if (i !== j && res[j] <= sqrt)
54332 continue;
54333
54334 res[i++] = k;
54335 }
54336 primes = res;
54337 return res;
54338 }
54339
54340 function simpleSieve(p) {
54341 var primes = _getPrimes();
54342
54343 for (var i = 0; i < primes.length; i++)
54344 if (p.modn(primes[i]) === 0) {
54345 if (p.cmpn(primes[i]) === 0) {
54346 return true;
54347 } else {
54348 return false;
54349 }
54350 }
54351
54352 return true;
54353 }
54354
54355 function fermatTest(p) {
54356 var red = BN.mont(p);
54357 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
54358 }
54359
54360 function findPrime(bits, gen) {
54361 if (bits < 16) {
54362 // this is what openssl does
54363 if (gen === 2 || gen === 5) {
54364 return new BN([0x8c, 0x7b]);
54365 } else {
54366 return new BN([0x8c, 0x27]);
54367 }
54368 }
54369 gen = new BN(gen);
54370
54371 var num, n2;
54372
54373 while (true) {
54374 num = new BN(randomBytes(Math.ceil(bits / 8)));
54375 while (num.bitLength() > bits) {
54376 num.ishrn(1);
54377 }
54378 if (num.isEven()) {
54379 num.iadd(ONE);
54380 }
54381 if (!num.testn(1)) {
54382 num.iadd(TWO);
54383 }
54384 if (!gen.cmp(TWO)) {
54385 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
54386 num.iadd(FOUR);
54387 }
54388 } else if (!gen.cmp(FIVE)) {
54389 while (num.mod(TEN).cmp(THREE)) {
54390 num.iadd(FOUR);
54391 }
54392 }
54393 n2 = num.shrn(1);
54394 if (simpleSieve(n2) && simpleSieve(num) &&
54395 fermatTest(n2) && fermatTest(num) &&
54396 millerRabin.test(n2) && millerRabin.test(num)) {
54397 return num;
54398 }
54399 }
54400
54401 }
54402
54403 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
54404 module.exports={
54405 "modp1": {
54406 "gen": "02",
54407 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
54408 },
54409 "modp2": {
54410 "gen": "02",
54411 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
54412 },
54413 "modp5": {
54414 "gen": "02",
54415 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
54416 },
54417 "modp14": {
54418 "gen": "02",
54419 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
54420 },
54421 "modp15": {
54422 "gen": "02",
54423 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
54424 },
54425 "modp16": {
54426 "gen": "02",
54427 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
54428 },
54429 "modp17": {
54430 "gen": "02",
54431 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
54432 },
54433 "modp18": {
54434 "gen": "02",
54435 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
54436 }
54437 }
54438 },{}],67:[function(require,module,exports){
54439 'use strict';
54440
54441 var elliptic = exports;
54442
54443 elliptic.version = require('../package.json').version;
54444 elliptic.utils = require('./elliptic/utils');
54445 elliptic.rand = require('brorand');
54446 elliptic.curve = require('./elliptic/curve');
54447 elliptic.curves = require('./elliptic/curves');
54448
54449 // Protocols
54450 elliptic.ec = require('./elliptic/ec');
54451 elliptic.eddsa = require('./elliptic/eddsa');
54452
54453 },{"../package.json":82,"./elliptic/curve":70,"./elliptic/curves":73,"./elliptic/ec":74,"./elliptic/eddsa":77,"./elliptic/utils":81,"brorand":18}],68:[function(require,module,exports){
54454 'use strict';
54455
54456 var BN = require('bn.js');
54457 var elliptic = require('../../elliptic');
54458 var utils = elliptic.utils;
54459 var getNAF = utils.getNAF;
54460 var getJSF = utils.getJSF;
54461 var assert = utils.assert;
54462
54463 function BaseCurve(type, conf) {
54464 this.type = type;
54465 this.p = new BN(conf.p, 16);
54466
54467 // Use Montgomery, when there is no fast reduction for the prime
54468 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
54469
54470 // Useful for many curves
54471 this.zero = new BN(0).toRed(this.red);
54472 this.one = new BN(1).toRed(this.red);
54473 this.two = new BN(2).toRed(this.red);
54474
54475 // Curve configuration, optional
54476 this.n = conf.n && new BN(conf.n, 16);
54477 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
54478
54479 // Temporary arrays
54480 this._wnafT1 = new Array(4);
54481 this._wnafT2 = new Array(4);
54482 this._wnafT3 = new Array(4);
54483 this._wnafT4 = new Array(4);
54484
54485 // Generalized Greg Maxwell's trick
54486 var adjustCount = this.n && this.p.div(this.n);
54487 if (!adjustCount || adjustCount.cmpn(100) > 0) {
54488 this.redN = null;
54489 } else {
54490 this._maxwellTrick = true;
54491 this.redN = this.n.toRed(this.red);
54492 }
54493 }
54494 module.exports = BaseCurve;
54495
54496 BaseCurve.prototype.point = function point() {
54497 throw new Error('Not implemented');
54498 };
54499
54500 BaseCurve.prototype.validate = function validate() {
54501 throw new Error('Not implemented');
54502 };
54503
54504 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
54505 assert(p.precomputed);
54506 var doubles = p._getDoubles();
54507
54508 var naf = getNAF(k, 1);
54509 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
54510 I /= 3;
54511
54512 // Translate into more windowed form
54513 var repr = [];
54514 for (var j = 0; j < naf.length; j += doubles.step) {
54515 var nafW = 0;
54516 for (var k = j + doubles.step - 1; k >= j; k--)
54517 nafW = (nafW << 1) + naf[k];
54518 repr.push(nafW);
54519 }
54520
54521 var a = this.jpoint(null, null, null);
54522 var b = this.jpoint(null, null, null);
54523 for (var i = I; i > 0; i--) {
54524 for (var j = 0; j < repr.length; j++) {
54525 var nafW = repr[j];
54526 if (nafW === i)
54527 b = b.mixedAdd(doubles.points[j]);
54528 else if (nafW === -i)
54529 b = b.mixedAdd(doubles.points[j].neg());
54530 }
54531 a = a.add(b);
54532 }
54533 return a.toP();
54534 };
54535
54536 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
54537 var w = 4;
54538
54539 // Precompute window
54540 var nafPoints = p._getNAFPoints(w);
54541 w = nafPoints.wnd;
54542 var wnd = nafPoints.points;
54543
54544 // Get NAF form
54545 var naf = getNAF(k, w);
54546
54547 // Add `this`*(N+1) for every w-NAF index
54548 var acc = this.jpoint(null, null, null);
54549 for (var i = naf.length - 1; i >= 0; i--) {
54550 // Count zeroes
54551 for (var k = 0; i >= 0 && naf[i] === 0; i--)
54552 k++;
54553 if (i >= 0)
54554 k++;
54555 acc = acc.dblp(k);
54556
54557 if (i < 0)
54558 break;
54559 var z = naf[i];
54560 assert(z !== 0);
54561 if (p.type === 'affine') {
54562 // J +- P
54563 if (z > 0)
54564 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
54565 else
54566 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
54567 } else {
54568 // J +- J
54569 if (z > 0)
54570 acc = acc.add(wnd[(z - 1) >> 1]);
54571 else
54572 acc = acc.add(wnd[(-z - 1) >> 1].neg());
54573 }
54574 }
54575 return p.type === 'affine' ? acc.toP() : acc;
54576 };
54577
54578 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
54579 points,
54580 coeffs,
54581 len,
54582 jacobianResult) {
54583 var wndWidth = this._wnafT1;
54584 var wnd = this._wnafT2;
54585 var naf = this._wnafT3;
54586
54587 // Fill all arrays
54588 var max = 0;
54589 for (var i = 0; i < len; i++) {
54590 var p = points[i];
54591 var nafPoints = p._getNAFPoints(defW);
54592 wndWidth[i] = nafPoints.wnd;
54593 wnd[i] = nafPoints.points;
54594 }
54595
54596 // Comb small window NAFs
54597 for (var i = len - 1; i >= 1; i -= 2) {
54598 var a = i - 1;
54599 var b = i;
54600 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
54601 naf[a] = getNAF(coeffs[a], wndWidth[a]);
54602 naf[b] = getNAF(coeffs[b], wndWidth[b]);
54603 max = Math.max(naf[a].length, max);
54604 max = Math.max(naf[b].length, max);
54605 continue;
54606 }
54607
54608 var comb = [
54609 points[a], /* 1 */
54610 null, /* 3 */
54611 null, /* 5 */
54612 points[b] /* 7 */
54613 ];
54614
54615 // Try to avoid Projective points, if possible
54616 if (points[a].y.cmp(points[b].y) === 0) {
54617 comb[1] = points[a].add(points[b]);
54618 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54619 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
54620 comb[1] = points[a].toJ().mixedAdd(points[b]);
54621 comb[2] = points[a].add(points[b].neg());
54622 } else {
54623 comb[1] = points[a].toJ().mixedAdd(points[b]);
54624 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54625 }
54626
54627 var index = [
54628 -3, /* -1 -1 */
54629 -1, /* -1 0 */
54630 -5, /* -1 1 */
54631 -7, /* 0 -1 */
54632 0, /* 0 0 */
54633 7, /* 0 1 */
54634 5, /* 1 -1 */
54635 1, /* 1 0 */
54636 3 /* 1 1 */
54637 ];
54638
54639 var jsf = getJSF(coeffs[a], coeffs[b]);
54640 max = Math.max(jsf[0].length, max);
54641 naf[a] = new Array(max);
54642 naf[b] = new Array(max);
54643 for (var j = 0; j < max; j++) {
54644 var ja = jsf[0][j] | 0;
54645 var jb = jsf[1][j] | 0;
54646
54647 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
54648 naf[b][j] = 0;
54649 wnd[a] = comb;
54650 }
54651 }
54652
54653 var acc = this.jpoint(null, null, null);
54654 var tmp = this._wnafT4;
54655 for (var i = max; i >= 0; i--) {
54656 var k = 0;
54657
54658 while (i >= 0) {
54659 var zero = true;
54660 for (var j = 0; j < len; j++) {
54661 tmp[j] = naf[j][i] | 0;
54662 if (tmp[j] !== 0)
54663 zero = false;
54664 }
54665 if (!zero)
54666 break;
54667 k++;
54668 i--;
54669 }
54670 if (i >= 0)
54671 k++;
54672 acc = acc.dblp(k);
54673 if (i < 0)
54674 break;
54675
54676 for (var j = 0; j < len; j++) {
54677 var z = tmp[j];
54678 var p;
54679 if (z === 0)
54680 continue;
54681 else if (z > 0)
54682 p = wnd[j][(z - 1) >> 1];
54683 else if (z < 0)
54684 p = wnd[j][(-z - 1) >> 1].neg();
54685
54686 if (p.type === 'affine')
54687 acc = acc.mixedAdd(p);
54688 else
54689 acc = acc.add(p);
54690 }
54691 }
54692 // Zeroify references
54693 for (var i = 0; i < len; i++)
54694 wnd[i] = null;
54695
54696 if (jacobianResult)
54697 return acc;
54698 else
54699 return acc.toP();
54700 };
54701
54702 function BasePoint(curve, type) {
54703 this.curve = curve;
54704 this.type = type;
54705 this.precomputed = null;
54706 }
54707 BaseCurve.BasePoint = BasePoint;
54708
54709 BasePoint.prototype.eq = function eq(/*other*/) {
54710 throw new Error('Not implemented');
54711 };
54712
54713 BasePoint.prototype.validate = function validate() {
54714 return this.curve.validate(this);
54715 };
54716
54717 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
54718 bytes = utils.toArray(bytes, enc);
54719
54720 var len = this.p.byteLength();
54721
54722 // uncompressed, hybrid-odd, hybrid-even
54723 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
54724 bytes.length - 1 === 2 * len) {
54725 if (bytes[0] === 0x06)
54726 assert(bytes[bytes.length - 1] % 2 === 0);
54727 else if (bytes[0] === 0x07)
54728 assert(bytes[bytes.length - 1] % 2 === 1);
54729
54730 var res = this.point(bytes.slice(1, 1 + len),
54731 bytes.slice(1 + len, 1 + 2 * len));
54732
54733 return res;
54734 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
54735 bytes.length - 1 === len) {
54736 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
54737 }
54738 throw new Error('Unknown point format');
54739 };
54740
54741 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
54742 return this.encode(enc, true);
54743 };
54744
54745 BasePoint.prototype._encode = function _encode(compact) {
54746 var len = this.curve.p.byteLength();
54747 var x = this.getX().toArray('be', len);
54748
54749 if (compact)
54750 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
54751
54752 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
54753 };
54754
54755 BasePoint.prototype.encode = function encode(enc, compact) {
54756 return utils.encode(this._encode(compact), enc);
54757 };
54758
54759 BasePoint.prototype.precompute = function precompute(power) {
54760 if (this.precomputed)
54761 return this;
54762
54763 var precomputed = {
54764 doubles: null,
54765 naf: null,
54766 beta: null
54767 };
54768 precomputed.naf = this._getNAFPoints(8);
54769 precomputed.doubles = this._getDoubles(4, power);
54770 precomputed.beta = this._getBeta();
54771 this.precomputed = precomputed;
54772
54773 return this;
54774 };
54775
54776 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
54777 if (!this.precomputed)
54778 return false;
54779
54780 var doubles = this.precomputed.doubles;
54781 if (!doubles)
54782 return false;
54783
54784 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
54785 };
54786
54787 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
54788 if (this.precomputed && this.precomputed.doubles)
54789 return this.precomputed.doubles;
54790
54791 var doubles = [ this ];
54792 var acc = this;
54793 for (var i = 0; i < power; i += step) {
54794 for (var j = 0; j < step; j++)
54795 acc = acc.dbl();
54796 doubles.push(acc);
54797 }
54798 return {
54799 step: step,
54800 points: doubles
54801 };
54802 };
54803
54804 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
54805 if (this.precomputed && this.precomputed.naf)
54806 return this.precomputed.naf;
54807
54808 var res = [ this ];
54809 var max = (1 << wnd) - 1;
54810 var dbl = max === 1 ? null : this.dbl();
54811 for (var i = 1; i < max; i++)
54812 res[i] = res[i - 1].add(dbl);
54813 return {
54814 wnd: wnd,
54815 points: res
54816 };
54817 };
54818
54819 BasePoint.prototype._getBeta = function _getBeta() {
54820 return null;
54821 };
54822
54823 BasePoint.prototype.dblp = function dblp(k) {
54824 var r = this;
54825 for (var i = 0; i < k; i++)
54826 r = r.dbl();
54827 return r;
54828 };
54829
54830 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
54831 'use strict';
54832
54833 var curve = require('../curve');
54834 var elliptic = require('../../elliptic');
54835 var BN = require('bn.js');
54836 var inherits = require('inherits');
54837 var Base = curve.base;
54838
54839 var assert = elliptic.utils.assert;
54840
54841 function EdwardsCurve(conf) {
54842 // NOTE: Important as we are creating point in Base.call()
54843 this.twisted = (conf.a | 0) !== 1;
54844 this.mOneA = this.twisted && (conf.a | 0) === -1;
54845 this.extended = this.mOneA;
54846
54847 Base.call(this, 'edwards', conf);
54848
54849 this.a = new BN(conf.a, 16).umod(this.red.m);
54850 this.a = this.a.toRed(this.red);
54851 this.c = new BN(conf.c, 16).toRed(this.red);
54852 this.c2 = this.c.redSqr();
54853 this.d = new BN(conf.d, 16).toRed(this.red);
54854 this.dd = this.d.redAdd(this.d);
54855
54856 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
54857 this.oneC = (conf.c | 0) === 1;
54858 }
54859 inherits(EdwardsCurve, Base);
54860 module.exports = EdwardsCurve;
54861
54862 EdwardsCurve.prototype._mulA = function _mulA(num) {
54863 if (this.mOneA)
54864 return num.redNeg();
54865 else
54866 return this.a.redMul(num);
54867 };
54868
54869 EdwardsCurve.prototype._mulC = function _mulC(num) {
54870 if (this.oneC)
54871 return num;
54872 else
54873 return this.c.redMul(num);
54874 };
54875
54876 // Just for compatibility with Short curve
54877 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
54878 return this.point(x, y, z, t);
54879 };
54880
54881 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
54882 x = new BN(x, 16);
54883 if (!x.red)
54884 x = x.toRed(this.red);
54885
54886 var x2 = x.redSqr();
54887 var rhs = this.c2.redSub(this.a.redMul(x2));
54888 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
54889
54890 var y2 = rhs.redMul(lhs.redInvm());
54891 var y = y2.redSqrt();
54892 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
54893 throw new Error('invalid point');
54894
54895 var isOdd = y.fromRed().isOdd();
54896 if (odd && !isOdd || !odd && isOdd)
54897 y = y.redNeg();
54898
54899 return this.point(x, y);
54900 };
54901
54902 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
54903 y = new BN(y, 16);
54904 if (!y.red)
54905 y = y.toRed(this.red);
54906
54907 // x^2 = (y^2 - 1) / (d y^2 + 1)
54908 var y2 = y.redSqr();
54909 var lhs = y2.redSub(this.one);
54910 var rhs = y2.redMul(this.d).redAdd(this.one);
54911 var x2 = lhs.redMul(rhs.redInvm());
54912
54913 if (x2.cmp(this.zero) === 0) {
54914 if (odd)
54915 throw new Error('invalid point');
54916 else
54917 return this.point(this.zero, y);
54918 }
54919
54920 var x = x2.redSqrt();
54921 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
54922 throw new Error('invalid point');
54923
54924 if (x.isOdd() !== odd)
54925 x = x.redNeg();
54926
54927 return this.point(x, y);
54928 };
54929
54930 EdwardsCurve.prototype.validate = function validate(point) {
54931 if (point.isInfinity())
54932 return true;
54933
54934 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
54935 point.normalize();
54936
54937 var x2 = point.x.redSqr();
54938 var y2 = point.y.redSqr();
54939 var lhs = x2.redMul(this.a).redAdd(y2);
54940 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
54941
54942 return lhs.cmp(rhs) === 0;
54943 };
54944
54945 function Point(curve, x, y, z, t) {
54946 Base.BasePoint.call(this, curve, 'projective');
54947 if (x === null && y === null && z === null) {
54948 this.x = this.curve.zero;
54949 this.y = this.curve.one;
54950 this.z = this.curve.one;
54951 this.t = this.curve.zero;
54952 this.zOne = true;
54953 } else {
54954 this.x = new BN(x, 16);
54955 this.y = new BN(y, 16);
54956 this.z = z ? new BN(z, 16) : this.curve.one;
54957 this.t = t && new BN(t, 16);
54958 if (!this.x.red)
54959 this.x = this.x.toRed(this.curve.red);
54960 if (!this.y.red)
54961 this.y = this.y.toRed(this.curve.red);
54962 if (!this.z.red)
54963 this.z = this.z.toRed(this.curve.red);
54964 if (this.t && !this.t.red)
54965 this.t = this.t.toRed(this.curve.red);
54966 this.zOne = this.z === this.curve.one;
54967
54968 // Use extended coordinates
54969 if (this.curve.extended && !this.t) {
54970 this.t = this.x.redMul(this.y);
54971 if (!this.zOne)
54972 this.t = this.t.redMul(this.z.redInvm());
54973 }
54974 }
54975 }
54976 inherits(Point, Base.BasePoint);
54977
54978 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
54979 return Point.fromJSON(this, obj);
54980 };
54981
54982 EdwardsCurve.prototype.point = function point(x, y, z, t) {
54983 return new Point(this, x, y, z, t);
54984 };
54985
54986 Point.fromJSON = function fromJSON(curve, obj) {
54987 return new Point(curve, obj[0], obj[1], obj[2]);
54988 };
54989
54990 Point.prototype.inspect = function inspect() {
54991 if (this.isInfinity())
54992 return '<EC Point Infinity>';
54993 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
54994 ' y: ' + this.y.fromRed().toString(16, 2) +
54995 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
54996 };
54997
54998 Point.prototype.isInfinity = function isInfinity() {
54999 // XXX This code assumes that zero is always zero in red
55000 return this.x.cmpn(0) === 0 &&
55001 this.y.cmp(this.z) === 0;
55002 };
55003
55004 Point.prototype._extDbl = function _extDbl() {
55005 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
55006 // #doubling-dbl-2008-hwcd
55007 // 4M + 4S
55008
55009 // A = X1^2
55010 var a = this.x.redSqr();
55011 // B = Y1^2
55012 var b = this.y.redSqr();
55013 // C = 2 * Z1^2
55014 var c = this.z.redSqr();
55015 c = c.redIAdd(c);
55016 // D = a * A
55017 var d = this.curve._mulA(a);
55018 // E = (X1 + Y1)^2 - A - B
55019 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
55020 // G = D + B
55021 var g = d.redAdd(b);
55022 // F = G - C
55023 var f = g.redSub(c);
55024 // H = D - B
55025 var h = d.redSub(b);
55026 // X3 = E * F
55027 var nx = e.redMul(f);
55028 // Y3 = G * H
55029 var ny = g.redMul(h);
55030 // T3 = E * H
55031 var nt = e.redMul(h);
55032 // Z3 = F * G
55033 var nz = f.redMul(g);
55034 return this.curve.point(nx, ny, nz, nt);
55035 };
55036
55037 Point.prototype._projDbl = function _projDbl() {
55038 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55039 // #doubling-dbl-2008-bbjlp
55040 // #doubling-dbl-2007-bl
55041 // and others
55042 // Generally 3M + 4S or 2M + 4S
55043
55044 // B = (X1 + Y1)^2
55045 var b = this.x.redAdd(this.y).redSqr();
55046 // C = X1^2
55047 var c = this.x.redSqr();
55048 // D = Y1^2
55049 var d = this.y.redSqr();
55050
55051 var nx;
55052 var ny;
55053 var nz;
55054 if (this.curve.twisted) {
55055 // E = a * C
55056 var e = this.curve._mulA(c);
55057 // F = E + D
55058 var f = e.redAdd(d);
55059 if (this.zOne) {
55060 // X3 = (B - C - D) * (F - 2)
55061 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
55062 // Y3 = F * (E - D)
55063 ny = f.redMul(e.redSub(d));
55064 // Z3 = F^2 - 2 * F
55065 nz = f.redSqr().redSub(f).redSub(f);
55066 } else {
55067 // H = Z1^2
55068 var h = this.z.redSqr();
55069 // J = F - 2 * H
55070 var j = f.redSub(h).redISub(h);
55071 // X3 = (B-C-D)*J
55072 nx = b.redSub(c).redISub(d).redMul(j);
55073 // Y3 = F * (E - D)
55074 ny = f.redMul(e.redSub(d));
55075 // Z3 = F * J
55076 nz = f.redMul(j);
55077 }
55078 } else {
55079 // E = C + D
55080 var e = c.redAdd(d);
55081 // H = (c * Z1)^2
55082 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
55083 // J = E - 2 * H
55084 var j = e.redSub(h).redSub(h);
55085 // X3 = c * (B - E) * J
55086 nx = this.curve._mulC(b.redISub(e)).redMul(j);
55087 // Y3 = c * E * (C - D)
55088 ny = this.curve._mulC(e).redMul(c.redISub(d));
55089 // Z3 = E * J
55090 nz = e.redMul(j);
55091 }
55092 return this.curve.point(nx, ny, nz);
55093 };
55094
55095 Point.prototype.dbl = function dbl() {
55096 if (this.isInfinity())
55097 return this;
55098
55099 // Double in extended coordinates
55100 if (this.curve.extended)
55101 return this._extDbl();
55102 else
55103 return this._projDbl();
55104 };
55105
55106 Point.prototype._extAdd = function _extAdd(p) {
55107 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
55108 // #addition-add-2008-hwcd-3
55109 // 8M
55110
55111 // A = (Y1 - X1) * (Y2 - X2)
55112 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
55113 // B = (Y1 + X1) * (Y2 + X2)
55114 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
55115 // C = T1 * k * T2
55116 var c = this.t.redMul(this.curve.dd).redMul(p.t);
55117 // D = Z1 * 2 * Z2
55118 var d = this.z.redMul(p.z.redAdd(p.z));
55119 // E = B - A
55120 var e = b.redSub(a);
55121 // F = D - C
55122 var f = d.redSub(c);
55123 // G = D + C
55124 var g = d.redAdd(c);
55125 // H = B + A
55126 var h = b.redAdd(a);
55127 // X3 = E * F
55128 var nx = e.redMul(f);
55129 // Y3 = G * H
55130 var ny = g.redMul(h);
55131 // T3 = E * H
55132 var nt = e.redMul(h);
55133 // Z3 = F * G
55134 var nz = f.redMul(g);
55135 return this.curve.point(nx, ny, nz, nt);
55136 };
55137
55138 Point.prototype._projAdd = function _projAdd(p) {
55139 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55140 // #addition-add-2008-bbjlp
55141 // #addition-add-2007-bl
55142 // 10M + 1S
55143
55144 // A = Z1 * Z2
55145 var a = this.z.redMul(p.z);
55146 // B = A^2
55147 var b = a.redSqr();
55148 // C = X1 * X2
55149 var c = this.x.redMul(p.x);
55150 // D = Y1 * Y2
55151 var d = this.y.redMul(p.y);
55152 // E = d * C * D
55153 var e = this.curve.d.redMul(c).redMul(d);
55154 // F = B - E
55155 var f = b.redSub(e);
55156 // G = B + E
55157 var g = b.redAdd(e);
55158 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
55159 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
55160 var nx = a.redMul(f).redMul(tmp);
55161 var ny;
55162 var nz;
55163 if (this.curve.twisted) {
55164 // Y3 = A * G * (D - a * C)
55165 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
55166 // Z3 = F * G
55167 nz = f.redMul(g);
55168 } else {
55169 // Y3 = A * G * (D - C)
55170 ny = a.redMul(g).redMul(d.redSub(c));
55171 // Z3 = c * F * G
55172 nz = this.curve._mulC(f).redMul(g);
55173 }
55174 return this.curve.point(nx, ny, nz);
55175 };
55176
55177 Point.prototype.add = function add(p) {
55178 if (this.isInfinity())
55179 return p;
55180 if (p.isInfinity())
55181 return this;
55182
55183 if (this.curve.extended)
55184 return this._extAdd(p);
55185 else
55186 return this._projAdd(p);
55187 };
55188
55189 Point.prototype.mul = function mul(k) {
55190 if (this._hasDoubles(k))
55191 return this.curve._fixedNafMul(this, k);
55192 else
55193 return this.curve._wnafMul(this, k);
55194 };
55195
55196 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
55197 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
55198 };
55199
55200 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
55201 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
55202 };
55203
55204 Point.prototype.normalize = function normalize() {
55205 if (this.zOne)
55206 return this;
55207
55208 // Normalize coordinates
55209 var zi = this.z.redInvm();
55210 this.x = this.x.redMul(zi);
55211 this.y = this.y.redMul(zi);
55212 if (this.t)
55213 this.t = this.t.redMul(zi);
55214 this.z = this.curve.one;
55215 this.zOne = true;
55216 return this;
55217 };
55218
55219 Point.prototype.neg = function neg() {
55220 return this.curve.point(this.x.redNeg(),
55221 this.y,
55222 this.z,
55223 this.t && this.t.redNeg());
55224 };
55225
55226 Point.prototype.getX = function getX() {
55227 this.normalize();
55228 return this.x.fromRed();
55229 };
55230
55231 Point.prototype.getY = function getY() {
55232 this.normalize();
55233 return this.y.fromRed();
55234 };
55235
55236 Point.prototype.eq = function eq(other) {
55237 return this === other ||
55238 this.getX().cmp(other.getX()) === 0 &&
55239 this.getY().cmp(other.getY()) === 0;
55240 };
55241
55242 Point.prototype.eqXToP = function eqXToP(x) {
55243 var rx = x.toRed(this.curve.red).redMul(this.z);
55244 if (this.x.cmp(rx) === 0)
55245 return true;
55246
55247 var xc = x.clone();
55248 var t = this.curve.redN.redMul(this.z);
55249 for (;;) {
55250 xc.iadd(this.curve.n);
55251 if (xc.cmp(this.curve.p) >= 0)
55252 return false;
55253
55254 rx.redIAdd(t);
55255 if (this.x.cmp(rx) === 0)
55256 return true;
55257 }
55258 return false;
55259 };
55260
55261 // Compatibility with BaseCurve
55262 Point.prototype.toP = Point.prototype.normalize;
55263 Point.prototype.mixedAdd = Point.prototype.add;
55264
55265 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
55266 'use strict';
55267
55268 var curve = exports;
55269
55270 curve.base = require('./base');
55271 curve.short = require('./short');
55272 curve.mont = require('./mont');
55273 curve.edwards = require('./edwards');
55274
55275 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
55276 'use strict';
55277
55278 var curve = require('../curve');
55279 var BN = require('bn.js');
55280 var inherits = require('inherits');
55281 var Base = curve.base;
55282
55283 var elliptic = require('../../elliptic');
55284 var utils = elliptic.utils;
55285
55286 function MontCurve(conf) {
55287 Base.call(this, 'mont', conf);
55288
55289 this.a = new BN(conf.a, 16).toRed(this.red);
55290 this.b = new BN(conf.b, 16).toRed(this.red);
55291 this.i4 = new BN(4).toRed(this.red).redInvm();
55292 this.two = new BN(2).toRed(this.red);
55293 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
55294 }
55295 inherits(MontCurve, Base);
55296 module.exports = MontCurve;
55297
55298 MontCurve.prototype.validate = function validate(point) {
55299 var x = point.normalize().x;
55300 var x2 = x.redSqr();
55301 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
55302 var y = rhs.redSqrt();
55303
55304 return y.redSqr().cmp(rhs) === 0;
55305 };
55306
55307 function Point(curve, x, z) {
55308 Base.BasePoint.call(this, curve, 'projective');
55309 if (x === null && z === null) {
55310 this.x = this.curve.one;
55311 this.z = this.curve.zero;
55312 } else {
55313 this.x = new BN(x, 16);
55314 this.z = new BN(z, 16);
55315 if (!this.x.red)
55316 this.x = this.x.toRed(this.curve.red);
55317 if (!this.z.red)
55318 this.z = this.z.toRed(this.curve.red);
55319 }
55320 }
55321 inherits(Point, Base.BasePoint);
55322
55323 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
55324 return this.point(utils.toArray(bytes, enc), 1);
55325 };
55326
55327 MontCurve.prototype.point = function point(x, z) {
55328 return new Point(this, x, z);
55329 };
55330
55331 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
55332 return Point.fromJSON(this, obj);
55333 };
55334
55335 Point.prototype.precompute = function precompute() {
55336 // No-op
55337 };
55338
55339 Point.prototype._encode = function _encode() {
55340 return this.getX().toArray('be', this.curve.p.byteLength());
55341 };
55342
55343 Point.fromJSON = function fromJSON(curve, obj) {
55344 return new Point(curve, obj[0], obj[1] || curve.one);
55345 };
55346
55347 Point.prototype.inspect = function inspect() {
55348 if (this.isInfinity())
55349 return '<EC Point Infinity>';
55350 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55351 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
55352 };
55353
55354 Point.prototype.isInfinity = function isInfinity() {
55355 // XXX This code assumes that zero is always zero in red
55356 return this.z.cmpn(0) === 0;
55357 };
55358
55359 Point.prototype.dbl = function dbl() {
55360 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
55361 // 2M + 2S + 4A
55362
55363 // A = X1 + Z1
55364 var a = this.x.redAdd(this.z);
55365 // AA = A^2
55366 var aa = a.redSqr();
55367 // B = X1 - Z1
55368 var b = this.x.redSub(this.z);
55369 // BB = B^2
55370 var bb = b.redSqr();
55371 // C = AA - BB
55372 var c = aa.redSub(bb);
55373 // X3 = AA * BB
55374 var nx = aa.redMul(bb);
55375 // Z3 = C * (BB + A24 * C)
55376 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
55377 return this.curve.point(nx, nz);
55378 };
55379
55380 Point.prototype.add = function add() {
55381 throw new Error('Not supported on Montgomery curve');
55382 };
55383
55384 Point.prototype.diffAdd = function diffAdd(p, diff) {
55385 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
55386 // 4M + 2S + 6A
55387
55388 // A = X2 + Z2
55389 var a = this.x.redAdd(this.z);
55390 // B = X2 - Z2
55391 var b = this.x.redSub(this.z);
55392 // C = X3 + Z3
55393 var c = p.x.redAdd(p.z);
55394 // D = X3 - Z3
55395 var d = p.x.redSub(p.z);
55396 // DA = D * A
55397 var da = d.redMul(a);
55398 // CB = C * B
55399 var cb = c.redMul(b);
55400 // X5 = Z1 * (DA + CB)^2
55401 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
55402 // Z5 = X1 * (DA - CB)^2
55403 var nz = diff.x.redMul(da.redISub(cb).redSqr());
55404 return this.curve.point(nx, nz);
55405 };
55406
55407 Point.prototype.mul = function mul(k) {
55408 var t = k.clone();
55409 var a = this; // (N / 2) * Q + Q
55410 var b = this.curve.point(null, null); // (N / 2) * Q
55411 var c = this; // Q
55412
55413 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
55414 bits.push(t.andln(1));
55415
55416 for (var i = bits.length - 1; i >= 0; i--) {
55417 if (bits[i] === 0) {
55418 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
55419 a = a.diffAdd(b, c);
55420 // N * Q = 2 * ((N / 2) * Q + Q))
55421 b = b.dbl();
55422 } else {
55423 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
55424 b = a.diffAdd(b, c);
55425 // N * Q + Q = 2 * ((N / 2) * Q + Q)
55426 a = a.dbl();
55427 }
55428 }
55429 return b;
55430 };
55431
55432 Point.prototype.mulAdd = function mulAdd() {
55433 throw new Error('Not supported on Montgomery curve');
55434 };
55435
55436 Point.prototype.jumlAdd = function jumlAdd() {
55437 throw new Error('Not supported on Montgomery curve');
55438 };
55439
55440 Point.prototype.eq = function eq(other) {
55441 return this.getX().cmp(other.getX()) === 0;
55442 };
55443
55444 Point.prototype.normalize = function normalize() {
55445 this.x = this.x.redMul(this.z.redInvm());
55446 this.z = this.curve.one;
55447 return this;
55448 };
55449
55450 Point.prototype.getX = function getX() {
55451 // Normalize coordinates
55452 this.normalize();
55453
55454 return this.x.fromRed();
55455 };
55456
55457 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
55458 'use strict';
55459
55460 var curve = require('../curve');
55461 var elliptic = require('../../elliptic');
55462 var BN = require('bn.js');
55463 var inherits = require('inherits');
55464 var Base = curve.base;
55465
55466 var assert = elliptic.utils.assert;
55467
55468 function ShortCurve(conf) {
55469 Base.call(this, 'short', conf);
55470
55471 this.a = new BN(conf.a, 16).toRed(this.red);
55472 this.b = new BN(conf.b, 16).toRed(this.red);
55473 this.tinv = this.two.redInvm();
55474
55475 this.zeroA = this.a.fromRed().cmpn(0) === 0;
55476 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
55477
55478 // If the curve is endomorphic, precalculate beta and lambda
55479 this.endo = this._getEndomorphism(conf);
55480 this._endoWnafT1 = new Array(4);
55481 this._endoWnafT2 = new Array(4);
55482 }
55483 inherits(ShortCurve, Base);
55484 module.exports = ShortCurve;
55485
55486 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
55487 // No efficient endomorphism
55488 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
55489 return;
55490
55491 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
55492 var beta;
55493 var lambda;
55494 if (conf.beta) {
55495 beta = new BN(conf.beta, 16).toRed(this.red);
55496 } else {
55497 var betas = this._getEndoRoots(this.p);
55498 // Choose the smallest beta
55499 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
55500 beta = beta.toRed(this.red);
55501 }
55502 if (conf.lambda) {
55503 lambda = new BN(conf.lambda, 16);
55504 } else {
55505 // Choose the lambda that is matching selected beta
55506 var lambdas = this._getEndoRoots(this.n);
55507 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
55508 lambda = lambdas[0];
55509 } else {
55510 lambda = lambdas[1];
55511 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
55512 }
55513 }
55514
55515 // Get basis vectors, used for balanced length-two representation
55516 var basis;
55517 if (conf.basis) {
55518 basis = conf.basis.map(function(vec) {
55519 return {
55520 a: new BN(vec.a, 16),
55521 b: new BN(vec.b, 16)
55522 };
55523 });
55524 } else {
55525 basis = this._getEndoBasis(lambda);
55526 }
55527
55528 return {
55529 beta: beta,
55530 lambda: lambda,
55531 basis: basis
55532 };
55533 };
55534
55535 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
55536 // Find roots of for x^2 + x + 1 in F
55537 // Root = (-1 +- Sqrt(-3)) / 2
55538 //
55539 var red = num === this.p ? this.red : BN.mont(num);
55540 var tinv = new BN(2).toRed(red).redInvm();
55541 var ntinv = tinv.redNeg();
55542
55543 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
55544
55545 var l1 = ntinv.redAdd(s).fromRed();
55546 var l2 = ntinv.redSub(s).fromRed();
55547 return [ l1, l2 ];
55548 };
55549
55550 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
55551 // aprxSqrt >= sqrt(this.n)
55552 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
55553
55554 // 3.74
55555 // Run EGCD, until r(L + 1) < aprxSqrt
55556 var u = lambda;
55557 var v = this.n.clone();
55558 var x1 = new BN(1);
55559 var y1 = new BN(0);
55560 var x2 = new BN(0);
55561 var y2 = new BN(1);
55562
55563 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
55564 var a0;
55565 var b0;
55566 // First vector
55567 var a1;
55568 var b1;
55569 // Second vector
55570 var a2;
55571 var b2;
55572
55573 var prevR;
55574 var i = 0;
55575 var r;
55576 var x;
55577 while (u.cmpn(0) !== 0) {
55578 var q = v.div(u);
55579 r = v.sub(q.mul(u));
55580 x = x2.sub(q.mul(x1));
55581 var y = y2.sub(q.mul(y1));
55582
55583 if (!a1 && r.cmp(aprxSqrt) < 0) {
55584 a0 = prevR.neg();
55585 b0 = x1;
55586 a1 = r.neg();
55587 b1 = x;
55588 } else if (a1 && ++i === 2) {
55589 break;
55590 }
55591 prevR = r;
55592
55593 v = u;
55594 u = r;
55595 x2 = x1;
55596 x1 = x;
55597 y2 = y1;
55598 y1 = y;
55599 }
55600 a2 = r.neg();
55601 b2 = x;
55602
55603 var len1 = a1.sqr().add(b1.sqr());
55604 var len2 = a2.sqr().add(b2.sqr());
55605 if (len2.cmp(len1) >= 0) {
55606 a2 = a0;
55607 b2 = b0;
55608 }
55609
55610 // Normalize signs
55611 if (a1.negative) {
55612 a1 = a1.neg();
55613 b1 = b1.neg();
55614 }
55615 if (a2.negative) {
55616 a2 = a2.neg();
55617 b2 = b2.neg();
55618 }
55619
55620 return [
55621 { a: a1, b: b1 },
55622 { a: a2, b: b2 }
55623 ];
55624 };
55625
55626 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
55627 var basis = this.endo.basis;
55628 var v1 = basis[0];
55629 var v2 = basis[1];
55630
55631 var c1 = v2.b.mul(k).divRound(this.n);
55632 var c2 = v1.b.neg().mul(k).divRound(this.n);
55633
55634 var p1 = c1.mul(v1.a);
55635 var p2 = c2.mul(v2.a);
55636 var q1 = c1.mul(v1.b);
55637 var q2 = c2.mul(v2.b);
55638
55639 // Calculate answer
55640 var k1 = k.sub(p1).sub(p2);
55641 var k2 = q1.add(q2).neg();
55642 return { k1: k1, k2: k2 };
55643 };
55644
55645 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
55646 x = new BN(x, 16);
55647 if (!x.red)
55648 x = x.toRed(this.red);
55649
55650 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
55651 var y = y2.redSqrt();
55652 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
55653 throw new Error('invalid point');
55654
55655 // XXX Is there any way to tell if the number is odd without converting it
55656 // to non-red form?
55657 var isOdd = y.fromRed().isOdd();
55658 if (odd && !isOdd || !odd && isOdd)
55659 y = y.redNeg();
55660
55661 return this.point(x, y);
55662 };
55663
55664 ShortCurve.prototype.validate = function validate(point) {
55665 if (point.inf)
55666 return true;
55667
55668 var x = point.x;
55669 var y = point.y;
55670
55671 var ax = this.a.redMul(x);
55672 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
55673 return y.redSqr().redISub(rhs).cmpn(0) === 0;
55674 };
55675
55676 ShortCurve.prototype._endoWnafMulAdd =
55677 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
55678 var npoints = this._endoWnafT1;
55679 var ncoeffs = this._endoWnafT2;
55680 for (var i = 0; i < points.length; i++) {
55681 var split = this._endoSplit(coeffs[i]);
55682 var p = points[i];
55683 var beta = p._getBeta();
55684
55685 if (split.k1.negative) {
55686 split.k1.ineg();
55687 p = p.neg(true);
55688 }
55689 if (split.k2.negative) {
55690 split.k2.ineg();
55691 beta = beta.neg(true);
55692 }
55693
55694 npoints[i * 2] = p;
55695 npoints[i * 2 + 1] = beta;
55696 ncoeffs[i * 2] = split.k1;
55697 ncoeffs[i * 2 + 1] = split.k2;
55698 }
55699 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
55700
55701 // Clean-up references to points and coefficients
55702 for (var j = 0; j < i * 2; j++) {
55703 npoints[j] = null;
55704 ncoeffs[j] = null;
55705 }
55706 return res;
55707 };
55708
55709 function Point(curve, x, y, isRed) {
55710 Base.BasePoint.call(this, curve, 'affine');
55711 if (x === null && y === null) {
55712 this.x = null;
55713 this.y = null;
55714 this.inf = true;
55715 } else {
55716 this.x = new BN(x, 16);
55717 this.y = new BN(y, 16);
55718 // Force redgomery representation when loading from JSON
55719 if (isRed) {
55720 this.x.forceRed(this.curve.red);
55721 this.y.forceRed(this.curve.red);
55722 }
55723 if (!this.x.red)
55724 this.x = this.x.toRed(this.curve.red);
55725 if (!this.y.red)
55726 this.y = this.y.toRed(this.curve.red);
55727 this.inf = false;
55728 }
55729 }
55730 inherits(Point, Base.BasePoint);
55731
55732 ShortCurve.prototype.point = function point(x, y, isRed) {
55733 return new Point(this, x, y, isRed);
55734 };
55735
55736 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
55737 return Point.fromJSON(this, obj, red);
55738 };
55739
55740 Point.prototype._getBeta = function _getBeta() {
55741 if (!this.curve.endo)
55742 return;
55743
55744 var pre = this.precomputed;
55745 if (pre && pre.beta)
55746 return pre.beta;
55747
55748 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
55749 if (pre) {
55750 var curve = this.curve;
55751 var endoMul = function(p) {
55752 return curve.point(p.x.redMul(curve.endo.beta), p.y);
55753 };
55754 pre.beta = beta;
55755 beta.precomputed = {
55756 beta: null,
55757 naf: pre.naf && {
55758 wnd: pre.naf.wnd,
55759 points: pre.naf.points.map(endoMul)
55760 },
55761 doubles: pre.doubles && {
55762 step: pre.doubles.step,
55763 points: pre.doubles.points.map(endoMul)
55764 }
55765 };
55766 }
55767 return beta;
55768 };
55769
55770 Point.prototype.toJSON = function toJSON() {
55771 if (!this.precomputed)
55772 return [ this.x, this.y ];
55773
55774 return [ this.x, this.y, this.precomputed && {
55775 doubles: this.precomputed.doubles && {
55776 step: this.precomputed.doubles.step,
55777 points: this.precomputed.doubles.points.slice(1)
55778 },
55779 naf: this.precomputed.naf && {
55780 wnd: this.precomputed.naf.wnd,
55781 points: this.precomputed.naf.points.slice(1)
55782 }
55783 } ];
55784 };
55785
55786 Point.fromJSON = function fromJSON(curve, obj, red) {
55787 if (typeof obj === 'string')
55788 obj = JSON.parse(obj);
55789 var res = curve.point(obj[0], obj[1], red);
55790 if (!obj[2])
55791 return res;
55792
55793 function obj2point(obj) {
55794 return curve.point(obj[0], obj[1], red);
55795 }
55796
55797 var pre = obj[2];
55798 res.precomputed = {
55799 beta: null,
55800 doubles: pre.doubles && {
55801 step: pre.doubles.step,
55802 points: [ res ].concat(pre.doubles.points.map(obj2point))
55803 },
55804 naf: pre.naf && {
55805 wnd: pre.naf.wnd,
55806 points: [ res ].concat(pre.naf.points.map(obj2point))
55807 }
55808 };
55809 return res;
55810 };
55811
55812 Point.prototype.inspect = function inspect() {
55813 if (this.isInfinity())
55814 return '<EC Point Infinity>';
55815 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55816 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
55817 };
55818
55819 Point.prototype.isInfinity = function isInfinity() {
55820 return this.inf;
55821 };
55822
55823 Point.prototype.add = function add(p) {
55824 // O + P = P
55825 if (this.inf)
55826 return p;
55827
55828 // P + O = P
55829 if (p.inf)
55830 return this;
55831
55832 // P + P = 2P
55833 if (this.eq(p))
55834 return this.dbl();
55835
55836 // P + (-P) = O
55837 if (this.neg().eq(p))
55838 return this.curve.point(null, null);
55839
55840 // P + Q = O
55841 if (this.x.cmp(p.x) === 0)
55842 return this.curve.point(null, null);
55843
55844 var c = this.y.redSub(p.y);
55845 if (c.cmpn(0) !== 0)
55846 c = c.redMul(this.x.redSub(p.x).redInvm());
55847 var nx = c.redSqr().redISub(this.x).redISub(p.x);
55848 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55849 return this.curve.point(nx, ny);
55850 };
55851
55852 Point.prototype.dbl = function dbl() {
55853 if (this.inf)
55854 return this;
55855
55856 // 2P = O
55857 var ys1 = this.y.redAdd(this.y);
55858 if (ys1.cmpn(0) === 0)
55859 return this.curve.point(null, null);
55860
55861 var a = this.curve.a;
55862
55863 var x2 = this.x.redSqr();
55864 var dyinv = ys1.redInvm();
55865 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
55866
55867 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
55868 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55869 return this.curve.point(nx, ny);
55870 };
55871
55872 Point.prototype.getX = function getX() {
55873 return this.x.fromRed();
55874 };
55875
55876 Point.prototype.getY = function getY() {
55877 return this.y.fromRed();
55878 };
55879
55880 Point.prototype.mul = function mul(k) {
55881 k = new BN(k, 16);
55882
55883 if (this._hasDoubles(k))
55884 return this.curve._fixedNafMul(this, k);
55885 else if (this.curve.endo)
55886 return this.curve._endoWnafMulAdd([ this ], [ k ]);
55887 else
55888 return this.curve._wnafMul(this, k);
55889 };
55890
55891 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
55892 var points = [ this, p2 ];
55893 var coeffs = [ k1, k2 ];
55894 if (this.curve.endo)
55895 return this.curve._endoWnafMulAdd(points, coeffs);
55896 else
55897 return this.curve._wnafMulAdd(1, points, coeffs, 2);
55898 };
55899
55900 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
55901 var points = [ this, p2 ];
55902 var coeffs = [ k1, k2 ];
55903 if (this.curve.endo)
55904 return this.curve._endoWnafMulAdd(points, coeffs, true);
55905 else
55906 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
55907 };
55908
55909 Point.prototype.eq = function eq(p) {
55910 return this === p ||
55911 this.inf === p.inf &&
55912 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
55913 };
55914
55915 Point.prototype.neg = function neg(_precompute) {
55916 if (this.inf)
55917 return this;
55918
55919 var res = this.curve.point(this.x, this.y.redNeg());
55920 if (_precompute && this.precomputed) {
55921 var pre = this.precomputed;
55922 var negate = function(p) {
55923 return p.neg();
55924 };
55925 res.precomputed = {
55926 naf: pre.naf && {
55927 wnd: pre.naf.wnd,
55928 points: pre.naf.points.map(negate)
55929 },
55930 doubles: pre.doubles && {
55931 step: pre.doubles.step,
55932 points: pre.doubles.points.map(negate)
55933 }
55934 };
55935 }
55936 return res;
55937 };
55938
55939 Point.prototype.toJ = function toJ() {
55940 if (this.inf)
55941 return this.curve.jpoint(null, null, null);
55942
55943 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
55944 return res;
55945 };
55946
55947 function JPoint(curve, x, y, z) {
55948 Base.BasePoint.call(this, curve, 'jacobian');
55949 if (x === null && y === null && z === null) {
55950 this.x = this.curve.one;
55951 this.y = this.curve.one;
55952 this.z = new BN(0);
55953 } else {
55954 this.x = new BN(x, 16);
55955 this.y = new BN(y, 16);
55956 this.z = new BN(z, 16);
55957 }
55958 if (!this.x.red)
55959 this.x = this.x.toRed(this.curve.red);
55960 if (!this.y.red)
55961 this.y = this.y.toRed(this.curve.red);
55962 if (!this.z.red)
55963 this.z = this.z.toRed(this.curve.red);
55964
55965 this.zOne = this.z === this.curve.one;
55966 }
55967 inherits(JPoint, Base.BasePoint);
55968
55969 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
55970 return new JPoint(this, x, y, z);
55971 };
55972
55973 JPoint.prototype.toP = function toP() {
55974 if (this.isInfinity())
55975 return this.curve.point(null, null);
55976
55977 var zinv = this.z.redInvm();
55978 var zinv2 = zinv.redSqr();
55979 var ax = this.x.redMul(zinv2);
55980 var ay = this.y.redMul(zinv2).redMul(zinv);
55981
55982 return this.curve.point(ax, ay);
55983 };
55984
55985 JPoint.prototype.neg = function neg() {
55986 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
55987 };
55988
55989 JPoint.prototype.add = function add(p) {
55990 // O + P = P
55991 if (this.isInfinity())
55992 return p;
55993
55994 // P + O = P
55995 if (p.isInfinity())
55996 return this;
55997
55998 // 12M + 4S + 7A
55999 var pz2 = p.z.redSqr();
56000 var z2 = this.z.redSqr();
56001 var u1 = this.x.redMul(pz2);
56002 var u2 = p.x.redMul(z2);
56003 var s1 = this.y.redMul(pz2.redMul(p.z));
56004 var s2 = p.y.redMul(z2.redMul(this.z));
56005
56006 var h = u1.redSub(u2);
56007 var r = s1.redSub(s2);
56008 if (h.cmpn(0) === 0) {
56009 if (r.cmpn(0) !== 0)
56010 return this.curve.jpoint(null, null, null);
56011 else
56012 return this.dbl();
56013 }
56014
56015 var h2 = h.redSqr();
56016 var h3 = h2.redMul(h);
56017 var v = u1.redMul(h2);
56018
56019 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
56020 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
56021 var nz = this.z.redMul(p.z).redMul(h);
56022
56023 return this.curve.jpoint(nx, ny, nz);
56024 };
56025
56026 JPoint.prototype.mixedAdd = function mixedAdd(p) {
56027 // O + P = P
56028 if (this.isInfinity())
56029 return p.toJ();
56030
56031 // P + O = P
56032 if (p.isInfinity())
56033 return this;
56034
56035 // 8M + 3S + 7A
56036 var z2 = this.z.redSqr();
56037 var u1 = this.x;
56038 var u2 = p.x.redMul(z2);
56039 var s1 = this.y;
56040 var s2 = p.y.redMul(z2).redMul(this.z);
56041
56042 var h = u1.redSub(u2);
56043 var r = s1.redSub(s2);
56044 if (h.cmpn(0) === 0) {
56045 if (r.cmpn(0) !== 0)
56046 return this.curve.jpoint(null, null, null);
56047 else
56048 return this.dbl();
56049 }
56050
56051 var h2 = h.redSqr();
56052 var h3 = h2.redMul(h);
56053 var v = u1.redMul(h2);
56054
56055 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
56056 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
56057 var nz = this.z.redMul(h);
56058
56059 return this.curve.jpoint(nx, ny, nz);
56060 };
56061
56062 JPoint.prototype.dblp = function dblp(pow) {
56063 if (pow === 0)
56064 return this;
56065 if (this.isInfinity())
56066 return this;
56067 if (!pow)
56068 return this.dbl();
56069
56070 if (this.curve.zeroA || this.curve.threeA) {
56071 var r = this;
56072 for (var i = 0; i < pow; i++)
56073 r = r.dbl();
56074 return r;
56075 }
56076
56077 // 1M + 2S + 1A + N * (4S + 5M + 8A)
56078 // N = 1 => 6M + 6S + 9A
56079 var a = this.curve.a;
56080 var tinv = this.curve.tinv;
56081
56082 var jx = this.x;
56083 var jy = this.y;
56084 var jz = this.z;
56085 var jz4 = jz.redSqr().redSqr();
56086
56087 // Reuse results
56088 var jyd = jy.redAdd(jy);
56089 for (var i = 0; i < pow; i++) {
56090 var jx2 = jx.redSqr();
56091 var jyd2 = jyd.redSqr();
56092 var jyd4 = jyd2.redSqr();
56093 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56094
56095 var t1 = jx.redMul(jyd2);
56096 var nx = c.redSqr().redISub(t1.redAdd(t1));
56097 var t2 = t1.redISub(nx);
56098 var dny = c.redMul(t2);
56099 dny = dny.redIAdd(dny).redISub(jyd4);
56100 var nz = jyd.redMul(jz);
56101 if (i + 1 < pow)
56102 jz4 = jz4.redMul(jyd4);
56103
56104 jx = nx;
56105 jz = nz;
56106 jyd = dny;
56107 }
56108
56109 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
56110 };
56111
56112 JPoint.prototype.dbl = function dbl() {
56113 if (this.isInfinity())
56114 return this;
56115
56116 if (this.curve.zeroA)
56117 return this._zeroDbl();
56118 else if (this.curve.threeA)
56119 return this._threeDbl();
56120 else
56121 return this._dbl();
56122 };
56123
56124 JPoint.prototype._zeroDbl = function _zeroDbl() {
56125 var nx;
56126 var ny;
56127 var nz;
56128 // Z = 1
56129 if (this.zOne) {
56130 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56131 // #doubling-mdbl-2007-bl
56132 // 1M + 5S + 14A
56133
56134 // XX = X1^2
56135 var xx = this.x.redSqr();
56136 // YY = Y1^2
56137 var yy = this.y.redSqr();
56138 // YYYY = YY^2
56139 var yyyy = yy.redSqr();
56140 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56141 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56142 s = s.redIAdd(s);
56143 // M = 3 * XX + a; a = 0
56144 var m = xx.redAdd(xx).redIAdd(xx);
56145 // T = M ^ 2 - 2*S
56146 var t = m.redSqr().redISub(s).redISub(s);
56147
56148 // 8 * YYYY
56149 var yyyy8 = yyyy.redIAdd(yyyy);
56150 yyyy8 = yyyy8.redIAdd(yyyy8);
56151 yyyy8 = yyyy8.redIAdd(yyyy8);
56152
56153 // X3 = T
56154 nx = t;
56155 // Y3 = M * (S - T) - 8 * YYYY
56156 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56157 // Z3 = 2*Y1
56158 nz = this.y.redAdd(this.y);
56159 } else {
56160 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56161 // #doubling-dbl-2009-l
56162 // 2M + 5S + 13A
56163
56164 // A = X1^2
56165 var a = this.x.redSqr();
56166 // B = Y1^2
56167 var b = this.y.redSqr();
56168 // C = B^2
56169 var c = b.redSqr();
56170 // D = 2 * ((X1 + B)^2 - A - C)
56171 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
56172 d = d.redIAdd(d);
56173 // E = 3 * A
56174 var e = a.redAdd(a).redIAdd(a);
56175 // F = E^2
56176 var f = e.redSqr();
56177
56178 // 8 * C
56179 var c8 = c.redIAdd(c);
56180 c8 = c8.redIAdd(c8);
56181 c8 = c8.redIAdd(c8);
56182
56183 // X3 = F - 2 * D
56184 nx = f.redISub(d).redISub(d);
56185 // Y3 = E * (D - X3) - 8 * C
56186 ny = e.redMul(d.redISub(nx)).redISub(c8);
56187 // Z3 = 2 * Y1 * Z1
56188 nz = this.y.redMul(this.z);
56189 nz = nz.redIAdd(nz);
56190 }
56191
56192 return this.curve.jpoint(nx, ny, nz);
56193 };
56194
56195 JPoint.prototype._threeDbl = function _threeDbl() {
56196 var nx;
56197 var ny;
56198 var nz;
56199 // Z = 1
56200 if (this.zOne) {
56201 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
56202 // #doubling-mdbl-2007-bl
56203 // 1M + 5S + 15A
56204
56205 // XX = X1^2
56206 var xx = this.x.redSqr();
56207 // YY = Y1^2
56208 var yy = this.y.redSqr();
56209 // YYYY = YY^2
56210 var yyyy = yy.redSqr();
56211 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56212 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56213 s = s.redIAdd(s);
56214 // M = 3 * XX + a
56215 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
56216 // T = M^2 - 2 * S
56217 var t = m.redSqr().redISub(s).redISub(s);
56218 // X3 = T
56219 nx = t;
56220 // Y3 = M * (S - T) - 8 * YYYY
56221 var yyyy8 = yyyy.redIAdd(yyyy);
56222 yyyy8 = yyyy8.redIAdd(yyyy8);
56223 yyyy8 = yyyy8.redIAdd(yyyy8);
56224 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56225 // Z3 = 2 * Y1
56226 nz = this.y.redAdd(this.y);
56227 } else {
56228 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
56229 // 3M + 5S
56230
56231 // delta = Z1^2
56232 var delta = this.z.redSqr();
56233 // gamma = Y1^2
56234 var gamma = this.y.redSqr();
56235 // beta = X1 * gamma
56236 var beta = this.x.redMul(gamma);
56237 // alpha = 3 * (X1 - delta) * (X1 + delta)
56238 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
56239 alpha = alpha.redAdd(alpha).redIAdd(alpha);
56240 // X3 = alpha^2 - 8 * beta
56241 var beta4 = beta.redIAdd(beta);
56242 beta4 = beta4.redIAdd(beta4);
56243 var beta8 = beta4.redAdd(beta4);
56244 nx = alpha.redSqr().redISub(beta8);
56245 // Z3 = (Y1 + Z1)^2 - gamma - delta
56246 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
56247 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
56248 var ggamma8 = gamma.redSqr();
56249 ggamma8 = ggamma8.redIAdd(ggamma8);
56250 ggamma8 = ggamma8.redIAdd(ggamma8);
56251 ggamma8 = ggamma8.redIAdd(ggamma8);
56252 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
56253 }
56254
56255 return this.curve.jpoint(nx, ny, nz);
56256 };
56257
56258 JPoint.prototype._dbl = function _dbl() {
56259 var a = this.curve.a;
56260
56261 // 4M + 6S + 10A
56262 var jx = this.x;
56263 var jy = this.y;
56264 var jz = this.z;
56265 var jz4 = jz.redSqr().redSqr();
56266
56267 var jx2 = jx.redSqr();
56268 var jy2 = jy.redSqr();
56269
56270 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56271
56272 var jxd4 = jx.redAdd(jx);
56273 jxd4 = jxd4.redIAdd(jxd4);
56274 var t1 = jxd4.redMul(jy2);
56275 var nx = c.redSqr().redISub(t1.redAdd(t1));
56276 var t2 = t1.redISub(nx);
56277
56278 var jyd8 = jy2.redSqr();
56279 jyd8 = jyd8.redIAdd(jyd8);
56280 jyd8 = jyd8.redIAdd(jyd8);
56281 jyd8 = jyd8.redIAdd(jyd8);
56282 var ny = c.redMul(t2).redISub(jyd8);
56283 var nz = jy.redAdd(jy).redMul(jz);
56284
56285 return this.curve.jpoint(nx, ny, nz);
56286 };
56287
56288 JPoint.prototype.trpl = function trpl() {
56289 if (!this.curve.zeroA)
56290 return this.dbl().add(this);
56291
56292 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
56293 // 5M + 10S + ...
56294
56295 // XX = X1^2
56296 var xx = this.x.redSqr();
56297 // YY = Y1^2
56298 var yy = this.y.redSqr();
56299 // ZZ = Z1^2
56300 var zz = this.z.redSqr();
56301 // YYYY = YY^2
56302 var yyyy = yy.redSqr();
56303 // M = 3 * XX + a * ZZ2; a = 0
56304 var m = xx.redAdd(xx).redIAdd(xx);
56305 // MM = M^2
56306 var mm = m.redSqr();
56307 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
56308 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56309 e = e.redIAdd(e);
56310 e = e.redAdd(e).redIAdd(e);
56311 e = e.redISub(mm);
56312 // EE = E^2
56313 var ee = e.redSqr();
56314 // T = 16*YYYY
56315 var t = yyyy.redIAdd(yyyy);
56316 t = t.redIAdd(t);
56317 t = t.redIAdd(t);
56318 t = t.redIAdd(t);
56319 // U = (M + E)^2 - MM - EE - T
56320 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
56321 // X3 = 4 * (X1 * EE - 4 * YY * U)
56322 var yyu4 = yy.redMul(u);
56323 yyu4 = yyu4.redIAdd(yyu4);
56324 yyu4 = yyu4.redIAdd(yyu4);
56325 var nx = this.x.redMul(ee).redISub(yyu4);
56326 nx = nx.redIAdd(nx);
56327 nx = nx.redIAdd(nx);
56328 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
56329 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
56330 ny = ny.redIAdd(ny);
56331 ny = ny.redIAdd(ny);
56332 ny = ny.redIAdd(ny);
56333 // Z3 = (Z1 + E)^2 - ZZ - EE
56334 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
56335
56336 return this.curve.jpoint(nx, ny, nz);
56337 };
56338
56339 JPoint.prototype.mul = function mul(k, kbase) {
56340 k = new BN(k, kbase);
56341
56342 return this.curve._wnafMul(this, k);
56343 };
56344
56345 JPoint.prototype.eq = function eq(p) {
56346 if (p.type === 'affine')
56347 return this.eq(p.toJ());
56348
56349 if (this === p)
56350 return true;
56351
56352 // x1 * z2^2 == x2 * z1^2
56353 var z2 = this.z.redSqr();
56354 var pz2 = p.z.redSqr();
56355 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
56356 return false;
56357
56358 // y1 * z2^3 == y2 * z1^3
56359 var z3 = z2.redMul(this.z);
56360 var pz3 = pz2.redMul(p.z);
56361 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
56362 };
56363
56364 JPoint.prototype.eqXToP = function eqXToP(x) {
56365 var zs = this.z.redSqr();
56366 var rx = x.toRed(this.curve.red).redMul(zs);
56367 if (this.x.cmp(rx) === 0)
56368 return true;
56369
56370 var xc = x.clone();
56371 var t = this.curve.redN.redMul(zs);
56372 for (;;) {
56373 xc.iadd(this.curve.n);
56374 if (xc.cmp(this.curve.p) >= 0)
56375 return false;
56376
56377 rx.redIAdd(t);
56378 if (this.x.cmp(rx) === 0)
56379 return true;
56380 }
56381 return false;
56382 };
56383
56384 JPoint.prototype.inspect = function inspect() {
56385 if (this.isInfinity())
56386 return '<EC JPoint Infinity>';
56387 return '<EC JPoint x: ' + this.x.toString(16, 2) +
56388 ' y: ' + this.y.toString(16, 2) +
56389 ' z: ' + this.z.toString(16, 2) + '>';
56390 };
56391
56392 JPoint.prototype.isInfinity = function isInfinity() {
56393 // XXX This code assumes that zero is always zero in red
56394 return this.z.cmpn(0) === 0;
56395 };
56396
56397 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
56398 'use strict';
56399
56400 var curves = exports;
56401
56402 var hash = require('hash.js');
56403 var elliptic = require('../elliptic');
56404
56405 var assert = elliptic.utils.assert;
56406
56407 function PresetCurve(options) {
56408 if (options.type === 'short')
56409 this.curve = new elliptic.curve.short(options);
56410 else if (options.type === 'edwards')
56411 this.curve = new elliptic.curve.edwards(options);
56412 else
56413 this.curve = new elliptic.curve.mont(options);
56414 this.g = this.curve.g;
56415 this.n = this.curve.n;
56416 this.hash = options.hash;
56417
56418 assert(this.g.validate(), 'Invalid curve');
56419 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
56420 }
56421 curves.PresetCurve = PresetCurve;
56422
56423 function defineCurve(name, options) {
56424 Object.defineProperty(curves, name, {
56425 configurable: true,
56426 enumerable: true,
56427 get: function() {
56428 var curve = new PresetCurve(options);
56429 Object.defineProperty(curves, name, {
56430 configurable: true,
56431 enumerable: true,
56432 value: curve
56433 });
56434 return curve;
56435 }
56436 });
56437 }
56438
56439 defineCurve('p192', {
56440 type: 'short',
56441 prime: 'p192',
56442 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
56443 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
56444 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
56445 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
56446 hash: hash.sha256,
56447 gRed: false,
56448 g: [
56449 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
56450 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
56451 ]
56452 });
56453
56454 defineCurve('p224', {
56455 type: 'short',
56456 prime: 'p224',
56457 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
56458 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
56459 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
56460 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
56461 hash: hash.sha256,
56462 gRed: false,
56463 g: [
56464 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
56465 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
56466 ]
56467 });
56468
56469 defineCurve('p256', {
56470 type: 'short',
56471 prime: null,
56472 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
56473 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
56474 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
56475 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
56476 hash: hash.sha256,
56477 gRed: false,
56478 g: [
56479 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
56480 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
56481 ]
56482 });
56483
56484 defineCurve('p384', {
56485 type: 'short',
56486 prime: null,
56487 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56488 'fffffffe ffffffff 00000000 00000000 ffffffff',
56489 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56490 'fffffffe ffffffff 00000000 00000000 fffffffc',
56491 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
56492 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
56493 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
56494 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
56495 hash: hash.sha384,
56496 gRed: false,
56497 g: [
56498 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
56499 '5502f25d bf55296c 3a545e38 72760ab7',
56500 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
56501 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
56502 ]
56503 });
56504
56505 defineCurve('p521', {
56506 type: 'short',
56507 prime: null,
56508 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56509 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56510 'ffffffff ffffffff ffffffff ffffffff ffffffff',
56511 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56512 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56513 'ffffffff ffffffff ffffffff ffffffff fffffffc',
56514 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
56515 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
56516 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
56517 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56518 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
56519 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
56520 hash: hash.sha512,
56521 gRed: false,
56522 g: [
56523 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
56524 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
56525 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
56526 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
56527 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
56528 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
56529 ]
56530 });
56531
56532 defineCurve('curve25519', {
56533 type: 'mont',
56534 prime: 'p25519',
56535 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56536 a: '76d06',
56537 b: '1',
56538 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56539 hash: hash.sha256,
56540 gRed: false,
56541 g: [
56542 '9'
56543 ]
56544 });
56545
56546 defineCurve('ed25519', {
56547 type: 'edwards',
56548 prime: 'p25519',
56549 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56550 a: '-1',
56551 c: '1',
56552 // -121665 * (121666^(-1)) (mod P)
56553 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
56554 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56555 hash: hash.sha256,
56556 gRed: false,
56557 g: [
56558 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
56559
56560 // 4/5
56561 '6666666666666666666666666666666666666666666666666666666666666658'
56562 ]
56563 });
56564
56565 var pre;
56566 try {
56567 pre = require('./precomputed/secp256k1');
56568 } catch (e) {
56569 pre = undefined;
56570 }
56571
56572 defineCurve('secp256k1', {
56573 type: 'short',
56574 prime: 'k256',
56575 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
56576 a: '0',
56577 b: '7',
56578 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
56579 h: '1',
56580 hash: hash.sha256,
56581
56582 // Precomputed endomorphism
56583 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
56584 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
56585 basis: [
56586 {
56587 a: '3086d221a7d46bcde86c90e49284eb15',
56588 b: '-e4437ed6010e88286f547fa90abfe4c3'
56589 },
56590 {
56591 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
56592 b: '3086d221a7d46bcde86c90e49284eb15'
56593 }
56594 ],
56595
56596 gRed: false,
56597 g: [
56598 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
56599 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
56600 pre
56601 ]
56602 });
56603
56604 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
56605 'use strict';
56606
56607 var BN = require('bn.js');
56608 var HmacDRBG = require('hmac-drbg');
56609 var elliptic = require('../../elliptic');
56610 var utils = elliptic.utils;
56611 var assert = utils.assert;
56612
56613 var KeyPair = require('./key');
56614 var Signature = require('./signature');
56615
56616 function EC(options) {
56617 if (!(this instanceof EC))
56618 return new EC(options);
56619
56620 // Shortcut `elliptic.ec(curve-name)`
56621 if (typeof options === 'string') {
56622 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
56623
56624 options = elliptic.curves[options];
56625 }
56626
56627 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
56628 if (options instanceof elliptic.curves.PresetCurve)
56629 options = { curve: options };
56630
56631 this.curve = options.curve.curve;
56632 this.n = this.curve.n;
56633 this.nh = this.n.ushrn(1);
56634 this.g = this.curve.g;
56635
56636 // Point on curve
56637 this.g = options.curve.g;
56638 this.g.precompute(options.curve.n.bitLength() + 1);
56639
56640 // Hash for function for DRBG
56641 this.hash = options.hash || options.curve.hash;
56642 }
56643 module.exports = EC;
56644
56645 EC.prototype.keyPair = function keyPair(options) {
56646 return new KeyPair(this, options);
56647 };
56648
56649 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
56650 return KeyPair.fromPrivate(this, priv, enc);
56651 };
56652
56653 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
56654 return KeyPair.fromPublic(this, pub, enc);
56655 };
56656
56657 EC.prototype.genKeyPair = function genKeyPair(options) {
56658 if (!options)
56659 options = {};
56660
56661 // Instantiate Hmac_DRBG
56662 var drbg = new HmacDRBG({
56663 hash: this.hash,
56664 pers: options.pers,
56665 persEnc: options.persEnc || 'utf8',
56666 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
56667 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
56668 nonce: this.n.toArray()
56669 });
56670
56671 var bytes = this.n.byteLength();
56672 var ns2 = this.n.sub(new BN(2));
56673 do {
56674 var priv = new BN(drbg.generate(bytes));
56675 if (priv.cmp(ns2) > 0)
56676 continue;
56677
56678 priv.iaddn(1);
56679 return this.keyFromPrivate(priv);
56680 } while (true);
56681 };
56682
56683 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
56684 var delta = msg.byteLength() * 8 - this.n.bitLength();
56685 if (delta > 0)
56686 msg = msg.ushrn(delta);
56687 if (!truncOnly && msg.cmp(this.n) >= 0)
56688 return msg.sub(this.n);
56689 else
56690 return msg;
56691 };
56692
56693 EC.prototype.sign = function sign(msg, key, enc, options) {
56694 if (typeof enc === 'object') {
56695 options = enc;
56696 enc = null;
56697 }
56698 if (!options)
56699 options = {};
56700
56701 key = this.keyFromPrivate(key, enc);
56702 msg = this._truncateToN(new BN(msg, 16));
56703
56704 // Zero-extend key to provide enough entropy
56705 var bytes = this.n.byteLength();
56706 var bkey = key.getPrivate().toArray('be', bytes);
56707
56708 // Zero-extend nonce to have the same byte size as N
56709 var nonce = msg.toArray('be', bytes);
56710
56711 // Instantiate Hmac_DRBG
56712 var drbg = new HmacDRBG({
56713 hash: this.hash,
56714 entropy: bkey,
56715 nonce: nonce,
56716 pers: options.pers,
56717 persEnc: options.persEnc || 'utf8'
56718 });
56719
56720 // Number of bytes to generate
56721 var ns1 = this.n.sub(new BN(1));
56722
56723 for (var iter = 0; true; iter++) {
56724 var k = options.k ?
56725 options.k(iter) :
56726 new BN(drbg.generate(this.n.byteLength()));
56727 k = this._truncateToN(k, true);
56728 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
56729 continue;
56730
56731 var kp = this.g.mul(k);
56732 if (kp.isInfinity())
56733 continue;
56734
56735 var kpX = kp.getX();
56736 var r = kpX.umod(this.n);
56737 if (r.cmpn(0) === 0)
56738 continue;
56739
56740 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
56741 s = s.umod(this.n);
56742 if (s.cmpn(0) === 0)
56743 continue;
56744
56745 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
56746 (kpX.cmp(r) !== 0 ? 2 : 0);
56747
56748 // Use complement of `s`, if it is > `n / 2`
56749 if (options.canonical && s.cmp(this.nh) > 0) {
56750 s = this.n.sub(s);
56751 recoveryParam ^= 1;
56752 }
56753
56754 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
56755 }
56756 };
56757
56758 EC.prototype.verify = function verify(msg, signature, key, enc) {
56759 msg = this._truncateToN(new BN(msg, 16));
56760 key = this.keyFromPublic(key, enc);
56761 signature = new Signature(signature, 'hex');
56762
56763 // Perform primitive values validation
56764 var r = signature.r;
56765 var s = signature.s;
56766 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
56767 return false;
56768 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
56769 return false;
56770
56771 // Validate signature
56772 var sinv = s.invm(this.n);
56773 var u1 = sinv.mul(msg).umod(this.n);
56774 var u2 = sinv.mul(r).umod(this.n);
56775
56776 if (!this.curve._maxwellTrick) {
56777 var p = this.g.mulAdd(u1, key.getPublic(), u2);
56778 if (p.isInfinity())
56779 return false;
56780
56781 return p.getX().umod(this.n).cmp(r) === 0;
56782 }
56783
56784 // NOTE: Greg Maxwell's trick, inspired by:
56785 // https://git.io/vad3K
56786
56787 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
56788 if (p.isInfinity())
56789 return false;
56790
56791 // Compare `p.x` of Jacobian point with `r`,
56792 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
56793 // inverse of `p.z^2`
56794 return p.eqXToP(r);
56795 };
56796
56797 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
56798 assert((3 & j) === j, 'The recovery param is more than two bits');
56799 signature = new Signature(signature, enc);
56800
56801 var n = this.n;
56802 var e = new BN(msg);
56803 var r = signature.r;
56804 var s = signature.s;
56805
56806 // A set LSB signifies that the y-coordinate is odd
56807 var isYOdd = j & 1;
56808 var isSecondKey = j >> 1;
56809 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
56810 throw new Error('Unable to find sencond key candinate');
56811
56812 // 1.1. Let x = r + jn.
56813 if (isSecondKey)
56814 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
56815 else
56816 r = this.curve.pointFromX(r, isYOdd);
56817
56818 var rInv = signature.r.invm(n);
56819 var s1 = n.sub(e).mul(rInv).umod(n);
56820 var s2 = s.mul(rInv).umod(n);
56821
56822 // 1.6.1 Compute Q = r^-1 (sR - eG)
56823 // Q = r^-1 (sR + -eG)
56824 return this.g.mulAdd(s1, r, s2);
56825 };
56826
56827 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
56828 signature = new Signature(signature, enc);
56829 if (signature.recoveryParam !== null)
56830 return signature.recoveryParam;
56831
56832 for (var i = 0; i < 4; i++) {
56833 var Qprime;
56834 try {
56835 Qprime = this.recoverPubKey(e, signature, i);
56836 } catch (e) {
56837 continue;
56838 }
56839
56840 if (Qprime.eq(Q))
56841 return i;
56842 }
56843 throw new Error('Unable to find valid recovery factor');
56844 };
56845
56846 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
56847 'use strict';
56848
56849 var BN = require('bn.js');
56850 var elliptic = require('../../elliptic');
56851 var utils = elliptic.utils;
56852 var assert = utils.assert;
56853
56854 function KeyPair(ec, options) {
56855 this.ec = ec;
56856 this.priv = null;
56857 this.pub = null;
56858
56859 // KeyPair(ec, { priv: ..., pub: ... })
56860 if (options.priv)
56861 this._importPrivate(options.priv, options.privEnc);
56862 if (options.pub)
56863 this._importPublic(options.pub, options.pubEnc);
56864 }
56865 module.exports = KeyPair;
56866
56867 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
56868 if (pub instanceof KeyPair)
56869 return pub;
56870
56871 return new KeyPair(ec, {
56872 pub: pub,
56873 pubEnc: enc
56874 });
56875 };
56876
56877 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
56878 if (priv instanceof KeyPair)
56879 return priv;
56880
56881 return new KeyPair(ec, {
56882 priv: priv,
56883 privEnc: enc
56884 });
56885 };
56886
56887 KeyPair.prototype.validate = function validate() {
56888 var pub = this.getPublic();
56889
56890 if (pub.isInfinity())
56891 return { result: false, reason: 'Invalid public key' };
56892 if (!pub.validate())
56893 return { result: false, reason: 'Public key is not a point' };
56894 if (!pub.mul(this.ec.curve.n).isInfinity())
56895 return { result: false, reason: 'Public key * N != O' };
56896
56897 return { result: true, reason: null };
56898 };
56899
56900 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
56901 // compact is optional argument
56902 if (typeof compact === 'string') {
56903 enc = compact;
56904 compact = null;
56905 }
56906
56907 if (!this.pub)
56908 this.pub = this.ec.g.mul(this.priv);
56909
56910 if (!enc)
56911 return this.pub;
56912
56913 return this.pub.encode(enc, compact);
56914 };
56915
56916 KeyPair.prototype.getPrivate = function getPrivate(enc) {
56917 if (enc === 'hex')
56918 return this.priv.toString(16, 2);
56919 else
56920 return this.priv;
56921 };
56922
56923 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
56924 this.priv = new BN(key, enc || 16);
56925
56926 // Ensure that the priv won't be bigger than n, otherwise we may fail
56927 // in fixed multiplication method
56928 this.priv = this.priv.umod(this.ec.curve.n);
56929 };
56930
56931 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
56932 if (key.x || key.y) {
56933 // Montgomery points only have an `x` coordinate.
56934 // Weierstrass/Edwards points on the other hand have both `x` and
56935 // `y` coordinates.
56936 if (this.ec.curve.type === 'mont') {
56937 assert(key.x, 'Need x coordinate');
56938 } else if (this.ec.curve.type === 'short' ||
56939 this.ec.curve.type === 'edwards') {
56940 assert(key.x && key.y, 'Need both x and y coordinate');
56941 }
56942 this.pub = this.ec.curve.point(key.x, key.y);
56943 return;
56944 }
56945 this.pub = this.ec.curve.decodePoint(key, enc);
56946 };
56947
56948 // ECDH
56949 KeyPair.prototype.derive = function derive(pub) {
56950 return pub.mul(this.priv).getX();
56951 };
56952
56953 // ECDSA
56954 KeyPair.prototype.sign = function sign(msg, enc, options) {
56955 return this.ec.sign(msg, this, enc, options);
56956 };
56957
56958 KeyPair.prototype.verify = function verify(msg, signature) {
56959 return this.ec.verify(msg, signature, this);
56960 };
56961
56962 KeyPair.prototype.inspect = function inspect() {
56963 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
56964 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
56965 };
56966
56967 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
56968 'use strict';
56969
56970 var BN = require('bn.js');
56971
56972 var elliptic = require('../../elliptic');
56973 var utils = elliptic.utils;
56974 var assert = utils.assert;
56975
56976 function Signature(options, enc) {
56977 if (options instanceof Signature)
56978 return options;
56979
56980 if (this._importDER(options, enc))
56981 return;
56982
56983 assert(options.r && options.s, 'Signature without r or s');
56984 this.r = new BN(options.r, 16);
56985 this.s = new BN(options.s, 16);
56986 if (options.recoveryParam === undefined)
56987 this.recoveryParam = null;
56988 else
56989 this.recoveryParam = options.recoveryParam;
56990 }
56991 module.exports = Signature;
56992
56993 function Position() {
56994 this.place = 0;
56995 }
56996
56997 function getLength(buf, p) {
56998 var initial = buf[p.place++];
56999 if (!(initial & 0x80)) {
57000 return initial;
57001 }
57002 var octetLen = initial & 0xf;
57003 var val = 0;
57004 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
57005 val <<= 8;
57006 val |= buf[off];
57007 }
57008 p.place = off;
57009 return val;
57010 }
57011
57012 function rmPadding(buf) {
57013 var i = 0;
57014 var len = buf.length - 1;
57015 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
57016 i++;
57017 }
57018 if (i === 0) {
57019 return buf;
57020 }
57021 return buf.slice(i);
57022 }
57023
57024 Signature.prototype._importDER = function _importDER(data, enc) {
57025 data = utils.toArray(data, enc);
57026 var p = new Position();
57027 if (data[p.place++] !== 0x30) {
57028 return false;
57029 }
57030 var len = getLength(data, p);
57031 if ((len + p.place) !== data.length) {
57032 return false;
57033 }
57034 if (data[p.place++] !== 0x02) {
57035 return false;
57036 }
57037 var rlen = getLength(data, p);
57038 var r = data.slice(p.place, rlen + p.place);
57039 p.place += rlen;
57040 if (data[p.place++] !== 0x02) {
57041 return false;
57042 }
57043 var slen = getLength(data, p);
57044 if (data.length !== slen + p.place) {
57045 return false;
57046 }
57047 var s = data.slice(p.place, slen + p.place);
57048 if (r[0] === 0 && (r[1] & 0x80)) {
57049 r = r.slice(1);
57050 }
57051 if (s[0] === 0 && (s[1] & 0x80)) {
57052 s = s.slice(1);
57053 }
57054
57055 this.r = new BN(r);
57056 this.s = new BN(s);
57057 this.recoveryParam = null;
57058
57059 return true;
57060 };
57061
57062 function constructLength(arr, len) {
57063 if (len < 0x80) {
57064 arr.push(len);
57065 return;
57066 }
57067 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
57068 arr.push(octets | 0x80);
57069 while (--octets) {
57070 arr.push((len >>> (octets << 3)) & 0xff);
57071 }
57072 arr.push(len);
57073 }
57074
57075 Signature.prototype.toDER = function toDER(enc) {
57076 var r = this.r.toArray();
57077 var s = this.s.toArray();
57078
57079 // Pad values
57080 if (r[0] & 0x80)
57081 r = [ 0 ].concat(r);
57082 // Pad values
57083 if (s[0] & 0x80)
57084 s = [ 0 ].concat(s);
57085
57086 r = rmPadding(r);
57087 s = rmPadding(s);
57088
57089 while (!s[0] && !(s[1] & 0x80)) {
57090 s = s.slice(1);
57091 }
57092 var arr = [ 0x02 ];
57093 constructLength(arr, r.length);
57094 arr = arr.concat(r);
57095 arr.push(0x02);
57096 constructLength(arr, s.length);
57097 var backHalf = arr.concat(s);
57098 var res = [ 0x30 ];
57099 constructLength(res, backHalf.length);
57100 res = res.concat(backHalf);
57101 return utils.encode(res, enc);
57102 };
57103
57104 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
57105 'use strict';
57106
57107 var hash = require('hash.js');
57108 var elliptic = require('../../elliptic');
57109 var utils = elliptic.utils;
57110 var assert = utils.assert;
57111 var parseBytes = utils.parseBytes;
57112 var KeyPair = require('./key');
57113 var Signature = require('./signature');
57114
57115 function EDDSA(curve) {
57116 assert(curve === 'ed25519', 'only tested with ed25519 so far');
57117
57118 if (!(this instanceof EDDSA))
57119 return new EDDSA(curve);
57120
57121 var curve = elliptic.curves[curve].curve;
57122 this.curve = curve;
57123 this.g = curve.g;
57124 this.g.precompute(curve.n.bitLength() + 1);
57125
57126 this.pointClass = curve.point().constructor;
57127 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
57128 this.hash = hash.sha512;
57129 }
57130
57131 module.exports = EDDSA;
57132
57133 /**
57134 * @param {Array|String} message - message bytes
57135 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
57136 * @returns {Signature} - signature
57137 */
57138 EDDSA.prototype.sign = function sign(message, secret) {
57139 message = parseBytes(message);
57140 var key = this.keyFromSecret(secret);
57141 var r = this.hashInt(key.messagePrefix(), message);
57142 var R = this.g.mul(r);
57143 var Rencoded = this.encodePoint(R);
57144 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
57145 .mul(key.priv());
57146 var S = r.add(s_).umod(this.curve.n);
57147 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
57148 };
57149
57150 /**
57151 * @param {Array} message - message bytes
57152 * @param {Array|String|Signature} sig - sig bytes
57153 * @param {Array|String|Point|KeyPair} pub - public key
57154 * @returns {Boolean} - true if public key matches sig of message
57155 */
57156 EDDSA.prototype.verify = function verify(message, sig, pub) {
57157 message = parseBytes(message);
57158 sig = this.makeSignature(sig);
57159 var key = this.keyFromPublic(pub);
57160 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
57161 var SG = this.g.mul(sig.S());
57162 var RplusAh = sig.R().add(key.pub().mul(h));
57163 return RplusAh.eq(SG);
57164 };
57165
57166 EDDSA.prototype.hashInt = function hashInt() {
57167 var hash = this.hash();
57168 for (var i = 0; i < arguments.length; i++)
57169 hash.update(arguments[i]);
57170 return utils.intFromLE(hash.digest()).umod(this.curve.n);
57171 };
57172
57173 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
57174 return KeyPair.fromPublic(this, pub);
57175 };
57176
57177 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
57178 return KeyPair.fromSecret(this, secret);
57179 };
57180
57181 EDDSA.prototype.makeSignature = function makeSignature(sig) {
57182 if (sig instanceof Signature)
57183 return sig;
57184 return new Signature(this, sig);
57185 };
57186
57187 /**
57188 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
57189 *
57190 * EDDSA defines methods for encoding and decoding points and integers. These are
57191 * helper convenience methods, that pass along to utility functions implied
57192 * parameters.
57193 *
57194 */
57195 EDDSA.prototype.encodePoint = function encodePoint(point) {
57196 var enc = point.getY().toArray('le', this.encodingLength);
57197 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
57198 return enc;
57199 };
57200
57201 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
57202 bytes = utils.parseBytes(bytes);
57203
57204 var lastIx = bytes.length - 1;
57205 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
57206 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
57207
57208 var y = utils.intFromLE(normed);
57209 return this.curve.pointFromY(y, xIsOdd);
57210 };
57211
57212 EDDSA.prototype.encodeInt = function encodeInt(num) {
57213 return num.toArray('le', this.encodingLength);
57214 };
57215
57216 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
57217 return utils.intFromLE(bytes);
57218 };
57219
57220 EDDSA.prototype.isPoint = function isPoint(val) {
57221 return val instanceof this.pointClass;
57222 };
57223
57224 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
57225 'use strict';
57226
57227 var elliptic = require('../../elliptic');
57228 var utils = elliptic.utils;
57229 var assert = utils.assert;
57230 var parseBytes = utils.parseBytes;
57231 var cachedProperty = utils.cachedProperty;
57232
57233 /**
57234 * @param {EDDSA} eddsa - instance
57235 * @param {Object} params - public/private key parameters
57236 *
57237 * @param {Array<Byte>} [params.secret] - secret seed bytes
57238 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
57239 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
57240 *
57241 */
57242 function KeyPair(eddsa, params) {
57243 this.eddsa = eddsa;
57244 this._secret = parseBytes(params.secret);
57245 if (eddsa.isPoint(params.pub))
57246 this._pub = params.pub;
57247 else
57248 this._pubBytes = parseBytes(params.pub);
57249 }
57250
57251 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
57252 if (pub instanceof KeyPair)
57253 return pub;
57254 return new KeyPair(eddsa, { pub: pub });
57255 };
57256
57257 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
57258 if (secret instanceof KeyPair)
57259 return secret;
57260 return new KeyPair(eddsa, { secret: secret });
57261 };
57262
57263 KeyPair.prototype.secret = function secret() {
57264 return this._secret;
57265 };
57266
57267 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
57268 return this.eddsa.encodePoint(this.pub());
57269 });
57270
57271 cachedProperty(KeyPair, 'pub', function pub() {
57272 if (this._pubBytes)
57273 return this.eddsa.decodePoint(this._pubBytes);
57274 return this.eddsa.g.mul(this.priv());
57275 });
57276
57277 cachedProperty(KeyPair, 'privBytes', function privBytes() {
57278 var eddsa = this.eddsa;
57279 var hash = this.hash();
57280 var lastIx = eddsa.encodingLength - 1;
57281
57282 var a = hash.slice(0, eddsa.encodingLength);
57283 a[0] &= 248;
57284 a[lastIx] &= 127;
57285 a[lastIx] |= 64;
57286
57287 return a;
57288 });
57289
57290 cachedProperty(KeyPair, 'priv', function priv() {
57291 return this.eddsa.decodeInt(this.privBytes());
57292 });
57293
57294 cachedProperty(KeyPair, 'hash', function hash() {
57295 return this.eddsa.hash().update(this.secret()).digest();
57296 });
57297
57298 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
57299 return this.hash().slice(this.eddsa.encodingLength);
57300 });
57301
57302 KeyPair.prototype.sign = function sign(message) {
57303 assert(this._secret, 'KeyPair can only verify');
57304 return this.eddsa.sign(message, this);
57305 };
57306
57307 KeyPair.prototype.verify = function verify(message, sig) {
57308 return this.eddsa.verify(message, sig, this);
57309 };
57310
57311 KeyPair.prototype.getSecret = function getSecret(enc) {
57312 assert(this._secret, 'KeyPair is public only');
57313 return utils.encode(this.secret(), enc);
57314 };
57315
57316 KeyPair.prototype.getPublic = function getPublic(enc) {
57317 return utils.encode(this.pubBytes(), enc);
57318 };
57319
57320 module.exports = KeyPair;
57321
57322 },{"../../elliptic":67}],79:[function(require,module,exports){
57323 'use strict';
57324
57325 var BN = require('bn.js');
57326 var elliptic = require('../../elliptic');
57327 var utils = elliptic.utils;
57328 var assert = utils.assert;
57329 var cachedProperty = utils.cachedProperty;
57330 var parseBytes = utils.parseBytes;
57331
57332 /**
57333 * @param {EDDSA} eddsa - eddsa instance
57334 * @param {Array<Bytes>|Object} sig -
57335 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
57336 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
57337 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
57338 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
57339 */
57340 function Signature(eddsa, sig) {
57341 this.eddsa = eddsa;
57342
57343 if (typeof sig !== 'object')
57344 sig = parseBytes(sig);
57345
57346 if (Array.isArray(sig)) {
57347 sig = {
57348 R: sig.slice(0, eddsa.encodingLength),
57349 S: sig.slice(eddsa.encodingLength)
57350 };
57351 }
57352
57353 assert(sig.R && sig.S, 'Signature without R or S');
57354
57355 if (eddsa.isPoint(sig.R))
57356 this._R = sig.R;
57357 if (sig.S instanceof BN)
57358 this._S = sig.S;
57359
57360 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
57361 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
57362 }
57363
57364 cachedProperty(Signature, 'S', function S() {
57365 return this.eddsa.decodeInt(this.Sencoded());
57366 });
57367
57368 cachedProperty(Signature, 'R', function R() {
57369 return this.eddsa.decodePoint(this.Rencoded());
57370 });
57371
57372 cachedProperty(Signature, 'Rencoded', function Rencoded() {
57373 return this.eddsa.encodePoint(this.R());
57374 });
57375
57376 cachedProperty(Signature, 'Sencoded', function Sencoded() {
57377 return this.eddsa.encodeInt(this.S());
57378 });
57379
57380 Signature.prototype.toBytes = function toBytes() {
57381 return this.Rencoded().concat(this.Sencoded());
57382 };
57383
57384 Signature.prototype.toHex = function toHex() {
57385 return utils.encode(this.toBytes(), 'hex').toUpperCase();
57386 };
57387
57388 module.exports = Signature;
57389
57390 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
57391 module.exports = {
57392 doubles: {
57393 step: 4,
57394 points: [
57395 [
57396 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
57397 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
57398 ],
57399 [
57400 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
57401 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
57402 ],
57403 [
57404 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
57405 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
57406 ],
57407 [
57408 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
57409 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
57410 ],
57411 [
57412 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
57413 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
57414 ],
57415 [
57416 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
57417 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
57418 ],
57419 [
57420 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
57421 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
57422 ],
57423 [
57424 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
57425 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
57426 ],
57427 [
57428 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
57429 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
57430 ],
57431 [
57432 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
57433 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
57434 ],
57435 [
57436 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
57437 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
57438 ],
57439 [
57440 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
57441 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
57442 ],
57443 [
57444 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
57445 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
57446 ],
57447 [
57448 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
57449 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
57450 ],
57451 [
57452 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
57453 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
57454 ],
57455 [
57456 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
57457 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
57458 ],
57459 [
57460 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
57461 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
57462 ],
57463 [
57464 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
57465 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
57466 ],
57467 [
57468 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
57469 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
57470 ],
57471 [
57472 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
57473 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
57474 ],
57475 [
57476 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
57477 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
57478 ],
57479 [
57480 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
57481 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
57482 ],
57483 [
57484 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
57485 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
57486 ],
57487 [
57488 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
57489 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
57490 ],
57491 [
57492 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
57493 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
57494 ],
57495 [
57496 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
57497 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
57498 ],
57499 [
57500 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
57501 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
57502 ],
57503 [
57504 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
57505 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
57506 ],
57507 [
57508 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
57509 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
57510 ],
57511 [
57512 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
57513 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
57514 ],
57515 [
57516 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
57517 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
57518 ],
57519 [
57520 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
57521 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
57522 ],
57523 [
57524 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
57525 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
57526 ],
57527 [
57528 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
57529 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
57530 ],
57531 [
57532 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
57533 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
57534 ],
57535 [
57536 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
57537 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
57538 ],
57539 [
57540 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
57541 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
57542 ],
57543 [
57544 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
57545 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
57546 ],
57547 [
57548 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
57549 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
57550 ],
57551 [
57552 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
57553 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
57554 ],
57555 [
57556 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
57557 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
57558 ],
57559 [
57560 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
57561 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
57562 ],
57563 [
57564 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
57565 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
57566 ],
57567 [
57568 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
57569 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
57570 ],
57571 [
57572 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
57573 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
57574 ],
57575 [
57576 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
57577 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
57578 ],
57579 [
57580 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
57581 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
57582 ],
57583 [
57584 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
57585 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
57586 ],
57587 [
57588 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
57589 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
57590 ],
57591 [
57592 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
57593 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
57594 ],
57595 [
57596 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
57597 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
57598 ],
57599 [
57600 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
57601 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
57602 ],
57603 [
57604 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
57605 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
57606 ],
57607 [
57608 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
57609 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
57610 ],
57611 [
57612 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
57613 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
57614 ],
57615 [
57616 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
57617 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
57618 ],
57619 [
57620 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
57621 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
57622 ],
57623 [
57624 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
57625 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
57626 ],
57627 [
57628 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
57629 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
57630 ],
57631 [
57632 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
57633 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
57634 ],
57635 [
57636 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
57637 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
57638 ],
57639 [
57640 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
57641 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
57642 ],
57643 [
57644 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
57645 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
57646 ],
57647 [
57648 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
57649 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
57650 ],
57651 [
57652 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
57653 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
57654 ]
57655 ]
57656 },
57657 naf: {
57658 wnd: 7,
57659 points: [
57660 [
57661 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
57662 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
57663 ],
57664 [
57665 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
57666 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
57667 ],
57668 [
57669 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
57670 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
57671 ],
57672 [
57673 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
57674 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
57675 ],
57676 [
57677 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
57678 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
57679 ],
57680 [
57681 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
57682 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
57683 ],
57684 [
57685 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
57686 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
57687 ],
57688 [
57689 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
57690 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
57691 ],
57692 [
57693 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
57694 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
57695 ],
57696 [
57697 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
57698 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
57699 ],
57700 [
57701 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
57702 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
57703 ],
57704 [
57705 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
57706 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
57707 ],
57708 [
57709 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
57710 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
57711 ],
57712 [
57713 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
57714 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
57715 ],
57716 [
57717 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
57718 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
57719 ],
57720 [
57721 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
57722 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
57723 ],
57724 [
57725 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
57726 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
57727 ],
57728 [
57729 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
57730 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
57731 ],
57732 [
57733 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
57734 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
57735 ],
57736 [
57737 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
57738 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
57739 ],
57740 [
57741 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
57742 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
57743 ],
57744 [
57745 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
57746 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
57747 ],
57748 [
57749 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
57750 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
57751 ],
57752 [
57753 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
57754 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
57755 ],
57756 [
57757 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
57758 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
57759 ],
57760 [
57761 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
57762 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
57763 ],
57764 [
57765 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
57766 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
57767 ],
57768 [
57769 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
57770 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
57771 ],
57772 [
57773 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
57774 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
57775 ],
57776 [
57777 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
57778 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
57779 ],
57780 [
57781 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
57782 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
57783 ],
57784 [
57785 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
57786 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
57787 ],
57788 [
57789 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
57790 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
57791 ],
57792 [
57793 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
57794 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
57795 ],
57796 [
57797 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
57798 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
57799 ],
57800 [
57801 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
57802 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
57803 ],
57804 [
57805 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
57806 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
57807 ],
57808 [
57809 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
57810 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
57811 ],
57812 [
57813 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
57814 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
57815 ],
57816 [
57817 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
57818 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
57819 ],
57820 [
57821 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
57822 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
57823 ],
57824 [
57825 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
57826 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
57827 ],
57828 [
57829 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
57830 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
57831 ],
57832 [
57833 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
57834 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
57835 ],
57836 [
57837 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
57838 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
57839 ],
57840 [
57841 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
57842 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
57843 ],
57844 [
57845 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
57846 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
57847 ],
57848 [
57849 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
57850 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
57851 ],
57852 [
57853 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
57854 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
57855 ],
57856 [
57857 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
57858 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
57859 ],
57860 [
57861 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
57862 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
57863 ],
57864 [
57865 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
57866 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
57867 ],
57868 [
57869 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
57870 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
57871 ],
57872 [
57873 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
57874 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
57875 ],
57876 [
57877 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
57878 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
57879 ],
57880 [
57881 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
57882 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
57883 ],
57884 [
57885 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
57886 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
57887 ],
57888 [
57889 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
57890 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
57891 ],
57892 [
57893 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
57894 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
57895 ],
57896 [
57897 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
57898 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
57899 ],
57900 [
57901 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
57902 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
57903 ],
57904 [
57905 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
57906 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
57907 ],
57908 [
57909 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
57910 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
57911 ],
57912 [
57913 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
57914 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
57915 ],
57916 [
57917 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
57918 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
57919 ],
57920 [
57921 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
57922 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
57923 ],
57924 [
57925 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
57926 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
57927 ],
57928 [
57929 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
57930 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
57931 ],
57932 [
57933 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
57934 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
57935 ],
57936 [
57937 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
57938 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
57939 ],
57940 [
57941 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
57942 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
57943 ],
57944 [
57945 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
57946 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
57947 ],
57948 [
57949 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
57950 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
57951 ],
57952 [
57953 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
57954 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
57955 ],
57956 [
57957 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
57958 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
57959 ],
57960 [
57961 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
57962 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
57963 ],
57964 [
57965 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
57966 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
57967 ],
57968 [
57969 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
57970 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
57971 ],
57972 [
57973 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
57974 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
57975 ],
57976 [
57977 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
57978 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
57979 ],
57980 [
57981 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
57982 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
57983 ],
57984 [
57985 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
57986 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
57987 ],
57988 [
57989 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
57990 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
57991 ],
57992 [
57993 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
57994 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
57995 ],
57996 [
57997 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
57998 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
57999 ],
58000 [
58001 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
58002 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
58003 ],
58004 [
58005 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
58006 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
58007 ],
58008 [
58009 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
58010 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
58011 ],
58012 [
58013 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
58014 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
58015 ],
58016 [
58017 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
58018 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
58019 ],
58020 [
58021 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
58022 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
58023 ],
58024 [
58025 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
58026 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
58027 ],
58028 [
58029 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
58030 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
58031 ],
58032 [
58033 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
58034 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
58035 ],
58036 [
58037 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
58038 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
58039 ],
58040 [
58041 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
58042 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
58043 ],
58044 [
58045 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
58046 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
58047 ],
58048 [
58049 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
58050 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
58051 ],
58052 [
58053 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
58054 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
58055 ],
58056 [
58057 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
58058 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
58059 ],
58060 [
58061 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
58062 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
58063 ],
58064 [
58065 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
58066 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
58067 ],
58068 [
58069 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
58070 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
58071 ],
58072 [
58073 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
58074 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
58075 ],
58076 [
58077 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
58078 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
58079 ],
58080 [
58081 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
58082 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
58083 ],
58084 [
58085 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
58086 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
58087 ],
58088 [
58089 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
58090 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
58091 ],
58092 [
58093 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
58094 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
58095 ],
58096 [
58097 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
58098 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
58099 ],
58100 [
58101 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
58102 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
58103 ],
58104 [
58105 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
58106 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
58107 ],
58108 [
58109 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
58110 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
58111 ],
58112 [
58113 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
58114 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
58115 ],
58116 [
58117 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
58118 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
58119 ],
58120 [
58121 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
58122 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
58123 ],
58124 [
58125 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
58126 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
58127 ],
58128 [
58129 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
58130 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
58131 ],
58132 [
58133 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
58134 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
58135 ],
58136 [
58137 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
58138 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
58139 ],
58140 [
58141 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
58142 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
58143 ],
58144 [
58145 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
58146 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
58147 ],
58148 [
58149 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
58150 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
58151 ],
58152 [
58153 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
58154 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
58155 ],
58156 [
58157 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
58158 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
58159 ],
58160 [
58161 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
58162 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
58163 ],
58164 [
58165 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
58166 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
58167 ]
58168 ]
58169 }
58170 };
58171
58172 },{}],81:[function(require,module,exports){
58173 'use strict';
58174
58175 var utils = exports;
58176 var BN = require('bn.js');
58177 var minAssert = require('minimalistic-assert');
58178 var minUtils = require('minimalistic-crypto-utils');
58179
58180 utils.assert = minAssert;
58181 utils.toArray = minUtils.toArray;
58182 utils.zero2 = minUtils.zero2;
58183 utils.toHex = minUtils.toHex;
58184 utils.encode = minUtils.encode;
58185
58186 // Represent num in a w-NAF form
58187 function getNAF(num, w) {
58188 var naf = [];
58189 var ws = 1 << (w + 1);
58190 var k = num.clone();
58191 while (k.cmpn(1) >= 0) {
58192 var z;
58193 if (k.isOdd()) {
58194 var mod = k.andln(ws - 1);
58195 if (mod > (ws >> 1) - 1)
58196 z = (ws >> 1) - mod;
58197 else
58198 z = mod;
58199 k.isubn(z);
58200 } else {
58201 z = 0;
58202 }
58203 naf.push(z);
58204
58205 // Optimization, shift by word if possible
58206 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
58207 for (var i = 1; i < shift; i++)
58208 naf.push(0);
58209 k.iushrn(shift);
58210 }
58211
58212 return naf;
58213 }
58214 utils.getNAF = getNAF;
58215
58216 // Represent k1, k2 in a Joint Sparse Form
58217 function getJSF(k1, k2) {
58218 var jsf = [
58219 [],
58220 []
58221 ];
58222
58223 k1 = k1.clone();
58224 k2 = k2.clone();
58225 var d1 = 0;
58226 var d2 = 0;
58227 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
58228
58229 // First phase
58230 var m14 = (k1.andln(3) + d1) & 3;
58231 var m24 = (k2.andln(3) + d2) & 3;
58232 if (m14 === 3)
58233 m14 = -1;
58234 if (m24 === 3)
58235 m24 = -1;
58236 var u1;
58237 if ((m14 & 1) === 0) {
58238 u1 = 0;
58239 } else {
58240 var m8 = (k1.andln(7) + d1) & 7;
58241 if ((m8 === 3 || m8 === 5) && m24 === 2)
58242 u1 = -m14;
58243 else
58244 u1 = m14;
58245 }
58246 jsf[0].push(u1);
58247
58248 var u2;
58249 if ((m24 & 1) === 0) {
58250 u2 = 0;
58251 } else {
58252 var m8 = (k2.andln(7) + d2) & 7;
58253 if ((m8 === 3 || m8 === 5) && m14 === 2)
58254 u2 = -m24;
58255 else
58256 u2 = m24;
58257 }
58258 jsf[1].push(u2);
58259
58260 // Second phase
58261 if (2 * d1 === u1 + 1)
58262 d1 = 1 - d1;
58263 if (2 * d2 === u2 + 1)
58264 d2 = 1 - d2;
58265 k1.iushrn(1);
58266 k2.iushrn(1);
58267 }
58268
58269 return jsf;
58270 }
58271 utils.getJSF = getJSF;
58272
58273 function cachedProperty(obj, name, computer) {
58274 var key = '_' + name;
58275 obj.prototype[name] = function cachedProperty() {
58276 return this[key] !== undefined ? this[key] :
58277 this[key] = computer.call(this);
58278 };
58279 }
58280 utils.cachedProperty = cachedProperty;
58281
58282 function parseBytes(bytes) {
58283 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
58284 bytes;
58285 }
58286 utils.parseBytes = parseBytes;
58287
58288 function intFromLE(bytes) {
58289 return new BN(bytes, 'hex', 'le');
58290 }
58291 utils.intFromLE = intFromLE;
58292
58293
58294 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
58295 module.exports={
58296 "_args": [
58297 [
58298 "elliptic@^6.0.0",
58299 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
58300 ]
58301 ],
58302 "_from": "elliptic@>=6.0.0 <7.0.0",
58303 "_id": "elliptic@6.4.0",
58304 "_inCache": true,
58305 "_installable": true,
58306 "_location": "/browserify/elliptic",
58307 "_nodeVersion": "7.0.0",
58308 "_npmOperationalInternal": {
58309 "host": "packages-18-east.internal.npmjs.com",
58310 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
58311 },
58312 "_npmUser": {
58313 "email": "fedor@indutny.com",
58314 "name": "indutny"
58315 },
58316 "_npmVersion": "3.10.8",
58317 "_phantomChildren": {},
58318 "_requested": {
58319 "name": "elliptic",
58320 "raw": "elliptic@^6.0.0",
58321 "rawSpec": "^6.0.0",
58322 "scope": null,
58323 "spec": ">=6.0.0 <7.0.0",
58324 "type": "range"
58325 },
58326 "_requiredBy": [
58327 "/browserify/browserify-sign",
58328 "/browserify/create-ecdh"
58329 ],
58330 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
58331 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58332 "_shrinkwrap": null,
58333 "_spec": "elliptic@^6.0.0",
58334 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
58335 "author": {
58336 "email": "fedor@indutny.com",
58337 "name": "Fedor Indutny"
58338 },
58339 "bugs": {
58340 "url": "https://github.com/indutny/elliptic/issues"
58341 },
58342 "dependencies": {
58343 "bn.js": "^4.4.0",
58344 "brorand": "^1.0.1",
58345 "hash.js": "^1.0.0",
58346 "hmac-drbg": "^1.0.0",
58347 "inherits": "^2.0.1",
58348 "minimalistic-assert": "^1.0.0",
58349 "minimalistic-crypto-utils": "^1.0.0"
58350 },
58351 "description": "EC cryptography",
58352 "devDependencies": {
58353 "brfs": "^1.4.3",
58354 "coveralls": "^2.11.3",
58355 "grunt": "^0.4.5",
58356 "grunt-browserify": "^5.0.0",
58357 "grunt-cli": "^1.2.0",
58358 "grunt-contrib-connect": "^1.0.0",
58359 "grunt-contrib-copy": "^1.0.0",
58360 "grunt-contrib-uglify": "^1.0.1",
58361 "grunt-mocha-istanbul": "^3.0.1",
58362 "grunt-saucelabs": "^8.6.2",
58363 "istanbul": "^0.4.2",
58364 "jscs": "^2.9.0",
58365 "jshint": "^2.6.0",
58366 "mocha": "^2.1.0"
58367 },
58368 "directories": {},
58369 "dist": {
58370 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58371 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
58372 },
58373 "files": [
58374 "lib"
58375 ],
58376 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
58377 "homepage": "https://github.com/indutny/elliptic",
58378 "keywords": [
58379 "EC",
58380 "Elliptic",
58381 "curve",
58382 "Cryptography"
58383 ],
58384 "license": "MIT",
58385 "main": "lib/elliptic.js",
58386 "maintainers": [
58387 {
58388 "email": "fedor@indutny.com",
58389 "name": "indutny"
58390 }
58391 ],
58392 "name": "elliptic",
58393 "optionalDependencies": {},
58394 "readme": "ERROR: No README data found!",
58395 "repository": {
58396 "type": "git",
58397 "url": "git+ssh://git@github.com/indutny/elliptic.git"
58398 },
58399 "scripts": {
58400 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58401 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58402 "lint": "npm run jscs && npm run jshint",
58403 "test": "npm run lint && npm run unit",
58404 "unit": "istanbul test _mocha --reporter=spec test/index.js",
58405 "version": "grunt dist && git add dist/"
58406 },
58407 "version": "6.4.0"
58408 }
58409
58410 },{}],83:[function(require,module,exports){
58411 // Copyright Joyent, Inc. and other Node contributors.
58412 //
58413 // Permission is hereby granted, free of charge, to any person obtaining a
58414 // copy of this software and associated documentation files (the
58415 // "Software"), to deal in the Software without restriction, including
58416 // without limitation the rights to use, copy, modify, merge, publish,
58417 // distribute, sublicense, and/or sell copies of the Software, and to permit
58418 // persons to whom the Software is furnished to do so, subject to the
58419 // following conditions:
58420 //
58421 // The above copyright notice and this permission notice shall be included
58422 // in all copies or substantial portions of the Software.
58423 //
58424 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
58425 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58426 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
58427 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
58428 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
58429 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
58430 // USE OR OTHER DEALINGS IN THE SOFTWARE.
58431
58432 function EventEmitter() {
58433 this._events = this._events || {};
58434 this._maxListeners = this._maxListeners || undefined;
58435 }
58436 module.exports = EventEmitter;
58437
58438 // Backwards-compat with node 0.10.x
58439 EventEmitter.EventEmitter = EventEmitter;
58440
58441 EventEmitter.prototype._events = undefined;
58442 EventEmitter.prototype._maxListeners = undefined;
58443
58444 // By default EventEmitters will print a warning if more than 10 listeners are
58445 // added to it. This is a useful default which helps finding memory leaks.
58446 EventEmitter.defaultMaxListeners = 10;
58447
58448 // Obviously not all Emitters should be limited to 10. This function allows
58449 // that to be increased. Set to zero for unlimited.
58450 EventEmitter.prototype.setMaxListeners = function(n) {
58451 if (!isNumber(n) || n < 0 || isNaN(n))
58452 throw TypeError('n must be a positive number');
58453 this._maxListeners = n;
58454 return this;
58455 };
58456
58457 EventEmitter.prototype.emit = function(type) {
58458 var er, handler, len, args, i, listeners;
58459
58460 if (!this._events)
58461 this._events = {};
58462
58463 // If there is no 'error' event listener then throw.
58464 if (type === 'error') {
58465 if (!this._events.error ||
58466 (isObject(this._events.error) && !this._events.error.length)) {
58467 er = arguments[1];
58468 if (er instanceof Error) {
58469 throw er; // Unhandled 'error' event
58470 } else {
58471 // At least give some kind of context to the user
58472 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
58473 err.context = er;
58474 throw err;
58475 }
58476 }
58477 }
58478
58479 handler = this._events[type];
58480
58481 if (isUndefined(handler))
58482 return false;
58483
58484 if (isFunction(handler)) {
58485 switch (arguments.length) {
58486 // fast cases
58487 case 1:
58488 handler.call(this);
58489 break;
58490 case 2:
58491 handler.call(this, arguments[1]);
58492 break;
58493 case 3:
58494 handler.call(this, arguments[1], arguments[2]);
58495 break;
58496 // slower
58497 default:
58498 args = Array.prototype.slice.call(arguments, 1);
58499 handler.apply(this, args);
58500 }
58501 } else if (isObject(handler)) {
58502 args = Array.prototype.slice.call(arguments, 1);
58503 listeners = handler.slice();
58504 len = listeners.length;
58505 for (i = 0; i < len; i++)
58506 listeners[i].apply(this, args);
58507 }
58508
58509 return true;
58510 };
58511
58512 EventEmitter.prototype.addListener = function(type, listener) {
58513 var m;
58514
58515 if (!isFunction(listener))
58516 throw TypeError('listener must be a function');
58517
58518 if (!this._events)
58519 this._events = {};
58520
58521 // To avoid recursion in the case that type === "newListener"! Before
58522 // adding it to the listeners, first emit "newListener".
58523 if (this._events.newListener)
58524 this.emit('newListener', type,
58525 isFunction(listener.listener) ?
58526 listener.listener : listener);
58527
58528 if (!this._events[type])
58529 // Optimize the case of one listener. Don't need the extra array object.
58530 this._events[type] = listener;
58531 else if (isObject(this._events[type]))
58532 // If we've already got an array, just append.
58533 this._events[type].push(listener);
58534 else
58535 // Adding the second element, need to change to array.
58536 this._events[type] = [this._events[type], listener];
58537
58538 // Check for listener leak
58539 if (isObject(this._events[type]) && !this._events[type].warned) {
58540 if (!isUndefined(this._maxListeners)) {
58541 m = this._maxListeners;
58542 } else {
58543 m = EventEmitter.defaultMaxListeners;
58544 }
58545
58546 if (m && m > 0 && this._events[type].length > m) {
58547 this._events[type].warned = true;
58548 console.error('(node) warning: possible EventEmitter memory ' +
58549 'leak detected. %d listeners added. ' +
58550 'Use emitter.setMaxListeners() to increase limit.',
58551 this._events[type].length);
58552 if (typeof console.trace === 'function') {
58553 // not supported in IE 10
58554 console.trace();
58555 }
58556 }
58557 }
58558
58559 return this;
58560 };
58561
58562 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
58563
58564 EventEmitter.prototype.once = function(type, listener) {
58565 if (!isFunction(listener))
58566 throw TypeError('listener must be a function');
58567
58568 var fired = false;
58569
58570 function g() {
58571 this.removeListener(type, g);
58572
58573 if (!fired) {
58574 fired = true;
58575 listener.apply(this, arguments);
58576 }
58577 }
58578
58579 g.listener = listener;
58580 this.on(type, g);
58581
58582 return this;
58583 };
58584
58585 // emits a 'removeListener' event iff the listener was removed
58586 EventEmitter.prototype.removeListener = function(type, listener) {
58587 var list, position, length, i;
58588
58589 if (!isFunction(listener))
58590 throw TypeError('listener must be a function');
58591
58592 if (!this._events || !this._events[type])
58593 return this;
58594
58595 list = this._events[type];
58596 length = list.length;
58597 position = -1;
58598
58599 if (list === listener ||
58600 (isFunction(list.listener) && list.listener === listener)) {
58601 delete this._events[type];
58602 if (this._events.removeListener)
58603 this.emit('removeListener', type, listener);
58604
58605 } else if (isObject(list)) {
58606 for (i = length; i-- > 0;) {
58607 if (list[i] === listener ||
58608 (list[i].listener && list[i].listener === listener)) {
58609 position = i;
58610 break;
58611 }
58612 }
58613
58614 if (position < 0)
58615 return this;
58616
58617 if (list.length === 1) {
58618 list.length = 0;
58619 delete this._events[type];
58620 } else {
58621 list.splice(position, 1);
58622 }
58623
58624 if (this._events.removeListener)
58625 this.emit('removeListener', type, listener);
58626 }
58627
58628 return this;
58629 };
58630
58631 EventEmitter.prototype.removeAllListeners = function(type) {
58632 var key, listeners;
58633
58634 if (!this._events)
58635 return this;
58636
58637 // not listening for removeListener, no need to emit
58638 if (!this._events.removeListener) {
58639 if (arguments.length === 0)
58640 this._events = {};
58641 else if (this._events[type])
58642 delete this._events[type];
58643 return this;
58644 }
58645
58646 // emit removeListener for all listeners on all events
58647 if (arguments.length === 0) {
58648 for (key in this._events) {
58649 if (key === 'removeListener') continue;
58650 this.removeAllListeners(key);
58651 }
58652 this.removeAllListeners('removeListener');
58653 this._events = {};
58654 return this;
58655 }
58656
58657 listeners = this._events[type];
58658
58659 if (isFunction(listeners)) {
58660 this.removeListener(type, listeners);
58661 } else if (listeners) {
58662 // LIFO order
58663 while (listeners.length)
58664 this.removeListener(type, listeners[listeners.length - 1]);
58665 }
58666 delete this._events[type];
58667
58668 return this;
58669 };
58670
58671 EventEmitter.prototype.listeners = function(type) {
58672 var ret;
58673 if (!this._events || !this._events[type])
58674 ret = [];
58675 else if (isFunction(this._events[type]))
58676 ret = [this._events[type]];
58677 else
58678 ret = this._events[type].slice();
58679 return ret;
58680 };
58681
58682 EventEmitter.prototype.listenerCount = function(type) {
58683 if (this._events) {
58684 var evlistener = this._events[type];
58685
58686 if (isFunction(evlistener))
58687 return 1;
58688 else if (evlistener)
58689 return evlistener.length;
58690 }
58691 return 0;
58692 };
58693
58694 EventEmitter.listenerCount = function(emitter, type) {
58695 return emitter.listenerCount(type);
58696 };
58697
58698 function isFunction(arg) {
58699 return typeof arg === 'function';
58700 }
58701
58702 function isNumber(arg) {
58703 return typeof arg === 'number';
58704 }
58705
58706 function isObject(arg) {
58707 return typeof arg === 'object' && arg !== null;
58708 }
58709
58710 function isUndefined(arg) {
58711 return arg === void 0;
58712 }
58713
58714 },{}],84:[function(require,module,exports){
58715 (function (Buffer){
58716 var md5 = require('create-hash/md5')
58717 module.exports = EVP_BytesToKey
58718 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
58719 if (!Buffer.isBuffer(password)) {
58720 password = new Buffer(password, 'binary')
58721 }
58722 if (salt && !Buffer.isBuffer(salt)) {
58723 salt = new Buffer(salt, 'binary')
58724 }
58725 keyLen = keyLen / 8
58726 ivLen = ivLen || 0
58727 var ki = 0
58728 var ii = 0
58729 var key = new Buffer(keyLen)
58730 var iv = new Buffer(ivLen)
58731 var addmd = 0
58732 var md_buf
58733 var i
58734 var bufs = []
58735 while (true) {
58736 if (addmd++ > 0) {
58737 bufs.push(md_buf)
58738 }
58739 bufs.push(password)
58740 if (salt) {
58741 bufs.push(salt)
58742 }
58743 md_buf = md5(Buffer.concat(bufs))
58744 bufs = []
58745 i = 0
58746 if (keyLen > 0) {
58747 while (true) {
58748 if (keyLen === 0) {
58749 break
58750 }
58751 if (i === md_buf.length) {
58752 break
58753 }
58754 key[ki++] = md_buf[i]
58755 keyLen--
58756 i++
58757 }
58758 }
58759 if (ivLen > 0 && i !== md_buf.length) {
58760 while (true) {
58761 if (ivLen === 0) {
58762 break
58763 }
58764 if (i === md_buf.length) {
58765 break
58766 }
58767 iv[ii++] = md_buf[i]
58768 ivLen--
58769 i++
58770 }
58771 }
58772 if (keyLen === 0 && ivLen === 0) {
58773 break
58774 }
58775 }
58776 for (i = 0; i < md_buf.length; i++) {
58777 md_buf[i] = 0
58778 }
58779 return {
58780 key: key,
58781 iv: iv
58782 }
58783 }
58784
58785 }).call(this,require("buffer").Buffer)
58786 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
58787 (function (Buffer){
58788 'use strict'
58789 var Transform = require('stream').Transform
58790 var inherits = require('inherits')
58791
58792 function HashBase (blockSize) {
58793 Transform.call(this)
58794
58795 this._block = new Buffer(blockSize)
58796 this._blockSize = blockSize
58797 this._blockOffset = 0
58798 this._length = [0, 0, 0, 0]
58799
58800 this._finalized = false
58801 }
58802
58803 inherits(HashBase, Transform)
58804
58805 HashBase.prototype._transform = function (chunk, encoding, callback) {
58806 var error = null
58807 try {
58808 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
58809 this.update(chunk)
58810 } catch (err) {
58811 error = err
58812 }
58813
58814 callback(error)
58815 }
58816
58817 HashBase.prototype._flush = function (callback) {
58818 var error = null
58819 try {
58820 this.push(this._digest())
58821 } catch (err) {
58822 error = err
58823 }
58824
58825 callback(error)
58826 }
58827
58828 HashBase.prototype.update = function (data, encoding) {
58829 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
58830 if (this._finalized) throw new Error('Digest already called')
58831 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
58832
58833 // consume data
58834 var block = this._block
58835 var offset = 0
58836 while (this._blockOffset + data.length - offset >= this._blockSize) {
58837 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
58838 this._update()
58839 this._blockOffset = 0
58840 }
58841 while (offset < data.length) block[this._blockOffset++] = data[offset++]
58842
58843 // update length
58844 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
58845 this._length[j] += carry
58846 carry = (this._length[j] / 0x0100000000) | 0
58847 if (carry > 0) this._length[j] -= 0x0100000000 * carry
58848 }
58849
58850 return this
58851 }
58852
58853 HashBase.prototype._update = function (data) {
58854 throw new Error('_update is not implemented')
58855 }
58856
58857 HashBase.prototype.digest = function (encoding) {
58858 if (this._finalized) throw new Error('Digest already called')
58859 this._finalized = true
58860
58861 var digest = this._digest()
58862 if (encoding !== undefined) digest = digest.toString(encoding)
58863 return digest
58864 }
58865
58866 HashBase.prototype._digest = function () {
58867 throw new Error('_digest is not implemented')
58868 }
58869
58870 module.exports = HashBase
58871
58872 }).call(this,require("buffer").Buffer)
58873 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
58874 var hash = exports;
58875
58876 hash.utils = require('./hash/utils');
58877 hash.common = require('./hash/common');
58878 hash.sha = require('./hash/sha');
58879 hash.ripemd = require('./hash/ripemd');
58880 hash.hmac = require('./hash/hmac');
58881
58882 // Proxy hash functions to the main object
58883 hash.sha1 = hash.sha.sha1;
58884 hash.sha256 = hash.sha.sha256;
58885 hash.sha224 = hash.sha.sha224;
58886 hash.sha384 = hash.sha.sha384;
58887 hash.sha512 = hash.sha.sha512;
58888 hash.ripemd160 = hash.ripemd.ripemd160;
58889
58890 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
58891 var hash = require('../hash');
58892 var utils = hash.utils;
58893 var assert = utils.assert;
58894
58895 function BlockHash() {
58896 this.pending = null;
58897 this.pendingTotal = 0;
58898 this.blockSize = this.constructor.blockSize;
58899 this.outSize = this.constructor.outSize;
58900 this.hmacStrength = this.constructor.hmacStrength;
58901 this.padLength = this.constructor.padLength / 8;
58902 this.endian = 'big';
58903
58904 this._delta8 = this.blockSize / 8;
58905 this._delta32 = this.blockSize / 32;
58906 }
58907 exports.BlockHash = BlockHash;
58908
58909 BlockHash.prototype.update = function update(msg, enc) {
58910 // Convert message to array, pad it, and join into 32bit blocks
58911 msg = utils.toArray(msg, enc);
58912 if (!this.pending)
58913 this.pending = msg;
58914 else
58915 this.pending = this.pending.concat(msg);
58916 this.pendingTotal += msg.length;
58917
58918 // Enough data, try updating
58919 if (this.pending.length >= this._delta8) {
58920 msg = this.pending;
58921
58922 // Process pending data in blocks
58923 var r = msg.length % this._delta8;
58924 this.pending = msg.slice(msg.length - r, msg.length);
58925 if (this.pending.length === 0)
58926 this.pending = null;
58927
58928 msg = utils.join32(msg, 0, msg.length - r, this.endian);
58929 for (var i = 0; i < msg.length; i += this._delta32)
58930 this._update(msg, i, i + this._delta32);
58931 }
58932
58933 return this;
58934 };
58935
58936 BlockHash.prototype.digest = function digest(enc) {
58937 this.update(this._pad());
58938 assert(this.pending === null);
58939
58940 return this._digest(enc);
58941 };
58942
58943 BlockHash.prototype._pad = function pad() {
58944 var len = this.pendingTotal;
58945 var bytes = this._delta8;
58946 var k = bytes - ((len + this.padLength) % bytes);
58947 var res = new Array(k + this.padLength);
58948 res[0] = 0x80;
58949 for (var i = 1; i < k; i++)
58950 res[i] = 0;
58951
58952 // Append length
58953 len <<= 3;
58954 if (this.endian === 'big') {
58955 for (var t = 8; t < this.padLength; t++)
58956 res[i++] = 0;
58957
58958 res[i++] = 0;
58959 res[i++] = 0;
58960 res[i++] = 0;
58961 res[i++] = 0;
58962 res[i++] = (len >>> 24) & 0xff;
58963 res[i++] = (len >>> 16) & 0xff;
58964 res[i++] = (len >>> 8) & 0xff;
58965 res[i++] = len & 0xff;
58966 } else {
58967 res[i++] = len & 0xff;
58968 res[i++] = (len >>> 8) & 0xff;
58969 res[i++] = (len >>> 16) & 0xff;
58970 res[i++] = (len >>> 24) & 0xff;
58971 res[i++] = 0;
58972 res[i++] = 0;
58973 res[i++] = 0;
58974 res[i++] = 0;
58975
58976 for (var t = 8; t < this.padLength; t++)
58977 res[i++] = 0;
58978 }
58979
58980 return res;
58981 };
58982
58983 },{"../hash":86}],88:[function(require,module,exports){
58984 var hmac = exports;
58985
58986 var hash = require('../hash');
58987 var utils = hash.utils;
58988 var assert = utils.assert;
58989
58990 function Hmac(hash, key, enc) {
58991 if (!(this instanceof Hmac))
58992 return new Hmac(hash, key, enc);
58993 this.Hash = hash;
58994 this.blockSize = hash.blockSize / 8;
58995 this.outSize = hash.outSize / 8;
58996 this.inner = null;
58997 this.outer = null;
58998
58999 this._init(utils.toArray(key, enc));
59000 }
59001 module.exports = Hmac;
59002
59003 Hmac.prototype._init = function init(key) {
59004 // Shorten key, if needed
59005 if (key.length > this.blockSize)
59006 key = new this.Hash().update(key).digest();
59007 assert(key.length <= this.blockSize);
59008
59009 // Add padding to key
59010 for (var i = key.length; i < this.blockSize; i++)
59011 key.push(0);
59012
59013 for (var i = 0; i < key.length; i++)
59014 key[i] ^= 0x36;
59015 this.inner = new this.Hash().update(key);
59016
59017 // 0x36 ^ 0x5c = 0x6a
59018 for (var i = 0; i < key.length; i++)
59019 key[i] ^= 0x6a;
59020 this.outer = new this.Hash().update(key);
59021 };
59022
59023 Hmac.prototype.update = function update(msg, enc) {
59024 this.inner.update(msg, enc);
59025 return this;
59026 };
59027
59028 Hmac.prototype.digest = function digest(enc) {
59029 this.outer.update(this.inner.digest());
59030 return this.outer.digest(enc);
59031 };
59032
59033 },{"../hash":86}],89:[function(require,module,exports){
59034 var hash = require('../hash');
59035 var utils = hash.utils;
59036
59037 var rotl32 = utils.rotl32;
59038 var sum32 = utils.sum32;
59039 var sum32_3 = utils.sum32_3;
59040 var sum32_4 = utils.sum32_4;
59041 var BlockHash = hash.common.BlockHash;
59042
59043 function RIPEMD160() {
59044 if (!(this instanceof RIPEMD160))
59045 return new RIPEMD160();
59046
59047 BlockHash.call(this);
59048
59049 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
59050 this.endian = 'little';
59051 }
59052 utils.inherits(RIPEMD160, BlockHash);
59053 exports.ripemd160 = RIPEMD160;
59054
59055 RIPEMD160.blockSize = 512;
59056 RIPEMD160.outSize = 160;
59057 RIPEMD160.hmacStrength = 192;
59058 RIPEMD160.padLength = 64;
59059
59060 RIPEMD160.prototype._update = function update(msg, start) {
59061 var A = this.h[0];
59062 var B = this.h[1];
59063 var C = this.h[2];
59064 var D = this.h[3];
59065 var E = this.h[4];
59066 var Ah = A;
59067 var Bh = B;
59068 var Ch = C;
59069 var Dh = D;
59070 var Eh = E;
59071 for (var j = 0; j < 80; j++) {
59072 var T = sum32(
59073 rotl32(
59074 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
59075 s[j]),
59076 E);
59077 A = E;
59078 E = D;
59079 D = rotl32(C, 10);
59080 C = B;
59081 B = T;
59082 T = sum32(
59083 rotl32(
59084 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
59085 sh[j]),
59086 Eh);
59087 Ah = Eh;
59088 Eh = Dh;
59089 Dh = rotl32(Ch, 10);
59090 Ch = Bh;
59091 Bh = T;
59092 }
59093 T = sum32_3(this.h[1], C, Dh);
59094 this.h[1] = sum32_3(this.h[2], D, Eh);
59095 this.h[2] = sum32_3(this.h[3], E, Ah);
59096 this.h[3] = sum32_3(this.h[4], A, Bh);
59097 this.h[4] = sum32_3(this.h[0], B, Ch);
59098 this.h[0] = T;
59099 };
59100
59101 RIPEMD160.prototype._digest = function digest(enc) {
59102 if (enc === 'hex')
59103 return utils.toHex32(this.h, 'little');
59104 else
59105 return utils.split32(this.h, 'little');
59106 };
59107
59108 function f(j, x, y, z) {
59109 if (j <= 15)
59110 return x ^ y ^ z;
59111 else if (j <= 31)
59112 return (x & y) | ((~x) & z);
59113 else if (j <= 47)
59114 return (x | (~y)) ^ z;
59115 else if (j <= 63)
59116 return (x & z) | (y & (~z));
59117 else
59118 return x ^ (y | (~z));
59119 }
59120
59121 function K(j) {
59122 if (j <= 15)
59123 return 0x00000000;
59124 else if (j <= 31)
59125 return 0x5a827999;
59126 else if (j <= 47)
59127 return 0x6ed9eba1;
59128 else if (j <= 63)
59129 return 0x8f1bbcdc;
59130 else
59131 return 0xa953fd4e;
59132 }
59133
59134 function Kh(j) {
59135 if (j <= 15)
59136 return 0x50a28be6;
59137 else if (j <= 31)
59138 return 0x5c4dd124;
59139 else if (j <= 47)
59140 return 0x6d703ef3;
59141 else if (j <= 63)
59142 return 0x7a6d76e9;
59143 else
59144 return 0x00000000;
59145 }
59146
59147 var r = [
59148 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
59149 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
59150 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
59151 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
59152 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
59153 ];
59154
59155 var rh = [
59156 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
59157 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
59158 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
59159 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
59160 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
59161 ];
59162
59163 var s = [
59164 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
59165 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
59166 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
59167 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
59168 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
59169 ];
59170
59171 var sh = [
59172 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
59173 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
59174 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
59175 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
59176 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
59177 ];
59178
59179 },{"../hash":86}],90:[function(require,module,exports){
59180 var hash = require('../hash');
59181 var utils = hash.utils;
59182 var assert = utils.assert;
59183
59184 var rotr32 = utils.rotr32;
59185 var rotl32 = utils.rotl32;
59186 var sum32 = utils.sum32;
59187 var sum32_4 = utils.sum32_4;
59188 var sum32_5 = utils.sum32_5;
59189 var rotr64_hi = utils.rotr64_hi;
59190 var rotr64_lo = utils.rotr64_lo;
59191 var shr64_hi = utils.shr64_hi;
59192 var shr64_lo = utils.shr64_lo;
59193 var sum64 = utils.sum64;
59194 var sum64_hi = utils.sum64_hi;
59195 var sum64_lo = utils.sum64_lo;
59196 var sum64_4_hi = utils.sum64_4_hi;
59197 var sum64_4_lo = utils.sum64_4_lo;
59198 var sum64_5_hi = utils.sum64_5_hi;
59199 var sum64_5_lo = utils.sum64_5_lo;
59200 var BlockHash = hash.common.BlockHash;
59201
59202 var sha256_K = [
59203 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
59204 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
59205 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
59206 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
59207 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
59208 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
59209 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
59210 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
59211 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
59212 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
59213 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
59214 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
59215 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
59216 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
59217 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
59218 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
59219 ];
59220
59221 var sha512_K = [
59222 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
59223 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
59224 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
59225 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
59226 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
59227 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
59228 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
59229 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
59230 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
59231 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
59232 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
59233 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
59234 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
59235 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
59236 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
59237 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
59238 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
59239 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
59240 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
59241 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
59242 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
59243 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
59244 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
59245 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
59246 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
59247 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
59248 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
59249 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
59250 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
59251 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
59252 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
59253 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
59254 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
59255 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
59256 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
59257 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
59258 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
59259 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
59260 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
59261 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
59262 ];
59263
59264 var sha1_K = [
59265 0x5A827999, 0x6ED9EBA1,
59266 0x8F1BBCDC, 0xCA62C1D6
59267 ];
59268
59269 function SHA256() {
59270 if (!(this instanceof SHA256))
59271 return new SHA256();
59272
59273 BlockHash.call(this);
59274 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
59275 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
59276 this.k = sha256_K;
59277 this.W = new Array(64);
59278 }
59279 utils.inherits(SHA256, BlockHash);
59280 exports.sha256 = SHA256;
59281
59282 SHA256.blockSize = 512;
59283 SHA256.outSize = 256;
59284 SHA256.hmacStrength = 192;
59285 SHA256.padLength = 64;
59286
59287 SHA256.prototype._update = function _update(msg, start) {
59288 var W = this.W;
59289
59290 for (var i = 0; i < 16; i++)
59291 W[i] = msg[start + i];
59292 for (; i < W.length; i++)
59293 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
59294
59295 var a = this.h[0];
59296 var b = this.h[1];
59297 var c = this.h[2];
59298 var d = this.h[3];
59299 var e = this.h[4];
59300 var f = this.h[5];
59301 var g = this.h[6];
59302 var h = this.h[7];
59303
59304 assert(this.k.length === W.length);
59305 for (var i = 0; i < W.length; i++) {
59306 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
59307 var T2 = sum32(s0_256(a), maj32(a, b, c));
59308 h = g;
59309 g = f;
59310 f = e;
59311 e = sum32(d, T1);
59312 d = c;
59313 c = b;
59314 b = a;
59315 a = sum32(T1, T2);
59316 }
59317
59318 this.h[0] = sum32(this.h[0], a);
59319 this.h[1] = sum32(this.h[1], b);
59320 this.h[2] = sum32(this.h[2], c);
59321 this.h[3] = sum32(this.h[3], d);
59322 this.h[4] = sum32(this.h[4], e);
59323 this.h[5] = sum32(this.h[5], f);
59324 this.h[6] = sum32(this.h[6], g);
59325 this.h[7] = sum32(this.h[7], h);
59326 };
59327
59328 SHA256.prototype._digest = function digest(enc) {
59329 if (enc === 'hex')
59330 return utils.toHex32(this.h, 'big');
59331 else
59332 return utils.split32(this.h, 'big');
59333 };
59334
59335 function SHA224() {
59336 if (!(this instanceof SHA224))
59337 return new SHA224();
59338
59339 SHA256.call(this);
59340 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
59341 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
59342 }
59343 utils.inherits(SHA224, SHA256);
59344 exports.sha224 = SHA224;
59345
59346 SHA224.blockSize = 512;
59347 SHA224.outSize = 224;
59348 SHA224.hmacStrength = 192;
59349 SHA224.padLength = 64;
59350
59351 SHA224.prototype._digest = function digest(enc) {
59352 // Just truncate output
59353 if (enc === 'hex')
59354 return utils.toHex32(this.h.slice(0, 7), 'big');
59355 else
59356 return utils.split32(this.h.slice(0, 7), 'big');
59357 };
59358
59359 function SHA512() {
59360 if (!(this instanceof SHA512))
59361 return new SHA512();
59362
59363 BlockHash.call(this);
59364 this.h = [ 0x6a09e667, 0xf3bcc908,
59365 0xbb67ae85, 0x84caa73b,
59366 0x3c6ef372, 0xfe94f82b,
59367 0xa54ff53a, 0x5f1d36f1,
59368 0x510e527f, 0xade682d1,
59369 0x9b05688c, 0x2b3e6c1f,
59370 0x1f83d9ab, 0xfb41bd6b,
59371 0x5be0cd19, 0x137e2179 ];
59372 this.k = sha512_K;
59373 this.W = new Array(160);
59374 }
59375 utils.inherits(SHA512, BlockHash);
59376 exports.sha512 = SHA512;
59377
59378 SHA512.blockSize = 1024;
59379 SHA512.outSize = 512;
59380 SHA512.hmacStrength = 192;
59381 SHA512.padLength = 128;
59382
59383 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
59384 var W = this.W;
59385
59386 // 32 x 32bit words
59387 for (var i = 0; i < 32; i++)
59388 W[i] = msg[start + i];
59389 for (; i < W.length; i += 2) {
59390 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
59391 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
59392 var c1_hi = W[i - 14]; // i - 7
59393 var c1_lo = W[i - 13];
59394 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
59395 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
59396 var c3_hi = W[i - 32]; // i - 16
59397 var c3_lo = W[i - 31];
59398
59399 W[i] = sum64_4_hi(c0_hi, c0_lo,
59400 c1_hi, c1_lo,
59401 c2_hi, c2_lo,
59402 c3_hi, c3_lo);
59403 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
59404 c1_hi, c1_lo,
59405 c2_hi, c2_lo,
59406 c3_hi, c3_lo);
59407 }
59408 };
59409
59410 SHA512.prototype._update = function _update(msg, start) {
59411 this._prepareBlock(msg, start);
59412
59413 var W = this.W;
59414
59415 var ah = this.h[0];
59416 var al = this.h[1];
59417 var bh = this.h[2];
59418 var bl = this.h[3];
59419 var ch = this.h[4];
59420 var cl = this.h[5];
59421 var dh = this.h[6];
59422 var dl = this.h[7];
59423 var eh = this.h[8];
59424 var el = this.h[9];
59425 var fh = this.h[10];
59426 var fl = this.h[11];
59427 var gh = this.h[12];
59428 var gl = this.h[13];
59429 var hh = this.h[14];
59430 var hl = this.h[15];
59431
59432 assert(this.k.length === W.length);
59433 for (var i = 0; i < W.length; i += 2) {
59434 var c0_hi = hh;
59435 var c0_lo = hl;
59436 var c1_hi = s1_512_hi(eh, el);
59437 var c1_lo = s1_512_lo(eh, el);
59438 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
59439 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
59440 var c3_hi = this.k[i];
59441 var c3_lo = this.k[i + 1];
59442 var c4_hi = W[i];
59443 var c4_lo = W[i + 1];
59444
59445 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
59446 c1_hi, c1_lo,
59447 c2_hi, c2_lo,
59448 c3_hi, c3_lo,
59449 c4_hi, c4_lo);
59450 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
59451 c1_hi, c1_lo,
59452 c2_hi, c2_lo,
59453 c3_hi, c3_lo,
59454 c4_hi, c4_lo);
59455
59456 var c0_hi = s0_512_hi(ah, al);
59457 var c0_lo = s0_512_lo(ah, al);
59458 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
59459 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
59460
59461 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
59462 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
59463
59464 hh = gh;
59465 hl = gl;
59466
59467 gh = fh;
59468 gl = fl;
59469
59470 fh = eh;
59471 fl = el;
59472
59473 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
59474 el = sum64_lo(dl, dl, T1_hi, T1_lo);
59475
59476 dh = ch;
59477 dl = cl;
59478
59479 ch = bh;
59480 cl = bl;
59481
59482 bh = ah;
59483 bl = al;
59484
59485 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
59486 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
59487 }
59488
59489 sum64(this.h, 0, ah, al);
59490 sum64(this.h, 2, bh, bl);
59491 sum64(this.h, 4, ch, cl);
59492 sum64(this.h, 6, dh, dl);
59493 sum64(this.h, 8, eh, el);
59494 sum64(this.h, 10, fh, fl);
59495 sum64(this.h, 12, gh, gl);
59496 sum64(this.h, 14, hh, hl);
59497 };
59498
59499 SHA512.prototype._digest = function digest(enc) {
59500 if (enc === 'hex')
59501 return utils.toHex32(this.h, 'big');
59502 else
59503 return utils.split32(this.h, 'big');
59504 };
59505
59506 function SHA384() {
59507 if (!(this instanceof SHA384))
59508 return new SHA384();
59509
59510 SHA512.call(this);
59511 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
59512 0x629a292a, 0x367cd507,
59513 0x9159015a, 0x3070dd17,
59514 0x152fecd8, 0xf70e5939,
59515 0x67332667, 0xffc00b31,
59516 0x8eb44a87, 0x68581511,
59517 0xdb0c2e0d, 0x64f98fa7,
59518 0x47b5481d, 0xbefa4fa4 ];
59519 }
59520 utils.inherits(SHA384, SHA512);
59521 exports.sha384 = SHA384;
59522
59523 SHA384.blockSize = 1024;
59524 SHA384.outSize = 384;
59525 SHA384.hmacStrength = 192;
59526 SHA384.padLength = 128;
59527
59528 SHA384.prototype._digest = function digest(enc) {
59529 if (enc === 'hex')
59530 return utils.toHex32(this.h.slice(0, 12), 'big');
59531 else
59532 return utils.split32(this.h.slice(0, 12), 'big');
59533 };
59534
59535 function SHA1() {
59536 if (!(this instanceof SHA1))
59537 return new SHA1();
59538
59539 BlockHash.call(this);
59540 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
59541 0x10325476, 0xc3d2e1f0 ];
59542 this.W = new Array(80);
59543 }
59544
59545 utils.inherits(SHA1, BlockHash);
59546 exports.sha1 = SHA1;
59547
59548 SHA1.blockSize = 512;
59549 SHA1.outSize = 160;
59550 SHA1.hmacStrength = 80;
59551 SHA1.padLength = 64;
59552
59553 SHA1.prototype._update = function _update(msg, start) {
59554 var W = this.W;
59555
59556 for (var i = 0; i < 16; i++)
59557 W[i] = msg[start + i];
59558
59559 for(; i < W.length; i++)
59560 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
59561
59562 var a = this.h[0];
59563 var b = this.h[1];
59564 var c = this.h[2];
59565 var d = this.h[3];
59566 var e = this.h[4];
59567
59568 for (var i = 0; i < W.length; i++) {
59569 var s = ~~(i / 20);
59570 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
59571 e = d;
59572 d = c;
59573 c = rotl32(b, 30);
59574 b = a;
59575 a = t;
59576 }
59577
59578 this.h[0] = sum32(this.h[0], a);
59579 this.h[1] = sum32(this.h[1], b);
59580 this.h[2] = sum32(this.h[2], c);
59581 this.h[3] = sum32(this.h[3], d);
59582 this.h[4] = sum32(this.h[4], e);
59583 };
59584
59585 SHA1.prototype._digest = function digest(enc) {
59586 if (enc === 'hex')
59587 return utils.toHex32(this.h, 'big');
59588 else
59589 return utils.split32(this.h, 'big');
59590 };
59591
59592 function ch32(x, y, z) {
59593 return (x & y) ^ ((~x) & z);
59594 }
59595
59596 function maj32(x, y, z) {
59597 return (x & y) ^ (x & z) ^ (y & z);
59598 }
59599
59600 function p32(x, y, z) {
59601 return x ^ y ^ z;
59602 }
59603
59604 function s0_256(x) {
59605 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
59606 }
59607
59608 function s1_256(x) {
59609 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
59610 }
59611
59612 function g0_256(x) {
59613 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
59614 }
59615
59616 function g1_256(x) {
59617 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
59618 }
59619
59620 function ft_1(s, x, y, z) {
59621 if (s === 0)
59622 return ch32(x, y, z);
59623 if (s === 1 || s === 3)
59624 return p32(x, y, z);
59625 if (s === 2)
59626 return maj32(x, y, z);
59627 }
59628
59629 function ch64_hi(xh, xl, yh, yl, zh, zl) {
59630 var r = (xh & yh) ^ ((~xh) & zh);
59631 if (r < 0)
59632 r += 0x100000000;
59633 return r;
59634 }
59635
59636 function ch64_lo(xh, xl, yh, yl, zh, zl) {
59637 var r = (xl & yl) ^ ((~xl) & zl);
59638 if (r < 0)
59639 r += 0x100000000;
59640 return r;
59641 }
59642
59643 function maj64_hi(xh, xl, yh, yl, zh, zl) {
59644 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
59645 if (r < 0)
59646 r += 0x100000000;
59647 return r;
59648 }
59649
59650 function maj64_lo(xh, xl, yh, yl, zh, zl) {
59651 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
59652 if (r < 0)
59653 r += 0x100000000;
59654 return r;
59655 }
59656
59657 function s0_512_hi(xh, xl) {
59658 var c0_hi = rotr64_hi(xh, xl, 28);
59659 var c1_hi = rotr64_hi(xl, xh, 2); // 34
59660 var c2_hi = rotr64_hi(xl, xh, 7); // 39
59661
59662 var r = c0_hi ^ c1_hi ^ c2_hi;
59663 if (r < 0)
59664 r += 0x100000000;
59665 return r;
59666 }
59667
59668 function s0_512_lo(xh, xl) {
59669 var c0_lo = rotr64_lo(xh, xl, 28);
59670 var c1_lo = rotr64_lo(xl, xh, 2); // 34
59671 var c2_lo = rotr64_lo(xl, xh, 7); // 39
59672
59673 var r = c0_lo ^ c1_lo ^ c2_lo;
59674 if (r < 0)
59675 r += 0x100000000;
59676 return r;
59677 }
59678
59679 function s1_512_hi(xh, xl) {
59680 var c0_hi = rotr64_hi(xh, xl, 14);
59681 var c1_hi = rotr64_hi(xh, xl, 18);
59682 var c2_hi = rotr64_hi(xl, xh, 9); // 41
59683
59684 var r = c0_hi ^ c1_hi ^ c2_hi;
59685 if (r < 0)
59686 r += 0x100000000;
59687 return r;
59688 }
59689
59690 function s1_512_lo(xh, xl) {
59691 var c0_lo = rotr64_lo(xh, xl, 14);
59692 var c1_lo = rotr64_lo(xh, xl, 18);
59693 var c2_lo = rotr64_lo(xl, xh, 9); // 41
59694
59695 var r = c0_lo ^ c1_lo ^ c2_lo;
59696 if (r < 0)
59697 r += 0x100000000;
59698 return r;
59699 }
59700
59701 function g0_512_hi(xh, xl) {
59702 var c0_hi = rotr64_hi(xh, xl, 1);
59703 var c1_hi = rotr64_hi(xh, xl, 8);
59704 var c2_hi = shr64_hi(xh, xl, 7);
59705
59706 var r = c0_hi ^ c1_hi ^ c2_hi;
59707 if (r < 0)
59708 r += 0x100000000;
59709 return r;
59710 }
59711
59712 function g0_512_lo(xh, xl) {
59713 var c0_lo = rotr64_lo(xh, xl, 1);
59714 var c1_lo = rotr64_lo(xh, xl, 8);
59715 var c2_lo = shr64_lo(xh, xl, 7);
59716
59717 var r = c0_lo ^ c1_lo ^ c2_lo;
59718 if (r < 0)
59719 r += 0x100000000;
59720 return r;
59721 }
59722
59723 function g1_512_hi(xh, xl) {
59724 var c0_hi = rotr64_hi(xh, xl, 19);
59725 var c1_hi = rotr64_hi(xl, xh, 29); // 61
59726 var c2_hi = shr64_hi(xh, xl, 6);
59727
59728 var r = c0_hi ^ c1_hi ^ c2_hi;
59729 if (r < 0)
59730 r += 0x100000000;
59731 return r;
59732 }
59733
59734 function g1_512_lo(xh, xl) {
59735 var c0_lo = rotr64_lo(xh, xl, 19);
59736 var c1_lo = rotr64_lo(xl, xh, 29); // 61
59737 var c2_lo = shr64_lo(xh, xl, 6);
59738
59739 var r = c0_lo ^ c1_lo ^ c2_lo;
59740 if (r < 0)
59741 r += 0x100000000;
59742 return r;
59743 }
59744
59745 },{"../hash":86}],91:[function(require,module,exports){
59746 var utils = exports;
59747 var inherits = require('inherits');
59748
59749 function toArray(msg, enc) {
59750 if (Array.isArray(msg))
59751 return msg.slice();
59752 if (!msg)
59753 return [];
59754 var res = [];
59755 if (typeof msg === 'string') {
59756 if (!enc) {
59757 for (var i = 0; i < msg.length; i++) {
59758 var c = msg.charCodeAt(i);
59759 var hi = c >> 8;
59760 var lo = c & 0xff;
59761 if (hi)
59762 res.push(hi, lo);
59763 else
59764 res.push(lo);
59765 }
59766 } else if (enc === 'hex') {
59767 msg = msg.replace(/[^a-z0-9]+/ig, '');
59768 if (msg.length % 2 !== 0)
59769 msg = '0' + msg;
59770 for (var i = 0; i < msg.length; i += 2)
59771 res.push(parseInt(msg[i] + msg[i + 1], 16));
59772 }
59773 } else {
59774 for (var i = 0; i < msg.length; i++)
59775 res[i] = msg[i] | 0;
59776 }
59777 return res;
59778 }
59779 utils.toArray = toArray;
59780
59781 function toHex(msg) {
59782 var res = '';
59783 for (var i = 0; i < msg.length; i++)
59784 res += zero2(msg[i].toString(16));
59785 return res;
59786 }
59787 utils.toHex = toHex;
59788
59789 function htonl(w) {
59790 var res = (w >>> 24) |
59791 ((w >>> 8) & 0xff00) |
59792 ((w << 8) & 0xff0000) |
59793 ((w & 0xff) << 24);
59794 return res >>> 0;
59795 }
59796 utils.htonl = htonl;
59797
59798 function toHex32(msg, endian) {
59799 var res = '';
59800 for (var i = 0; i < msg.length; i++) {
59801 var w = msg[i];
59802 if (endian === 'little')
59803 w = htonl(w);
59804 res += zero8(w.toString(16));
59805 }
59806 return res;
59807 }
59808 utils.toHex32 = toHex32;
59809
59810 function zero2(word) {
59811 if (word.length === 1)
59812 return '0' + word;
59813 else
59814 return word;
59815 }
59816 utils.zero2 = zero2;
59817
59818 function zero8(word) {
59819 if (word.length === 7)
59820 return '0' + word;
59821 else if (word.length === 6)
59822 return '00' + word;
59823 else if (word.length === 5)
59824 return '000' + word;
59825 else if (word.length === 4)
59826 return '0000' + word;
59827 else if (word.length === 3)
59828 return '00000' + word;
59829 else if (word.length === 2)
59830 return '000000' + word;
59831 else if (word.length === 1)
59832 return '0000000' + word;
59833 else
59834 return word;
59835 }
59836 utils.zero8 = zero8;
59837
59838 function join32(msg, start, end, endian) {
59839 var len = end - start;
59840 assert(len % 4 === 0);
59841 var res = new Array(len / 4);
59842 for (var i = 0, k = start; i < res.length; i++, k += 4) {
59843 var w;
59844 if (endian === 'big')
59845 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
59846 else
59847 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
59848 res[i] = w >>> 0;
59849 }
59850 return res;
59851 }
59852 utils.join32 = join32;
59853
59854 function split32(msg, endian) {
59855 var res = new Array(msg.length * 4);
59856 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
59857 var m = msg[i];
59858 if (endian === 'big') {
59859 res[k] = m >>> 24;
59860 res[k + 1] = (m >>> 16) & 0xff;
59861 res[k + 2] = (m >>> 8) & 0xff;
59862 res[k + 3] = m & 0xff;
59863 } else {
59864 res[k + 3] = m >>> 24;
59865 res[k + 2] = (m >>> 16) & 0xff;
59866 res[k + 1] = (m >>> 8) & 0xff;
59867 res[k] = m & 0xff;
59868 }
59869 }
59870 return res;
59871 }
59872 utils.split32 = split32;
59873
59874 function rotr32(w, b) {
59875 return (w >>> b) | (w << (32 - b));
59876 }
59877 utils.rotr32 = rotr32;
59878
59879 function rotl32(w, b) {
59880 return (w << b) | (w >>> (32 - b));
59881 }
59882 utils.rotl32 = rotl32;
59883
59884 function sum32(a, b) {
59885 return (a + b) >>> 0;
59886 }
59887 utils.sum32 = sum32;
59888
59889 function sum32_3(a, b, c) {
59890 return (a + b + c) >>> 0;
59891 }
59892 utils.sum32_3 = sum32_3;
59893
59894 function sum32_4(a, b, c, d) {
59895 return (a + b + c + d) >>> 0;
59896 }
59897 utils.sum32_4 = sum32_4;
59898
59899 function sum32_5(a, b, c, d, e) {
59900 return (a + b + c + d + e) >>> 0;
59901 }
59902 utils.sum32_5 = sum32_5;
59903
59904 function assert(cond, msg) {
59905 if (!cond)
59906 throw new Error(msg || 'Assertion failed');
59907 }
59908 utils.assert = assert;
59909
59910 utils.inherits = inherits;
59911
59912 function sum64(buf, pos, ah, al) {
59913 var bh = buf[pos];
59914 var bl = buf[pos + 1];
59915
59916 var lo = (al + bl) >>> 0;
59917 var hi = (lo < al ? 1 : 0) + ah + bh;
59918 buf[pos] = hi >>> 0;
59919 buf[pos + 1] = lo;
59920 }
59921 exports.sum64 = sum64;
59922
59923 function sum64_hi(ah, al, bh, bl) {
59924 var lo = (al + bl) >>> 0;
59925 var hi = (lo < al ? 1 : 0) + ah + bh;
59926 return hi >>> 0;
59927 };
59928 exports.sum64_hi = sum64_hi;
59929
59930 function sum64_lo(ah, al, bh, bl) {
59931 var lo = al + bl;
59932 return lo >>> 0;
59933 };
59934 exports.sum64_lo = sum64_lo;
59935
59936 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
59937 var carry = 0;
59938 var lo = al;
59939 lo = (lo + bl) >>> 0;
59940 carry += lo < al ? 1 : 0;
59941 lo = (lo + cl) >>> 0;
59942 carry += lo < cl ? 1 : 0;
59943 lo = (lo + dl) >>> 0;
59944 carry += lo < dl ? 1 : 0;
59945
59946 var hi = ah + bh + ch + dh + carry;
59947 return hi >>> 0;
59948 };
59949 exports.sum64_4_hi = sum64_4_hi;
59950
59951 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
59952 var lo = al + bl + cl + dl;
59953 return lo >>> 0;
59954 };
59955 exports.sum64_4_lo = sum64_4_lo;
59956
59957 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
59958 var carry = 0;
59959 var lo = al;
59960 lo = (lo + bl) >>> 0;
59961 carry += lo < al ? 1 : 0;
59962 lo = (lo + cl) >>> 0;
59963 carry += lo < cl ? 1 : 0;
59964 lo = (lo + dl) >>> 0;
59965 carry += lo < dl ? 1 : 0;
59966 lo = (lo + el) >>> 0;
59967 carry += lo < el ? 1 : 0;
59968
59969 var hi = ah + bh + ch + dh + eh + carry;
59970 return hi >>> 0;
59971 };
59972 exports.sum64_5_hi = sum64_5_hi;
59973
59974 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
59975 var lo = al + bl + cl + dl + el;
59976
59977 return lo >>> 0;
59978 };
59979 exports.sum64_5_lo = sum64_5_lo;
59980
59981 function rotr64_hi(ah, al, num) {
59982 var r = (al << (32 - num)) | (ah >>> num);
59983 return r >>> 0;
59984 };
59985 exports.rotr64_hi = rotr64_hi;
59986
59987 function rotr64_lo(ah, al, num) {
59988 var r = (ah << (32 - num)) | (al >>> num);
59989 return r >>> 0;
59990 };
59991 exports.rotr64_lo = rotr64_lo;
59992
59993 function shr64_hi(ah, al, num) {
59994 return ah >>> num;
59995 };
59996 exports.shr64_hi = shr64_hi;
59997
59998 function shr64_lo(ah, al, num) {
59999 var r = (ah << (32 - num)) | (al >>> num);
60000 return r >>> 0;
60001 };
60002 exports.shr64_lo = shr64_lo;
60003
60004 },{"inherits":95}],92:[function(require,module,exports){
60005 'use strict';
60006
60007 var hash = require('hash.js');
60008 var utils = require('minimalistic-crypto-utils');
60009 var assert = require('minimalistic-assert');
60010
60011 function HmacDRBG(options) {
60012 if (!(this instanceof HmacDRBG))
60013 return new HmacDRBG(options);
60014 this.hash = options.hash;
60015 this.predResist = !!options.predResist;
60016
60017 this.outLen = this.hash.outSize;
60018 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
60019
60020 this._reseed = null;
60021 this.reseedInterval = null;
60022 this.K = null;
60023 this.V = null;
60024
60025 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
60026 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
60027 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
60028 assert(entropy.length >= (this.minEntropy / 8),
60029 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
60030 this._init(entropy, nonce, pers);
60031 }
60032 module.exports = HmacDRBG;
60033
60034 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
60035 var seed = entropy.concat(nonce).concat(pers);
60036
60037 this.K = new Array(this.outLen / 8);
60038 this.V = new Array(this.outLen / 8);
60039 for (var i = 0; i < this.V.length; i++) {
60040 this.K[i] = 0x00;
60041 this.V[i] = 0x01;
60042 }
60043
60044 this._update(seed);
60045 this._reseed = 1;
60046 this.reseedInterval = 0x1000000000000; // 2^48
60047 };
60048
60049 HmacDRBG.prototype._hmac = function hmac() {
60050 return new hash.hmac(this.hash, this.K);
60051 };
60052
60053 HmacDRBG.prototype._update = function update(seed) {
60054 var kmac = this._hmac()
60055 .update(this.V)
60056 .update([ 0x00 ]);
60057 if (seed)
60058 kmac = kmac.update(seed);
60059 this.K = kmac.digest();
60060 this.V = this._hmac().update(this.V).digest();
60061 if (!seed)
60062 return;
60063
60064 this.K = this._hmac()
60065 .update(this.V)
60066 .update([ 0x01 ])
60067 .update(seed)
60068 .digest();
60069 this.V = this._hmac().update(this.V).digest();
60070 };
60071
60072 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
60073 // Optional entropy enc
60074 if (typeof entropyEnc !== 'string') {
60075 addEnc = add;
60076 add = entropyEnc;
60077 entropyEnc = null;
60078 }
60079
60080 entropy = utils.toArray(entropy, entropyEnc);
60081 add = utils.toArray(add, addEnc);
60082
60083 assert(entropy.length >= (this.minEntropy / 8),
60084 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
60085
60086 this._update(entropy.concat(add || []));
60087 this._reseed = 1;
60088 };
60089
60090 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
60091 if (this._reseed > this.reseedInterval)
60092 throw new Error('Reseed is required');
60093
60094 // Optional encoding
60095 if (typeof enc !== 'string') {
60096 addEnc = add;
60097 add = enc;
60098 enc = null;
60099 }
60100
60101 // Optional additional data
60102 if (add) {
60103 add = utils.toArray(add, addEnc || 'hex');
60104 this._update(add);
60105 }
60106
60107 var temp = [];
60108 while (temp.length < len) {
60109 this.V = this._hmac().update(this.V).digest();
60110 temp = temp.concat(this.V);
60111 }
60112
60113 var res = temp.slice(0, len);
60114 this._update(add);
60115 this._reseed++;
60116 return utils.encode(res, enc);
60117 };
60118
60119 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
60120 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
60121 var e, m
60122 var eLen = nBytes * 8 - mLen - 1
60123 var eMax = (1 << eLen) - 1
60124 var eBias = eMax >> 1
60125 var nBits = -7
60126 var i = isLE ? (nBytes - 1) : 0
60127 var d = isLE ? -1 : 1
60128 var s = buffer[offset + i]
60129
60130 i += d
60131
60132 e = s & ((1 << (-nBits)) - 1)
60133 s >>= (-nBits)
60134 nBits += eLen
60135 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60136
60137 m = e & ((1 << (-nBits)) - 1)
60138 e >>= (-nBits)
60139 nBits += mLen
60140 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60141
60142 if (e === 0) {
60143 e = 1 - eBias
60144 } else if (e === eMax) {
60145 return m ? NaN : ((s ? -1 : 1) * Infinity)
60146 } else {
60147 m = m + Math.pow(2, mLen)
60148 e = e - eBias
60149 }
60150 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
60151 }
60152
60153 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
60154 var e, m, c
60155 var eLen = nBytes * 8 - mLen - 1
60156 var eMax = (1 << eLen) - 1
60157 var eBias = eMax >> 1
60158 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
60159 var i = isLE ? 0 : (nBytes - 1)
60160 var d = isLE ? 1 : -1
60161 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
60162
60163 value = Math.abs(value)
60164
60165 if (isNaN(value) || value === Infinity) {
60166 m = isNaN(value) ? 1 : 0
60167 e = eMax
60168 } else {
60169 e = Math.floor(Math.log(value) / Math.LN2)
60170 if (value * (c = Math.pow(2, -e)) < 1) {
60171 e--
60172 c *= 2
60173 }
60174 if (e + eBias >= 1) {
60175 value += rt / c
60176 } else {
60177 value += rt * Math.pow(2, 1 - eBias)
60178 }
60179 if (value * c >= 2) {
60180 e++
60181 c /= 2
60182 }
60183
60184 if (e + eBias >= eMax) {
60185 m = 0
60186 e = eMax
60187 } else if (e + eBias >= 1) {
60188 m = (value * c - 1) * Math.pow(2, mLen)
60189 e = e + eBias
60190 } else {
60191 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
60192 e = 0
60193 }
60194 }
60195
60196 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
60197
60198 e = (e << mLen) | m
60199 eLen += mLen
60200 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
60201
60202 buffer[offset + i - d] |= s * 128
60203 }
60204
60205 },{}],94:[function(require,module,exports){
60206
60207 var indexOf = [].indexOf;
60208
60209 module.exports = function(arr, obj){
60210 if (indexOf) return arr.indexOf(obj);
60211 for (var i = 0; i < arr.length; ++i) {
60212 if (arr[i] === obj) return i;
60213 }
60214 return -1;
60215 };
60216 },{}],95:[function(require,module,exports){
60217 if (typeof Object.create === 'function') {
60218 // implementation from standard node.js 'util' module
60219 module.exports = function inherits(ctor, superCtor) {
60220 ctor.super_ = superCtor
60221 ctor.prototype = Object.create(superCtor.prototype, {
60222 constructor: {
60223 value: ctor,
60224 enumerable: false,
60225 writable: true,
60226 configurable: true
60227 }
60228 });
60229 };
60230 } else {
60231 // old school shim for old browsers
60232 module.exports = function inherits(ctor, superCtor) {
60233 ctor.super_ = superCtor
60234 var TempCtor = function () {}
60235 TempCtor.prototype = superCtor.prototype
60236 ctor.prototype = new TempCtor()
60237 ctor.prototype.constructor = ctor
60238 }
60239 }
60240
60241 },{}],96:[function(require,module,exports){
60242 /*!
60243 * Determine if an object is a Buffer
60244 *
60245 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
60246 * @license MIT
60247 */
60248
60249 // The _isBuffer check is for Safari 5-7 support, because it's missing
60250 // Object.prototype.constructor. Remove this eventually
60251 module.exports = function (obj) {
60252 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
60253 }
60254
60255 function isBuffer (obj) {
60256 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
60257 }
60258
60259 // For Node v0.10 support. Remove this eventually.
60260 function isSlowBuffer (obj) {
60261 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
60262 }
60263
60264 },{}],97:[function(require,module,exports){
60265 var toString = {}.toString;
60266
60267 module.exports = Array.isArray || function (arr) {
60268 return toString.call(arr) == '[object Array]';
60269 };
60270
60271 },{}],98:[function(require,module,exports){
60272 var bn = require('bn.js');
60273 var brorand = require('brorand');
60274
60275 function MillerRabin(rand) {
60276 this.rand = rand || new brorand.Rand();
60277 }
60278 module.exports = MillerRabin;
60279
60280 MillerRabin.create = function create(rand) {
60281 return new MillerRabin(rand);
60282 };
60283
60284 MillerRabin.prototype._rand = function _rand(n) {
60285 var len = n.bitLength();
60286 var buf = this.rand.generate(Math.ceil(len / 8));
60287
60288 // Set low bits
60289 buf[0] |= 3;
60290
60291 // Mask high bits
60292 var mask = len & 0x7;
60293 if (mask !== 0)
60294 buf[buf.length - 1] >>= 7 - mask;
60295
60296 return new bn(buf);
60297 }
60298
60299 MillerRabin.prototype.test = function test(n, k, cb) {
60300 var len = n.bitLength();
60301 var red = bn.mont(n);
60302 var rone = new bn(1).toRed(red);
60303
60304 if (!k)
60305 k = Math.max(1, (len / 48) | 0);
60306
60307 // Find d and s, (n - 1) = (2 ^ s) * d;
60308 var n1 = n.subn(1);
60309 var n2 = n1.subn(1);
60310 for (var s = 0; !n1.testn(s); s++) {}
60311 var d = n.shrn(s);
60312
60313 var rn1 = n1.toRed(red);
60314
60315 var prime = true;
60316 for (; k > 0; k--) {
60317 var a = this._rand(n2);
60318 if (cb)
60319 cb(a);
60320
60321 var x = a.toRed(red).redPow(d);
60322 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60323 continue;
60324
60325 for (var i = 1; i < s; i++) {
60326 x = x.redSqr();
60327
60328 if (x.cmp(rone) === 0)
60329 return false;
60330 if (x.cmp(rn1) === 0)
60331 break;
60332 }
60333
60334 if (i === s)
60335 return false;
60336 }
60337
60338 return prime;
60339 };
60340
60341 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
60342 var len = n.bitLength();
60343 var red = bn.mont(n);
60344 var rone = new bn(1).toRed(red);
60345
60346 if (!k)
60347 k = Math.max(1, (len / 48) | 0);
60348
60349 // Find d and s, (n - 1) = (2 ^ s) * d;
60350 var n1 = n.subn(1);
60351 var n2 = n1.subn(1);
60352 for (var s = 0; !n1.testn(s); s++) {}
60353 var d = n.shrn(s);
60354
60355 var rn1 = n1.toRed(red);
60356
60357 for (; k > 0; k--) {
60358 var a = this._rand(n2);
60359
60360 var g = n.gcd(a);
60361 if (g.cmpn(1) !== 0)
60362 return g;
60363
60364 var x = a.toRed(red).redPow(d);
60365 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60366 continue;
60367
60368 for (var i = 1; i < s; i++) {
60369 x = x.redSqr();
60370
60371 if (x.cmp(rone) === 0)
60372 return x.fromRed().subn(1).gcd(n);
60373 if (x.cmp(rn1) === 0)
60374 break;
60375 }
60376
60377 if (i === s) {
60378 x = x.redSqr();
60379 return x.fromRed().subn(1).gcd(n);
60380 }
60381 }
60382
60383 return false;
60384 };
60385
60386 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
60387 module.exports = assert;
60388
60389 function assert(val, msg) {
60390 if (!val)
60391 throw new Error(msg || 'Assertion failed');
60392 }
60393
60394 assert.equal = function assertEqual(l, r, msg) {
60395 if (l != r)
60396 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
60397 };
60398
60399 },{}],100:[function(require,module,exports){
60400 'use strict';
60401
60402 var utils = exports;
60403
60404 function toArray(msg, enc) {
60405 if (Array.isArray(msg))
60406 return msg.slice();
60407 if (!msg)
60408 return [];
60409 var res = [];
60410 if (typeof msg !== 'string') {
60411 for (var i = 0; i < msg.length; i++)
60412 res[i] = msg[i] | 0;
60413 return res;
60414 }
60415 if (enc === 'hex') {
60416 msg = msg.replace(/[^a-z0-9]+/ig, '');
60417 if (msg.length % 2 !== 0)
60418 msg = '0' + msg;
60419 for (var i = 0; i < msg.length; i += 2)
60420 res.push(parseInt(msg[i] + msg[i + 1], 16));
60421 } else {
60422 for (var i = 0; i < msg.length; i++) {
60423 var c = msg.charCodeAt(i);
60424 var hi = c >> 8;
60425 var lo = c & 0xff;
60426 if (hi)
60427 res.push(hi, lo);
60428 else
60429 res.push(lo);
60430 }
60431 }
60432 return res;
60433 }
60434 utils.toArray = toArray;
60435
60436 function zero2(word) {
60437 if (word.length === 1)
60438 return '0' + word;
60439 else
60440 return word;
60441 }
60442 utils.zero2 = zero2;
60443
60444 function toHex(msg) {
60445 var res = '';
60446 for (var i = 0; i < msg.length; i++)
60447 res += zero2(msg[i].toString(16));
60448 return res;
60449 }
60450 utils.toHex = toHex;
60451
60452 utils.encode = function encode(arr, enc) {
60453 if (enc === 'hex')
60454 return toHex(arr);
60455 else
60456 return arr;
60457 };
60458
60459 },{}],101:[function(require,module,exports){
60460 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
60461 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
60462 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
60463 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
60464 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
60465 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
60466 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
60467 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
60468 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
60469 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
60470 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
60471 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
60472 }
60473 },{}],102:[function(require,module,exports){
60474 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
60475 // Fedor, you are amazing.
60476 'use strict'
60477
60478 var asn1 = require('asn1.js')
60479
60480 exports.certificate = require('./certificate')
60481
60482 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
60483 this.seq().obj(
60484 this.key('version').int(),
60485 this.key('modulus').int(),
60486 this.key('publicExponent').int(),
60487 this.key('privateExponent').int(),
60488 this.key('prime1').int(),
60489 this.key('prime2').int(),
60490 this.key('exponent1').int(),
60491 this.key('exponent2').int(),
60492 this.key('coefficient').int()
60493 )
60494 })
60495 exports.RSAPrivateKey = RSAPrivateKey
60496
60497 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
60498 this.seq().obj(
60499 this.key('modulus').int(),
60500 this.key('publicExponent').int()
60501 )
60502 })
60503 exports.RSAPublicKey = RSAPublicKey
60504
60505 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
60506 this.seq().obj(
60507 this.key('algorithm').use(AlgorithmIdentifier),
60508 this.key('subjectPublicKey').bitstr()
60509 )
60510 })
60511 exports.PublicKey = PublicKey
60512
60513 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
60514 this.seq().obj(
60515 this.key('algorithm').objid(),
60516 this.key('none').null_().optional(),
60517 this.key('curve').objid().optional(),
60518 this.key('params').seq().obj(
60519 this.key('p').int(),
60520 this.key('q').int(),
60521 this.key('g').int()
60522 ).optional()
60523 )
60524 })
60525
60526 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
60527 this.seq().obj(
60528 this.key('version').int(),
60529 this.key('algorithm').use(AlgorithmIdentifier),
60530 this.key('subjectPrivateKey').octstr()
60531 )
60532 })
60533 exports.PrivateKey = PrivateKeyInfo
60534 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
60535 this.seq().obj(
60536 this.key('algorithm').seq().obj(
60537 this.key('id').objid(),
60538 this.key('decrypt').seq().obj(
60539 this.key('kde').seq().obj(
60540 this.key('id').objid(),
60541 this.key('kdeparams').seq().obj(
60542 this.key('salt').octstr(),
60543 this.key('iters').int()
60544 )
60545 ),
60546 this.key('cipher').seq().obj(
60547 this.key('algo').objid(),
60548 this.key('iv').octstr()
60549 )
60550 )
60551 ),
60552 this.key('subjectPrivateKey').octstr()
60553 )
60554 })
60555
60556 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
60557
60558 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
60559 this.seq().obj(
60560 this.key('version').int(),
60561 this.key('p').int(),
60562 this.key('q').int(),
60563 this.key('g').int(),
60564 this.key('pub_key').int(),
60565 this.key('priv_key').int()
60566 )
60567 })
60568 exports.DSAPrivateKey = DSAPrivateKey
60569
60570 exports.DSAparam = asn1.define('DSAparam', function () {
60571 this.int()
60572 })
60573
60574 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
60575 this.seq().obj(
60576 this.key('version').int(),
60577 this.key('privateKey').octstr(),
60578 this.key('parameters').optional().explicit(0).use(ECParameters),
60579 this.key('publicKey').optional().explicit(1).bitstr()
60580 )
60581 })
60582 exports.ECPrivateKey = ECPrivateKey
60583
60584 var ECParameters = asn1.define('ECParameters', function () {
60585 this.choice({
60586 namedCurve: this.objid()
60587 })
60588 })
60589
60590 exports.signature = asn1.define('signature', function () {
60591 this.seq().obj(
60592 this.key('r').int(),
60593 this.key('s').int()
60594 )
60595 })
60596
60597 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
60598 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
60599 // thanks to @Rantanen
60600
60601 'use strict'
60602
60603 var asn = require('asn1.js')
60604
60605 var Time = asn.define('Time', function () {
60606 this.choice({
60607 utcTime: this.utctime(),
60608 generalTime: this.gentime()
60609 })
60610 })
60611
60612 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
60613 this.seq().obj(
60614 this.key('type').objid(),
60615 this.key('value').any()
60616 )
60617 })
60618
60619 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
60620 this.seq().obj(
60621 this.key('algorithm').objid(),
60622 this.key('parameters').optional()
60623 )
60624 })
60625
60626 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
60627 this.seq().obj(
60628 this.key('algorithm').use(AlgorithmIdentifier),
60629 this.key('subjectPublicKey').bitstr()
60630 )
60631 })
60632
60633 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
60634 this.setof(AttributeTypeValue)
60635 })
60636
60637 var RDNSequence = asn.define('RDNSequence', function () {
60638 this.seqof(RelativeDistinguishedName)
60639 })
60640
60641 var Name = asn.define('Name', function () {
60642 this.choice({
60643 rdnSequence: this.use(RDNSequence)
60644 })
60645 })
60646
60647 var Validity = asn.define('Validity', function () {
60648 this.seq().obj(
60649 this.key('notBefore').use(Time),
60650 this.key('notAfter').use(Time)
60651 )
60652 })
60653
60654 var Extension = asn.define('Extension', function () {
60655 this.seq().obj(
60656 this.key('extnID').objid(),
60657 this.key('critical').bool().def(false),
60658 this.key('extnValue').octstr()
60659 )
60660 })
60661
60662 var TBSCertificate = asn.define('TBSCertificate', function () {
60663 this.seq().obj(
60664 this.key('version').explicit(0).int(),
60665 this.key('serialNumber').int(),
60666 this.key('signature').use(AlgorithmIdentifier),
60667 this.key('issuer').use(Name),
60668 this.key('validity').use(Validity),
60669 this.key('subject').use(Name),
60670 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
60671 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
60672 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
60673 this.key('extensions').explicit(3).seqof(Extension).optional()
60674 )
60675 })
60676
60677 var X509Certificate = asn.define('X509Certificate', function () {
60678 this.seq().obj(
60679 this.key('tbsCertificate').use(TBSCertificate),
60680 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
60681 this.key('signatureValue').bitstr()
60682 )
60683 })
60684
60685 module.exports = X509Certificate
60686
60687 },{"asn1.js":1}],104:[function(require,module,exports){
60688 (function (Buffer){
60689 // adapted from https://github.com/apatil/pemstrip
60690 var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m
60691 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
60692 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
60693 var evp = require('evp_bytestokey')
60694 var ciphers = require('browserify-aes')
60695 module.exports = function (okey, password) {
60696 var key = okey.toString()
60697 var match = key.match(findProc)
60698 var decrypted
60699 if (!match) {
60700 var match2 = key.match(fullRegex)
60701 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
60702 } else {
60703 var suite = 'aes' + match[1]
60704 var iv = new Buffer(match[2], 'hex')
60705 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
60706 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
60707 var out = []
60708 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
60709 out.push(cipher.update(cipherText))
60710 out.push(cipher.final())
60711 decrypted = Buffer.concat(out)
60712 }
60713 var tag = key.match(startRegex)[1]
60714 return {
60715 tag: tag,
60716 data: decrypted
60717 }
60718 }
60719
60720 }).call(this,require("buffer").Buffer)
60721 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
60722 (function (Buffer){
60723 var asn1 = require('./asn1')
60724 var aesid = require('./aesid.json')
60725 var fixProc = require('./fixProc')
60726 var ciphers = require('browserify-aes')
60727 var compat = require('pbkdf2')
60728 module.exports = parseKeys
60729
60730 function parseKeys (buffer) {
60731 var password
60732 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
60733 password = buffer.passphrase
60734 buffer = buffer.key
60735 }
60736 if (typeof buffer === 'string') {
60737 buffer = new Buffer(buffer)
60738 }
60739
60740 var stripped = fixProc(buffer, password)
60741
60742 var type = stripped.tag
60743 var data = stripped.data
60744 var subtype, ndata
60745 switch (type) {
60746 case 'CERTIFICATE':
60747 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
60748 // falls through
60749 case 'PUBLIC KEY':
60750 if (!ndata) {
60751 ndata = asn1.PublicKey.decode(data, 'der')
60752 }
60753 subtype = ndata.algorithm.algorithm.join('.')
60754 switch (subtype) {
60755 case '1.2.840.113549.1.1.1':
60756 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
60757 case '1.2.840.10045.2.1':
60758 ndata.subjectPrivateKey = ndata.subjectPublicKey
60759 return {
60760 type: 'ec',
60761 data: ndata
60762 }
60763 case '1.2.840.10040.4.1':
60764 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
60765 return {
60766 type: 'dsa',
60767 data: ndata.algorithm.params
60768 }
60769 default: throw new Error('unknown key id ' + subtype)
60770 }
60771 throw new Error('unknown key type ' + type)
60772 case 'ENCRYPTED PRIVATE KEY':
60773 data = asn1.EncryptedPrivateKey.decode(data, 'der')
60774 data = decrypt(data, password)
60775 // falls through
60776 case 'PRIVATE KEY':
60777 ndata = asn1.PrivateKey.decode(data, 'der')
60778 subtype = ndata.algorithm.algorithm.join('.')
60779 switch (subtype) {
60780 case '1.2.840.113549.1.1.1':
60781 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
60782 case '1.2.840.10045.2.1':
60783 return {
60784 curve: ndata.algorithm.curve,
60785 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
60786 }
60787 case '1.2.840.10040.4.1':
60788 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
60789 return {
60790 type: 'dsa',
60791 params: ndata.algorithm.params
60792 }
60793 default: throw new Error('unknown key id ' + subtype)
60794 }
60795 throw new Error('unknown key type ' + type)
60796 case 'RSA PUBLIC KEY':
60797 return asn1.RSAPublicKey.decode(data, 'der')
60798 case 'RSA PRIVATE KEY':
60799 return asn1.RSAPrivateKey.decode(data, 'der')
60800 case 'DSA PRIVATE KEY':
60801 return {
60802 type: 'dsa',
60803 params: asn1.DSAPrivateKey.decode(data, 'der')
60804 }
60805 case 'EC PRIVATE KEY':
60806 data = asn1.ECPrivateKey.decode(data, 'der')
60807 return {
60808 curve: data.parameters.value,
60809 privateKey: data.privateKey
60810 }
60811 default: throw new Error('unknown key type ' + type)
60812 }
60813 }
60814 parseKeys.signature = asn1.signature
60815 function decrypt (data, password) {
60816 var salt = data.algorithm.decrypt.kde.kdeparams.salt
60817 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
60818 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
60819 var iv = data.algorithm.decrypt.cipher.iv
60820 var cipherText = data.subjectPrivateKey
60821 var keylen = parseInt(algo.split('-')[1], 10) / 8
60822 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
60823 var cipher = ciphers.createDecipheriv(algo, key, iv)
60824 var out = []
60825 out.push(cipher.update(cipherText))
60826 out.push(cipher.final())
60827 return Buffer.concat(out)
60828 }
60829
60830 }).call(this,require("buffer").Buffer)
60831 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
60832
60833 exports.pbkdf2 = require('./lib/async')
60834
60835 exports.pbkdf2Sync = require('./lib/sync')
60836
60837 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
60838 (function (process,global){
60839 var checkParameters = require('./precondition')
60840 var defaultEncoding = require('./default-encoding')
60841 var sync = require('./sync')
60842 var Buffer = require('safe-buffer').Buffer
60843
60844 var ZERO_BUF
60845 var subtle = global.crypto && global.crypto.subtle
60846 var toBrowser = {
60847 'sha': 'SHA-1',
60848 'sha-1': 'SHA-1',
60849 'sha1': 'SHA-1',
60850 'sha256': 'SHA-256',
60851 'sha-256': 'SHA-256',
60852 'sha384': 'SHA-384',
60853 'sha-384': 'SHA-384',
60854 'sha-512': 'SHA-512',
60855 'sha512': 'SHA-512'
60856 }
60857 var checks = []
60858 function checkNative (algo) {
60859 if (global.process && !global.process.browser) {
60860 return Promise.resolve(false)
60861 }
60862 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
60863 return Promise.resolve(false)
60864 }
60865 if (checks[algo] !== undefined) {
60866 return checks[algo]
60867 }
60868 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
60869 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
60870 .then(function () {
60871 return true
60872 }).catch(function () {
60873 return false
60874 })
60875 checks[algo] = prom
60876 return prom
60877 }
60878 function browserPbkdf2 (password, salt, iterations, length, algo) {
60879 return subtle.importKey(
60880 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
60881 ).then(function (key) {
60882 return subtle.deriveBits({
60883 name: 'PBKDF2',
60884 salt: salt,
60885 iterations: iterations,
60886 hash: {
60887 name: algo
60888 }
60889 }, key, length << 3)
60890 }).then(function (res) {
60891 return Buffer.from(res)
60892 })
60893 }
60894 function resolvePromise (promise, callback) {
60895 promise.then(function (out) {
60896 process.nextTick(function () {
60897 callback(null, out)
60898 })
60899 }, function (e) {
60900 process.nextTick(function () {
60901 callback(e)
60902 })
60903 })
60904 }
60905 module.exports = function (password, salt, iterations, keylen, digest, callback) {
60906 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
60907 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
60908
60909 checkParameters(iterations, keylen)
60910 if (typeof digest === 'function') {
60911 callback = digest
60912 digest = undefined
60913 }
60914 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
60915
60916 digest = digest || 'sha1'
60917 var algo = toBrowser[digest.toLowerCase()]
60918 if (!algo || typeof global.Promise !== 'function') {
60919 return process.nextTick(function () {
60920 var out
60921 try {
60922 out = sync(password, salt, iterations, keylen, digest)
60923 } catch (e) {
60924 return callback(e)
60925 }
60926 callback(null, out)
60927 })
60928 }
60929 resolvePromise(checkNative(algo).then(function (resp) {
60930 if (resp) {
60931 return browserPbkdf2(password, salt, iterations, keylen, algo)
60932 } else {
60933 return sync(password, salt, iterations, keylen, digest)
60934 }
60935 }), callback)
60936 }
60937
60938 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
60939 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
60940 (function (process){
60941 var defaultEncoding
60942 /* istanbul ignore next */
60943 if (process.browser) {
60944 defaultEncoding = 'utf-8'
60945 } else {
60946 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
60947
60948 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
60949 }
60950 module.exports = defaultEncoding
60951
60952 }).call(this,require('_process'))
60953 },{"_process":112}],109:[function(require,module,exports){
60954 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
60955 module.exports = function (iterations, keylen) {
60956 if (typeof iterations !== 'number') {
60957 throw new TypeError('Iterations not a number')
60958 }
60959
60960 if (iterations < 0) {
60961 throw new TypeError('Bad iterations')
60962 }
60963
60964 if (typeof keylen !== 'number') {
60965 throw new TypeError('Key length not a number')
60966 }
60967
60968 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
60969 throw new TypeError('Bad key length')
60970 }
60971 }
60972
60973 },{}],110:[function(require,module,exports){
60974 var md5 = require('create-hash/md5')
60975 var rmd160 = require('ripemd160')
60976 var sha = require('sha.js')
60977
60978 var checkParameters = require('./precondition')
60979 var defaultEncoding = require('./default-encoding')
60980 var Buffer = require('safe-buffer').Buffer
60981 var ZEROS = Buffer.alloc(128)
60982 var sizes = {
60983 md5: 16,
60984 sha1: 20,
60985 sha224: 28,
60986 sha256: 32,
60987 sha384: 48,
60988 sha512: 64,
60989 rmd160: 20,
60990 ripemd160: 20
60991 }
60992 function Hmac (alg, key, saltLen) {
60993 var hash = getDigest(alg)
60994 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
60995
60996 if (key.length > blocksize) {
60997 key = hash(key)
60998 } else if (key.length < blocksize) {
60999 key = Buffer.concat([key, ZEROS], blocksize)
61000 }
61001
61002 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
61003 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
61004 for (var i = 0; i < blocksize; i++) {
61005 ipad[i] = key[i] ^ 0x36
61006 opad[i] = key[i] ^ 0x5C
61007 }
61008
61009 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
61010 ipad.copy(ipad1, 0, 0, blocksize)
61011 this.ipad1 = ipad1
61012 this.ipad2 = ipad
61013 this.opad = opad
61014 this.alg = alg
61015 this.blocksize = blocksize
61016 this.hash = hash
61017 this.size = sizes[alg]
61018 }
61019
61020 Hmac.prototype.run = function (data, ipad) {
61021 data.copy(ipad, this.blocksize)
61022 var h = this.hash(ipad)
61023 h.copy(this.opad, this.blocksize)
61024 return this.hash(this.opad)
61025 }
61026
61027 function getDigest (alg) {
61028 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
61029 if (alg === 'md5') return md5
61030 return shaFunc
61031
61032 function shaFunc (data) {
61033 return sha(alg).update(data).digest()
61034 }
61035 }
61036
61037 module.exports = function (password, salt, iterations, keylen, digest) {
61038 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
61039 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
61040
61041 checkParameters(iterations, keylen)
61042
61043 digest = digest || 'sha1'
61044
61045 var hmac = new Hmac(digest, password, salt.length)
61046
61047 var DK = Buffer.allocUnsafe(keylen)
61048 var block1 = Buffer.allocUnsafe(salt.length + 4)
61049 salt.copy(block1, 0, 0, salt.length)
61050
61051 var U, j, destPos, len
61052
61053 var hLen = hmac.size
61054 var T = Buffer.allocUnsafe(hLen)
61055 var l = Math.ceil(keylen / hLen)
61056 var r = keylen - (l - 1) * hLen
61057
61058 for (var i = 1; i <= l; i++) {
61059 block1.writeUInt32BE(i, salt.length)
61060 U = hmac.run(block1, hmac.ipad1)
61061
61062 U.copy(T, 0, 0, hLen)
61063
61064 for (j = 1; j < iterations; j++) {
61065 U = hmac.run(U, hmac.ipad2)
61066 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
61067 }
61068
61069 destPos = (i - 1) * hLen
61070 len = (i === l ? r : hLen)
61071 T.copy(DK, destPos, 0, len)
61072 }
61073
61074 return DK
61075 }
61076
61077 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
61078 (function (process){
61079 'use strict';
61080
61081 if (!process.version ||
61082 process.version.indexOf('v0.') === 0 ||
61083 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
61084 module.exports = nextTick;
61085 } else {
61086 module.exports = process.nextTick;
61087 }
61088
61089 function nextTick(fn, arg1, arg2, arg3) {
61090 if (typeof fn !== 'function') {
61091 throw new TypeError('"callback" argument must be a function');
61092 }
61093 var len = arguments.length;
61094 var args, i;
61095 switch (len) {
61096 case 0:
61097 case 1:
61098 return process.nextTick(fn);
61099 case 2:
61100 return process.nextTick(function afterTickOne() {
61101 fn.call(null, arg1);
61102 });
61103 case 3:
61104 return process.nextTick(function afterTickTwo() {
61105 fn.call(null, arg1, arg2);
61106 });
61107 case 4:
61108 return process.nextTick(function afterTickThree() {
61109 fn.call(null, arg1, arg2, arg3);
61110 });
61111 default:
61112 args = new Array(len - 1);
61113 i = 0;
61114 while (i < args.length) {
61115 args[i++] = arguments[i];
61116 }
61117 return process.nextTick(function afterTick() {
61118 fn.apply(null, args);
61119 });
61120 }
61121 }
61122
61123 }).call(this,require('_process'))
61124 },{"_process":112}],112:[function(require,module,exports){
61125 // shim for using process in browser
61126 var process = module.exports = {};
61127
61128 // cached from whatever global is present so that test runners that stub it
61129 // don't break things. But we need to wrap it in a try catch in case it is
61130 // wrapped in strict mode code which doesn't define any globals. It's inside a
61131 // function because try/catches deoptimize in certain engines.
61132
61133 var cachedSetTimeout;
61134 var cachedClearTimeout;
61135
61136 function defaultSetTimout() {
61137 throw new Error('setTimeout has not been defined');
61138 }
61139 function defaultClearTimeout () {
61140 throw new Error('clearTimeout has not been defined');
61141 }
61142 (function () {
61143 try {
61144 if (typeof setTimeout === 'function') {
61145 cachedSetTimeout = setTimeout;
61146 } else {
61147 cachedSetTimeout = defaultSetTimout;
61148 }
61149 } catch (e) {
61150 cachedSetTimeout = defaultSetTimout;
61151 }
61152 try {
61153 if (typeof clearTimeout === 'function') {
61154 cachedClearTimeout = clearTimeout;
61155 } else {
61156 cachedClearTimeout = defaultClearTimeout;
61157 }
61158 } catch (e) {
61159 cachedClearTimeout = defaultClearTimeout;
61160 }
61161 } ())
61162 function runTimeout(fun) {
61163 if (cachedSetTimeout === setTimeout) {
61164 //normal enviroments in sane situations
61165 return setTimeout(fun, 0);
61166 }
61167 // if setTimeout wasn't available but was latter defined
61168 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
61169 cachedSetTimeout = setTimeout;
61170 return setTimeout(fun, 0);
61171 }
61172 try {
61173 // when when somebody has screwed with setTimeout but no I.E. maddness
61174 return cachedSetTimeout(fun, 0);
61175 } catch(e){
61176 try {
61177 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61178 return cachedSetTimeout.call(null, fun, 0);
61179 } catch(e){
61180 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
61181 return cachedSetTimeout.call(this, fun, 0);
61182 }
61183 }
61184
61185
61186 }
61187 function runClearTimeout(marker) {
61188 if (cachedClearTimeout === clearTimeout) {
61189 //normal enviroments in sane situations
61190 return clearTimeout(marker);
61191 }
61192 // if clearTimeout wasn't available but was latter defined
61193 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
61194 cachedClearTimeout = clearTimeout;
61195 return clearTimeout(marker);
61196 }
61197 try {
61198 // when when somebody has screwed with setTimeout but no I.E. maddness
61199 return cachedClearTimeout(marker);
61200 } catch (e){
61201 try {
61202 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61203 return cachedClearTimeout.call(null, marker);
61204 } catch (e){
61205 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
61206 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
61207 return cachedClearTimeout.call(this, marker);
61208 }
61209 }
61210
61211
61212
61213 }
61214 var queue = [];
61215 var draining = false;
61216 var currentQueue;
61217 var queueIndex = -1;
61218
61219 function cleanUpNextTick() {
61220 if (!draining || !currentQueue) {
61221 return;
61222 }
61223 draining = false;
61224 if (currentQueue.length) {
61225 queue = currentQueue.concat(queue);
61226 } else {
61227 queueIndex = -1;
61228 }
61229 if (queue.length) {
61230 drainQueue();
61231 }
61232 }
61233
61234 function drainQueue() {
61235 if (draining) {
61236 return;
61237 }
61238 var timeout = runTimeout(cleanUpNextTick);
61239 draining = true;
61240
61241 var len = queue.length;
61242 while(len) {
61243 currentQueue = queue;
61244 queue = [];
61245 while (++queueIndex < len) {
61246 if (currentQueue) {
61247 currentQueue[queueIndex].run();
61248 }
61249 }
61250 queueIndex = -1;
61251 len = queue.length;
61252 }
61253 currentQueue = null;
61254 draining = false;
61255 runClearTimeout(timeout);
61256 }
61257
61258 process.nextTick = function (fun) {
61259 var args = new Array(arguments.length - 1);
61260 if (arguments.length > 1) {
61261 for (var i = 1; i < arguments.length; i++) {
61262 args[i - 1] = arguments[i];
61263 }
61264 }
61265 queue.push(new Item(fun, args));
61266 if (queue.length === 1 && !draining) {
61267 runTimeout(drainQueue);
61268 }
61269 };
61270
61271 // v8 likes predictible objects
61272 function Item(fun, array) {
61273 this.fun = fun;
61274 this.array = array;
61275 }
61276 Item.prototype.run = function () {
61277 this.fun.apply(null, this.array);
61278 };
61279 process.title = 'browser';
61280 process.browser = true;
61281 process.env = {};
61282 process.argv = [];
61283 process.version = ''; // empty string to avoid regexp issues
61284 process.versions = {};
61285
61286 function noop() {}
61287
61288 process.on = noop;
61289 process.addListener = noop;
61290 process.once = noop;
61291 process.off = noop;
61292 process.removeListener = noop;
61293 process.removeAllListeners = noop;
61294 process.emit = noop;
61295 process.prependListener = noop;
61296 process.prependOnceListener = noop;
61297
61298 process.listeners = function (name) { return [] }
61299
61300 process.binding = function (name) {
61301 throw new Error('process.binding is not supported');
61302 };
61303
61304 process.cwd = function () { return '/' };
61305 process.chdir = function (dir) {
61306 throw new Error('process.chdir is not supported');
61307 };
61308 process.umask = function() { return 0; };
61309
61310 },{}],113:[function(require,module,exports){
61311 exports.publicEncrypt = require('./publicEncrypt');
61312 exports.privateDecrypt = require('./privateDecrypt');
61313
61314 exports.privateEncrypt = function privateEncrypt(key, buf) {
61315 return exports.publicEncrypt(key, buf, true);
61316 };
61317
61318 exports.publicDecrypt = function publicDecrypt(key, buf) {
61319 return exports.privateDecrypt(key, buf, true);
61320 };
61321 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
61322 (function (Buffer){
61323 var createHash = require('create-hash');
61324 module.exports = function (seed, len) {
61325 var t = new Buffer('');
61326 var i = 0, c;
61327 while (t.length < len) {
61328 c = i2ops(i++);
61329 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
61330 }
61331 return t.slice(0, len);
61332 };
61333
61334 function i2ops(c) {
61335 var out = new Buffer(4);
61336 out.writeUInt32BE(c,0);
61337 return out;
61338 }
61339 }).call(this,require("buffer").Buffer)
61340 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
61341 (function (Buffer){
61342 var parseKeys = require('parse-asn1');
61343 var mgf = require('./mgf');
61344 var xor = require('./xor');
61345 var bn = require('bn.js');
61346 var crt = require('browserify-rsa');
61347 var createHash = require('create-hash');
61348 var withPublic = require('./withPublic');
61349 module.exports = function privateDecrypt(private_key, enc, reverse) {
61350 var padding;
61351 if (private_key.padding) {
61352 padding = private_key.padding;
61353 } else if (reverse) {
61354 padding = 1;
61355 } else {
61356 padding = 4;
61357 }
61358
61359 var key = parseKeys(private_key);
61360 var k = key.modulus.byteLength();
61361 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
61362 throw new Error('decryption error');
61363 }
61364 var msg;
61365 if (reverse) {
61366 msg = withPublic(new bn(enc), key);
61367 } else {
61368 msg = crt(enc, key);
61369 }
61370 var zBuffer = new Buffer(k - msg.length);
61371 zBuffer.fill(0);
61372 msg = Buffer.concat([zBuffer, msg], k);
61373 if (padding === 4) {
61374 return oaep(key, msg);
61375 } else if (padding === 1) {
61376 return pkcs1(key, msg, reverse);
61377 } else if (padding === 3) {
61378 return msg;
61379 } else {
61380 throw new Error('unknown padding');
61381 }
61382 };
61383
61384 function oaep(key, msg){
61385 var n = key.modulus;
61386 var k = key.modulus.byteLength();
61387 var mLen = msg.length;
61388 var iHash = createHash('sha1').update(new Buffer('')).digest();
61389 var hLen = iHash.length;
61390 var hLen2 = 2 * hLen;
61391 if (msg[0] !== 0) {
61392 throw new Error('decryption error');
61393 }
61394 var maskedSeed = msg.slice(1, hLen + 1);
61395 var maskedDb = msg.slice(hLen + 1);
61396 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
61397 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
61398 if (compare(iHash, db.slice(0, hLen))) {
61399 throw new Error('decryption error');
61400 }
61401 var i = hLen;
61402 while (db[i] === 0) {
61403 i++;
61404 }
61405 if (db[i++] !== 1) {
61406 throw new Error('decryption error');
61407 }
61408 return db.slice(i);
61409 }
61410
61411 function pkcs1(key, msg, reverse){
61412 var p1 = msg.slice(0, 2);
61413 var i = 2;
61414 var status = 0;
61415 while (msg[i++] !== 0) {
61416 if (i >= msg.length) {
61417 status++;
61418 break;
61419 }
61420 }
61421 var ps = msg.slice(2, i - 1);
61422 var p2 = msg.slice(i - 1, i);
61423
61424 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
61425 status++;
61426 }
61427 if (ps.length < 8) {
61428 status++;
61429 }
61430 if (status) {
61431 throw new Error('decryption error');
61432 }
61433 return msg.slice(i);
61434 }
61435 function compare(a, b){
61436 a = new Buffer(a);
61437 b = new Buffer(b);
61438 var dif = 0;
61439 var len = a.length;
61440 if (a.length !== b.length) {
61441 dif++;
61442 len = Math.min(a.length, b.length);
61443 }
61444 var i = -1;
61445 while (++i < len) {
61446 dif += (a[i] ^ b[i]);
61447 }
61448 return dif;
61449 }
61450 }).call(this,require("buffer").Buffer)
61451 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105}],116:[function(require,module,exports){
61452 (function (Buffer){
61453 var parseKeys = require('parse-asn1');
61454 var randomBytes = require('randombytes');
61455 var createHash = require('create-hash');
61456 var mgf = require('./mgf');
61457 var xor = require('./xor');
61458 var bn = require('bn.js');
61459 var withPublic = require('./withPublic');
61460 var crt = require('browserify-rsa');
61461
61462 var constants = {
61463 RSA_PKCS1_OAEP_PADDING: 4,
61464 RSA_PKCS1_PADDIN: 1,
61465 RSA_NO_PADDING: 3
61466 };
61467
61468 module.exports = function publicEncrypt(public_key, msg, reverse) {
61469 var padding;
61470 if (public_key.padding) {
61471 padding = public_key.padding;
61472 } else if (reverse) {
61473 padding = 1;
61474 } else {
61475 padding = 4;
61476 }
61477 var key = parseKeys(public_key);
61478 var paddedMsg;
61479 if (padding === 4) {
61480 paddedMsg = oaep(key, msg);
61481 } else if (padding === 1) {
61482 paddedMsg = pkcs1(key, msg, reverse);
61483 } else if (padding === 3) {
61484 paddedMsg = new bn(msg);
61485 if (paddedMsg.cmp(key.modulus) >= 0) {
61486 throw new Error('data too long for modulus');
61487 }
61488 } else {
61489 throw new Error('unknown padding');
61490 }
61491 if (reverse) {
61492 return crt(paddedMsg, key);
61493 } else {
61494 return withPublic(paddedMsg, key);
61495 }
61496 };
61497
61498 function oaep(key, msg){
61499 var k = key.modulus.byteLength();
61500 var mLen = msg.length;
61501 var iHash = createHash('sha1').update(new Buffer('')).digest();
61502 var hLen = iHash.length;
61503 var hLen2 = 2 * hLen;
61504 if (mLen > k - hLen2 - 2) {
61505 throw new Error('message too long');
61506 }
61507 var ps = new Buffer(k - mLen - hLen2 - 2);
61508 ps.fill(0);
61509 var dblen = k - hLen - 1;
61510 var seed = randomBytes(hLen);
61511 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
61512 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
61513 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
61514 }
61515 function pkcs1(key, msg, reverse){
61516 var mLen = msg.length;
61517 var k = key.modulus.byteLength();
61518 if (mLen > k - 11) {
61519 throw new Error('message too long');
61520 }
61521 var ps;
61522 if (reverse) {
61523 ps = new Buffer(k - mLen - 3);
61524 ps.fill(0xff);
61525 } else {
61526 ps = nonZero(k - mLen - 3);
61527 }
61528 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
61529 }
61530 function nonZero(len, crypto) {
61531 var out = new Buffer(len);
61532 var i = 0;
61533 var cache = randomBytes(len*2);
61534 var cur = 0;
61535 var num;
61536 while (i < len) {
61537 if (cur === cache.length) {
61538 cache = randomBytes(len*2);
61539 cur = 0;
61540 }
61541 num = cache[cur++];
61542 if (num) {
61543 out[i++] = num;
61544 }
61545 }
61546 return out;
61547 }
61548 }).call(this,require("buffer").Buffer)
61549 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105,"randombytes":119}],117:[function(require,module,exports){
61550 (function (Buffer){
61551 var bn = require('bn.js');
61552 function withPublic(paddedMsg, key) {
61553 return new Buffer(paddedMsg
61554 .toRed(bn.mont(key.modulus))
61555 .redPow(new bn(key.publicExponent))
61556 .fromRed()
61557 .toArray());
61558 }
61559
61560 module.exports = withPublic;
61561 }).call(this,require("buffer").Buffer)
61562 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
61563 module.exports = function xor(a, b) {
61564 var len = a.length;
61565 var i = -1;
61566 while (++i < len) {
61567 a[i] ^= b[i];
61568 }
61569 return a
61570 };
61571 },{}],119:[function(require,module,exports){
61572 (function (process,global,Buffer){
61573 'use strict'
61574
61575 function oldBrowser () {
61576 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
61577 }
61578
61579 var crypto = global.crypto || global.msCrypto
61580
61581 if (crypto && crypto.getRandomValues) {
61582 module.exports = randomBytes
61583 } else {
61584 module.exports = oldBrowser
61585 }
61586
61587 function randomBytes (size, cb) {
61588 // phantomjs needs to throw
61589 if (size > 65536) throw new Error('requested too many random bytes')
61590 // in case browserify isn't using the Uint8Array version
61591 var rawBytes = new global.Uint8Array(size)
61592
61593 // This will not work in older browsers.
61594 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
61595 if (size > 0) { // getRandomValues fails on IE if size == 0
61596 crypto.getRandomValues(rawBytes)
61597 }
61598 // phantomjs doesn't like a buffer being passed here
61599 var bytes = new Buffer(rawBytes.buffer)
61600
61601 if (typeof cb === 'function') {
61602 return process.nextTick(function () {
61603 cb(null, bytes)
61604 })
61605 }
61606
61607 return bytes
61608 }
61609
61610 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
61611 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
61612 module.exports = require('./lib/_stream_duplex.js');
61613
61614 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
61615 // a duplex stream is just a stream that is both readable and writable.
61616 // Since JS doesn't have multiple prototypal inheritance, this class
61617 // prototypally inherits from Readable, and then parasitically from
61618 // Writable.
61619
61620 'use strict';
61621
61622 /*<replacement>*/
61623
61624 var objectKeys = Object.keys || function (obj) {
61625 var keys = [];
61626 for (var key in obj) {
61627 keys.push(key);
61628 }return keys;
61629 };
61630 /*</replacement>*/
61631
61632 module.exports = Duplex;
61633
61634 /*<replacement>*/
61635 var processNextTick = require('process-nextick-args');
61636 /*</replacement>*/
61637
61638 /*<replacement>*/
61639 var util = require('core-util-is');
61640 util.inherits = require('inherits');
61641 /*</replacement>*/
61642
61643 var Readable = require('./_stream_readable');
61644 var Writable = require('./_stream_writable');
61645
61646 util.inherits(Duplex, Readable);
61647
61648 var keys = objectKeys(Writable.prototype);
61649 for (var v = 0; v < keys.length; v++) {
61650 var method = keys[v];
61651 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
61652 }
61653
61654 function Duplex(options) {
61655 if (!(this instanceof Duplex)) return new Duplex(options);
61656
61657 Readable.call(this, options);
61658 Writable.call(this, options);
61659
61660 if (options && options.readable === false) this.readable = false;
61661
61662 if (options && options.writable === false) this.writable = false;
61663
61664 this.allowHalfOpen = true;
61665 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
61666
61667 this.once('end', onend);
61668 }
61669
61670 // the no-half-open enforcer
61671 function onend() {
61672 // if we allow half-open state, or if the writable side ended,
61673 // then we're ok.
61674 if (this.allowHalfOpen || this._writableState.ended) return;
61675
61676 // no more data can be written.
61677 // But allow more writes to happen in this tick.
61678 processNextTick(onEndNT, this);
61679 }
61680
61681 function onEndNT(self) {
61682 self.end();
61683 }
61684
61685 function forEach(xs, f) {
61686 for (var i = 0, l = xs.length; i < l; i++) {
61687 f(xs[i], i);
61688 }
61689 }
61690 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
61691 // a passthrough stream.
61692 // basically just the most minimal sort of Transform stream.
61693 // Every written chunk gets output as-is.
61694
61695 'use strict';
61696
61697 module.exports = PassThrough;
61698
61699 var Transform = require('./_stream_transform');
61700
61701 /*<replacement>*/
61702 var util = require('core-util-is');
61703 util.inherits = require('inherits');
61704 /*</replacement>*/
61705
61706 util.inherits(PassThrough, Transform);
61707
61708 function PassThrough(options) {
61709 if (!(this instanceof PassThrough)) return new PassThrough(options);
61710
61711 Transform.call(this, options);
61712 }
61713
61714 PassThrough.prototype._transform = function (chunk, encoding, cb) {
61715 cb(null, chunk);
61716 };
61717 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
61718 (function (process){
61719 'use strict';
61720
61721 module.exports = Readable;
61722
61723 /*<replacement>*/
61724 var processNextTick = require('process-nextick-args');
61725 /*</replacement>*/
61726
61727 /*<replacement>*/
61728 var isArray = require('isarray');
61729 /*</replacement>*/
61730
61731 /*<replacement>*/
61732 var Duplex;
61733 /*</replacement>*/
61734
61735 Readable.ReadableState = ReadableState;
61736
61737 /*<replacement>*/
61738 var EE = require('events').EventEmitter;
61739
61740 var EElistenerCount = function (emitter, type) {
61741 return emitter.listeners(type).length;
61742 };
61743 /*</replacement>*/
61744
61745 /*<replacement>*/
61746 var Stream = require('./internal/streams/stream');
61747 /*</replacement>*/
61748
61749 var Buffer = require('buffer').Buffer;
61750 /*<replacement>*/
61751 var bufferShim = require('buffer-shims');
61752 /*</replacement>*/
61753
61754 /*<replacement>*/
61755 var util = require('core-util-is');
61756 util.inherits = require('inherits');
61757 /*</replacement>*/
61758
61759 /*<replacement>*/
61760 var debugUtil = require('util');
61761 var debug = void 0;
61762 if (debugUtil && debugUtil.debuglog) {
61763 debug = debugUtil.debuglog('stream');
61764 } else {
61765 debug = function () {};
61766 }
61767 /*</replacement>*/
61768
61769 var BufferList = require('./internal/streams/BufferList');
61770 var StringDecoder;
61771
61772 util.inherits(Readable, Stream);
61773
61774 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
61775
61776 function prependListener(emitter, event, fn) {
61777 // Sadly this is not cacheable as some libraries bundle their own
61778 // event emitter implementation with them.
61779 if (typeof emitter.prependListener === 'function') {
61780 return emitter.prependListener(event, fn);
61781 } else {
61782 // This is a hack to make sure that our error handler is attached before any
61783 // userland ones. NEVER DO THIS. This is here only because this code needs
61784 // to continue to work with older versions of Node.js that do not include
61785 // the prependListener() method. The goal is to eventually remove this hack.
61786 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
61787 }
61788 }
61789
61790 function ReadableState(options, stream) {
61791 Duplex = Duplex || require('./_stream_duplex');
61792
61793 options = options || {};
61794
61795 // object stream flag. Used to make read(n) ignore n and to
61796 // make all the buffer merging and length checks go away
61797 this.objectMode = !!options.objectMode;
61798
61799 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
61800
61801 // the point at which it stops calling _read() to fill the buffer
61802 // Note: 0 is a valid value, means "don't call _read preemptively ever"
61803 var hwm = options.highWaterMark;
61804 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
61805 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
61806
61807 // cast to ints.
61808 this.highWaterMark = ~~this.highWaterMark;
61809
61810 // A linked list is used to store data chunks instead of an array because the
61811 // linked list can remove elements from the beginning faster than
61812 // array.shift()
61813 this.buffer = new BufferList();
61814 this.length = 0;
61815 this.pipes = null;
61816 this.pipesCount = 0;
61817 this.flowing = null;
61818 this.ended = false;
61819 this.endEmitted = false;
61820 this.reading = false;
61821
61822 // a flag to be able to tell if the onwrite cb is called immediately,
61823 // or on a later tick. We set this to true at first, because any
61824 // actions that shouldn't happen until "later" should generally also
61825 // not happen before the first write call.
61826 this.sync = true;
61827
61828 // whenever we return null, then we set a flag to say
61829 // that we're awaiting a 'readable' event emission.
61830 this.needReadable = false;
61831 this.emittedReadable = false;
61832 this.readableListening = false;
61833 this.resumeScheduled = false;
61834
61835 // Crypto is kind of old and crusty. Historically, its default string
61836 // encoding is 'binary' so we have to make this configurable.
61837 // Everything else in the universe uses 'utf8', though.
61838 this.defaultEncoding = options.defaultEncoding || 'utf8';
61839
61840 // when piping, we only care about 'readable' events that happen
61841 // after read()ing all the bytes and not getting any pushback.
61842 this.ranOut = false;
61843
61844 // the number of writers that are awaiting a drain event in .pipe()s
61845 this.awaitDrain = 0;
61846
61847 // if true, a maybeReadMore has been scheduled
61848 this.readingMore = false;
61849
61850 this.decoder = null;
61851 this.encoding = null;
61852 if (options.encoding) {
61853 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
61854 this.decoder = new StringDecoder(options.encoding);
61855 this.encoding = options.encoding;
61856 }
61857 }
61858
61859 function Readable(options) {
61860 Duplex = Duplex || require('./_stream_duplex');
61861
61862 if (!(this instanceof Readable)) return new Readable(options);
61863
61864 this._readableState = new ReadableState(options, this);
61865
61866 // legacy
61867 this.readable = true;
61868
61869 if (options && typeof options.read === 'function') this._read = options.read;
61870
61871 Stream.call(this);
61872 }
61873
61874 // Manually shove something into the read() buffer.
61875 // This returns true if the highWaterMark has not been hit yet,
61876 // similar to how Writable.write() returns true if you should
61877 // write() some more.
61878 Readable.prototype.push = function (chunk, encoding) {
61879 var state = this._readableState;
61880
61881 if (!state.objectMode && typeof chunk === 'string') {
61882 encoding = encoding || state.defaultEncoding;
61883 if (encoding !== state.encoding) {
61884 chunk = bufferShim.from(chunk, encoding);
61885 encoding = '';
61886 }
61887 }
61888
61889 return readableAddChunk(this, state, chunk, encoding, false);
61890 };
61891
61892 // Unshift should *always* be something directly out of read()
61893 Readable.prototype.unshift = function (chunk) {
61894 var state = this._readableState;
61895 return readableAddChunk(this, state, chunk, '', true);
61896 };
61897
61898 Readable.prototype.isPaused = function () {
61899 return this._readableState.flowing === false;
61900 };
61901
61902 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
61903 var er = chunkInvalid(state, chunk);
61904 if (er) {
61905 stream.emit('error', er);
61906 } else if (chunk === null) {
61907 state.reading = false;
61908 onEofChunk(stream, state);
61909 } else if (state.objectMode || chunk && chunk.length > 0) {
61910 if (state.ended && !addToFront) {
61911 var e = new Error('stream.push() after EOF');
61912 stream.emit('error', e);
61913 } else if (state.endEmitted && addToFront) {
61914 var _e = new Error('stream.unshift() after end event');
61915 stream.emit('error', _e);
61916 } else {
61917 var skipAdd;
61918 if (state.decoder && !addToFront && !encoding) {
61919 chunk = state.decoder.write(chunk);
61920 skipAdd = !state.objectMode && chunk.length === 0;
61921 }
61922
61923 if (!addToFront) state.reading = false;
61924
61925 // Don't add to the buffer if we've decoded to an empty string chunk and
61926 // we're not in object mode
61927 if (!skipAdd) {
61928 // if we want the data now, just emit it.
61929 if (state.flowing && state.length === 0 && !state.sync) {
61930 stream.emit('data', chunk);
61931 stream.read(0);
61932 } else {
61933 // update the buffer info.
61934 state.length += state.objectMode ? 1 : chunk.length;
61935 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
61936
61937 if (state.needReadable) emitReadable(stream);
61938 }
61939 }
61940
61941 maybeReadMore(stream, state);
61942 }
61943 } else if (!addToFront) {
61944 state.reading = false;
61945 }
61946
61947 return needMoreData(state);
61948 }
61949
61950 // if it's past the high water mark, we can push in some more.
61951 // Also, if we have no data yet, we can stand some
61952 // more bytes. This is to work around cases where hwm=0,
61953 // such as the repl. Also, if the push() triggered a
61954 // readable event, and the user called read(largeNumber) such that
61955 // needReadable was set, then we ought to push more, so that another
61956 // 'readable' event will be triggered.
61957 function needMoreData(state) {
61958 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
61959 }
61960
61961 // backwards compatibility.
61962 Readable.prototype.setEncoding = function (enc) {
61963 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
61964 this._readableState.decoder = new StringDecoder(enc);
61965 this._readableState.encoding = enc;
61966 return this;
61967 };
61968
61969 // Don't raise the hwm > 8MB
61970 var MAX_HWM = 0x800000;
61971 function computeNewHighWaterMark(n) {
61972 if (n >= MAX_HWM) {
61973 n = MAX_HWM;
61974 } else {
61975 // Get the next highest power of 2 to prevent increasing hwm excessively in
61976 // tiny amounts
61977 n--;
61978 n |= n >>> 1;
61979 n |= n >>> 2;
61980 n |= n >>> 4;
61981 n |= n >>> 8;
61982 n |= n >>> 16;
61983 n++;
61984 }
61985 return n;
61986 }
61987
61988 // This function is designed to be inlinable, so please take care when making
61989 // changes to the function body.
61990 function howMuchToRead(n, state) {
61991 if (n <= 0 || state.length === 0 && state.ended) return 0;
61992 if (state.objectMode) return 1;
61993 if (n !== n) {
61994 // Only flow one buffer at a time
61995 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
61996 }
61997 // If we're asking for more than the current hwm, then raise the hwm.
61998 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
61999 if (n <= state.length) return n;
62000 // Don't have enough
62001 if (!state.ended) {
62002 state.needReadable = true;
62003 return 0;
62004 }
62005 return state.length;
62006 }
62007
62008 // you can override either this method, or the async _read(n) below.
62009 Readable.prototype.read = function (n) {
62010 debug('read', n);
62011 n = parseInt(n, 10);
62012 var state = this._readableState;
62013 var nOrig = n;
62014
62015 if (n !== 0) state.emittedReadable = false;
62016
62017 // if we're doing read(0) to trigger a readable event, but we
62018 // already have a bunch of data in the buffer, then just trigger
62019 // the 'readable' event and move on.
62020 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
62021 debug('read: emitReadable', state.length, state.ended);
62022 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
62023 return null;
62024 }
62025
62026 n = howMuchToRead(n, state);
62027
62028 // if we've ended, and we're now clear, then finish it up.
62029 if (n === 0 && state.ended) {
62030 if (state.length === 0) endReadable(this);
62031 return null;
62032 }
62033
62034 // All the actual chunk generation logic needs to be
62035 // *below* the call to _read. The reason is that in certain
62036 // synthetic stream cases, such as passthrough streams, _read
62037 // may be a completely synchronous operation which may change
62038 // the state of the read buffer, providing enough data when
62039 // before there was *not* enough.
62040 //
62041 // So, the steps are:
62042 // 1. Figure out what the state of things will be after we do
62043 // a read from the buffer.
62044 //
62045 // 2. If that resulting state will trigger a _read, then call _read.
62046 // Note that this may be asynchronous, or synchronous. Yes, it is
62047 // deeply ugly to write APIs this way, but that still doesn't mean
62048 // that the Readable class should behave improperly, as streams are
62049 // designed to be sync/async agnostic.
62050 // Take note if the _read call is sync or async (ie, if the read call
62051 // has returned yet), so that we know whether or not it's safe to emit
62052 // 'readable' etc.
62053 //
62054 // 3. Actually pull the requested chunks out of the buffer and return.
62055
62056 // if we need a readable event, then we need to do some reading.
62057 var doRead = state.needReadable;
62058 debug('need readable', doRead);
62059
62060 // if we currently have less than the highWaterMark, then also read some
62061 if (state.length === 0 || state.length - n < state.highWaterMark) {
62062 doRead = true;
62063 debug('length less than watermark', doRead);
62064 }
62065
62066 // however, if we've ended, then there's no point, and if we're already
62067 // reading, then it's unnecessary.
62068 if (state.ended || state.reading) {
62069 doRead = false;
62070 debug('reading or ended', doRead);
62071 } else if (doRead) {
62072 debug('do read');
62073 state.reading = true;
62074 state.sync = true;
62075 // if the length is currently zero, then we *need* a readable event.
62076 if (state.length === 0) state.needReadable = true;
62077 // call internal read method
62078 this._read(state.highWaterMark);
62079 state.sync = false;
62080 // If _read pushed data synchronously, then `reading` will be false,
62081 // and we need to re-evaluate how much data we can return to the user.
62082 if (!state.reading) n = howMuchToRead(nOrig, state);
62083 }
62084
62085 var ret;
62086 if (n > 0) ret = fromList(n, state);else ret = null;
62087
62088 if (ret === null) {
62089 state.needReadable = true;
62090 n = 0;
62091 } else {
62092 state.length -= n;
62093 }
62094
62095 if (state.length === 0) {
62096 // If we have nothing in the buffer, then we want to know
62097 // as soon as we *do* get something into the buffer.
62098 if (!state.ended) state.needReadable = true;
62099
62100 // If we tried to read() past the EOF, then emit end on the next tick.
62101 if (nOrig !== n && state.ended) endReadable(this);
62102 }
62103
62104 if (ret !== null) this.emit('data', ret);
62105
62106 return ret;
62107 };
62108
62109 function chunkInvalid(state, chunk) {
62110 var er = null;
62111 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
62112 er = new TypeError('Invalid non-string/buffer chunk');
62113 }
62114 return er;
62115 }
62116
62117 function onEofChunk(stream, state) {
62118 if (state.ended) return;
62119 if (state.decoder) {
62120 var chunk = state.decoder.end();
62121 if (chunk && chunk.length) {
62122 state.buffer.push(chunk);
62123 state.length += state.objectMode ? 1 : chunk.length;
62124 }
62125 }
62126 state.ended = true;
62127
62128 // emit 'readable' now to make sure it gets picked up.
62129 emitReadable(stream);
62130 }
62131
62132 // Don't emit readable right away in sync mode, because this can trigger
62133 // another read() call => stack overflow. This way, it might trigger
62134 // a nextTick recursion warning, but that's not so bad.
62135 function emitReadable(stream) {
62136 var state = stream._readableState;
62137 state.needReadable = false;
62138 if (!state.emittedReadable) {
62139 debug('emitReadable', state.flowing);
62140 state.emittedReadable = true;
62141 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
62142 }
62143 }
62144
62145 function emitReadable_(stream) {
62146 debug('emit readable');
62147 stream.emit('readable');
62148 flow(stream);
62149 }
62150
62151 // at this point, the user has presumably seen the 'readable' event,
62152 // and called read() to consume some data. that may have triggered
62153 // in turn another _read(n) call, in which case reading = true if
62154 // it's in progress.
62155 // However, if we're not ended, or reading, and the length < hwm,
62156 // then go ahead and try to read some more preemptively.
62157 function maybeReadMore(stream, state) {
62158 if (!state.readingMore) {
62159 state.readingMore = true;
62160 processNextTick(maybeReadMore_, stream, state);
62161 }
62162 }
62163
62164 function maybeReadMore_(stream, state) {
62165 var len = state.length;
62166 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
62167 debug('maybeReadMore read 0');
62168 stream.read(0);
62169 if (len === state.length)
62170 // didn't get any data, stop spinning.
62171 break;else len = state.length;
62172 }
62173 state.readingMore = false;
62174 }
62175
62176 // abstract method. to be overridden in specific implementation classes.
62177 // call cb(er, data) where data is <= n in length.
62178 // for virtual (non-string, non-buffer) streams, "length" is somewhat
62179 // arbitrary, and perhaps not very meaningful.
62180 Readable.prototype._read = function (n) {
62181 this.emit('error', new Error('_read() is not implemented'));
62182 };
62183
62184 Readable.prototype.pipe = function (dest, pipeOpts) {
62185 var src = this;
62186 var state = this._readableState;
62187
62188 switch (state.pipesCount) {
62189 case 0:
62190 state.pipes = dest;
62191 break;
62192 case 1:
62193 state.pipes = [state.pipes, dest];
62194 break;
62195 default:
62196 state.pipes.push(dest);
62197 break;
62198 }
62199 state.pipesCount += 1;
62200 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
62201
62202 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
62203
62204 var endFn = doEnd ? onend : cleanup;
62205 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
62206
62207 dest.on('unpipe', onunpipe);
62208 function onunpipe(readable) {
62209 debug('onunpipe');
62210 if (readable === src) {
62211 cleanup();
62212 }
62213 }
62214
62215 function onend() {
62216 debug('onend');
62217 dest.end();
62218 }
62219
62220 // when the dest drains, it reduces the awaitDrain counter
62221 // on the source. This would be more elegant with a .once()
62222 // handler in flow(), but adding and removing repeatedly is
62223 // too slow.
62224 var ondrain = pipeOnDrain(src);
62225 dest.on('drain', ondrain);
62226
62227 var cleanedUp = false;
62228 function cleanup() {
62229 debug('cleanup');
62230 // cleanup event handlers once the pipe is broken
62231 dest.removeListener('close', onclose);
62232 dest.removeListener('finish', onfinish);
62233 dest.removeListener('drain', ondrain);
62234 dest.removeListener('error', onerror);
62235 dest.removeListener('unpipe', onunpipe);
62236 src.removeListener('end', onend);
62237 src.removeListener('end', cleanup);
62238 src.removeListener('data', ondata);
62239
62240 cleanedUp = true;
62241
62242 // if the reader is waiting for a drain event from this
62243 // specific writer, then it would cause it to never start
62244 // flowing again.
62245 // So, if this is awaiting a drain, then we just call it now.
62246 // If we don't know, then assume that we are waiting for one.
62247 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
62248 }
62249
62250 // If the user pushes more data while we're writing to dest then we'll end up
62251 // in ondata again. However, we only want to increase awaitDrain once because
62252 // dest will only emit one 'drain' event for the multiple writes.
62253 // => Introduce a guard on increasing awaitDrain.
62254 var increasedAwaitDrain = false;
62255 src.on('data', ondata);
62256 function ondata(chunk) {
62257 debug('ondata');
62258 increasedAwaitDrain = false;
62259 var ret = dest.write(chunk);
62260 if (false === ret && !increasedAwaitDrain) {
62261 // If the user unpiped during `dest.write()`, it is possible
62262 // to get stuck in a permanently paused state if that write
62263 // also returned false.
62264 // => Check whether `dest` is still a piping destination.
62265 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
62266 debug('false write response, pause', src._readableState.awaitDrain);
62267 src._readableState.awaitDrain++;
62268 increasedAwaitDrain = true;
62269 }
62270 src.pause();
62271 }
62272 }
62273
62274 // if the dest has an error, then stop piping into it.
62275 // however, don't suppress the throwing behavior for this.
62276 function onerror(er) {
62277 debug('onerror', er);
62278 unpipe();
62279 dest.removeListener('error', onerror);
62280 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
62281 }
62282
62283 // Make sure our error handler is attached before userland ones.
62284 prependListener(dest, 'error', onerror);
62285
62286 // Both close and finish should trigger unpipe, but only once.
62287 function onclose() {
62288 dest.removeListener('finish', onfinish);
62289 unpipe();
62290 }
62291 dest.once('close', onclose);
62292 function onfinish() {
62293 debug('onfinish');
62294 dest.removeListener('close', onclose);
62295 unpipe();
62296 }
62297 dest.once('finish', onfinish);
62298
62299 function unpipe() {
62300 debug('unpipe');
62301 src.unpipe(dest);
62302 }
62303
62304 // tell the dest that it's being piped to
62305 dest.emit('pipe', src);
62306
62307 // start the flow if it hasn't been started already.
62308 if (!state.flowing) {
62309 debug('pipe resume');
62310 src.resume();
62311 }
62312
62313 return dest;
62314 };
62315
62316 function pipeOnDrain(src) {
62317 return function () {
62318 var state = src._readableState;
62319 debug('pipeOnDrain', state.awaitDrain);
62320 if (state.awaitDrain) state.awaitDrain--;
62321 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
62322 state.flowing = true;
62323 flow(src);
62324 }
62325 };
62326 }
62327
62328 Readable.prototype.unpipe = function (dest) {
62329 var state = this._readableState;
62330
62331 // if we're not piping anywhere, then do nothing.
62332 if (state.pipesCount === 0) return this;
62333
62334 // just one destination. most common case.
62335 if (state.pipesCount === 1) {
62336 // passed in one, but it's not the right one.
62337 if (dest && dest !== state.pipes) return this;
62338
62339 if (!dest) dest = state.pipes;
62340
62341 // got a match.
62342 state.pipes = null;
62343 state.pipesCount = 0;
62344 state.flowing = false;
62345 if (dest) dest.emit('unpipe', this);
62346 return this;
62347 }
62348
62349 // slow case. multiple pipe destinations.
62350
62351 if (!dest) {
62352 // remove all.
62353 var dests = state.pipes;
62354 var len = state.pipesCount;
62355 state.pipes = null;
62356 state.pipesCount = 0;
62357 state.flowing = false;
62358
62359 for (var i = 0; i < len; i++) {
62360 dests[i].emit('unpipe', this);
62361 }return this;
62362 }
62363
62364 // try to find the right one.
62365 var index = indexOf(state.pipes, dest);
62366 if (index === -1) return this;
62367
62368 state.pipes.splice(index, 1);
62369 state.pipesCount -= 1;
62370 if (state.pipesCount === 1) state.pipes = state.pipes[0];
62371
62372 dest.emit('unpipe', this);
62373
62374 return this;
62375 };
62376
62377 // set up data events if they are asked for
62378 // Ensure readable listeners eventually get something
62379 Readable.prototype.on = function (ev, fn) {
62380 var res = Stream.prototype.on.call(this, ev, fn);
62381
62382 if (ev === 'data') {
62383 // Start flowing on next tick if stream isn't explicitly paused
62384 if (this._readableState.flowing !== false) this.resume();
62385 } else if (ev === 'readable') {
62386 var state = this._readableState;
62387 if (!state.endEmitted && !state.readableListening) {
62388 state.readableListening = state.needReadable = true;
62389 state.emittedReadable = false;
62390 if (!state.reading) {
62391 processNextTick(nReadingNextTick, this);
62392 } else if (state.length) {
62393 emitReadable(this, state);
62394 }
62395 }
62396 }
62397
62398 return res;
62399 };
62400 Readable.prototype.addListener = Readable.prototype.on;
62401
62402 function nReadingNextTick(self) {
62403 debug('readable nexttick read 0');
62404 self.read(0);
62405 }
62406
62407 // pause() and resume() are remnants of the legacy readable stream API
62408 // If the user uses them, then switch into old mode.
62409 Readable.prototype.resume = function () {
62410 var state = this._readableState;
62411 if (!state.flowing) {
62412 debug('resume');
62413 state.flowing = true;
62414 resume(this, state);
62415 }
62416 return this;
62417 };
62418
62419 function resume(stream, state) {
62420 if (!state.resumeScheduled) {
62421 state.resumeScheduled = true;
62422 processNextTick(resume_, stream, state);
62423 }
62424 }
62425
62426 function resume_(stream, state) {
62427 if (!state.reading) {
62428 debug('resume read 0');
62429 stream.read(0);
62430 }
62431
62432 state.resumeScheduled = false;
62433 state.awaitDrain = 0;
62434 stream.emit('resume');
62435 flow(stream);
62436 if (state.flowing && !state.reading) stream.read(0);
62437 }
62438
62439 Readable.prototype.pause = function () {
62440 debug('call pause flowing=%j', this._readableState.flowing);
62441 if (false !== this._readableState.flowing) {
62442 debug('pause');
62443 this._readableState.flowing = false;
62444 this.emit('pause');
62445 }
62446 return this;
62447 };
62448
62449 function flow(stream) {
62450 var state = stream._readableState;
62451 debug('flow', state.flowing);
62452 while (state.flowing && stream.read() !== null) {}
62453 }
62454
62455 // wrap an old-style stream as the async data source.
62456 // This is *not* part of the readable stream interface.
62457 // It is an ugly unfortunate mess of history.
62458 Readable.prototype.wrap = function (stream) {
62459 var state = this._readableState;
62460 var paused = false;
62461
62462 var self = this;
62463 stream.on('end', function () {
62464 debug('wrapped end');
62465 if (state.decoder && !state.ended) {
62466 var chunk = state.decoder.end();
62467 if (chunk && chunk.length) self.push(chunk);
62468 }
62469
62470 self.push(null);
62471 });
62472
62473 stream.on('data', function (chunk) {
62474 debug('wrapped data');
62475 if (state.decoder) chunk = state.decoder.write(chunk);
62476
62477 // don't skip over falsy values in objectMode
62478 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
62479
62480 var ret = self.push(chunk);
62481 if (!ret) {
62482 paused = true;
62483 stream.pause();
62484 }
62485 });
62486
62487 // proxy all the other methods.
62488 // important when wrapping filters and duplexes.
62489 for (var i in stream) {
62490 if (this[i] === undefined && typeof stream[i] === 'function') {
62491 this[i] = function (method) {
62492 return function () {
62493 return stream[method].apply(stream, arguments);
62494 };
62495 }(i);
62496 }
62497 }
62498
62499 // proxy certain important events.
62500 for (var n = 0; n < kProxyEvents.length; n++) {
62501 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
62502 }
62503
62504 // when we try to consume some more bytes, simply unpause the
62505 // underlying stream.
62506 self._read = function (n) {
62507 debug('wrapped _read', n);
62508 if (paused) {
62509 paused = false;
62510 stream.resume();
62511 }
62512 };
62513
62514 return self;
62515 };
62516
62517 // exposed for testing purposes only.
62518 Readable._fromList = fromList;
62519
62520 // Pluck off n bytes from an array of buffers.
62521 // Length is the combined lengths of all the buffers in the list.
62522 // This function is designed to be inlinable, so please take care when making
62523 // changes to the function body.
62524 function fromList(n, state) {
62525 // nothing buffered
62526 if (state.length === 0) return null;
62527
62528 var ret;
62529 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
62530 // read it all, truncate the list
62531 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
62532 state.buffer.clear();
62533 } else {
62534 // read part of list
62535 ret = fromListPartial(n, state.buffer, state.decoder);
62536 }
62537
62538 return ret;
62539 }
62540
62541 // Extracts only enough buffered data to satisfy the amount requested.
62542 // This function is designed to be inlinable, so please take care when making
62543 // changes to the function body.
62544 function fromListPartial(n, list, hasStrings) {
62545 var ret;
62546 if (n < list.head.data.length) {
62547 // slice is the same for buffers and strings
62548 ret = list.head.data.slice(0, n);
62549 list.head.data = list.head.data.slice(n);
62550 } else if (n === list.head.data.length) {
62551 // first chunk is a perfect match
62552 ret = list.shift();
62553 } else {
62554 // result spans more than one buffer
62555 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
62556 }
62557 return ret;
62558 }
62559
62560 // Copies a specified amount of characters from the list of buffered data
62561 // chunks.
62562 // This function is designed to be inlinable, so please take care when making
62563 // changes to the function body.
62564 function copyFromBufferString(n, list) {
62565 var p = list.head;
62566 var c = 1;
62567 var ret = p.data;
62568 n -= ret.length;
62569 while (p = p.next) {
62570 var str = p.data;
62571 var nb = n > str.length ? str.length : n;
62572 if (nb === str.length) ret += str;else ret += str.slice(0, n);
62573 n -= nb;
62574 if (n === 0) {
62575 if (nb === str.length) {
62576 ++c;
62577 if (p.next) list.head = p.next;else list.head = list.tail = null;
62578 } else {
62579 list.head = p;
62580 p.data = str.slice(nb);
62581 }
62582 break;
62583 }
62584 ++c;
62585 }
62586 list.length -= c;
62587 return ret;
62588 }
62589
62590 // Copies a specified amount of bytes from the list of buffered data chunks.
62591 // This function is designed to be inlinable, so please take care when making
62592 // changes to the function body.
62593 function copyFromBuffer(n, list) {
62594 var ret = bufferShim.allocUnsafe(n);
62595 var p = list.head;
62596 var c = 1;
62597 p.data.copy(ret);
62598 n -= p.data.length;
62599 while (p = p.next) {
62600 var buf = p.data;
62601 var nb = n > buf.length ? buf.length : n;
62602 buf.copy(ret, ret.length - n, 0, nb);
62603 n -= nb;
62604 if (n === 0) {
62605 if (nb === buf.length) {
62606 ++c;
62607 if (p.next) list.head = p.next;else list.head = list.tail = null;
62608 } else {
62609 list.head = p;
62610 p.data = buf.slice(nb);
62611 }
62612 break;
62613 }
62614 ++c;
62615 }
62616 list.length -= c;
62617 return ret;
62618 }
62619
62620 function endReadable(stream) {
62621 var state = stream._readableState;
62622
62623 // If we get here before consuming all the bytes, then that is a
62624 // bug in node. Should never happen.
62625 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
62626
62627 if (!state.endEmitted) {
62628 state.ended = true;
62629 processNextTick(endReadableNT, state, stream);
62630 }
62631 }
62632
62633 function endReadableNT(state, stream) {
62634 // Check that we didn't get one last unshift.
62635 if (!state.endEmitted && state.length === 0) {
62636 state.endEmitted = true;
62637 stream.readable = false;
62638 stream.emit('end');
62639 }
62640 }
62641
62642 function forEach(xs, f) {
62643 for (var i = 0, l = xs.length; i < l; i++) {
62644 f(xs[i], i);
62645 }
62646 }
62647
62648 function indexOf(xs, x) {
62649 for (var i = 0, l = xs.length; i < l; i++) {
62650 if (xs[i] === x) return i;
62651 }
62652 return -1;
62653 }
62654 }).call(this,require('_process'))
62655 },{"./_stream_duplex":121,"./internal/streams/BufferList":126,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"events":83,"inherits":95,"isarray":97,"process-nextick-args":111,"string_decoder/":128,"util":19}],124:[function(require,module,exports){
62656 // a transform stream is a readable/writable stream where you do
62657 // something with the data. Sometimes it's called a "filter",
62658 // but that's not a great name for it, since that implies a thing where
62659 // some bits pass through, and others are simply ignored. (That would
62660 // be a valid example of a transform, of course.)
62661 //
62662 // While the output is causally related to the input, it's not a
62663 // necessarily symmetric or synchronous transformation. For example,
62664 // a zlib stream might take multiple plain-text writes(), and then
62665 // emit a single compressed chunk some time in the future.
62666 //
62667 // Here's how this works:
62668 //
62669 // The Transform stream has all the aspects of the readable and writable
62670 // stream classes. When you write(chunk), that calls _write(chunk,cb)
62671 // internally, and returns false if there's a lot of pending writes
62672 // buffered up. When you call read(), that calls _read(n) until
62673 // there's enough pending readable data buffered up.
62674 //
62675 // In a transform stream, the written data is placed in a buffer. When
62676 // _read(n) is called, it transforms the queued up data, calling the
62677 // buffered _write cb's as it consumes chunks. If consuming a single
62678 // written chunk would result in multiple output chunks, then the first
62679 // outputted bit calls the readcb, and subsequent chunks just go into
62680 // the read buffer, and will cause it to emit 'readable' if necessary.
62681 //
62682 // This way, back-pressure is actually determined by the reading side,
62683 // since _read has to be called to start processing a new chunk. However,
62684 // a pathological inflate type of transform can cause excessive buffering
62685 // here. For example, imagine a stream where every byte of input is
62686 // interpreted as an integer from 0-255, and then results in that many
62687 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
62688 // 1kb of data being output. In this case, you could write a very small
62689 // amount of input, and end up with a very large amount of output. In
62690 // such a pathological inflating mechanism, there'd be no way to tell
62691 // the system to stop doing the transform. A single 4MB write could
62692 // cause the system to run out of memory.
62693 //
62694 // However, even in such a pathological case, only a single written chunk
62695 // would be consumed, and then the rest would wait (un-transformed) until
62696 // the results of the previous transformed chunk were consumed.
62697
62698 'use strict';
62699
62700 module.exports = Transform;
62701
62702 var Duplex = require('./_stream_duplex');
62703
62704 /*<replacement>*/
62705 var util = require('core-util-is');
62706 util.inherits = require('inherits');
62707 /*</replacement>*/
62708
62709 util.inherits(Transform, Duplex);
62710
62711 function TransformState(stream) {
62712 this.afterTransform = function (er, data) {
62713 return afterTransform(stream, er, data);
62714 };
62715
62716 this.needTransform = false;
62717 this.transforming = false;
62718 this.writecb = null;
62719 this.writechunk = null;
62720 this.writeencoding = null;
62721 }
62722
62723 function afterTransform(stream, er, data) {
62724 var ts = stream._transformState;
62725 ts.transforming = false;
62726
62727 var cb = ts.writecb;
62728
62729 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
62730
62731 ts.writechunk = null;
62732 ts.writecb = null;
62733
62734 if (data !== null && data !== undefined) stream.push(data);
62735
62736 cb(er);
62737
62738 var rs = stream._readableState;
62739 rs.reading = false;
62740 if (rs.needReadable || rs.length < rs.highWaterMark) {
62741 stream._read(rs.highWaterMark);
62742 }
62743 }
62744
62745 function Transform(options) {
62746 if (!(this instanceof Transform)) return new Transform(options);
62747
62748 Duplex.call(this, options);
62749
62750 this._transformState = new TransformState(this);
62751
62752 var stream = this;
62753
62754 // start out asking for a readable event once data is transformed.
62755 this._readableState.needReadable = true;
62756
62757 // we have implemented the _read method, and done the other things
62758 // that Readable wants before the first _read call, so unset the
62759 // sync guard flag.
62760 this._readableState.sync = false;
62761
62762 if (options) {
62763 if (typeof options.transform === 'function') this._transform = options.transform;
62764
62765 if (typeof options.flush === 'function') this._flush = options.flush;
62766 }
62767
62768 // When the writable side finishes, then flush out anything remaining.
62769 this.once('prefinish', function () {
62770 if (typeof this._flush === 'function') this._flush(function (er, data) {
62771 done(stream, er, data);
62772 });else done(stream);
62773 });
62774 }
62775
62776 Transform.prototype.push = function (chunk, encoding) {
62777 this._transformState.needTransform = false;
62778 return Duplex.prototype.push.call(this, chunk, encoding);
62779 };
62780
62781 // This is the part where you do stuff!
62782 // override this function in implementation classes.
62783 // 'chunk' is an input chunk.
62784 //
62785 // Call `push(newChunk)` to pass along transformed output
62786 // to the readable side. You may call 'push' zero or more times.
62787 //
62788 // Call `cb(err)` when you are done with this chunk. If you pass
62789 // an error, then that'll put the hurt on the whole operation. If you
62790 // never call cb(), then you'll never get another chunk.
62791 Transform.prototype._transform = function (chunk, encoding, cb) {
62792 throw new Error('_transform() is not implemented');
62793 };
62794
62795 Transform.prototype._write = function (chunk, encoding, cb) {
62796 var ts = this._transformState;
62797 ts.writecb = cb;
62798 ts.writechunk = chunk;
62799 ts.writeencoding = encoding;
62800 if (!ts.transforming) {
62801 var rs = this._readableState;
62802 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
62803 }
62804 };
62805
62806 // Doesn't matter what the args are here.
62807 // _transform does all the work.
62808 // That we got here means that the readable side wants more data.
62809 Transform.prototype._read = function (n) {
62810 var ts = this._transformState;
62811
62812 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
62813 ts.transforming = true;
62814 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
62815 } else {
62816 // mark that we need a transform, so that any data that comes in
62817 // will get processed, now that we've asked for it.
62818 ts.needTransform = true;
62819 }
62820 };
62821
62822 function done(stream, er, data) {
62823 if (er) return stream.emit('error', er);
62824
62825 if (data !== null && data !== undefined) stream.push(data);
62826
62827 // if there's nothing in the write buffer, then that means
62828 // that nothing more will ever be provided
62829 var ws = stream._writableState;
62830 var ts = stream._transformState;
62831
62832 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
62833
62834 if (ts.transforming) throw new Error('Calling transform done when still transforming');
62835
62836 return stream.push(null);
62837 }
62838 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
62839 (function (process){
62840 // A bit simpler than readable streams.
62841 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
62842 // the drain event emission and buffering.
62843
62844 'use strict';
62845
62846 module.exports = Writable;
62847
62848 /*<replacement>*/
62849 var processNextTick = require('process-nextick-args');
62850 /*</replacement>*/
62851
62852 /*<replacement>*/
62853 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
62854 /*</replacement>*/
62855
62856 /*<replacement>*/
62857 var Duplex;
62858 /*</replacement>*/
62859
62860 Writable.WritableState = WritableState;
62861
62862 /*<replacement>*/
62863 var util = require('core-util-is');
62864 util.inherits = require('inherits');
62865 /*</replacement>*/
62866
62867 /*<replacement>*/
62868 var internalUtil = {
62869 deprecate: require('util-deprecate')
62870 };
62871 /*</replacement>*/
62872
62873 /*<replacement>*/
62874 var Stream = require('./internal/streams/stream');
62875 /*</replacement>*/
62876
62877 var Buffer = require('buffer').Buffer;
62878 /*<replacement>*/
62879 var bufferShim = require('buffer-shims');
62880 /*</replacement>*/
62881
62882 util.inherits(Writable, Stream);
62883
62884 function nop() {}
62885
62886 function WriteReq(chunk, encoding, cb) {
62887 this.chunk = chunk;
62888 this.encoding = encoding;
62889 this.callback = cb;
62890 this.next = null;
62891 }
62892
62893 function WritableState(options, stream) {
62894 Duplex = Duplex || require('./_stream_duplex');
62895
62896 options = options || {};
62897
62898 // object stream flag to indicate whether or not this stream
62899 // contains buffers or objects.
62900 this.objectMode = !!options.objectMode;
62901
62902 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
62903
62904 // the point at which write() starts returning false
62905 // Note: 0 is a valid value, means that we always return false if
62906 // the entire buffer is not flushed immediately on write()
62907 var hwm = options.highWaterMark;
62908 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
62909 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
62910
62911 // cast to ints.
62912 this.highWaterMark = ~~this.highWaterMark;
62913
62914 // drain event flag.
62915 this.needDrain = false;
62916 // at the start of calling end()
62917 this.ending = false;
62918 // when end() has been called, and returned
62919 this.ended = false;
62920 // when 'finish' is emitted
62921 this.finished = false;
62922
62923 // should we decode strings into buffers before passing to _write?
62924 // this is here so that some node-core streams can optimize string
62925 // handling at a lower level.
62926 var noDecode = options.decodeStrings === false;
62927 this.decodeStrings = !noDecode;
62928
62929 // Crypto is kind of old and crusty. Historically, its default string
62930 // encoding is 'binary' so we have to make this configurable.
62931 // Everything else in the universe uses 'utf8', though.
62932 this.defaultEncoding = options.defaultEncoding || 'utf8';
62933
62934 // not an actual buffer we keep track of, but a measurement
62935 // of how much we're waiting to get pushed to some underlying
62936 // socket or file.
62937 this.length = 0;
62938
62939 // a flag to see when we're in the middle of a write.
62940 this.writing = false;
62941
62942 // when true all writes will be buffered until .uncork() call
62943 this.corked = 0;
62944
62945 // a flag to be able to tell if the onwrite cb is called immediately,
62946 // or on a later tick. We set this to true at first, because any
62947 // actions that shouldn't happen until "later" should generally also
62948 // not happen before the first write call.
62949 this.sync = true;
62950
62951 // a flag to know if we're processing previously buffered items, which
62952 // may call the _write() callback in the same tick, so that we don't
62953 // end up in an overlapped onwrite situation.
62954 this.bufferProcessing = false;
62955
62956 // the callback that's passed to _write(chunk,cb)
62957 this.onwrite = function (er) {
62958 onwrite(stream, er);
62959 };
62960
62961 // the callback that the user supplies to write(chunk,encoding,cb)
62962 this.writecb = null;
62963
62964 // the amount that is being written when _write is called.
62965 this.writelen = 0;
62966
62967 this.bufferedRequest = null;
62968 this.lastBufferedRequest = null;
62969
62970 // number of pending user-supplied write callbacks
62971 // this must be 0 before 'finish' can be emitted
62972 this.pendingcb = 0;
62973
62974 // emit prefinish if the only thing we're waiting for is _write cbs
62975 // This is relevant for synchronous Transform streams
62976 this.prefinished = false;
62977
62978 // True if the error was already emitted and should not be thrown again
62979 this.errorEmitted = false;
62980
62981 // count buffered requests
62982 this.bufferedRequestCount = 0;
62983
62984 // allocate the first CorkedRequest, there is always
62985 // one allocated and free to use, and we maintain at most two
62986 this.corkedRequestsFree = new CorkedRequest(this);
62987 }
62988
62989 WritableState.prototype.getBuffer = function getBuffer() {
62990 var current = this.bufferedRequest;
62991 var out = [];
62992 while (current) {
62993 out.push(current);
62994 current = current.next;
62995 }
62996 return out;
62997 };
62998
62999 (function () {
63000 try {
63001 Object.defineProperty(WritableState.prototype, 'buffer', {
63002 get: internalUtil.deprecate(function () {
63003 return this.getBuffer();
63004 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
63005 });
63006 } catch (_) {}
63007 })();
63008
63009 // Test _writableState for inheritance to account for Duplex streams,
63010 // whose prototype chain only points to Readable.
63011 var realHasInstance;
63012 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
63013 realHasInstance = Function.prototype[Symbol.hasInstance];
63014 Object.defineProperty(Writable, Symbol.hasInstance, {
63015 value: function (object) {
63016 if (realHasInstance.call(this, object)) return true;
63017
63018 return object && object._writableState instanceof WritableState;
63019 }
63020 });
63021 } else {
63022 realHasInstance = function (object) {
63023 return object instanceof this;
63024 };
63025 }
63026
63027 function Writable(options) {
63028 Duplex = Duplex || require('./_stream_duplex');
63029
63030 // Writable ctor is applied to Duplexes, too.
63031 // `realHasInstance` is necessary because using plain `instanceof`
63032 // would return false, as no `_writableState` property is attached.
63033
63034 // Trying to use the custom `instanceof` for Writable here will also break the
63035 // Node.js LazyTransform implementation, which has a non-trivial getter for
63036 // `_writableState` that would lead to infinite recursion.
63037 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
63038 return new Writable(options);
63039 }
63040
63041 this._writableState = new WritableState(options, this);
63042
63043 // legacy.
63044 this.writable = true;
63045
63046 if (options) {
63047 if (typeof options.write === 'function') this._write = options.write;
63048
63049 if (typeof options.writev === 'function') this._writev = options.writev;
63050 }
63051
63052 Stream.call(this);
63053 }
63054
63055 // Otherwise people can pipe Writable streams, which is just wrong.
63056 Writable.prototype.pipe = function () {
63057 this.emit('error', new Error('Cannot pipe, not readable'));
63058 };
63059
63060 function writeAfterEnd(stream, cb) {
63061 var er = new Error('write after end');
63062 // TODO: defer error events consistently everywhere, not just the cb
63063 stream.emit('error', er);
63064 processNextTick(cb, er);
63065 }
63066
63067 // Checks that a user-supplied chunk is valid, especially for the particular
63068 // mode the stream is in. Currently this means that `null` is never accepted
63069 // and undefined/non-string values are only allowed in object mode.
63070 function validChunk(stream, state, chunk, cb) {
63071 var valid = true;
63072 var er = false;
63073
63074 if (chunk === null) {
63075 er = new TypeError('May not write null values to stream');
63076 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
63077 er = new TypeError('Invalid non-string/buffer chunk');
63078 }
63079 if (er) {
63080 stream.emit('error', er);
63081 processNextTick(cb, er);
63082 valid = false;
63083 }
63084 return valid;
63085 }
63086
63087 Writable.prototype.write = function (chunk, encoding, cb) {
63088 var state = this._writableState;
63089 var ret = false;
63090 var isBuf = Buffer.isBuffer(chunk);
63091
63092 if (typeof encoding === 'function') {
63093 cb = encoding;
63094 encoding = null;
63095 }
63096
63097 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
63098
63099 if (typeof cb !== 'function') cb = nop;
63100
63101 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
63102 state.pendingcb++;
63103 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
63104 }
63105
63106 return ret;
63107 };
63108
63109 Writable.prototype.cork = function () {
63110 var state = this._writableState;
63111
63112 state.corked++;
63113 };
63114
63115 Writable.prototype.uncork = function () {
63116 var state = this._writableState;
63117
63118 if (state.corked) {
63119 state.corked--;
63120
63121 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
63122 }
63123 };
63124
63125 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
63126 // node::ParseEncoding() requires lower case.
63127 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
63128 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
63129 this._writableState.defaultEncoding = encoding;
63130 return this;
63131 };
63132
63133 function decodeChunk(state, chunk, encoding) {
63134 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
63135 chunk = bufferShim.from(chunk, encoding);
63136 }
63137 return chunk;
63138 }
63139
63140 // if we're already writing something, then just put this
63141 // in the queue, and wait our turn. Otherwise, call _write
63142 // If we return false, then we need a drain event, so set that flag.
63143 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
63144 if (!isBuf) {
63145 chunk = decodeChunk(state, chunk, encoding);
63146 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
63147 }
63148 var len = state.objectMode ? 1 : chunk.length;
63149
63150 state.length += len;
63151
63152 var ret = state.length < state.highWaterMark;
63153 // we must ensure that previous needDrain will not be reset to false.
63154 if (!ret) state.needDrain = true;
63155
63156 if (state.writing || state.corked) {
63157 var last = state.lastBufferedRequest;
63158 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
63159 if (last) {
63160 last.next = state.lastBufferedRequest;
63161 } else {
63162 state.bufferedRequest = state.lastBufferedRequest;
63163 }
63164 state.bufferedRequestCount += 1;
63165 } else {
63166 doWrite(stream, state, false, len, chunk, encoding, cb);
63167 }
63168
63169 return ret;
63170 }
63171
63172 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
63173 state.writelen = len;
63174 state.writecb = cb;
63175 state.writing = true;
63176 state.sync = true;
63177 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
63178 state.sync = false;
63179 }
63180
63181 function onwriteError(stream, state, sync, er, cb) {
63182 --state.pendingcb;
63183 if (sync) processNextTick(cb, er);else cb(er);
63184
63185 stream._writableState.errorEmitted = true;
63186 stream.emit('error', er);
63187 }
63188
63189 function onwriteStateUpdate(state) {
63190 state.writing = false;
63191 state.writecb = null;
63192 state.length -= state.writelen;
63193 state.writelen = 0;
63194 }
63195
63196 function onwrite(stream, er) {
63197 var state = stream._writableState;
63198 var sync = state.sync;
63199 var cb = state.writecb;
63200
63201 onwriteStateUpdate(state);
63202
63203 if (er) onwriteError(stream, state, sync, er, cb);else {
63204 // Check if we're actually ready to finish, but don't emit yet
63205 var finished = needFinish(state);
63206
63207 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
63208 clearBuffer(stream, state);
63209 }
63210
63211 if (sync) {
63212 /*<replacement>*/
63213 asyncWrite(afterWrite, stream, state, finished, cb);
63214 /*</replacement>*/
63215 } else {
63216 afterWrite(stream, state, finished, cb);
63217 }
63218 }
63219 }
63220
63221 function afterWrite(stream, state, finished, cb) {
63222 if (!finished) onwriteDrain(stream, state);
63223 state.pendingcb--;
63224 cb();
63225 finishMaybe(stream, state);
63226 }
63227
63228 // Must force callback to be called on nextTick, so that we don't
63229 // emit 'drain' before the write() consumer gets the 'false' return
63230 // value, and has a chance to attach a 'drain' listener.
63231 function onwriteDrain(stream, state) {
63232 if (state.length === 0 && state.needDrain) {
63233 state.needDrain = false;
63234 stream.emit('drain');
63235 }
63236 }
63237
63238 // if there's something in the buffer waiting, then process it
63239 function clearBuffer(stream, state) {
63240 state.bufferProcessing = true;
63241 var entry = state.bufferedRequest;
63242
63243 if (stream._writev && entry && entry.next) {
63244 // Fast case, write everything using _writev()
63245 var l = state.bufferedRequestCount;
63246 var buffer = new Array(l);
63247 var holder = state.corkedRequestsFree;
63248 holder.entry = entry;
63249
63250 var count = 0;
63251 while (entry) {
63252 buffer[count] = entry;
63253 entry = entry.next;
63254 count += 1;
63255 }
63256
63257 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
63258
63259 // doWrite is almost always async, defer these to save a bit of time
63260 // as the hot path ends with doWrite
63261 state.pendingcb++;
63262 state.lastBufferedRequest = null;
63263 if (holder.next) {
63264 state.corkedRequestsFree = holder.next;
63265 holder.next = null;
63266 } else {
63267 state.corkedRequestsFree = new CorkedRequest(state);
63268 }
63269 } else {
63270 // Slow case, write chunks one-by-one
63271 while (entry) {
63272 var chunk = entry.chunk;
63273 var encoding = entry.encoding;
63274 var cb = entry.callback;
63275 var len = state.objectMode ? 1 : chunk.length;
63276
63277 doWrite(stream, state, false, len, chunk, encoding, cb);
63278 entry = entry.next;
63279 // if we didn't call the onwrite immediately, then
63280 // it means that we need to wait until it does.
63281 // also, that means that the chunk and cb are currently
63282 // being processed, so move the buffer counter past them.
63283 if (state.writing) {
63284 break;
63285 }
63286 }
63287
63288 if (entry === null) state.lastBufferedRequest = null;
63289 }
63290
63291 state.bufferedRequestCount = 0;
63292 state.bufferedRequest = entry;
63293 state.bufferProcessing = false;
63294 }
63295
63296 Writable.prototype._write = function (chunk, encoding, cb) {
63297 cb(new Error('_write() is not implemented'));
63298 };
63299
63300 Writable.prototype._writev = null;
63301
63302 Writable.prototype.end = function (chunk, encoding, cb) {
63303 var state = this._writableState;
63304
63305 if (typeof chunk === 'function') {
63306 cb = chunk;
63307 chunk = null;
63308 encoding = null;
63309 } else if (typeof encoding === 'function') {
63310 cb = encoding;
63311 encoding = null;
63312 }
63313
63314 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
63315
63316 // .end() fully uncorks
63317 if (state.corked) {
63318 state.corked = 1;
63319 this.uncork();
63320 }
63321
63322 // ignore unnecessary end() calls.
63323 if (!state.ending && !state.finished) endWritable(this, state, cb);
63324 };
63325
63326 function needFinish(state) {
63327 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
63328 }
63329
63330 function prefinish(stream, state) {
63331 if (!state.prefinished) {
63332 state.prefinished = true;
63333 stream.emit('prefinish');
63334 }
63335 }
63336
63337 function finishMaybe(stream, state) {
63338 var need = needFinish(state);
63339 if (need) {
63340 if (state.pendingcb === 0) {
63341 prefinish(stream, state);
63342 state.finished = true;
63343 stream.emit('finish');
63344 } else {
63345 prefinish(stream, state);
63346 }
63347 }
63348 return need;
63349 }
63350
63351 function endWritable(stream, state, cb) {
63352 state.ending = true;
63353 finishMaybe(stream, state);
63354 if (cb) {
63355 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
63356 }
63357 state.ended = true;
63358 stream.writable = false;
63359 }
63360
63361 // It seems a linked list but it is not
63362 // there will be only 2 of these for each stream
63363 function CorkedRequest(state) {
63364 var _this = this;
63365
63366 this.next = null;
63367 this.entry = null;
63368 this.finish = function (err) {
63369 var entry = _this.entry;
63370 _this.entry = null;
63371 while (entry) {
63372 var cb = entry.callback;
63373 state.pendingcb--;
63374 cb(err);
63375 entry = entry.next;
63376 }
63377 if (state.corkedRequestsFree) {
63378 state.corkedRequestsFree.next = _this;
63379 } else {
63380 state.corkedRequestsFree = _this;
63381 }
63382 };
63383 }
63384 }).call(this,require('_process'))
63385 },{"./_stream_duplex":121,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"inherits":95,"process-nextick-args":111,"util-deprecate":145}],126:[function(require,module,exports){
63386 'use strict';
63387
63388 var Buffer = require('buffer').Buffer;
63389 /*<replacement>*/
63390 var bufferShim = require('buffer-shims');
63391 /*</replacement>*/
63392
63393 module.exports = BufferList;
63394
63395 function BufferList() {
63396 this.head = null;
63397 this.tail = null;
63398 this.length = 0;
63399 }
63400
63401 BufferList.prototype.push = function (v) {
63402 var entry = { data: v, next: null };
63403 if (this.length > 0) this.tail.next = entry;else this.head = entry;
63404 this.tail = entry;
63405 ++this.length;
63406 };
63407
63408 BufferList.prototype.unshift = function (v) {
63409 var entry = { data: v, next: this.head };
63410 if (this.length === 0) this.tail = entry;
63411 this.head = entry;
63412 ++this.length;
63413 };
63414
63415 BufferList.prototype.shift = function () {
63416 if (this.length === 0) return;
63417 var ret = this.head.data;
63418 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
63419 --this.length;
63420 return ret;
63421 };
63422
63423 BufferList.prototype.clear = function () {
63424 this.head = this.tail = null;
63425 this.length = 0;
63426 };
63427
63428 BufferList.prototype.join = function (s) {
63429 if (this.length === 0) return '';
63430 var p = this.head;
63431 var ret = '' + p.data;
63432 while (p = p.next) {
63433 ret += s + p.data;
63434 }return ret;
63435 };
63436
63437 BufferList.prototype.concat = function (n) {
63438 if (this.length === 0) return bufferShim.alloc(0);
63439 if (this.length === 1) return this.head.data;
63440 var ret = bufferShim.allocUnsafe(n >>> 0);
63441 var p = this.head;
63442 var i = 0;
63443 while (p) {
63444 p.data.copy(ret, i);
63445 i += p.data.length;
63446 p = p.next;
63447 }
63448 return ret;
63449 };
63450 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
63451 module.exports = require('events').EventEmitter;
63452
63453 },{"events":83}],128:[function(require,module,exports){
63454 'use strict';
63455
63456 var Buffer = require('safe-buffer').Buffer;
63457
63458 var isEncoding = Buffer.isEncoding || function (encoding) {
63459 encoding = '' + encoding;
63460 switch (encoding && encoding.toLowerCase()) {
63461 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':
63462 return true;
63463 default:
63464 return false;
63465 }
63466 };
63467
63468 function _normalizeEncoding(enc) {
63469 if (!enc) return 'utf8';
63470 var retried;
63471 while (true) {
63472 switch (enc) {
63473 case 'utf8':
63474 case 'utf-8':
63475 return 'utf8';
63476 case 'ucs2':
63477 case 'ucs-2':
63478 case 'utf16le':
63479 case 'utf-16le':
63480 return 'utf16le';
63481 case 'latin1':
63482 case 'binary':
63483 return 'latin1';
63484 case 'base64':
63485 case 'ascii':
63486 case 'hex':
63487 return enc;
63488 default:
63489 if (retried) return; // undefined
63490 enc = ('' + enc).toLowerCase();
63491 retried = true;
63492 }
63493 }
63494 };
63495
63496 // Do not cache `Buffer.isEncoding` when checking encoding names as some
63497 // modules monkey-patch it to support additional encodings
63498 function normalizeEncoding(enc) {
63499 var nenc = _normalizeEncoding(enc);
63500 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
63501 return nenc || enc;
63502 }
63503
63504 // StringDecoder provides an interface for efficiently splitting a series of
63505 // buffers into a series of JS strings without breaking apart multi-byte
63506 // characters.
63507 exports.StringDecoder = StringDecoder;
63508 function StringDecoder(encoding) {
63509 this.encoding = normalizeEncoding(encoding);
63510 var nb;
63511 switch (this.encoding) {
63512 case 'utf16le':
63513 this.text = utf16Text;
63514 this.end = utf16End;
63515 nb = 4;
63516 break;
63517 case 'utf8':
63518 this.fillLast = utf8FillLast;
63519 nb = 4;
63520 break;
63521 case 'base64':
63522 this.text = base64Text;
63523 this.end = base64End;
63524 nb = 3;
63525 break;
63526 default:
63527 this.write = simpleWrite;
63528 this.end = simpleEnd;
63529 return;
63530 }
63531 this.lastNeed = 0;
63532 this.lastTotal = 0;
63533 this.lastChar = Buffer.allocUnsafe(nb);
63534 }
63535
63536 StringDecoder.prototype.write = function (buf) {
63537 if (buf.length === 0) return '';
63538 var r;
63539 var i;
63540 if (this.lastNeed) {
63541 r = this.fillLast(buf);
63542 if (r === undefined) return '';
63543 i = this.lastNeed;
63544 this.lastNeed = 0;
63545 } else {
63546 i = 0;
63547 }
63548 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
63549 return r || '';
63550 };
63551
63552 StringDecoder.prototype.end = utf8End;
63553
63554 // Returns only complete characters in a Buffer
63555 StringDecoder.prototype.text = utf8Text;
63556
63557 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
63558 StringDecoder.prototype.fillLast = function (buf) {
63559 if (this.lastNeed <= buf.length) {
63560 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
63561 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63562 }
63563 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
63564 this.lastNeed -= buf.length;
63565 };
63566
63567 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
63568 // continuation byte.
63569 function utf8CheckByte(byte) {
63570 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
63571 return -1;
63572 }
63573
63574 // Checks at most 3 bytes at the end of a Buffer in order to detect an
63575 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
63576 // needed to complete the UTF-8 character (if applicable) are returned.
63577 function utf8CheckIncomplete(self, buf, i) {
63578 var j = buf.length - 1;
63579 if (j < i) return 0;
63580 var nb = utf8CheckByte(buf[j]);
63581 if (nb >= 0) {
63582 if (nb > 0) self.lastNeed = nb - 1;
63583 return nb;
63584 }
63585 if (--j < i) return 0;
63586 nb = utf8CheckByte(buf[j]);
63587 if (nb >= 0) {
63588 if (nb > 0) self.lastNeed = nb - 2;
63589 return nb;
63590 }
63591 if (--j < i) return 0;
63592 nb = utf8CheckByte(buf[j]);
63593 if (nb >= 0) {
63594 if (nb > 0) {
63595 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
63596 }
63597 return nb;
63598 }
63599 return 0;
63600 }
63601
63602 // Validates as many continuation bytes for a multi-byte UTF-8 character as
63603 // needed or are available. If we see a non-continuation byte where we expect
63604 // one, we "replace" the validated continuation bytes we've seen so far with
63605 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
63606 // behavior. The continuation byte check is included three times in the case
63607 // where all of the continuation bytes for a character exist in the same buffer.
63608 // It is also done this way as a slight performance increase instead of using a
63609 // loop.
63610 function utf8CheckExtraBytes(self, buf, p) {
63611 if ((buf[0] & 0xC0) !== 0x80) {
63612 self.lastNeed = 0;
63613 return '\ufffd'.repeat(p);
63614 }
63615 if (self.lastNeed > 1 && buf.length > 1) {
63616 if ((buf[1] & 0xC0) !== 0x80) {
63617 self.lastNeed = 1;
63618 return '\ufffd'.repeat(p + 1);
63619 }
63620 if (self.lastNeed > 2 && buf.length > 2) {
63621 if ((buf[2] & 0xC0) !== 0x80) {
63622 self.lastNeed = 2;
63623 return '\ufffd'.repeat(p + 2);
63624 }
63625 }
63626 }
63627 }
63628
63629 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
63630 function utf8FillLast(buf) {
63631 var p = this.lastTotal - this.lastNeed;
63632 var r = utf8CheckExtraBytes(this, buf, p);
63633 if (r !== undefined) return r;
63634 if (this.lastNeed <= buf.length) {
63635 buf.copy(this.lastChar, p, 0, this.lastNeed);
63636 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63637 }
63638 buf.copy(this.lastChar, p, 0, buf.length);
63639 this.lastNeed -= buf.length;
63640 }
63641
63642 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
63643 // partial character, the character's bytes are buffered until the required
63644 // number of bytes are available.
63645 function utf8Text(buf, i) {
63646 var total = utf8CheckIncomplete(this, buf, i);
63647 if (!this.lastNeed) return buf.toString('utf8', i);
63648 this.lastTotal = total;
63649 var end = buf.length - (total - this.lastNeed);
63650 buf.copy(this.lastChar, 0, end);
63651 return buf.toString('utf8', i, end);
63652 }
63653
63654 // For UTF-8, a replacement character for each buffered byte of a (partial)
63655 // character needs to be added to the output.
63656 function utf8End(buf) {
63657 var r = buf && buf.length ? this.write(buf) : '';
63658 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
63659 return r;
63660 }
63661
63662 // UTF-16LE typically needs two bytes per character, but even if we have an even
63663 // number of bytes available, we need to check if we end on a leading/high
63664 // surrogate. In that case, we need to wait for the next two bytes in order to
63665 // decode the last character properly.
63666 function utf16Text(buf, i) {
63667 if ((buf.length - i) % 2 === 0) {
63668 var r = buf.toString('utf16le', i);
63669 if (r) {
63670 var c = r.charCodeAt(r.length - 1);
63671 if (c >= 0xD800 && c <= 0xDBFF) {
63672 this.lastNeed = 2;
63673 this.lastTotal = 4;
63674 this.lastChar[0] = buf[buf.length - 2];
63675 this.lastChar[1] = buf[buf.length - 1];
63676 return r.slice(0, -1);
63677 }
63678 }
63679 return r;
63680 }
63681 this.lastNeed = 1;
63682 this.lastTotal = 2;
63683 this.lastChar[0] = buf[buf.length - 1];
63684 return buf.toString('utf16le', i, buf.length - 1);
63685 }
63686
63687 // For UTF-16LE we do not explicitly append special replacement characters if we
63688 // end on a partial character, we simply let v8 handle that.
63689 function utf16End(buf) {
63690 var r = buf && buf.length ? this.write(buf) : '';
63691 if (this.lastNeed) {
63692 var end = this.lastTotal - this.lastNeed;
63693 return r + this.lastChar.toString('utf16le', 0, end);
63694 }
63695 return r;
63696 }
63697
63698 function base64Text(buf, i) {
63699 var n = (buf.length - i) % 3;
63700 if (n === 0) return buf.toString('base64', i);
63701 this.lastNeed = 3 - n;
63702 this.lastTotal = 3;
63703 if (n === 1) {
63704 this.lastChar[0] = buf[buf.length - 1];
63705 } else {
63706 this.lastChar[0] = buf[buf.length - 2];
63707 this.lastChar[1] = buf[buf.length - 1];
63708 }
63709 return buf.toString('base64', i, buf.length - n);
63710 }
63711
63712 function base64End(buf) {
63713 var r = buf && buf.length ? this.write(buf) : '';
63714 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
63715 return r;
63716 }
63717
63718 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
63719 function simpleWrite(buf) {
63720 return buf.toString(this.encoding);
63721 }
63722
63723 function simpleEnd(buf) {
63724 return buf && buf.length ? this.write(buf) : '';
63725 }
63726 },{"safe-buffer":134}],129:[function(require,module,exports){
63727 module.exports = require('./readable').PassThrough
63728
63729 },{"./readable":130}],130:[function(require,module,exports){
63730 exports = module.exports = require('./lib/_stream_readable.js');
63731 exports.Stream = exports;
63732 exports.Readable = exports;
63733 exports.Writable = require('./lib/_stream_writable.js');
63734 exports.Duplex = require('./lib/_stream_duplex.js');
63735 exports.Transform = require('./lib/_stream_transform.js');
63736 exports.PassThrough = require('./lib/_stream_passthrough.js');
63737
63738 },{"./lib/_stream_duplex.js":121,"./lib/_stream_passthrough.js":122,"./lib/_stream_readable.js":123,"./lib/_stream_transform.js":124,"./lib/_stream_writable.js":125}],131:[function(require,module,exports){
63739 module.exports = require('./readable').Transform
63740
63741 },{"./readable":130}],132:[function(require,module,exports){
63742 module.exports = require('./lib/_stream_writable.js');
63743
63744 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
63745 (function (Buffer){
63746 'use strict'
63747 var inherits = require('inherits')
63748 var HashBase = require('hash-base')
63749
63750 function RIPEMD160 () {
63751 HashBase.call(this, 64)
63752
63753 // state
63754 this._a = 0x67452301
63755 this._b = 0xefcdab89
63756 this._c = 0x98badcfe
63757 this._d = 0x10325476
63758 this._e = 0xc3d2e1f0
63759 }
63760
63761 inherits(RIPEMD160, HashBase)
63762
63763 RIPEMD160.prototype._update = function () {
63764 var m = new Array(16)
63765 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
63766
63767 var al = this._a
63768 var bl = this._b
63769 var cl = this._c
63770 var dl = this._d
63771 var el = this._e
63772
63773 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
63774 // K = 0x00000000
63775 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
63776 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
63777 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
63778 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
63779 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
63780 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
63781 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
63782 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
63783 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
63784 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
63785 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
63786 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
63787 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
63788 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
63789 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
63790 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
63791 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
63792
63793 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
63794 // K = 0x5a827999
63795 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
63796 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
63797 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
63798 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
63799 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
63800 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
63801 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
63802 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
63803 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
63804 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
63805 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
63806 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
63807 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
63808 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
63809 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
63810 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
63811 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
63812
63813 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
63814 // K = 0x6ed9eba1
63815 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
63816 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
63817 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
63818 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
63819 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
63820 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
63821 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
63822 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
63823 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
63824 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
63825 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
63826 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
63827 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
63828 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
63829 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
63830 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
63831 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
63832
63833 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
63834 // K = 0x8f1bbcdc
63835 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
63836 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
63837 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
63838 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
63839 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
63840 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
63841 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
63842 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
63843 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63844 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
63845 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
63846 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
63847 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
63848 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63849 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
63850 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
63851 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
63852
63853 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
63854 // K = 0xa953fd4e
63855 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
63856 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
63857 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
63858 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
63859 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
63860 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
63861 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
63862 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
63863 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
63864 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
63865 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
63866 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
63867 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
63868 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
63869 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
63870 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
63871 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
63872
63873 var ar = this._a
63874 var br = this._b
63875 var cr = this._c
63876 var dr = this._d
63877 var er = this._e
63878
63879 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
63880 // K' = 0x50a28be6
63881 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
63882 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
63883 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
63884 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
63885 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
63886 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
63887 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
63888 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
63889 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
63890 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
63891 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
63892 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
63893 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
63894 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
63895 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
63896 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
63897 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
63898
63899 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
63900 // K' = 0x5c4dd124
63901 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
63902 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
63903 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
63904 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
63905 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
63906 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
63907 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
63908 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
63909 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
63910 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
63911 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
63912 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
63913 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
63914 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
63915 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
63916 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
63917 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
63918
63919 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
63920 // K' = 0x6d703ef3
63921 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
63922 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
63923 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
63924 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
63925 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
63926 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
63927 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
63928 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
63929 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
63930 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
63931 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
63932 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
63933 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
63934 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
63935 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
63936 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
63937 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
63938
63939 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
63940 // K' = 0x7a6d76e9
63941 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
63942 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
63943 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
63944 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
63945 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
63946 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
63947 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
63948 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
63949 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
63950 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
63951 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
63952 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
63953 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
63954 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
63955 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
63956 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
63957 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
63958
63959 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
63960 // K' = 0x00000000
63961 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
63962 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
63963 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
63964 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
63965 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
63966 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
63967 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
63968 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
63969 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
63970 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
63971 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
63972 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
63973 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
63974 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
63975 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
63976 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
63977 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
63978
63979 // change state
63980 var t = (this._b + cl + dr) | 0
63981 this._b = (this._c + dl + er) | 0
63982 this._c = (this._d + el + ar) | 0
63983 this._d = (this._e + al + br) | 0
63984 this._e = (this._a + bl + cr) | 0
63985 this._a = t
63986 }
63987
63988 RIPEMD160.prototype._digest = function () {
63989 // create padding and handle blocks
63990 this._block[this._blockOffset++] = 0x80
63991 if (this._blockOffset > 56) {
63992 this._block.fill(0, this._blockOffset, 64)
63993 this._update()
63994 this._blockOffset = 0
63995 }
63996
63997 this._block.fill(0, this._blockOffset, 56)
63998 this._block.writeUInt32LE(this._length[0], 56)
63999 this._block.writeUInt32LE(this._length[1], 60)
64000 this._update()
64001
64002 // produce result
64003 var buffer = new Buffer(20)
64004 buffer.writeInt32LE(this._a, 0)
64005 buffer.writeInt32LE(this._b, 4)
64006 buffer.writeInt32LE(this._c, 8)
64007 buffer.writeInt32LE(this._d, 12)
64008 buffer.writeInt32LE(this._e, 16)
64009 return buffer
64010 }
64011
64012 function rotl (x, n) {
64013 return (x << n) | (x >>> (32 - n))
64014 }
64015
64016 function fn1 (a, b, c, d, e, m, k, s) {
64017 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
64018 }
64019
64020 function fn2 (a, b, c, d, e, m, k, s) {
64021 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
64022 }
64023
64024 function fn3 (a, b, c, d, e, m, k, s) {
64025 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
64026 }
64027
64028 function fn4 (a, b, c, d, e, m, k, s) {
64029 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
64030 }
64031
64032 function fn5 (a, b, c, d, e, m, k, s) {
64033 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
64034 }
64035
64036 module.exports = RIPEMD160
64037
64038 }).call(this,require("buffer").Buffer)
64039 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
64040 module.exports = require('buffer')
64041
64042 },{"buffer":47}],135:[function(require,module,exports){
64043 (function (Buffer){
64044 // prototype class for hash functions
64045 function Hash (blockSize, finalSize) {
64046 this._block = new Buffer(blockSize)
64047 this._finalSize = finalSize
64048 this._blockSize = blockSize
64049 this._len = 0
64050 this._s = 0
64051 }
64052
64053 Hash.prototype.update = function (data, enc) {
64054 if (typeof data === 'string') {
64055 enc = enc || 'utf8'
64056 data = new Buffer(data, enc)
64057 }
64058
64059 var l = this._len += data.length
64060 var s = this._s || 0
64061 var f = 0
64062 var buffer = this._block
64063
64064 while (s < l) {
64065 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
64066 var ch = (t - f)
64067
64068 for (var i = 0; i < ch; i++) {
64069 buffer[(s % this._blockSize) + i] = data[i + f]
64070 }
64071
64072 s += ch
64073 f += ch
64074
64075 if ((s % this._blockSize) === 0) {
64076 this._update(buffer)
64077 }
64078 }
64079 this._s = s
64080
64081 return this
64082 }
64083
64084 Hash.prototype.digest = function (enc) {
64085 // Suppose the length of the message M, in bits, is l
64086 var l = this._len * 8
64087
64088 // Append the bit 1 to the end of the message
64089 this._block[this._len % this._blockSize] = 0x80
64090
64091 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
64092 this._block.fill(0, this._len % this._blockSize + 1)
64093
64094 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
64095 this._update(this._block)
64096 this._block.fill(0)
64097 }
64098
64099 // to this append the block which is equal to the number l written in binary
64100 // TODO: handle case where l is > Math.pow(2, 29)
64101 this._block.writeInt32BE(l, this._blockSize - 4)
64102
64103 var hash = this._update(this._block) || this._hash()
64104
64105 return enc ? hash.toString(enc) : hash
64106 }
64107
64108 Hash.prototype._update = function () {
64109 throw new Error('_update must be implemented by subclass')
64110 }
64111
64112 module.exports = Hash
64113
64114 }).call(this,require("buffer").Buffer)
64115 },{"buffer":47}],136:[function(require,module,exports){
64116 var exports = module.exports = function SHA (algorithm) {
64117 algorithm = algorithm.toLowerCase()
64118
64119 var Algorithm = exports[algorithm]
64120 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
64121
64122 return new Algorithm()
64123 }
64124
64125 exports.sha = require('./sha')
64126 exports.sha1 = require('./sha1')
64127 exports.sha224 = require('./sha224')
64128 exports.sha256 = require('./sha256')
64129 exports.sha384 = require('./sha384')
64130 exports.sha512 = require('./sha512')
64131
64132 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
64133 (function (Buffer){
64134 /*
64135 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
64136 * in FIPS PUB 180-1
64137 * This source code is derived from sha1.js of the same repository.
64138 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
64139 * operation was added.
64140 */
64141
64142 var inherits = require('inherits')
64143 var Hash = require('./hash')
64144
64145 var K = [
64146 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64147 ]
64148
64149 var W = new Array(80)
64150
64151 function Sha () {
64152 this.init()
64153 this._w = W
64154
64155 Hash.call(this, 64, 56)
64156 }
64157
64158 inherits(Sha, Hash)
64159
64160 Sha.prototype.init = function () {
64161 this._a = 0x67452301
64162 this._b = 0xefcdab89
64163 this._c = 0x98badcfe
64164 this._d = 0x10325476
64165 this._e = 0xc3d2e1f0
64166
64167 return this
64168 }
64169
64170 function rotl5 (num) {
64171 return (num << 5) | (num >>> 27)
64172 }
64173
64174 function rotl30 (num) {
64175 return (num << 30) | (num >>> 2)
64176 }
64177
64178 function ft (s, b, c, d) {
64179 if (s === 0) return (b & c) | ((~b) & d)
64180 if (s === 2) return (b & c) | (b & d) | (c & d)
64181 return b ^ c ^ d
64182 }
64183
64184 Sha.prototype._update = function (M) {
64185 var W = this._w
64186
64187 var a = this._a | 0
64188 var b = this._b | 0
64189 var c = this._c | 0
64190 var d = this._d | 0
64191 var e = this._e | 0
64192
64193 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64194 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
64195
64196 for (var j = 0; j < 80; ++j) {
64197 var s = ~~(j / 20)
64198 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64199
64200 e = d
64201 d = c
64202 c = rotl30(b)
64203 b = a
64204 a = t
64205 }
64206
64207 this._a = (a + this._a) | 0
64208 this._b = (b + this._b) | 0
64209 this._c = (c + this._c) | 0
64210 this._d = (d + this._d) | 0
64211 this._e = (e + this._e) | 0
64212 }
64213
64214 Sha.prototype._hash = function () {
64215 var H = new Buffer(20)
64216
64217 H.writeInt32BE(this._a | 0, 0)
64218 H.writeInt32BE(this._b | 0, 4)
64219 H.writeInt32BE(this._c | 0, 8)
64220 H.writeInt32BE(this._d | 0, 12)
64221 H.writeInt32BE(this._e | 0, 16)
64222
64223 return H
64224 }
64225
64226 module.exports = Sha
64227
64228 }).call(this,require("buffer").Buffer)
64229 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
64230 (function (Buffer){
64231 /*
64232 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
64233 * in FIPS PUB 180-1
64234 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
64235 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64236 * Distributed under the BSD License
64237 * See http://pajhome.org.uk/crypt/md5 for details.
64238 */
64239
64240 var inherits = require('inherits')
64241 var Hash = require('./hash')
64242
64243 var K = [
64244 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64245 ]
64246
64247 var W = new Array(80)
64248
64249 function Sha1 () {
64250 this.init()
64251 this._w = W
64252
64253 Hash.call(this, 64, 56)
64254 }
64255
64256 inherits(Sha1, Hash)
64257
64258 Sha1.prototype.init = function () {
64259 this._a = 0x67452301
64260 this._b = 0xefcdab89
64261 this._c = 0x98badcfe
64262 this._d = 0x10325476
64263 this._e = 0xc3d2e1f0
64264
64265 return this
64266 }
64267
64268 function rotl1 (num) {
64269 return (num << 1) | (num >>> 31)
64270 }
64271
64272 function rotl5 (num) {
64273 return (num << 5) | (num >>> 27)
64274 }
64275
64276 function rotl30 (num) {
64277 return (num << 30) | (num >>> 2)
64278 }
64279
64280 function ft (s, b, c, d) {
64281 if (s === 0) return (b & c) | ((~b) & d)
64282 if (s === 2) return (b & c) | (b & d) | (c & d)
64283 return b ^ c ^ d
64284 }
64285
64286 Sha1.prototype._update = function (M) {
64287 var W = this._w
64288
64289 var a = this._a | 0
64290 var b = this._b | 0
64291 var c = this._c | 0
64292 var d = this._d | 0
64293 var e = this._e | 0
64294
64295 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64296 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
64297
64298 for (var j = 0; j < 80; ++j) {
64299 var s = ~~(j / 20)
64300 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64301
64302 e = d
64303 d = c
64304 c = rotl30(b)
64305 b = a
64306 a = t
64307 }
64308
64309 this._a = (a + this._a) | 0
64310 this._b = (b + this._b) | 0
64311 this._c = (c + this._c) | 0
64312 this._d = (d + this._d) | 0
64313 this._e = (e + this._e) | 0
64314 }
64315
64316 Sha1.prototype._hash = function () {
64317 var H = new Buffer(20)
64318
64319 H.writeInt32BE(this._a | 0, 0)
64320 H.writeInt32BE(this._b | 0, 4)
64321 H.writeInt32BE(this._c | 0, 8)
64322 H.writeInt32BE(this._d | 0, 12)
64323 H.writeInt32BE(this._e | 0, 16)
64324
64325 return H
64326 }
64327
64328 module.exports = Sha1
64329
64330 }).call(this,require("buffer").Buffer)
64331 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
64332 (function (Buffer){
64333 /**
64334 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64335 * in FIPS 180-2
64336 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64337 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64338 *
64339 */
64340
64341 var inherits = require('inherits')
64342 var Sha256 = require('./sha256')
64343 var Hash = require('./hash')
64344
64345 var W = new Array(64)
64346
64347 function Sha224 () {
64348 this.init()
64349
64350 this._w = W // new Array(64)
64351
64352 Hash.call(this, 64, 56)
64353 }
64354
64355 inherits(Sha224, Sha256)
64356
64357 Sha224.prototype.init = function () {
64358 this._a = 0xc1059ed8
64359 this._b = 0x367cd507
64360 this._c = 0x3070dd17
64361 this._d = 0xf70e5939
64362 this._e = 0xffc00b31
64363 this._f = 0x68581511
64364 this._g = 0x64f98fa7
64365 this._h = 0xbefa4fa4
64366
64367 return this
64368 }
64369
64370 Sha224.prototype._hash = function () {
64371 var H = new Buffer(28)
64372
64373 H.writeInt32BE(this._a, 0)
64374 H.writeInt32BE(this._b, 4)
64375 H.writeInt32BE(this._c, 8)
64376 H.writeInt32BE(this._d, 12)
64377 H.writeInt32BE(this._e, 16)
64378 H.writeInt32BE(this._f, 20)
64379 H.writeInt32BE(this._g, 24)
64380
64381 return H
64382 }
64383
64384 module.exports = Sha224
64385
64386 }).call(this,require("buffer").Buffer)
64387 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
64388 (function (Buffer){
64389 /**
64390 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64391 * in FIPS 180-2
64392 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64393 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64394 *
64395 */
64396
64397 var inherits = require('inherits')
64398 var Hash = require('./hash')
64399
64400 var K = [
64401 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
64402 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
64403 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
64404 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
64405 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
64406 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
64407 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
64408 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
64409 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
64410 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
64411 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
64412 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
64413 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
64414 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
64415 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
64416 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
64417 ]
64418
64419 var W = new Array(64)
64420
64421 function Sha256 () {
64422 this.init()
64423
64424 this._w = W // new Array(64)
64425
64426 Hash.call(this, 64, 56)
64427 }
64428
64429 inherits(Sha256, Hash)
64430
64431 Sha256.prototype.init = function () {
64432 this._a = 0x6a09e667
64433 this._b = 0xbb67ae85
64434 this._c = 0x3c6ef372
64435 this._d = 0xa54ff53a
64436 this._e = 0x510e527f
64437 this._f = 0x9b05688c
64438 this._g = 0x1f83d9ab
64439 this._h = 0x5be0cd19
64440
64441 return this
64442 }
64443
64444 function ch (x, y, z) {
64445 return z ^ (x & (y ^ z))
64446 }
64447
64448 function maj (x, y, z) {
64449 return (x & y) | (z & (x | y))
64450 }
64451
64452 function sigma0 (x) {
64453 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
64454 }
64455
64456 function sigma1 (x) {
64457 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
64458 }
64459
64460 function gamma0 (x) {
64461 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
64462 }
64463
64464 function gamma1 (x) {
64465 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
64466 }
64467
64468 Sha256.prototype._update = function (M) {
64469 var W = this._w
64470
64471 var a = this._a | 0
64472 var b = this._b | 0
64473 var c = this._c | 0
64474 var d = this._d | 0
64475 var e = this._e | 0
64476 var f = this._f | 0
64477 var g = this._g | 0
64478 var h = this._h | 0
64479
64480 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64481 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
64482
64483 for (var j = 0; j < 64; ++j) {
64484 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
64485 var T2 = (sigma0(a) + maj(a, b, c)) | 0
64486
64487 h = g
64488 g = f
64489 f = e
64490 e = (d + T1) | 0
64491 d = c
64492 c = b
64493 b = a
64494 a = (T1 + T2) | 0
64495 }
64496
64497 this._a = (a + this._a) | 0
64498 this._b = (b + this._b) | 0
64499 this._c = (c + this._c) | 0
64500 this._d = (d + this._d) | 0
64501 this._e = (e + this._e) | 0
64502 this._f = (f + this._f) | 0
64503 this._g = (g + this._g) | 0
64504 this._h = (h + this._h) | 0
64505 }
64506
64507 Sha256.prototype._hash = function () {
64508 var H = new Buffer(32)
64509
64510 H.writeInt32BE(this._a, 0)
64511 H.writeInt32BE(this._b, 4)
64512 H.writeInt32BE(this._c, 8)
64513 H.writeInt32BE(this._d, 12)
64514 H.writeInt32BE(this._e, 16)
64515 H.writeInt32BE(this._f, 20)
64516 H.writeInt32BE(this._g, 24)
64517 H.writeInt32BE(this._h, 28)
64518
64519 return H
64520 }
64521
64522 module.exports = Sha256
64523
64524 }).call(this,require("buffer").Buffer)
64525 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
64526 (function (Buffer){
64527 var inherits = require('inherits')
64528 var SHA512 = require('./sha512')
64529 var Hash = require('./hash')
64530
64531 var W = new Array(160)
64532
64533 function Sha384 () {
64534 this.init()
64535 this._w = W
64536
64537 Hash.call(this, 128, 112)
64538 }
64539
64540 inherits(Sha384, SHA512)
64541
64542 Sha384.prototype.init = function () {
64543 this._ah = 0xcbbb9d5d
64544 this._bh = 0x629a292a
64545 this._ch = 0x9159015a
64546 this._dh = 0x152fecd8
64547 this._eh = 0x67332667
64548 this._fh = 0x8eb44a87
64549 this._gh = 0xdb0c2e0d
64550 this._hh = 0x47b5481d
64551
64552 this._al = 0xc1059ed8
64553 this._bl = 0x367cd507
64554 this._cl = 0x3070dd17
64555 this._dl = 0xf70e5939
64556 this._el = 0xffc00b31
64557 this._fl = 0x68581511
64558 this._gl = 0x64f98fa7
64559 this._hl = 0xbefa4fa4
64560
64561 return this
64562 }
64563
64564 Sha384.prototype._hash = function () {
64565 var H = new Buffer(48)
64566
64567 function writeInt64BE (h, l, offset) {
64568 H.writeInt32BE(h, offset)
64569 H.writeInt32BE(l, offset + 4)
64570 }
64571
64572 writeInt64BE(this._ah, this._al, 0)
64573 writeInt64BE(this._bh, this._bl, 8)
64574 writeInt64BE(this._ch, this._cl, 16)
64575 writeInt64BE(this._dh, this._dl, 24)
64576 writeInt64BE(this._eh, this._el, 32)
64577 writeInt64BE(this._fh, this._fl, 40)
64578
64579 return H
64580 }
64581
64582 module.exports = Sha384
64583
64584 }).call(this,require("buffer").Buffer)
64585 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
64586 (function (Buffer){
64587 var inherits = require('inherits')
64588 var Hash = require('./hash')
64589
64590 var K = [
64591 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
64592 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
64593 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
64594 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
64595 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
64596 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
64597 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
64598 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
64599 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
64600 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
64601 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
64602 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
64603 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
64604 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
64605 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
64606 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
64607 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
64608 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
64609 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
64610 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
64611 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
64612 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
64613 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
64614 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
64615 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
64616 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
64617 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
64618 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
64619 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
64620 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
64621 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
64622 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
64623 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
64624 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
64625 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
64626 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
64627 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
64628 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
64629 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
64630 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
64631 ]
64632
64633 var W = new Array(160)
64634
64635 function Sha512 () {
64636 this.init()
64637 this._w = W
64638
64639 Hash.call(this, 128, 112)
64640 }
64641
64642 inherits(Sha512, Hash)
64643
64644 Sha512.prototype.init = function () {
64645 this._ah = 0x6a09e667
64646 this._bh = 0xbb67ae85
64647 this._ch = 0x3c6ef372
64648 this._dh = 0xa54ff53a
64649 this._eh = 0x510e527f
64650 this._fh = 0x9b05688c
64651 this._gh = 0x1f83d9ab
64652 this._hh = 0x5be0cd19
64653
64654 this._al = 0xf3bcc908
64655 this._bl = 0x84caa73b
64656 this._cl = 0xfe94f82b
64657 this._dl = 0x5f1d36f1
64658 this._el = 0xade682d1
64659 this._fl = 0x2b3e6c1f
64660 this._gl = 0xfb41bd6b
64661 this._hl = 0x137e2179
64662
64663 return this
64664 }
64665
64666 function Ch (x, y, z) {
64667 return z ^ (x & (y ^ z))
64668 }
64669
64670 function maj (x, y, z) {
64671 return (x & y) | (z & (x | y))
64672 }
64673
64674 function sigma0 (x, xl) {
64675 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
64676 }
64677
64678 function sigma1 (x, xl) {
64679 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
64680 }
64681
64682 function Gamma0 (x, xl) {
64683 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
64684 }
64685
64686 function Gamma0l (x, xl) {
64687 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
64688 }
64689
64690 function Gamma1 (x, xl) {
64691 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
64692 }
64693
64694 function Gamma1l (x, xl) {
64695 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
64696 }
64697
64698 function getCarry (a, b) {
64699 return (a >>> 0) < (b >>> 0) ? 1 : 0
64700 }
64701
64702 Sha512.prototype._update = function (M) {
64703 var W = this._w
64704
64705 var ah = this._ah | 0
64706 var bh = this._bh | 0
64707 var ch = this._ch | 0
64708 var dh = this._dh | 0
64709 var eh = this._eh | 0
64710 var fh = this._fh | 0
64711 var gh = this._gh | 0
64712 var hh = this._hh | 0
64713
64714 var al = this._al | 0
64715 var bl = this._bl | 0
64716 var cl = this._cl | 0
64717 var dl = this._dl | 0
64718 var el = this._el | 0
64719 var fl = this._fl | 0
64720 var gl = this._gl | 0
64721 var hl = this._hl | 0
64722
64723 for (var i = 0; i < 32; i += 2) {
64724 W[i] = M.readInt32BE(i * 4)
64725 W[i + 1] = M.readInt32BE(i * 4 + 4)
64726 }
64727 for (; i < 160; i += 2) {
64728 var xh = W[i - 15 * 2]
64729 var xl = W[i - 15 * 2 + 1]
64730 var gamma0 = Gamma0(xh, xl)
64731 var gamma0l = Gamma0l(xl, xh)
64732
64733 xh = W[i - 2 * 2]
64734 xl = W[i - 2 * 2 + 1]
64735 var gamma1 = Gamma1(xh, xl)
64736 var gamma1l = Gamma1l(xl, xh)
64737
64738 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
64739 var Wi7h = W[i - 7 * 2]
64740 var Wi7l = W[i - 7 * 2 + 1]
64741
64742 var Wi16h = W[i - 16 * 2]
64743 var Wi16l = W[i - 16 * 2 + 1]
64744
64745 var Wil = (gamma0l + Wi7l) | 0
64746 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
64747 Wil = (Wil + gamma1l) | 0
64748 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
64749 Wil = (Wil + Wi16l) | 0
64750 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
64751
64752 W[i] = Wih
64753 W[i + 1] = Wil
64754 }
64755
64756 for (var j = 0; j < 160; j += 2) {
64757 Wih = W[j]
64758 Wil = W[j + 1]
64759
64760 var majh = maj(ah, bh, ch)
64761 var majl = maj(al, bl, cl)
64762
64763 var sigma0h = sigma0(ah, al)
64764 var sigma0l = sigma0(al, ah)
64765 var sigma1h = sigma1(eh, el)
64766 var sigma1l = sigma1(el, eh)
64767
64768 // t1 = h + sigma1 + ch + K[j] + W[j]
64769 var Kih = K[j]
64770 var Kil = K[j + 1]
64771
64772 var chh = Ch(eh, fh, gh)
64773 var chl = Ch(el, fl, gl)
64774
64775 var t1l = (hl + sigma1l) | 0
64776 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
64777 t1l = (t1l + chl) | 0
64778 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
64779 t1l = (t1l + Kil) | 0
64780 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
64781 t1l = (t1l + Wil) | 0
64782 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
64783
64784 // t2 = sigma0 + maj
64785 var t2l = (sigma0l + majl) | 0
64786 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
64787
64788 hh = gh
64789 hl = gl
64790 gh = fh
64791 gl = fl
64792 fh = eh
64793 fl = el
64794 el = (dl + t1l) | 0
64795 eh = (dh + t1h + getCarry(el, dl)) | 0
64796 dh = ch
64797 dl = cl
64798 ch = bh
64799 cl = bl
64800 bh = ah
64801 bl = al
64802 al = (t1l + t2l) | 0
64803 ah = (t1h + t2h + getCarry(al, t1l)) | 0
64804 }
64805
64806 this._al = (this._al + al) | 0
64807 this._bl = (this._bl + bl) | 0
64808 this._cl = (this._cl + cl) | 0
64809 this._dl = (this._dl + dl) | 0
64810 this._el = (this._el + el) | 0
64811 this._fl = (this._fl + fl) | 0
64812 this._gl = (this._gl + gl) | 0
64813 this._hl = (this._hl + hl) | 0
64814
64815 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
64816 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
64817 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
64818 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
64819 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
64820 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
64821 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
64822 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
64823 }
64824
64825 Sha512.prototype._hash = function () {
64826 var H = new Buffer(64)
64827
64828 function writeInt64BE (h, l, offset) {
64829 H.writeInt32BE(h, offset)
64830 H.writeInt32BE(l, offset + 4)
64831 }
64832
64833 writeInt64BE(this._ah, this._al, 0)
64834 writeInt64BE(this._bh, this._bl, 8)
64835 writeInt64BE(this._ch, this._cl, 16)
64836 writeInt64BE(this._dh, this._dl, 24)
64837 writeInt64BE(this._eh, this._el, 32)
64838 writeInt64BE(this._fh, this._fl, 40)
64839 writeInt64BE(this._gh, this._gl, 48)
64840 writeInt64BE(this._hh, this._hl, 56)
64841
64842 return H
64843 }
64844
64845 module.exports = Sha512
64846
64847 }).call(this,require("buffer").Buffer)
64848 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
64849 // Copyright Joyent, Inc. and other Node contributors.
64850 //
64851 // Permission is hereby granted, free of charge, to any person obtaining a
64852 // copy of this software and associated documentation files (the
64853 // "Software"), to deal in the Software without restriction, including
64854 // without limitation the rights to use, copy, modify, merge, publish,
64855 // distribute, sublicense, and/or sell copies of the Software, and to permit
64856 // persons to whom the Software is furnished to do so, subject to the
64857 // following conditions:
64858 //
64859 // The above copyright notice and this permission notice shall be included
64860 // in all copies or substantial portions of the Software.
64861 //
64862 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
64863 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
64864 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
64865 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
64866 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
64867 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
64868 // USE OR OTHER DEALINGS IN THE SOFTWARE.
64869
64870 module.exports = Stream;
64871
64872 var EE = require('events').EventEmitter;
64873 var inherits = require('inherits');
64874
64875 inherits(Stream, EE);
64876 Stream.Readable = require('readable-stream/readable.js');
64877 Stream.Writable = require('readable-stream/writable.js');
64878 Stream.Duplex = require('readable-stream/duplex.js');
64879 Stream.Transform = require('readable-stream/transform.js');
64880 Stream.PassThrough = require('readable-stream/passthrough.js');
64881
64882 // Backwards-compat with node 0.4.x
64883 Stream.Stream = Stream;
64884
64885
64886
64887 // old-style streams. Note that the pipe method (the only relevant
64888 // part of this class) is overridden in the Readable class.
64889
64890 function Stream() {
64891 EE.call(this);
64892 }
64893
64894 Stream.prototype.pipe = function(dest, options) {
64895 var source = this;
64896
64897 function ondata(chunk) {
64898 if (dest.writable) {
64899 if (false === dest.write(chunk) && source.pause) {
64900 source.pause();
64901 }
64902 }
64903 }
64904
64905 source.on('data', ondata);
64906
64907 function ondrain() {
64908 if (source.readable && source.resume) {
64909 source.resume();
64910 }
64911 }
64912
64913 dest.on('drain', ondrain);
64914
64915 // If the 'end' option is not supplied, dest.end() will be called when
64916 // source gets the 'end' or 'close' events. Only dest.end() once.
64917 if (!dest._isStdio && (!options || options.end !== false)) {
64918 source.on('end', onend);
64919 source.on('close', onclose);
64920 }
64921
64922 var didOnEnd = false;
64923 function onend() {
64924 if (didOnEnd) return;
64925 didOnEnd = true;
64926
64927 dest.end();
64928 }
64929
64930
64931 function onclose() {
64932 if (didOnEnd) return;
64933 didOnEnd = true;
64934
64935 if (typeof dest.destroy === 'function') dest.destroy();
64936 }
64937
64938 // don't leave dangling pipes when there are errors.
64939 function onerror(er) {
64940 cleanup();
64941 if (EE.listenerCount(this, 'error') === 0) {
64942 throw er; // Unhandled stream error in pipe.
64943 }
64944 }
64945
64946 source.on('error', onerror);
64947 dest.on('error', onerror);
64948
64949 // remove all the event listeners that were added.
64950 function cleanup() {
64951 source.removeListener('data', ondata);
64952 dest.removeListener('drain', ondrain);
64953
64954 source.removeListener('end', onend);
64955 source.removeListener('close', onclose);
64956
64957 source.removeListener('error', onerror);
64958 dest.removeListener('error', onerror);
64959
64960 source.removeListener('end', cleanup);
64961 source.removeListener('close', cleanup);
64962
64963 dest.removeListener('close', cleanup);
64964 }
64965
64966 source.on('end', cleanup);
64967 source.on('close', cleanup);
64968
64969 dest.on('close', cleanup);
64970
64971 dest.emit('pipe', source);
64972
64973 // Allow for unix-like usage: A.pipe(B).pipe(C)
64974 return dest;
64975 };
64976
64977 },{"events":83,"inherits":95,"readable-stream/duplex.js":120,"readable-stream/passthrough.js":129,"readable-stream/readable.js":130,"readable-stream/transform.js":131,"readable-stream/writable.js":132}],144:[function(require,module,exports){
64978 // Copyright Joyent, Inc. and other Node contributors.
64979 //
64980 // Permission is hereby granted, free of charge, to any person obtaining a
64981 // copy of this software and associated documentation files (the
64982 // "Software"), to deal in the Software without restriction, including
64983 // without limitation the rights to use, copy, modify, merge, publish,
64984 // distribute, sublicense, and/or sell copies of the Software, and to permit
64985 // persons to whom the Software is furnished to do so, subject to the
64986 // following conditions:
64987 //
64988 // The above copyright notice and this permission notice shall be included
64989 // in all copies or substantial portions of the Software.
64990 //
64991 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
64992 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
64993 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
64994 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
64995 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
64996 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
64997 // USE OR OTHER DEALINGS IN THE SOFTWARE.
64998
64999 var Buffer = require('buffer').Buffer;
65000
65001 var isBufferEncoding = Buffer.isEncoding
65002 || function(encoding) {
65003 switch (encoding && encoding.toLowerCase()) {
65004 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;
65005 default: return false;
65006 }
65007 }
65008
65009
65010 function assertEncoding(encoding) {
65011 if (encoding && !isBufferEncoding(encoding)) {
65012 throw new Error('Unknown encoding: ' + encoding);
65013 }
65014 }
65015
65016 // StringDecoder provides an interface for efficiently splitting a series of
65017 // buffers into a series of JS strings without breaking apart multi-byte
65018 // characters. CESU-8 is handled as part of the UTF-8 encoding.
65019 //
65020 // @TODO Handling all encodings inside a single object makes it very difficult
65021 // to reason about this code, so it should be split up in the future.
65022 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
65023 // points as used by CESU-8.
65024 var StringDecoder = exports.StringDecoder = function(encoding) {
65025 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
65026 assertEncoding(encoding);
65027 switch (this.encoding) {
65028 case 'utf8':
65029 // CESU-8 represents each of Surrogate Pair by 3-bytes
65030 this.surrogateSize = 3;
65031 break;
65032 case 'ucs2':
65033 case 'utf16le':
65034 // UTF-16 represents each of Surrogate Pair by 2-bytes
65035 this.surrogateSize = 2;
65036 this.detectIncompleteChar = utf16DetectIncompleteChar;
65037 break;
65038 case 'base64':
65039 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
65040 this.surrogateSize = 3;
65041 this.detectIncompleteChar = base64DetectIncompleteChar;
65042 break;
65043 default:
65044 this.write = passThroughWrite;
65045 return;
65046 }
65047
65048 // Enough space to store all bytes of a single character. UTF-8 needs 4
65049 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
65050 this.charBuffer = new Buffer(6);
65051 // Number of bytes received for the current incomplete multi-byte character.
65052 this.charReceived = 0;
65053 // Number of bytes expected for the current incomplete multi-byte character.
65054 this.charLength = 0;
65055 };
65056
65057
65058 // write decodes the given buffer and returns it as JS string that is
65059 // guaranteed to not contain any partial multi-byte characters. Any partial
65060 // character found at the end of the buffer is buffered up, and will be
65061 // returned when calling write again with the remaining bytes.
65062 //
65063 // Note: Converting a Buffer containing an orphan surrogate to a String
65064 // currently works, but converting a String to a Buffer (via `new Buffer`, or
65065 // Buffer#write) will replace incomplete surrogates with the unicode
65066 // replacement character. See https://codereview.chromium.org/121173009/ .
65067 StringDecoder.prototype.write = function(buffer) {
65068 var charStr = '';
65069 // if our last write ended with an incomplete multibyte character
65070 while (this.charLength) {
65071 // determine how many remaining bytes this buffer has to offer for this char
65072 var available = (buffer.length >= this.charLength - this.charReceived) ?
65073 this.charLength - this.charReceived :
65074 buffer.length;
65075
65076 // add the new bytes to the char buffer
65077 buffer.copy(this.charBuffer, this.charReceived, 0, available);
65078 this.charReceived += available;
65079
65080 if (this.charReceived < this.charLength) {
65081 // still not enough chars in this buffer? wait for more ...
65082 return '';
65083 }
65084
65085 // remove bytes belonging to the current character from the buffer
65086 buffer = buffer.slice(available, buffer.length);
65087
65088 // get the character that was split
65089 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
65090
65091 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65092 var charCode = charStr.charCodeAt(charStr.length - 1);
65093 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65094 this.charLength += this.surrogateSize;
65095 charStr = '';
65096 continue;
65097 }
65098 this.charReceived = this.charLength = 0;
65099
65100 // if there are no more bytes in this buffer, just emit our char
65101 if (buffer.length === 0) {
65102 return charStr;
65103 }
65104 break;
65105 }
65106
65107 // determine and set charLength / charReceived
65108 this.detectIncompleteChar(buffer);
65109
65110 var end = buffer.length;
65111 if (this.charLength) {
65112 // buffer the incomplete character bytes we got
65113 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
65114 end -= this.charReceived;
65115 }
65116
65117 charStr += buffer.toString(this.encoding, 0, end);
65118
65119 var end = charStr.length - 1;
65120 var charCode = charStr.charCodeAt(end);
65121 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65122 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65123 var size = this.surrogateSize;
65124 this.charLength += size;
65125 this.charReceived += size;
65126 this.charBuffer.copy(this.charBuffer, size, 0, size);
65127 buffer.copy(this.charBuffer, 0, 0, size);
65128 return charStr.substring(0, end);
65129 }
65130
65131 // or just emit the charStr
65132 return charStr;
65133 };
65134
65135 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
65136 // the end of the given buffer. If so, it sets this.charLength to the byte
65137 // length that character, and sets this.charReceived to the number of bytes
65138 // that are available for this character.
65139 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
65140 // determine how many bytes we have to check at the end of this buffer
65141 var i = (buffer.length >= 3) ? 3 : buffer.length;
65142
65143 // Figure out if one of the last i bytes of our buffer announces an
65144 // incomplete char.
65145 for (; i > 0; i--) {
65146 var c = buffer[buffer.length - i];
65147
65148 // See http://en.wikipedia.org/wiki/UTF-8#Description
65149
65150 // 110XXXXX
65151 if (i == 1 && c >> 5 == 0x06) {
65152 this.charLength = 2;
65153 break;
65154 }
65155
65156 // 1110XXXX
65157 if (i <= 2 && c >> 4 == 0x0E) {
65158 this.charLength = 3;
65159 break;
65160 }
65161
65162 // 11110XXX
65163 if (i <= 3 && c >> 3 == 0x1E) {
65164 this.charLength = 4;
65165 break;
65166 }
65167 }
65168 this.charReceived = i;
65169 };
65170
65171 StringDecoder.prototype.end = function(buffer) {
65172 var res = '';
65173 if (buffer && buffer.length)
65174 res = this.write(buffer);
65175
65176 if (this.charReceived) {
65177 var cr = this.charReceived;
65178 var buf = this.charBuffer;
65179 var enc = this.encoding;
65180 res += buf.slice(0, cr).toString(enc);
65181 }
65182
65183 return res;
65184 };
65185
65186 function passThroughWrite(buffer) {
65187 return buffer.toString(this.encoding);
65188 }
65189
65190 function utf16DetectIncompleteChar(buffer) {
65191 this.charReceived = buffer.length % 2;
65192 this.charLength = this.charReceived ? 2 : 0;
65193 }
65194
65195 function base64DetectIncompleteChar(buffer) {
65196 this.charReceived = buffer.length % 3;
65197 this.charLength = this.charReceived ? 3 : 0;
65198 }
65199
65200 },{"buffer":47}],145:[function(require,module,exports){
65201 (function (global){
65202
65203 /**
65204 * Module exports.
65205 */
65206
65207 module.exports = deprecate;
65208
65209 /**
65210 * Mark that a method should not be used.
65211 * Returns a modified function which warns once by default.
65212 *
65213 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
65214 *
65215 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
65216 * will throw an Error when invoked.
65217 *
65218 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
65219 * will invoke `console.trace()` instead of `console.error()`.
65220 *
65221 * @param {Function} fn - the function to deprecate
65222 * @param {String} msg - the string to print to the console when `fn` is invoked
65223 * @returns {Function} a new "deprecated" version of `fn`
65224 * @api public
65225 */
65226
65227 function deprecate (fn, msg) {
65228 if (config('noDeprecation')) {
65229 return fn;
65230 }
65231
65232 var warned = false;
65233 function deprecated() {
65234 if (!warned) {
65235 if (config('throwDeprecation')) {
65236 throw new Error(msg);
65237 } else if (config('traceDeprecation')) {
65238 console.trace(msg);
65239 } else {
65240 console.warn(msg);
65241 }
65242 warned = true;
65243 }
65244 return fn.apply(this, arguments);
65245 }
65246
65247 return deprecated;
65248 }
65249
65250 /**
65251 * Checks `localStorage` for boolean values for the given `name`.
65252 *
65253 * @param {String} name
65254 * @returns {Boolean}
65255 * @api private
65256 */
65257
65258 function config (name) {
65259 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
65260 try {
65261 if (!global.localStorage) return false;
65262 } catch (_) {
65263 return false;
65264 }
65265 var val = global.localStorage[name];
65266 if (null == val) return false;
65267 return String(val).toLowerCase() === 'true';
65268 }
65269
65270 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65271 },{}],146:[function(require,module,exports){
65272 arguments[4][95][0].apply(exports,arguments)
65273 },{"dup":95}],147:[function(require,module,exports){
65274 module.exports = function isBuffer(arg) {
65275 return arg && typeof arg === 'object'
65276 && typeof arg.copy === 'function'
65277 && typeof arg.fill === 'function'
65278 && typeof arg.readUInt8 === 'function';
65279 }
65280 },{}],148:[function(require,module,exports){
65281 (function (process,global){
65282 // Copyright Joyent, Inc. and other Node contributors.
65283 //
65284 // Permission is hereby granted, free of charge, to any person obtaining a
65285 // copy of this software and associated documentation files (the
65286 // "Software"), to deal in the Software without restriction, including
65287 // without limitation the rights to use, copy, modify, merge, publish,
65288 // distribute, sublicense, and/or sell copies of the Software, and to permit
65289 // persons to whom the Software is furnished to do so, subject to the
65290 // following conditions:
65291 //
65292 // The above copyright notice and this permission notice shall be included
65293 // in all copies or substantial portions of the Software.
65294 //
65295 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
65296 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
65297 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
65298 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
65299 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
65300 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
65301 // USE OR OTHER DEALINGS IN THE SOFTWARE.
65302
65303 var formatRegExp = /%[sdj%]/g;
65304 exports.format = function(f) {
65305 if (!isString(f)) {
65306 var objects = [];
65307 for (var i = 0; i < arguments.length; i++) {
65308 objects.push(inspect(arguments[i]));
65309 }
65310 return objects.join(' ');
65311 }
65312
65313 var i = 1;
65314 var args = arguments;
65315 var len = args.length;
65316 var str = String(f).replace(formatRegExp, function(x) {
65317 if (x === '%%') return '%';
65318 if (i >= len) return x;
65319 switch (x) {
65320 case '%s': return String(args[i++]);
65321 case '%d': return Number(args[i++]);
65322 case '%j':
65323 try {
65324 return JSON.stringify(args[i++]);
65325 } catch (_) {
65326 return '[Circular]';
65327 }
65328 default:
65329 return x;
65330 }
65331 });
65332 for (var x = args[i]; i < len; x = args[++i]) {
65333 if (isNull(x) || !isObject(x)) {
65334 str += ' ' + x;
65335 } else {
65336 str += ' ' + inspect(x);
65337 }
65338 }
65339 return str;
65340 };
65341
65342
65343 // Mark that a method should not be used.
65344 // Returns a modified function which warns once by default.
65345 // If --no-deprecation is set, then it is a no-op.
65346 exports.deprecate = function(fn, msg) {
65347 // Allow for deprecating things in the process of starting up.
65348 if (isUndefined(global.process)) {
65349 return function() {
65350 return exports.deprecate(fn, msg).apply(this, arguments);
65351 };
65352 }
65353
65354 if (process.noDeprecation === true) {
65355 return fn;
65356 }
65357
65358 var warned = false;
65359 function deprecated() {
65360 if (!warned) {
65361 if (process.throwDeprecation) {
65362 throw new Error(msg);
65363 } else if (process.traceDeprecation) {
65364 console.trace(msg);
65365 } else {
65366 console.error(msg);
65367 }
65368 warned = true;
65369 }
65370 return fn.apply(this, arguments);
65371 }
65372
65373 return deprecated;
65374 };
65375
65376
65377 var debugs = {};
65378 var debugEnviron;
65379 exports.debuglog = function(set) {
65380 if (isUndefined(debugEnviron))
65381 debugEnviron = process.env.NODE_DEBUG || '';
65382 set = set.toUpperCase();
65383 if (!debugs[set]) {
65384 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
65385 var pid = process.pid;
65386 debugs[set] = function() {
65387 var msg = exports.format.apply(exports, arguments);
65388 console.error('%s %d: %s', set, pid, msg);
65389 };
65390 } else {
65391 debugs[set] = function() {};
65392 }
65393 }
65394 return debugs[set];
65395 };
65396
65397
65398 /**
65399 * Echos the value of a value. Trys to print the value out
65400 * in the best way possible given the different types.
65401 *
65402 * @param {Object} obj The object to print out.
65403 * @param {Object} opts Optional options object that alters the output.
65404 */
65405 /* legacy: obj, showHidden, depth, colors*/
65406 function inspect(obj, opts) {
65407 // default options
65408 var ctx = {
65409 seen: [],
65410 stylize: stylizeNoColor
65411 };
65412 // legacy...
65413 if (arguments.length >= 3) ctx.depth = arguments[2];
65414 if (arguments.length >= 4) ctx.colors = arguments[3];
65415 if (isBoolean(opts)) {
65416 // legacy...
65417 ctx.showHidden = opts;
65418 } else if (opts) {
65419 // got an "options" object
65420 exports._extend(ctx, opts);
65421 }
65422 // set default options
65423 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
65424 if (isUndefined(ctx.depth)) ctx.depth = 2;
65425 if (isUndefined(ctx.colors)) ctx.colors = false;
65426 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
65427 if (ctx.colors) ctx.stylize = stylizeWithColor;
65428 return formatValue(ctx, obj, ctx.depth);
65429 }
65430 exports.inspect = inspect;
65431
65432
65433 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
65434 inspect.colors = {
65435 'bold' : [1, 22],
65436 'italic' : [3, 23],
65437 'underline' : [4, 24],
65438 'inverse' : [7, 27],
65439 'white' : [37, 39],
65440 'grey' : [90, 39],
65441 'black' : [30, 39],
65442 'blue' : [34, 39],
65443 'cyan' : [36, 39],
65444 'green' : [32, 39],
65445 'magenta' : [35, 39],
65446 'red' : [31, 39],
65447 'yellow' : [33, 39]
65448 };
65449
65450 // Don't use 'blue' not visible on cmd.exe
65451 inspect.styles = {
65452 'special': 'cyan',
65453 'number': 'yellow',
65454 'boolean': 'yellow',
65455 'undefined': 'grey',
65456 'null': 'bold',
65457 'string': 'green',
65458 'date': 'magenta',
65459 // "name": intentionally not styling
65460 'regexp': 'red'
65461 };
65462
65463
65464 function stylizeWithColor(str, styleType) {
65465 var style = inspect.styles[styleType];
65466
65467 if (style) {
65468 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
65469 '\u001b[' + inspect.colors[style][1] + 'm';
65470 } else {
65471 return str;
65472 }
65473 }
65474
65475
65476 function stylizeNoColor(str, styleType) {
65477 return str;
65478 }
65479
65480
65481 function arrayToHash(array) {
65482 var hash = {};
65483
65484 array.forEach(function(val, idx) {
65485 hash[val] = true;
65486 });
65487
65488 return hash;
65489 }
65490
65491
65492 function formatValue(ctx, value, recurseTimes) {
65493 // Provide a hook for user-specified inspect functions.
65494 // Check that value is an object with an inspect function on it
65495 if (ctx.customInspect &&
65496 value &&
65497 isFunction(value.inspect) &&
65498 // Filter out the util module, it's inspect function is special
65499 value.inspect !== exports.inspect &&
65500 // Also filter out any prototype objects using the circular check.
65501 !(value.constructor && value.constructor.prototype === value)) {
65502 var ret = value.inspect(recurseTimes, ctx);
65503 if (!isString(ret)) {
65504 ret = formatValue(ctx, ret, recurseTimes);
65505 }
65506 return ret;
65507 }
65508
65509 // Primitive types cannot have properties
65510 var primitive = formatPrimitive(ctx, value);
65511 if (primitive) {
65512 return primitive;
65513 }
65514
65515 // Look up the keys of the object.
65516 var keys = Object.keys(value);
65517 var visibleKeys = arrayToHash(keys);
65518
65519 if (ctx.showHidden) {
65520 keys = Object.getOwnPropertyNames(value);
65521 }
65522
65523 // IE doesn't make error fields non-enumerable
65524 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
65525 if (isError(value)
65526 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
65527 return formatError(value);
65528 }
65529
65530 // Some type of object without properties can be shortcutted.
65531 if (keys.length === 0) {
65532 if (isFunction(value)) {
65533 var name = value.name ? ': ' + value.name : '';
65534 return ctx.stylize('[Function' + name + ']', 'special');
65535 }
65536 if (isRegExp(value)) {
65537 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65538 }
65539 if (isDate(value)) {
65540 return ctx.stylize(Date.prototype.toString.call(value), 'date');
65541 }
65542 if (isError(value)) {
65543 return formatError(value);
65544 }
65545 }
65546
65547 var base = '', array = false, braces = ['{', '}'];
65548
65549 // Make Array say that they are Array
65550 if (isArray(value)) {
65551 array = true;
65552 braces = ['[', ']'];
65553 }
65554
65555 // Make functions say that they are functions
65556 if (isFunction(value)) {
65557 var n = value.name ? ': ' + value.name : '';
65558 base = ' [Function' + n + ']';
65559 }
65560
65561 // Make RegExps say that they are RegExps
65562 if (isRegExp(value)) {
65563 base = ' ' + RegExp.prototype.toString.call(value);
65564 }
65565
65566 // Make dates with properties first say the date
65567 if (isDate(value)) {
65568 base = ' ' + Date.prototype.toUTCString.call(value);
65569 }
65570
65571 // Make error with message first say the error
65572 if (isError(value)) {
65573 base = ' ' + formatError(value);
65574 }
65575
65576 if (keys.length === 0 && (!array || value.length == 0)) {
65577 return braces[0] + base + braces[1];
65578 }
65579
65580 if (recurseTimes < 0) {
65581 if (isRegExp(value)) {
65582 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65583 } else {
65584 return ctx.stylize('[Object]', 'special');
65585 }
65586 }
65587
65588 ctx.seen.push(value);
65589
65590 var output;
65591 if (array) {
65592 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
65593 } else {
65594 output = keys.map(function(key) {
65595 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
65596 });
65597 }
65598
65599 ctx.seen.pop();
65600
65601 return reduceToSingleString(output, base, braces);
65602 }
65603
65604
65605 function formatPrimitive(ctx, value) {
65606 if (isUndefined(value))
65607 return ctx.stylize('undefined', 'undefined');
65608 if (isString(value)) {
65609 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
65610 .replace(/'/g, "\\'")
65611 .replace(/\\"/g, '"') + '\'';
65612 return ctx.stylize(simple, 'string');
65613 }
65614 if (isNumber(value))
65615 return ctx.stylize('' + value, 'number');
65616 if (isBoolean(value))
65617 return ctx.stylize('' + value, 'boolean');
65618 // For some reason typeof null is "object", so special case here.
65619 if (isNull(value))
65620 return ctx.stylize('null', 'null');
65621 }
65622
65623
65624 function formatError(value) {
65625 return '[' + Error.prototype.toString.call(value) + ']';
65626 }
65627
65628
65629 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
65630 var output = [];
65631 for (var i = 0, l = value.length; i < l; ++i) {
65632 if (hasOwnProperty(value, String(i))) {
65633 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65634 String(i), true));
65635 } else {
65636 output.push('');
65637 }
65638 }
65639 keys.forEach(function(key) {
65640 if (!key.match(/^\d+$/)) {
65641 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65642 key, true));
65643 }
65644 });
65645 return output;
65646 }
65647
65648
65649 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
65650 var name, str, desc;
65651 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
65652 if (desc.get) {
65653 if (desc.set) {
65654 str = ctx.stylize('[Getter/Setter]', 'special');
65655 } else {
65656 str = ctx.stylize('[Getter]', 'special');
65657 }
65658 } else {
65659 if (desc.set) {
65660 str = ctx.stylize('[Setter]', 'special');
65661 }
65662 }
65663 if (!hasOwnProperty(visibleKeys, key)) {
65664 name = '[' + key + ']';
65665 }
65666 if (!str) {
65667 if (ctx.seen.indexOf(desc.value) < 0) {
65668 if (isNull(recurseTimes)) {
65669 str = formatValue(ctx, desc.value, null);
65670 } else {
65671 str = formatValue(ctx, desc.value, recurseTimes - 1);
65672 }
65673 if (str.indexOf('\n') > -1) {
65674 if (array) {
65675 str = str.split('\n').map(function(line) {
65676 return ' ' + line;
65677 }).join('\n').substr(2);
65678 } else {
65679 str = '\n' + str.split('\n').map(function(line) {
65680 return ' ' + line;
65681 }).join('\n');
65682 }
65683 }
65684 } else {
65685 str = ctx.stylize('[Circular]', 'special');
65686 }
65687 }
65688 if (isUndefined(name)) {
65689 if (array && key.match(/^\d+$/)) {
65690 return str;
65691 }
65692 name = JSON.stringify('' + key);
65693 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
65694 name = name.substr(1, name.length - 2);
65695 name = ctx.stylize(name, 'name');
65696 } else {
65697 name = name.replace(/'/g, "\\'")
65698 .replace(/\\"/g, '"')
65699 .replace(/(^"|"$)/g, "'");
65700 name = ctx.stylize(name, 'string');
65701 }
65702 }
65703
65704 return name + ': ' + str;
65705 }
65706
65707
65708 function reduceToSingleString(output, base, braces) {
65709 var numLinesEst = 0;
65710 var length = output.reduce(function(prev, cur) {
65711 numLinesEst++;
65712 if (cur.indexOf('\n') >= 0) numLinesEst++;
65713 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
65714 }, 0);
65715
65716 if (length > 60) {
65717 return braces[0] +
65718 (base === '' ? '' : base + '\n ') +
65719 ' ' +
65720 output.join(',\n ') +
65721 ' ' +
65722 braces[1];
65723 }
65724
65725 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
65726 }
65727
65728
65729 // NOTE: These type checking functions intentionally don't use `instanceof`
65730 // because it is fragile and can be easily faked with `Object.create()`.
65731 function isArray(ar) {
65732 return Array.isArray(ar);
65733 }
65734 exports.isArray = isArray;
65735
65736 function isBoolean(arg) {
65737 return typeof arg === 'boolean';
65738 }
65739 exports.isBoolean = isBoolean;
65740
65741 function isNull(arg) {
65742 return arg === null;
65743 }
65744 exports.isNull = isNull;
65745
65746 function isNullOrUndefined(arg) {
65747 return arg == null;
65748 }
65749 exports.isNullOrUndefined = isNullOrUndefined;
65750
65751 function isNumber(arg) {
65752 return typeof arg === 'number';
65753 }
65754 exports.isNumber = isNumber;
65755
65756 function isString(arg) {
65757 return typeof arg === 'string';
65758 }
65759 exports.isString = isString;
65760
65761 function isSymbol(arg) {
65762 return typeof arg === 'symbol';
65763 }
65764 exports.isSymbol = isSymbol;
65765
65766 function isUndefined(arg) {
65767 return arg === void 0;
65768 }
65769 exports.isUndefined = isUndefined;
65770
65771 function isRegExp(re) {
65772 return isObject(re) && objectToString(re) === '[object RegExp]';
65773 }
65774 exports.isRegExp = isRegExp;
65775
65776 function isObject(arg) {
65777 return typeof arg === 'object' && arg !== null;
65778 }
65779 exports.isObject = isObject;
65780
65781 function isDate(d) {
65782 return isObject(d) && objectToString(d) === '[object Date]';
65783 }
65784 exports.isDate = isDate;
65785
65786 function isError(e) {
65787 return isObject(e) &&
65788 (objectToString(e) === '[object Error]' || e instanceof Error);
65789 }
65790 exports.isError = isError;
65791
65792 function isFunction(arg) {
65793 return typeof arg === 'function';
65794 }
65795 exports.isFunction = isFunction;
65796
65797 function isPrimitive(arg) {
65798 return arg === null ||
65799 typeof arg === 'boolean' ||
65800 typeof arg === 'number' ||
65801 typeof arg === 'string' ||
65802 typeof arg === 'symbol' || // ES6 symbol
65803 typeof arg === 'undefined';
65804 }
65805 exports.isPrimitive = isPrimitive;
65806
65807 exports.isBuffer = require('./support/isBuffer');
65808
65809 function objectToString(o) {
65810 return Object.prototype.toString.call(o);
65811 }
65812
65813
65814 function pad(n) {
65815 return n < 10 ? '0' + n.toString(10) : n.toString(10);
65816 }
65817
65818
65819 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
65820 'Oct', 'Nov', 'Dec'];
65821
65822 // 26 Feb 16:19:34
65823 function timestamp() {
65824 var d = new Date();
65825 var time = [pad(d.getHours()),
65826 pad(d.getMinutes()),
65827 pad(d.getSeconds())].join(':');
65828 return [d.getDate(), months[d.getMonth()], time].join(' ');
65829 }
65830
65831
65832 // log is just a thin wrapper to console.log that prepends a timestamp
65833 exports.log = function() {
65834 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
65835 };
65836
65837
65838 /**
65839 * Inherit the prototype methods from one constructor into another.
65840 *
65841 * The Function.prototype.inherits from lang.js rewritten as a standalone
65842 * function (not on Function.prototype). NOTE: If this file is to be loaded
65843 * during bootstrapping this function needs to be rewritten using some native
65844 * functions as prototype setup using normal JavaScript does not work as
65845 * expected during bootstrapping (see mirror.js in r114903).
65846 *
65847 * @param {function} ctor Constructor function which needs to inherit the
65848 * prototype.
65849 * @param {function} superCtor Constructor function to inherit prototype from.
65850 */
65851 exports.inherits = require('inherits');
65852
65853 exports._extend = function(origin, add) {
65854 // Don't do anything if add isn't an object
65855 if (!add || !isObject(add)) return origin;
65856
65857 var keys = Object.keys(add);
65858 var i = keys.length;
65859 while (i--) {
65860 origin[keys[i]] = add[keys[i]];
65861 }
65862 return origin;
65863 };
65864
65865 function hasOwnProperty(obj, prop) {
65866 return Object.prototype.hasOwnProperty.call(obj, prop);
65867 }
65868
65869 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65870 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
65871 var indexOf = require('indexof');
65872
65873 var Object_keys = function (obj) {
65874 if (Object.keys) return Object.keys(obj)
65875 else {
65876 var res = [];
65877 for (var key in obj) res.push(key)
65878 return res;
65879 }
65880 };
65881
65882 var forEach = function (xs, fn) {
65883 if (xs.forEach) return xs.forEach(fn)
65884 else for (var i = 0; i < xs.length; i++) {
65885 fn(xs[i], i, xs);
65886 }
65887 };
65888
65889 var defineProp = (function() {
65890 try {
65891 Object.defineProperty({}, '_', {});
65892 return function(obj, name, value) {
65893 Object.defineProperty(obj, name, {
65894 writable: true,
65895 enumerable: false,
65896 configurable: true,
65897 value: value
65898 })
65899 };
65900 } catch(e) {
65901 return function(obj, name, value) {
65902 obj[name] = value;
65903 };
65904 }
65905 }());
65906
65907 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
65908 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
65909 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
65910 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
65911 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
65912
65913 function Context() {}
65914 Context.prototype = {};
65915
65916 var Script = exports.Script = function NodeScript (code) {
65917 if (!(this instanceof Script)) return new Script(code);
65918 this.code = code;
65919 };
65920
65921 Script.prototype.runInContext = function (context) {
65922 if (!(context instanceof Context)) {
65923 throw new TypeError("needs a 'context' argument.");
65924 }
65925
65926 var iframe = document.createElement('iframe');
65927 if (!iframe.style) iframe.style = {};
65928 iframe.style.display = 'none';
65929
65930 document.body.appendChild(iframe);
65931
65932 var win = iframe.contentWindow;
65933 var wEval = win.eval, wExecScript = win.execScript;
65934
65935 if (!wEval && wExecScript) {
65936 // win.eval() magically appears when this is called in IE:
65937 wExecScript.call(win, 'null');
65938 wEval = win.eval;
65939 }
65940
65941 forEach(Object_keys(context), function (key) {
65942 win[key] = context[key];
65943 });
65944 forEach(globals, function (key) {
65945 if (context[key]) {
65946 win[key] = context[key];
65947 }
65948 });
65949
65950 var winKeys = Object_keys(win);
65951
65952 var res = wEval.call(win, this.code);
65953
65954 forEach(Object_keys(win), function (key) {
65955 // Avoid copying circular objects like `top` and `window` by only
65956 // updating existing context properties or new properties in the `win`
65957 // that was only introduced after the eval.
65958 if (key in context || indexOf(winKeys, key) === -1) {
65959 context[key] = win[key];
65960 }
65961 });
65962
65963 forEach(globals, function (key) {
65964 if (!(key in context)) {
65965 defineProp(context, key, win[key]);
65966 }
65967 });
65968
65969 document.body.removeChild(iframe);
65970
65971 return res;
65972 };
65973
65974 Script.prototype.runInThisContext = function () {
65975 return eval(this.code); // maybe...
65976 };
65977
65978 Script.prototype.runInNewContext = function (context) {
65979 var ctx = Script.createContext(context);
65980 var res = this.runInContext(ctx);
65981
65982 forEach(Object_keys(ctx), function (key) {
65983 context[key] = ctx[key];
65984 });
65985
65986 return res;
65987 };
65988
65989 forEach(Object_keys(Script.prototype), function (name) {
65990 exports[name] = Script[name] = function (code) {
65991 var s = Script(code);
65992 return s[name].apply(s, [].slice.call(arguments, 1));
65993 };
65994 });
65995
65996 exports.createScript = function (code) {
65997 return exports.Script(code);
65998 };
65999
66000 exports.createContext = Script.createContext = function (context) {
66001 var copy = new Context();
66002 if(typeof context === 'object') {
66003 forEach(Object_keys(context), function (key) {
66004 copy[key] = context[key];
66005 });
66006 }
66007 return copy;
66008 };
66009
66010 },{"indexof":94}],150:[function(require,module,exports){
66011 var aes = require('browserify-aes')
66012 var assert = require('assert')
66013 var Buffer = require('safe-buffer').Buffer
66014 var bs58check = require('bs58check')
66015 var createHash = require('create-hash')
66016 var scrypt = require('scryptsy')
66017 var xor = require('buffer-xor/inplace')
66018
66019 var ecurve = require('ecurve')
66020 var curve = ecurve.getCurveByName('secp256k1')
66021
66022 var BigInteger = require('bigi')
66023
66024 // constants
66025 var SCRYPT_PARAMS = {
66026 N: 16384, // specified by BIP38
66027 r: 8,
66028 p: 8
66029 }
66030 var NULL = Buffer.alloc(0)
66031
66032 function hash160 (buffer) {
66033 return createHash('rmd160').update(
66034 createHash('sha256').update(buffer).digest()
66035 ).digest()
66036 }
66037
66038 function hash256 (buffer) {
66039 return createHash('sha256').update(
66040 createHash('sha256').update(buffer).digest()
66041 ).digest()
66042 }
66043
66044 function getAddress (d, compressed) {
66045 var Q = curve.G.multiply(d).getEncoded(compressed)
66046 var hash = hash160(Q)
66047 var payload = Buffer.allocUnsafe(21)
66048 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
66049 hash.copy(payload, 1)
66050
66051 return bs58check.encode(payload)
66052 }
66053
66054 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
66055 if (buffer.length !== 32) throw new Error('Invalid private key length')
66056 scryptParams = scryptParams || SCRYPT_PARAMS
66057
66058 var d = BigInteger.fromBuffer(buffer)
66059 var address = getAddress(d, compressed)
66060 var secret = Buffer.from(passphrase, 'utf8')
66061 var salt = hash256(address).slice(0, 4)
66062
66063 var N = scryptParams.N
66064 var r = scryptParams.r
66065 var p = scryptParams.p
66066
66067 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
66068 var derivedHalf1 = scryptBuf.slice(0, 32)
66069 var derivedHalf2 = scryptBuf.slice(32, 64)
66070
66071 var xorBuf = xor(derivedHalf1, buffer)
66072 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
66073 cipher.setAutoPadding(false)
66074 cipher.end(xorBuf)
66075
66076 var cipherText = cipher.read()
66077
66078 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
66079 var result = Buffer.allocUnsafe(7 + 32)
66080 result.writeUInt8(0x01, 0)
66081 result.writeUInt8(0x42, 1)
66082 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
66083 salt.copy(result, 3)
66084 cipherText.copy(result, 7)
66085
66086 return result
66087 }
66088
66089 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
66090 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
66091 }
66092
66093 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
66094 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
66095 // 39 bytes: 2 bytes prefix, 37 bytes payload
66096 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
66097 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
66098 scryptParams = scryptParams || SCRYPT_PARAMS
66099
66100 // check if BIP38 EC multiply
66101 var type = buffer.readUInt8(1)
66102 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
66103 if (type !== 0x42) throw new Error('Invalid BIP38 type')
66104
66105 passphrase = Buffer.from(passphrase, 'utf8')
66106
66107 var flagByte = buffer.readUInt8(2)
66108 var compressed = flagByte === 0xe0
66109 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
66110
66111 var N = scryptParams.N
66112 var r = scryptParams.r
66113 var p = scryptParams.p
66114
66115 var salt = buffer.slice(3, 7)
66116 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
66117 var derivedHalf1 = scryptBuf.slice(0, 32)
66118 var derivedHalf2 = scryptBuf.slice(32, 64)
66119
66120 var privKeyBuf = buffer.slice(7, 7 + 32)
66121 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
66122 decipher.setAutoPadding(false)
66123 decipher.end(privKeyBuf)
66124
66125 var plainText = decipher.read()
66126 var privateKey = xor(derivedHalf1, plainText)
66127
66128 // verify salt matches address
66129 var d = BigInteger.fromBuffer(privateKey)
66130 var address = getAddress(d, compressed)
66131 var checksum = hash256(address).slice(0, 4)
66132 assert.deepEqual(salt, checksum)
66133
66134 return {
66135 privateKey: privateKey,
66136 compressed: compressed
66137 }
66138 }
66139
66140 function decrypt (string, passphrase, progressCallback, scryptParams) {
66141 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
66142 }
66143
66144 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
66145 passphrase = Buffer.from(passphrase, 'utf8')
66146 buffer = buffer.slice(1) // FIXME: we can avoid this
66147 scryptParams = scryptParams || SCRYPT_PARAMS
66148
66149 var flag = buffer.readUInt8(1)
66150 var compressed = (flag & 0x20) !== 0
66151 var hasLotSeq = (flag & 0x04) !== 0
66152
66153 assert.equal((flag & 0x24), flag, 'Invalid private key.')
66154
66155 var addressHash = buffer.slice(2, 6)
66156 var ownerEntropy = buffer.slice(6, 14)
66157 var ownerSalt
66158
66159 // 4 bytes ownerSalt if 4 bytes lot/sequence
66160 if (hasLotSeq) {
66161 ownerSalt = ownerEntropy.slice(0, 4)
66162
66163 // else, 8 bytes ownerSalt
66164 } else {
66165 ownerSalt = ownerEntropy
66166 }
66167
66168 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
66169 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
66170
66171 var N = scryptParams.N
66172 var r = scryptParams.r
66173 var p = scryptParams.p
66174 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
66175
66176 var passFactor
66177 if (hasLotSeq) {
66178 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
66179 passFactor = hash256(hashTarget)
66180 } else {
66181 passFactor = preFactor
66182 }
66183
66184 var passInt = BigInteger.fromBuffer(passFactor)
66185 var passPoint = curve.G.multiply(passInt).getEncoded(true)
66186
66187 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
66188 var derivedHalf1 = seedBPass.slice(0, 32)
66189 var derivedHalf2 = seedBPass.slice(32, 64)
66190
66191 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66192 decipher.setAutoPadding(false)
66193 decipher.end(encryptedPart2)
66194
66195 var decryptedPart2 = decipher.read()
66196 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
66197 var seedBPart2 = tmp.slice(8, 16)
66198
66199 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66200 decipher2.setAutoPadding(false)
66201 decipher2.write(encryptedPart1) // first 8 bytes
66202 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
66203
66204 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
66205 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
66206 var factorB = BigInteger.fromBuffer(hash256(seedB))
66207
66208 // d = passFactor * factorB (mod n)
66209 var d = passInt.multiply(factorB).mod(curve.n)
66210
66211 return {
66212 privateKey: d.toBuffer(32),
66213 compressed: compressed
66214 }
66215 }
66216
66217 function verify (string) {
66218 var decoded = bs58check.decodeUnsafe(string)
66219 if (!decoded) return false
66220
66221 if (decoded.length !== 39) return false
66222 if (decoded.readUInt8(0) !== 0x01) return false
66223
66224 var type = decoded.readUInt8(1)
66225 var flag = decoded.readUInt8(2)
66226
66227 // encrypted WIF
66228 if (type === 0x42) {
66229 if (flag !== 0xc0 && flag !== 0xe0) return false
66230
66231 // EC mult
66232 } else if (type === 0x43) {
66233 if ((flag & ~0x24)) return false
66234 } else {
66235 return false
66236 }
66237
66238 return true
66239 }
66240
66241 module.exports = {
66242 decrypt: decrypt,
66243 decryptECMult: decryptECMult,
66244 decryptRaw: decryptRaw,
66245 encrypt: encrypt,
66246 encryptRaw: encryptRaw,
66247 verify: verify
66248 }
66249
66250 },{"assert":15,"bigi":154,"browserify-aes":158,"bs58check":175,"buffer-xor/inplace":177,"create-hash":179,"ecurve":184,"safe-buffer":193,"scryptsy":194}],151:[function(require,module,exports){
66251 // base-x encoding
66252 // Forked from https://github.com/cryptocoinjs/bs58
66253 // Originally written by Mike Hearn for BitcoinJ
66254 // Copyright (c) 2011 Google Inc
66255 // Ported to JavaScript by Stefan Thomas
66256 // Merged Buffer refactorings from base58-native by Stephen Pair
66257 // Copyright (c) 2013 BitPay Inc
66258
66259 var Buffer = require('safe-buffer').Buffer
66260
66261 module.exports = function base (ALPHABET) {
66262 var ALPHABET_MAP = {}
66263 var BASE = ALPHABET.length
66264 var LEADER = ALPHABET.charAt(0)
66265
66266 // pre-compute lookup table
66267 for (var z = 0; z < ALPHABET.length; z++) {
66268 var x = ALPHABET.charAt(z)
66269
66270 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
66271 ALPHABET_MAP[x] = z
66272 }
66273
66274 function encode (source) {
66275 if (source.length === 0) return ''
66276
66277 var digits = [0]
66278 for (var i = 0; i < source.length; ++i) {
66279 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
66280 carry += digits[j] << 8
66281 digits[j] = carry % BASE
66282 carry = (carry / BASE) | 0
66283 }
66284
66285 while (carry > 0) {
66286 digits.push(carry % BASE)
66287 carry = (carry / BASE) | 0
66288 }
66289 }
66290
66291 var string = ''
66292
66293 // deal with leading zeros
66294 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
66295 // convert digits to a string
66296 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
66297
66298 return string
66299 }
66300
66301 function decodeUnsafe (string) {
66302 if (typeof string !== 'string') throw new TypeError('Expected String')
66303 if (string.length === 0) return Buffer.allocUnsafe(0)
66304
66305 var bytes = [0]
66306 for (var i = 0; i < string.length; i++) {
66307 var value = ALPHABET_MAP[string[i]]
66308 if (value === undefined) return
66309
66310 for (var j = 0, carry = value; j < bytes.length; ++j) {
66311 carry += bytes[j] * BASE
66312 bytes[j] = carry & 0xff
66313 carry >>= 8
66314 }
66315
66316 while (carry > 0) {
66317 bytes.push(carry & 0xff)
66318 carry >>= 8
66319 }
66320 }
66321
66322 // deal with leading zeros
66323 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
66324 bytes.push(0)
66325 }
66326
66327 return Buffer.from(bytes.reverse())
66328 }
66329
66330 function decode (string) {
66331 var buffer = decodeUnsafe(string)
66332 if (buffer) return buffer
66333
66334 throw new Error('Non-base' + BASE + ' character')
66335 }
66336
66337 return {
66338 encode: encode,
66339 decodeUnsafe: decodeUnsafe,
66340 decode: decode
66341 }
66342 }
66343
66344 },{"safe-buffer":193}],152:[function(require,module,exports){
66345 // (public) Constructor
66346 function BigInteger(a, b, c) {
66347 if (!(this instanceof BigInteger))
66348 return new BigInteger(a, b, c)
66349
66350 if (a != null) {
66351 if ("number" == typeof a) this.fromNumber(a, b, c)
66352 else if (b == null && "string" != typeof a) this.fromString(a, 256)
66353 else this.fromString(a, b)
66354 }
66355 }
66356
66357 var proto = BigInteger.prototype
66358
66359 // duck-typed isBigInteger
66360 proto.__bigi = require('../package.json').version
66361 BigInteger.isBigInteger = function (obj, check_ver) {
66362 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
66363 }
66364
66365 // Bits per digit
66366 var dbits
66367
66368 // am: Compute w_j += (x*this_i), propagate carries,
66369 // c is initial carry, returns final carry.
66370 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
66371 // We need to select the fastest one that works in this environment.
66372
66373 // am1: use a single mult and divide to get the high bits,
66374 // max digit bits should be 26 because
66375 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
66376 function am1(i, x, w, j, c, n) {
66377 while (--n >= 0) {
66378 var v = x * this[i++] + w[j] + c
66379 c = Math.floor(v / 0x4000000)
66380 w[j++] = v & 0x3ffffff
66381 }
66382 return c
66383 }
66384 // am2 avoids a big mult-and-extract completely.
66385 // Max digit bits should be <= 30 because we do bitwise ops
66386 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
66387 function am2(i, x, w, j, c, n) {
66388 var xl = x & 0x7fff,
66389 xh = x >> 15
66390 while (--n >= 0) {
66391 var l = this[i] & 0x7fff
66392 var h = this[i++] >> 15
66393 var m = xh * l + h * xl
66394 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
66395 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
66396 w[j++] = l & 0x3fffffff
66397 }
66398 return c
66399 }
66400 // Alternately, set max digit bits to 28 since some
66401 // browsers slow down when dealing with 32-bit numbers.
66402 function am3(i, x, w, j, c, n) {
66403 var xl = x & 0x3fff,
66404 xh = x >> 14
66405 while (--n >= 0) {
66406 var l = this[i] & 0x3fff
66407 var h = this[i++] >> 14
66408 var m = xh * l + h * xl
66409 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
66410 c = (l >> 28) + (m >> 14) + xh * h
66411 w[j++] = l & 0xfffffff
66412 }
66413 return c
66414 }
66415
66416 // wtf?
66417 BigInteger.prototype.am = am1
66418 dbits = 26
66419
66420 BigInteger.prototype.DB = dbits
66421 BigInteger.prototype.DM = ((1 << dbits) - 1)
66422 var DV = BigInteger.prototype.DV = (1 << dbits)
66423
66424 var BI_FP = 52
66425 BigInteger.prototype.FV = Math.pow(2, BI_FP)
66426 BigInteger.prototype.F1 = BI_FP - dbits
66427 BigInteger.prototype.F2 = 2 * dbits - BI_FP
66428
66429 // Digit conversions
66430 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
66431 var BI_RC = new Array()
66432 var rr, vv
66433 rr = "0".charCodeAt(0)
66434 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
66435 rr = "a".charCodeAt(0)
66436 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66437 rr = "A".charCodeAt(0)
66438 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66439
66440 function int2char(n) {
66441 return BI_RM.charAt(n)
66442 }
66443
66444 function intAt(s, i) {
66445 var c = BI_RC[s.charCodeAt(i)]
66446 return (c == null) ? -1 : c
66447 }
66448
66449 // (protected) copy this to r
66450 function bnpCopyTo(r) {
66451 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
66452 r.t = this.t
66453 r.s = this.s
66454 }
66455
66456 // (protected) set from integer value x, -DV <= x < DV
66457 function bnpFromInt(x) {
66458 this.t = 1
66459 this.s = (x < 0) ? -1 : 0
66460 if (x > 0) this[0] = x
66461 else if (x < -1) this[0] = x + DV
66462 else this.t = 0
66463 }
66464
66465 // return bigint initialized to value
66466 function nbv(i) {
66467 var r = new BigInteger()
66468 r.fromInt(i)
66469 return r
66470 }
66471
66472 // (protected) set from string and radix
66473 function bnpFromString(s, b) {
66474 var self = this
66475
66476 var k
66477 if (b == 16) k = 4
66478 else if (b == 8) k = 3
66479 else if (b == 256) k = 8; // byte array
66480 else if (b == 2) k = 1
66481 else if (b == 32) k = 5
66482 else if (b == 4) k = 2
66483 else {
66484 self.fromRadix(s, b)
66485 return
66486 }
66487 self.t = 0
66488 self.s = 0
66489 var i = s.length,
66490 mi = false,
66491 sh = 0
66492 while (--i >= 0) {
66493 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
66494 if (x < 0) {
66495 if (s.charAt(i) == "-") mi = true
66496 continue
66497 }
66498 mi = false
66499 if (sh == 0)
66500 self[self.t++] = x
66501 else if (sh + k > self.DB) {
66502 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
66503 self[self.t++] = (x >> (self.DB - sh))
66504 } else
66505 self[self.t - 1] |= x << sh
66506 sh += k
66507 if (sh >= self.DB) sh -= self.DB
66508 }
66509 if (k == 8 && (s[0] & 0x80) != 0) {
66510 self.s = -1
66511 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
66512 }
66513 self.clamp()
66514 if (mi) BigInteger.ZERO.subTo(self, self)
66515 }
66516
66517 // (protected) clamp off excess high words
66518 function bnpClamp() {
66519 var c = this.s & this.DM
66520 while (this.t > 0 && this[this.t - 1] == c)--this.t
66521 }
66522
66523 // (public) return string representation in given radix
66524 function bnToString(b) {
66525 var self = this
66526 if (self.s < 0) return "-" + self.negate()
66527 .toString(b)
66528 var k
66529 if (b == 16) k = 4
66530 else if (b == 8) k = 3
66531 else if (b == 2) k = 1
66532 else if (b == 32) k = 5
66533 else if (b == 4) k = 2
66534 else return self.toRadix(b)
66535 var km = (1 << k) - 1,
66536 d, m = false,
66537 r = "",
66538 i = self.t
66539 var p = self.DB - (i * self.DB) % k
66540 if (i-- > 0) {
66541 if (p < self.DB && (d = self[i] >> p) > 0) {
66542 m = true
66543 r = int2char(d)
66544 }
66545 while (i >= 0) {
66546 if (p < k) {
66547 d = (self[i] & ((1 << p) - 1)) << (k - p)
66548 d |= self[--i] >> (p += self.DB - k)
66549 } else {
66550 d = (self[i] >> (p -= k)) & km
66551 if (p <= 0) {
66552 p += self.DB
66553 --i
66554 }
66555 }
66556 if (d > 0) m = true
66557 if (m) r += int2char(d)
66558 }
66559 }
66560 return m ? r : "0"
66561 }
66562
66563 // (public) -this
66564 function bnNegate() {
66565 var r = new BigInteger()
66566 BigInteger.ZERO.subTo(this, r)
66567 return r
66568 }
66569
66570 // (public) |this|
66571 function bnAbs() {
66572 return (this.s < 0) ? this.negate() : this
66573 }
66574
66575 // (public) return + if this > a, - if this < a, 0 if equal
66576 function bnCompareTo(a) {
66577 var r = this.s - a.s
66578 if (r != 0) return r
66579 var i = this.t
66580 r = i - a.t
66581 if (r != 0) return (this.s < 0) ? -r : r
66582 while (--i >= 0)
66583 if ((r = this[i] - a[i]) != 0) return r
66584 return 0
66585 }
66586
66587 // returns bit length of the integer x
66588 function nbits(x) {
66589 var r = 1,
66590 t
66591 if ((t = x >>> 16) != 0) {
66592 x = t
66593 r += 16
66594 }
66595 if ((t = x >> 8) != 0) {
66596 x = t
66597 r += 8
66598 }
66599 if ((t = x >> 4) != 0) {
66600 x = t
66601 r += 4
66602 }
66603 if ((t = x >> 2) != 0) {
66604 x = t
66605 r += 2
66606 }
66607 if ((t = x >> 1) != 0) {
66608 x = t
66609 r += 1
66610 }
66611 return r
66612 }
66613
66614 // (public) return the number of bits in "this"
66615 function bnBitLength() {
66616 if (this.t <= 0) return 0
66617 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
66618 }
66619
66620 // (public) return the number of bytes in "this"
66621 function bnByteLength() {
66622 return this.bitLength() >> 3
66623 }
66624
66625 // (protected) r = this << n*DB
66626 function bnpDLShiftTo(n, r) {
66627 var i
66628 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
66629 for (i = n - 1; i >= 0; --i) r[i] = 0
66630 r.t = this.t + n
66631 r.s = this.s
66632 }
66633
66634 // (protected) r = this >> n*DB
66635 function bnpDRShiftTo(n, r) {
66636 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
66637 r.t = Math.max(this.t - n, 0)
66638 r.s = this.s
66639 }
66640
66641 // (protected) r = this << n
66642 function bnpLShiftTo(n, r) {
66643 var self = this
66644 var bs = n % self.DB
66645 var cbs = self.DB - bs
66646 var bm = (1 << cbs) - 1
66647 var ds = Math.floor(n / self.DB),
66648 c = (self.s << bs) & self.DM,
66649 i
66650 for (i = self.t - 1; i >= 0; --i) {
66651 r[i + ds + 1] = (self[i] >> cbs) | c
66652 c = (self[i] & bm) << bs
66653 }
66654 for (i = ds - 1; i >= 0; --i) r[i] = 0
66655 r[ds] = c
66656 r.t = self.t + ds + 1
66657 r.s = self.s
66658 r.clamp()
66659 }
66660
66661 // (protected) r = this >> n
66662 function bnpRShiftTo(n, r) {
66663 var self = this
66664 r.s = self.s
66665 var ds = Math.floor(n / self.DB)
66666 if (ds >= self.t) {
66667 r.t = 0
66668 return
66669 }
66670 var bs = n % self.DB
66671 var cbs = self.DB - bs
66672 var bm = (1 << bs) - 1
66673 r[0] = self[ds] >> bs
66674 for (var i = ds + 1; i < self.t; ++i) {
66675 r[i - ds - 1] |= (self[i] & bm) << cbs
66676 r[i - ds] = self[i] >> bs
66677 }
66678 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
66679 r.t = self.t - ds
66680 r.clamp()
66681 }
66682
66683 // (protected) r = this - a
66684 function bnpSubTo(a, r) {
66685 var self = this
66686 var i = 0,
66687 c = 0,
66688 m = Math.min(a.t, self.t)
66689 while (i < m) {
66690 c += self[i] - a[i]
66691 r[i++] = c & self.DM
66692 c >>= self.DB
66693 }
66694 if (a.t < self.t) {
66695 c -= a.s
66696 while (i < self.t) {
66697 c += self[i]
66698 r[i++] = c & self.DM
66699 c >>= self.DB
66700 }
66701 c += self.s
66702 } else {
66703 c += self.s
66704 while (i < a.t) {
66705 c -= a[i]
66706 r[i++] = c & self.DM
66707 c >>= self.DB
66708 }
66709 c -= a.s
66710 }
66711 r.s = (c < 0) ? -1 : 0
66712 if (c < -1) r[i++] = self.DV + c
66713 else if (c > 0) r[i++] = c
66714 r.t = i
66715 r.clamp()
66716 }
66717
66718 // (protected) r = this * a, r != this,a (HAC 14.12)
66719 // "this" should be the larger one if appropriate.
66720 function bnpMultiplyTo(a, r) {
66721 var x = this.abs(),
66722 y = a.abs()
66723 var i = x.t
66724 r.t = i + y.t
66725 while (--i >= 0) r[i] = 0
66726 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
66727 r.s = 0
66728 r.clamp()
66729 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
66730 }
66731
66732 // (protected) r = this^2, r != this (HAC 14.16)
66733 function bnpSquareTo(r) {
66734 var x = this.abs()
66735 var i = r.t = 2 * x.t
66736 while (--i >= 0) r[i] = 0
66737 for (i = 0; i < x.t - 1; ++i) {
66738 var c = x.am(i, x[i], r, 2 * i, 0, 1)
66739 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
66740 r[i + x.t] -= x.DV
66741 r[i + x.t + 1] = 1
66742 }
66743 }
66744 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
66745 r.s = 0
66746 r.clamp()
66747 }
66748
66749 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
66750 // r != q, this != m. q or r may be null.
66751 function bnpDivRemTo(m, q, r) {
66752 var self = this
66753 var pm = m.abs()
66754 if (pm.t <= 0) return
66755 var pt = self.abs()
66756 if (pt.t < pm.t) {
66757 if (q != null) q.fromInt(0)
66758 if (r != null) self.copyTo(r)
66759 return
66760 }
66761 if (r == null) r = new BigInteger()
66762 var y = new BigInteger(),
66763 ts = self.s,
66764 ms = m.s
66765 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
66766 if (nsh > 0) {
66767 pm.lShiftTo(nsh, y)
66768 pt.lShiftTo(nsh, r)
66769 } else {
66770 pm.copyTo(y)
66771 pt.copyTo(r)
66772 }
66773 var ys = y.t
66774 var y0 = y[ys - 1]
66775 if (y0 == 0) return
66776 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
66777 var d1 = self.FV / yt,
66778 d2 = (1 << self.F1) / yt,
66779 e = 1 << self.F2
66780 var i = r.t,
66781 j = i - ys,
66782 t = (q == null) ? new BigInteger() : q
66783 y.dlShiftTo(j, t)
66784 if (r.compareTo(t) >= 0) {
66785 r[r.t++] = 1
66786 r.subTo(t, r)
66787 }
66788 BigInteger.ONE.dlShiftTo(ys, t)
66789 t.subTo(y, y); // "negative" y so we can replace sub with am later
66790 while (y.t < ys) y[y.t++] = 0
66791 while (--j >= 0) {
66792 // Estimate quotient digit
66793 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
66794 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
66795 y.dlShiftTo(j, t)
66796 r.subTo(t, r)
66797 while (r[i] < --qd) r.subTo(t, r)
66798 }
66799 }
66800 if (q != null) {
66801 r.drShiftTo(ys, q)
66802 if (ts != ms) BigInteger.ZERO.subTo(q, q)
66803 }
66804 r.t = ys
66805 r.clamp()
66806 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
66807 if (ts < 0) BigInteger.ZERO.subTo(r, r)
66808 }
66809
66810 // (public) this mod a
66811 function bnMod(a) {
66812 var r = new BigInteger()
66813 this.abs()
66814 .divRemTo(a, null, r)
66815 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
66816 return r
66817 }
66818
66819 // Modular reduction using "classic" algorithm
66820 function Classic(m) {
66821 this.m = m
66822 }
66823
66824 function cConvert(x) {
66825 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
66826 else return x
66827 }
66828
66829 function cRevert(x) {
66830 return x
66831 }
66832
66833 function cReduce(x) {
66834 x.divRemTo(this.m, null, x)
66835 }
66836
66837 function cMulTo(x, y, r) {
66838 x.multiplyTo(y, r)
66839 this.reduce(r)
66840 }
66841
66842 function cSqrTo(x, r) {
66843 x.squareTo(r)
66844 this.reduce(r)
66845 }
66846
66847 Classic.prototype.convert = cConvert
66848 Classic.prototype.revert = cRevert
66849 Classic.prototype.reduce = cReduce
66850 Classic.prototype.mulTo = cMulTo
66851 Classic.prototype.sqrTo = cSqrTo
66852
66853 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
66854 // justification:
66855 // xy == 1 (mod m)
66856 // xy = 1+km
66857 // xy(2-xy) = (1+km)(1-km)
66858 // x[y(2-xy)] = 1-k^2m^2
66859 // x[y(2-xy)] == 1 (mod m^2)
66860 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
66861 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
66862 // JS multiply "overflows" differently from C/C++, so care is needed here.
66863 function bnpInvDigit() {
66864 if (this.t < 1) return 0
66865 var x = this[0]
66866 if ((x & 1) == 0) return 0
66867 var y = x & 3; // y == 1/x mod 2^2
66868 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
66869 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
66870 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
66871 // last step - calculate inverse mod DV directly
66872 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
66873 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
66874 // we really want the negative inverse, and -DV < y < DV
66875 return (y > 0) ? this.DV - y : -y
66876 }
66877
66878 // Montgomery reduction
66879 function Montgomery(m) {
66880 this.m = m
66881 this.mp = m.invDigit()
66882 this.mpl = this.mp & 0x7fff
66883 this.mph = this.mp >> 15
66884 this.um = (1 << (m.DB - 15)) - 1
66885 this.mt2 = 2 * m.t
66886 }
66887
66888 // xR mod m
66889 function montConvert(x) {
66890 var r = new BigInteger()
66891 x.abs()
66892 .dlShiftTo(this.m.t, r)
66893 r.divRemTo(this.m, null, r)
66894 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
66895 return r
66896 }
66897
66898 // x/R mod m
66899 function montRevert(x) {
66900 var r = new BigInteger()
66901 x.copyTo(r)
66902 this.reduce(r)
66903 return r
66904 }
66905
66906 // x = x/R mod m (HAC 14.32)
66907 function montReduce(x) {
66908 while (x.t <= this.mt2) // pad x so am has enough room later
66909 x[x.t++] = 0
66910 for (var i = 0; i < this.m.t; ++i) {
66911 // faster way of calculating u0 = x[i]*mp mod DV
66912 var j = x[i] & 0x7fff
66913 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
66914 // use am to combine the multiply-shift-add into one call
66915 j = i + this.m.t
66916 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
66917 // propagate carry
66918 while (x[j] >= x.DV) {
66919 x[j] -= x.DV
66920 x[++j]++
66921 }
66922 }
66923 x.clamp()
66924 x.drShiftTo(this.m.t, x)
66925 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
66926 }
66927
66928 // r = "x^2/R mod m"; x != r
66929 function montSqrTo(x, r) {
66930 x.squareTo(r)
66931 this.reduce(r)
66932 }
66933
66934 // r = "xy/R mod m"; x,y != r
66935 function montMulTo(x, y, r) {
66936 x.multiplyTo(y, r)
66937 this.reduce(r)
66938 }
66939
66940 Montgomery.prototype.convert = montConvert
66941 Montgomery.prototype.revert = montRevert
66942 Montgomery.prototype.reduce = montReduce
66943 Montgomery.prototype.mulTo = montMulTo
66944 Montgomery.prototype.sqrTo = montSqrTo
66945
66946 // (protected) true iff this is even
66947 function bnpIsEven() {
66948 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
66949 }
66950
66951 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
66952 function bnpExp(e, z) {
66953 if (e > 0xffffffff || e < 1) return BigInteger.ONE
66954 var r = new BigInteger(),
66955 r2 = new BigInteger(),
66956 g = z.convert(this),
66957 i = nbits(e) - 1
66958 g.copyTo(r)
66959 while (--i >= 0) {
66960 z.sqrTo(r, r2)
66961 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
66962 else {
66963 var t = r
66964 r = r2
66965 r2 = t
66966 }
66967 }
66968 return z.revert(r)
66969 }
66970
66971 // (public) this^e % m, 0 <= e < 2^32
66972 function bnModPowInt(e, m) {
66973 var z
66974 if (e < 256 || m.isEven()) z = new Classic(m)
66975 else z = new Montgomery(m)
66976 return this.exp(e, z)
66977 }
66978
66979 // protected
66980 proto.copyTo = bnpCopyTo
66981 proto.fromInt = bnpFromInt
66982 proto.fromString = bnpFromString
66983 proto.clamp = bnpClamp
66984 proto.dlShiftTo = bnpDLShiftTo
66985 proto.drShiftTo = bnpDRShiftTo
66986 proto.lShiftTo = bnpLShiftTo
66987 proto.rShiftTo = bnpRShiftTo
66988 proto.subTo = bnpSubTo
66989 proto.multiplyTo = bnpMultiplyTo
66990 proto.squareTo = bnpSquareTo
66991 proto.divRemTo = bnpDivRemTo
66992 proto.invDigit = bnpInvDigit
66993 proto.isEven = bnpIsEven
66994 proto.exp = bnpExp
66995
66996 // public
66997 proto.toString = bnToString
66998 proto.negate = bnNegate
66999 proto.abs = bnAbs
67000 proto.compareTo = bnCompareTo
67001 proto.bitLength = bnBitLength
67002 proto.byteLength = bnByteLength
67003 proto.mod = bnMod
67004 proto.modPowInt = bnModPowInt
67005
67006 // (public)
67007 function bnClone() {
67008 var r = new BigInteger()
67009 this.copyTo(r)
67010 return r
67011 }
67012
67013 // (public) return value as integer
67014 function bnIntValue() {
67015 if (this.s < 0) {
67016 if (this.t == 1) return this[0] - this.DV
67017 else if (this.t == 0) return -1
67018 } else if (this.t == 1) return this[0]
67019 else if (this.t == 0) return 0
67020 // assumes 16 < DB < 32
67021 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
67022 }
67023
67024 // (public) return value as byte
67025 function bnByteValue() {
67026 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
67027 }
67028
67029 // (public) return value as short (assumes DB>=16)
67030 function bnShortValue() {
67031 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
67032 }
67033
67034 // (protected) return x s.t. r^x < DV
67035 function bnpChunkSize(r) {
67036 return Math.floor(Math.LN2 * this.DB / Math.log(r))
67037 }
67038
67039 // (public) 0 if this == 0, 1 if this > 0
67040 function bnSigNum() {
67041 if (this.s < 0) return -1
67042 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
67043 else return 1
67044 }
67045
67046 // (protected) convert to radix string
67047 function bnpToRadix(b) {
67048 if (b == null) b = 10
67049 if (this.signum() == 0 || b < 2 || b > 36) return "0"
67050 var cs = this.chunkSize(b)
67051 var a = Math.pow(b, cs)
67052 var d = nbv(a),
67053 y = new BigInteger(),
67054 z = new BigInteger(),
67055 r = ""
67056 this.divRemTo(d, y, z)
67057 while (y.signum() > 0) {
67058 r = (a + z.intValue())
67059 .toString(b)
67060 .substr(1) + r
67061 y.divRemTo(d, y, z)
67062 }
67063 return z.intValue()
67064 .toString(b) + r
67065 }
67066
67067 // (protected) convert from radix string
67068 function bnpFromRadix(s, b) {
67069 var self = this
67070 self.fromInt(0)
67071 if (b == null) b = 10
67072 var cs = self.chunkSize(b)
67073 var d = Math.pow(b, cs),
67074 mi = false,
67075 j = 0,
67076 w = 0
67077 for (var i = 0; i < s.length; ++i) {
67078 var x = intAt(s, i)
67079 if (x < 0) {
67080 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
67081 continue
67082 }
67083 w = b * w + x
67084 if (++j >= cs) {
67085 self.dMultiply(d)
67086 self.dAddOffset(w, 0)
67087 j = 0
67088 w = 0
67089 }
67090 }
67091 if (j > 0) {
67092 self.dMultiply(Math.pow(b, j))
67093 self.dAddOffset(w, 0)
67094 }
67095 if (mi) BigInteger.ZERO.subTo(self, self)
67096 }
67097
67098 // (protected) alternate constructor
67099 function bnpFromNumber(a, b, c) {
67100 var self = this
67101 if ("number" == typeof b) {
67102 // new BigInteger(int,int,RNG)
67103 if (a < 2) self.fromInt(1)
67104 else {
67105 self.fromNumber(a, c)
67106 if (!self.testBit(a - 1)) // force MSB set
67107 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
67108 if (self.isEven()) self.dAddOffset(1, 0); // force odd
67109 while (!self.isProbablePrime(b)) {
67110 self.dAddOffset(2, 0)
67111 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
67112 }
67113 }
67114 } else {
67115 // new BigInteger(int,RNG)
67116 var x = new Array(),
67117 t = a & 7
67118 x.length = (a >> 3) + 1
67119 b.nextBytes(x)
67120 if (t > 0) x[0] &= ((1 << t) - 1)
67121 else x[0] = 0
67122 self.fromString(x, 256)
67123 }
67124 }
67125
67126 // (public) convert to bigendian byte array
67127 function bnToByteArray() {
67128 var self = this
67129 var i = self.t,
67130 r = new Array()
67131 r[0] = self.s
67132 var p = self.DB - (i * self.DB) % 8,
67133 d, k = 0
67134 if (i-- > 0) {
67135 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
67136 r[k++] = d | (self.s << (self.DB - p))
67137 while (i >= 0) {
67138 if (p < 8) {
67139 d = (self[i] & ((1 << p) - 1)) << (8 - p)
67140 d |= self[--i] >> (p += self.DB - 8)
67141 } else {
67142 d = (self[i] >> (p -= 8)) & 0xff
67143 if (p <= 0) {
67144 p += self.DB
67145 --i
67146 }
67147 }
67148 if ((d & 0x80) != 0) d |= -256
67149 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
67150 if (k > 0 || d != self.s) r[k++] = d
67151 }
67152 }
67153 return r
67154 }
67155
67156 function bnEquals(a) {
67157 return (this.compareTo(a) == 0)
67158 }
67159
67160 function bnMin(a) {
67161 return (this.compareTo(a) < 0) ? this : a
67162 }
67163
67164 function bnMax(a) {
67165 return (this.compareTo(a) > 0) ? this : a
67166 }
67167
67168 // (protected) r = this op a (bitwise)
67169 function bnpBitwiseTo(a, op, r) {
67170 var self = this
67171 var i, f, m = Math.min(a.t, self.t)
67172 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
67173 if (a.t < self.t) {
67174 f = a.s & self.DM
67175 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
67176 r.t = self.t
67177 } else {
67178 f = self.s & self.DM
67179 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
67180 r.t = a.t
67181 }
67182 r.s = op(self.s, a.s)
67183 r.clamp()
67184 }
67185
67186 // (public) this & a
67187 function op_and(x, y) {
67188 return x & y
67189 }
67190
67191 function bnAnd(a) {
67192 var r = new BigInteger()
67193 this.bitwiseTo(a, op_and, r)
67194 return r
67195 }
67196
67197 // (public) this | a
67198 function op_or(x, y) {
67199 return x | y
67200 }
67201
67202 function bnOr(a) {
67203 var r = new BigInteger()
67204 this.bitwiseTo(a, op_or, r)
67205 return r
67206 }
67207
67208 // (public) this ^ a
67209 function op_xor(x, y) {
67210 return x ^ y
67211 }
67212
67213 function bnXor(a) {
67214 var r = new BigInteger()
67215 this.bitwiseTo(a, op_xor, r)
67216 return r
67217 }
67218
67219 // (public) this & ~a
67220 function op_andnot(x, y) {
67221 return x & ~y
67222 }
67223
67224 function bnAndNot(a) {
67225 var r = new BigInteger()
67226 this.bitwiseTo(a, op_andnot, r)
67227 return r
67228 }
67229
67230 // (public) ~this
67231 function bnNot() {
67232 var r = new BigInteger()
67233 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
67234 r.t = this.t
67235 r.s = ~this.s
67236 return r
67237 }
67238
67239 // (public) this << n
67240 function bnShiftLeft(n) {
67241 var r = new BigInteger()
67242 if (n < 0) this.rShiftTo(-n, r)
67243 else this.lShiftTo(n, r)
67244 return r
67245 }
67246
67247 // (public) this >> n
67248 function bnShiftRight(n) {
67249 var r = new BigInteger()
67250 if (n < 0) this.lShiftTo(-n, r)
67251 else this.rShiftTo(n, r)
67252 return r
67253 }
67254
67255 // return index of lowest 1-bit in x, x < 2^31
67256 function lbit(x) {
67257 if (x == 0) return -1
67258 var r = 0
67259 if ((x & 0xffff) == 0) {
67260 x >>= 16
67261 r += 16
67262 }
67263 if ((x & 0xff) == 0) {
67264 x >>= 8
67265 r += 8
67266 }
67267 if ((x & 0xf) == 0) {
67268 x >>= 4
67269 r += 4
67270 }
67271 if ((x & 3) == 0) {
67272 x >>= 2
67273 r += 2
67274 }
67275 if ((x & 1) == 0)++r
67276 return r
67277 }
67278
67279 // (public) returns index of lowest 1-bit (or -1 if none)
67280 function bnGetLowestSetBit() {
67281 for (var i = 0; i < this.t; ++i)
67282 if (this[i] != 0) return i * this.DB + lbit(this[i])
67283 if (this.s < 0) return this.t * this.DB
67284 return -1
67285 }
67286
67287 // return number of 1 bits in x
67288 function cbit(x) {
67289 var r = 0
67290 while (x != 0) {
67291 x &= x - 1
67292 ++r
67293 }
67294 return r
67295 }
67296
67297 // (public) return number of set bits
67298 function bnBitCount() {
67299 var r = 0,
67300 x = this.s & this.DM
67301 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
67302 return r
67303 }
67304
67305 // (public) true iff nth bit is set
67306 function bnTestBit(n) {
67307 var j = Math.floor(n / this.DB)
67308 if (j >= this.t) return (this.s != 0)
67309 return ((this[j] & (1 << (n % this.DB))) != 0)
67310 }
67311
67312 // (protected) this op (1<<n)
67313 function bnpChangeBit(n, op) {
67314 var r = BigInteger.ONE.shiftLeft(n)
67315 this.bitwiseTo(r, op, r)
67316 return r
67317 }
67318
67319 // (public) this | (1<<n)
67320 function bnSetBit(n) {
67321 return this.changeBit(n, op_or)
67322 }
67323
67324 // (public) this & ~(1<<n)
67325 function bnClearBit(n) {
67326 return this.changeBit(n, op_andnot)
67327 }
67328
67329 // (public) this ^ (1<<n)
67330 function bnFlipBit(n) {
67331 return this.changeBit(n, op_xor)
67332 }
67333
67334 // (protected) r = this + a
67335 function bnpAddTo(a, r) {
67336 var self = this
67337
67338 var i = 0,
67339 c = 0,
67340 m = Math.min(a.t, self.t)
67341 while (i < m) {
67342 c += self[i] + a[i]
67343 r[i++] = c & self.DM
67344 c >>= self.DB
67345 }
67346 if (a.t < self.t) {
67347 c += a.s
67348 while (i < self.t) {
67349 c += self[i]
67350 r[i++] = c & self.DM
67351 c >>= self.DB
67352 }
67353 c += self.s
67354 } else {
67355 c += self.s
67356 while (i < a.t) {
67357 c += a[i]
67358 r[i++] = c & self.DM
67359 c >>= self.DB
67360 }
67361 c += a.s
67362 }
67363 r.s = (c < 0) ? -1 : 0
67364 if (c > 0) r[i++] = c
67365 else if (c < -1) r[i++] = self.DV + c
67366 r.t = i
67367 r.clamp()
67368 }
67369
67370 // (public) this + a
67371 function bnAdd(a) {
67372 var r = new BigInteger()
67373 this.addTo(a, r)
67374 return r
67375 }
67376
67377 // (public) this - a
67378 function bnSubtract(a) {
67379 var r = new BigInteger()
67380 this.subTo(a, r)
67381 return r
67382 }
67383
67384 // (public) this * a
67385 function bnMultiply(a) {
67386 var r = new BigInteger()
67387 this.multiplyTo(a, r)
67388 return r
67389 }
67390
67391 // (public) this^2
67392 function bnSquare() {
67393 var r = new BigInteger()
67394 this.squareTo(r)
67395 return r
67396 }
67397
67398 // (public) this / a
67399 function bnDivide(a) {
67400 var r = new BigInteger()
67401 this.divRemTo(a, r, null)
67402 return r
67403 }
67404
67405 // (public) this % a
67406 function bnRemainder(a) {
67407 var r = new BigInteger()
67408 this.divRemTo(a, null, r)
67409 return r
67410 }
67411
67412 // (public) [this/a,this%a]
67413 function bnDivideAndRemainder(a) {
67414 var q = new BigInteger(),
67415 r = new BigInteger()
67416 this.divRemTo(a, q, r)
67417 return new Array(q, r)
67418 }
67419
67420 // (protected) this *= n, this >= 0, 1 < n < DV
67421 function bnpDMultiply(n) {
67422 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
67423 ++this.t
67424 this.clamp()
67425 }
67426
67427 // (protected) this += n << w words, this >= 0
67428 function bnpDAddOffset(n, w) {
67429 if (n == 0) return
67430 while (this.t <= w) this[this.t++] = 0
67431 this[w] += n
67432 while (this[w] >= this.DV) {
67433 this[w] -= this.DV
67434 if (++w >= this.t) this[this.t++] = 0
67435 ++this[w]
67436 }
67437 }
67438
67439 // A "null" reducer
67440 function NullExp() {}
67441
67442 function nNop(x) {
67443 return x
67444 }
67445
67446 function nMulTo(x, y, r) {
67447 x.multiplyTo(y, r)
67448 }
67449
67450 function nSqrTo(x, r) {
67451 x.squareTo(r)
67452 }
67453
67454 NullExp.prototype.convert = nNop
67455 NullExp.prototype.revert = nNop
67456 NullExp.prototype.mulTo = nMulTo
67457 NullExp.prototype.sqrTo = nSqrTo
67458
67459 // (public) this^e
67460 function bnPow(e) {
67461 return this.exp(e, new NullExp())
67462 }
67463
67464 // (protected) r = lower n words of "this * a", a.t <= n
67465 // "this" should be the larger one if appropriate.
67466 function bnpMultiplyLowerTo(a, n, r) {
67467 var i = Math.min(this.t + a.t, n)
67468 r.s = 0; // assumes a,this >= 0
67469 r.t = i
67470 while (i > 0) r[--i] = 0
67471 var j
67472 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
67473 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
67474 r.clamp()
67475 }
67476
67477 // (protected) r = "this * a" without lower n words, n > 0
67478 // "this" should be the larger one if appropriate.
67479 function bnpMultiplyUpperTo(a, n, r) {
67480 --n
67481 var i = r.t = this.t + a.t - n
67482 r.s = 0; // assumes a,this >= 0
67483 while (--i >= 0) r[i] = 0
67484 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
67485 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
67486 r.clamp()
67487 r.drShiftTo(1, r)
67488 }
67489
67490 // Barrett modular reduction
67491 function Barrett(m) {
67492 // setup Barrett
67493 this.r2 = new BigInteger()
67494 this.q3 = new BigInteger()
67495 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
67496 this.mu = this.r2.divide(m)
67497 this.m = m
67498 }
67499
67500 function barrettConvert(x) {
67501 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
67502 else if (x.compareTo(this.m) < 0) return x
67503 else {
67504 var r = new BigInteger()
67505 x.copyTo(r)
67506 this.reduce(r)
67507 return r
67508 }
67509 }
67510
67511 function barrettRevert(x) {
67512 return x
67513 }
67514
67515 // x = x mod m (HAC 14.42)
67516 function barrettReduce(x) {
67517 var self = this
67518 x.drShiftTo(self.m.t - 1, self.r2)
67519 if (x.t > self.m.t + 1) {
67520 x.t = self.m.t + 1
67521 x.clamp()
67522 }
67523 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
67524 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
67525 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
67526 x.subTo(self.r2, x)
67527 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
67528 }
67529
67530 // r = x^2 mod m; x != r
67531 function barrettSqrTo(x, r) {
67532 x.squareTo(r)
67533 this.reduce(r)
67534 }
67535
67536 // r = x*y mod m; x,y != r
67537 function barrettMulTo(x, y, r) {
67538 x.multiplyTo(y, r)
67539 this.reduce(r)
67540 }
67541
67542 Barrett.prototype.convert = barrettConvert
67543 Barrett.prototype.revert = barrettRevert
67544 Barrett.prototype.reduce = barrettReduce
67545 Barrett.prototype.mulTo = barrettMulTo
67546 Barrett.prototype.sqrTo = barrettSqrTo
67547
67548 // (public) this^e % m (HAC 14.85)
67549 function bnModPow(e, m) {
67550 var i = e.bitLength(),
67551 k, r = nbv(1),
67552 z
67553 if (i <= 0) return r
67554 else if (i < 18) k = 1
67555 else if (i < 48) k = 3
67556 else if (i < 144) k = 4
67557 else if (i < 768) k = 5
67558 else k = 6
67559 if (i < 8)
67560 z = new Classic(m)
67561 else if (m.isEven())
67562 z = new Barrett(m)
67563 else
67564 z = new Montgomery(m)
67565
67566 // precomputation
67567 var g = new Array(),
67568 n = 3,
67569 k1 = k - 1,
67570 km = (1 << k) - 1
67571 g[1] = z.convert(this)
67572 if (k > 1) {
67573 var g2 = new BigInteger()
67574 z.sqrTo(g[1], g2)
67575 while (n <= km) {
67576 g[n] = new BigInteger()
67577 z.mulTo(g2, g[n - 2], g[n])
67578 n += 2
67579 }
67580 }
67581
67582 var j = e.t - 1,
67583 w, is1 = true,
67584 r2 = new BigInteger(),
67585 t
67586 i = nbits(e[j]) - 1
67587 while (j >= 0) {
67588 if (i >= k1) w = (e[j] >> (i - k1)) & km
67589 else {
67590 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
67591 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
67592 }
67593
67594 n = k
67595 while ((w & 1) == 0) {
67596 w >>= 1
67597 --n
67598 }
67599 if ((i -= n) < 0) {
67600 i += this.DB
67601 --j
67602 }
67603 if (is1) { // ret == 1, don't bother squaring or multiplying it
67604 g[w].copyTo(r)
67605 is1 = false
67606 } else {
67607 while (n > 1) {
67608 z.sqrTo(r, r2)
67609 z.sqrTo(r2, r)
67610 n -= 2
67611 }
67612 if (n > 0) z.sqrTo(r, r2)
67613 else {
67614 t = r
67615 r = r2
67616 r2 = t
67617 }
67618 z.mulTo(r2, g[w], r)
67619 }
67620
67621 while (j >= 0 && (e[j] & (1 << i)) == 0) {
67622 z.sqrTo(r, r2)
67623 t = r
67624 r = r2
67625 r2 = t
67626 if (--i < 0) {
67627 i = this.DB - 1
67628 --j
67629 }
67630 }
67631 }
67632 return z.revert(r)
67633 }
67634
67635 // (public) gcd(this,a) (HAC 14.54)
67636 function bnGCD(a) {
67637 var x = (this.s < 0) ? this.negate() : this.clone()
67638 var y = (a.s < 0) ? a.negate() : a.clone()
67639 if (x.compareTo(y) < 0) {
67640 var t = x
67641 x = y
67642 y = t
67643 }
67644 var i = x.getLowestSetBit(),
67645 g = y.getLowestSetBit()
67646 if (g < 0) return x
67647 if (i < g) g = i
67648 if (g > 0) {
67649 x.rShiftTo(g, x)
67650 y.rShiftTo(g, y)
67651 }
67652 while (x.signum() > 0) {
67653 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
67654 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
67655 if (x.compareTo(y) >= 0) {
67656 x.subTo(y, x)
67657 x.rShiftTo(1, x)
67658 } else {
67659 y.subTo(x, y)
67660 y.rShiftTo(1, y)
67661 }
67662 }
67663 if (g > 0) y.lShiftTo(g, y)
67664 return y
67665 }
67666
67667 // (protected) this % n, n < 2^26
67668 function bnpModInt(n) {
67669 if (n <= 0) return 0
67670 var d = this.DV % n,
67671 r = (this.s < 0) ? n - 1 : 0
67672 if (this.t > 0)
67673 if (d == 0) r = this[0] % n
67674 else
67675 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
67676 return r
67677 }
67678
67679 // (public) 1/this % m (HAC 14.61)
67680 function bnModInverse(m) {
67681 var ac = m.isEven()
67682 if (this.signum() === 0) throw new Error('division by zero')
67683 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
67684 var u = m.clone(),
67685 v = this.clone()
67686 var a = nbv(1),
67687 b = nbv(0),
67688 c = nbv(0),
67689 d = nbv(1)
67690 while (u.signum() != 0) {
67691 while (u.isEven()) {
67692 u.rShiftTo(1, u)
67693 if (ac) {
67694 if (!a.isEven() || !b.isEven()) {
67695 a.addTo(this, a)
67696 b.subTo(m, b)
67697 }
67698 a.rShiftTo(1, a)
67699 } else if (!b.isEven()) b.subTo(m, b)
67700 b.rShiftTo(1, b)
67701 }
67702 while (v.isEven()) {
67703 v.rShiftTo(1, v)
67704 if (ac) {
67705 if (!c.isEven() || !d.isEven()) {
67706 c.addTo(this, c)
67707 d.subTo(m, d)
67708 }
67709 c.rShiftTo(1, c)
67710 } else if (!d.isEven()) d.subTo(m, d)
67711 d.rShiftTo(1, d)
67712 }
67713 if (u.compareTo(v) >= 0) {
67714 u.subTo(v, u)
67715 if (ac) a.subTo(c, a)
67716 b.subTo(d, b)
67717 } else {
67718 v.subTo(u, v)
67719 if (ac) c.subTo(a, c)
67720 d.subTo(b, d)
67721 }
67722 }
67723 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
67724 while (d.compareTo(m) >= 0) d.subTo(m, d)
67725 while (d.signum() < 0) d.addTo(m, d)
67726 return d
67727 }
67728
67729 var lowprimes = [
67730 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
67731 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
67732 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
67733 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
67734 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
67735 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
67736 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
67737 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
67738 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
67739 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
67740 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
67741 ]
67742
67743 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
67744
67745 // (public) test primality with certainty >= 1-.5^t
67746 function bnIsProbablePrime(t) {
67747 var i, x = this.abs()
67748 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
67749 for (i = 0; i < lowprimes.length; ++i)
67750 if (x[0] == lowprimes[i]) return true
67751 return false
67752 }
67753 if (x.isEven()) return false
67754 i = 1
67755 while (i < lowprimes.length) {
67756 var m = lowprimes[i],
67757 j = i + 1
67758 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
67759 m = x.modInt(m)
67760 while (i < j) if (m % lowprimes[i++] == 0) return false
67761 }
67762 return x.millerRabin(t)
67763 }
67764
67765 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
67766 function bnpMillerRabin(t) {
67767 var n1 = this.subtract(BigInteger.ONE)
67768 var k = n1.getLowestSetBit()
67769 if (k <= 0) return false
67770 var r = n1.shiftRight(k)
67771 t = (t + 1) >> 1
67772 if (t > lowprimes.length) t = lowprimes.length
67773 var a = new BigInteger(null)
67774 var j, bases = []
67775 for (var i = 0; i < t; ++i) {
67776 for (;;) {
67777 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
67778 if (bases.indexOf(j) == -1) break
67779 }
67780 bases.push(j)
67781 a.fromInt(j)
67782 var y = a.modPow(r, this)
67783 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
67784 var j = 1
67785 while (j++ < k && y.compareTo(n1) != 0) {
67786 y = y.modPowInt(2, this)
67787 if (y.compareTo(BigInteger.ONE) == 0) return false
67788 }
67789 if (y.compareTo(n1) != 0) return false
67790 }
67791 }
67792 return true
67793 }
67794
67795 // protected
67796 proto.chunkSize = bnpChunkSize
67797 proto.toRadix = bnpToRadix
67798 proto.fromRadix = bnpFromRadix
67799 proto.fromNumber = bnpFromNumber
67800 proto.bitwiseTo = bnpBitwiseTo
67801 proto.changeBit = bnpChangeBit
67802 proto.addTo = bnpAddTo
67803 proto.dMultiply = bnpDMultiply
67804 proto.dAddOffset = bnpDAddOffset
67805 proto.multiplyLowerTo = bnpMultiplyLowerTo
67806 proto.multiplyUpperTo = bnpMultiplyUpperTo
67807 proto.modInt = bnpModInt
67808 proto.millerRabin = bnpMillerRabin
67809
67810 // public
67811 proto.clone = bnClone
67812 proto.intValue = bnIntValue
67813 proto.byteValue = bnByteValue
67814 proto.shortValue = bnShortValue
67815 proto.signum = bnSigNum
67816 proto.toByteArray = bnToByteArray
67817 proto.equals = bnEquals
67818 proto.min = bnMin
67819 proto.max = bnMax
67820 proto.and = bnAnd
67821 proto.or = bnOr
67822 proto.xor = bnXor
67823 proto.andNot = bnAndNot
67824 proto.not = bnNot
67825 proto.shiftLeft = bnShiftLeft
67826 proto.shiftRight = bnShiftRight
67827 proto.getLowestSetBit = bnGetLowestSetBit
67828 proto.bitCount = bnBitCount
67829 proto.testBit = bnTestBit
67830 proto.setBit = bnSetBit
67831 proto.clearBit = bnClearBit
67832 proto.flipBit = bnFlipBit
67833 proto.add = bnAdd
67834 proto.subtract = bnSubtract
67835 proto.multiply = bnMultiply
67836 proto.divide = bnDivide
67837 proto.remainder = bnRemainder
67838 proto.divideAndRemainder = bnDivideAndRemainder
67839 proto.modPow = bnModPow
67840 proto.modInverse = bnModInverse
67841 proto.pow = bnPow
67842 proto.gcd = bnGCD
67843 proto.isProbablePrime = bnIsProbablePrime
67844
67845 // JSBN-specific extension
67846 proto.square = bnSquare
67847
67848 // constants
67849 BigInteger.ZERO = nbv(0)
67850 BigInteger.ONE = nbv(1)
67851 BigInteger.valueOf = nbv
67852
67853 module.exports = BigInteger
67854
67855 },{"../package.json":155}],153:[function(require,module,exports){
67856 (function (Buffer){
67857 // FIXME: Kind of a weird way to throw exceptions, consider removing
67858 var assert = require('assert')
67859 var BigInteger = require('./bigi')
67860
67861 /**
67862 * Turns a byte array into a big integer.
67863 *
67864 * This function will interpret a byte array as a big integer in big
67865 * endian notation.
67866 */
67867 BigInteger.fromByteArrayUnsigned = function(byteArray) {
67868 // BigInteger expects a DER integer conformant byte array
67869 if (byteArray[0] & 0x80) {
67870 return new BigInteger([0].concat(byteArray))
67871 }
67872
67873 return new BigInteger(byteArray)
67874 }
67875
67876 /**
67877 * Returns a byte array representation of the big integer.
67878 *
67879 * This returns the absolute of the contained value in big endian
67880 * form. A value of zero results in an empty array.
67881 */
67882 BigInteger.prototype.toByteArrayUnsigned = function() {
67883 var byteArray = this.toByteArray()
67884 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
67885 }
67886
67887 BigInteger.fromDERInteger = function(byteArray) {
67888 return new BigInteger(byteArray)
67889 }
67890
67891 /*
67892 * Converts BigInteger to a DER integer representation.
67893 *
67894 * The format for this value uses the most significant bit as a sign
67895 * bit. If the most significant bit is already set and the integer is
67896 * positive, a 0x00 is prepended.
67897 *
67898 * Examples:
67899 *
67900 * 0 => 0x00
67901 * 1 => 0x01
67902 * -1 => 0xff
67903 * 127 => 0x7f
67904 * -127 => 0x81
67905 * 128 => 0x0080
67906 * -128 => 0x80
67907 * 255 => 0x00ff
67908 * -255 => 0xff01
67909 * 16300 => 0x3fac
67910 * -16300 => 0xc054
67911 * 62300 => 0x00f35c
67912 * -62300 => 0xff0ca4
67913 */
67914 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
67915
67916 BigInteger.fromBuffer = function(buffer) {
67917 // BigInteger expects a DER integer conformant byte array
67918 if (buffer[0] & 0x80) {
67919 var byteArray = Array.prototype.slice.call(buffer)
67920
67921 return new BigInteger([0].concat(byteArray))
67922 }
67923
67924 return new BigInteger(buffer)
67925 }
67926
67927 BigInteger.fromHex = function(hex) {
67928 if (hex === '') return BigInteger.ZERO
67929
67930 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
67931 assert.equal(hex.length % 2, 0, 'Incomplete hex')
67932 return new BigInteger(hex, 16)
67933 }
67934
67935 BigInteger.prototype.toBuffer = function(size) {
67936 var byteArray = this.toByteArrayUnsigned()
67937 var zeros = []
67938
67939 var padding = size - byteArray.length
67940 while (zeros.length < padding) zeros.push(0)
67941
67942 return new Buffer(zeros.concat(byteArray))
67943 }
67944
67945 BigInteger.prototype.toHex = function(size) {
67946 return this.toBuffer(size).toString('hex')
67947 }
67948
67949 }).call(this,require("buffer").Buffer)
67950 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
67951 var BigInteger = require('./bigi')
67952
67953 //addons
67954 require('./convert')
67955
67956 module.exports = BigInteger
67957 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
67958 module.exports={
67959 "_args": [
67960 [
67961 "bigi@^1.2.0",
67962 "/home/ian/git/bitcoin/bitcoinjs-bip38"
67963 ]
67964 ],
67965 "_from": "bigi@>=1.2.0 <2.0.0",
67966 "_id": "bigi@1.4.2",
67967 "_inCache": true,
67968 "_installable": true,
67969 "_location": "/bigi",
67970 "_nodeVersion": "6.1.0",
67971 "_npmOperationalInternal": {
67972 "host": "packages-12-west.internal.npmjs.com",
67973 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
67974 },
67975 "_npmUser": {
67976 "email": "jprichardson@gmail.com",
67977 "name": "jprichardson"
67978 },
67979 "_npmVersion": "3.8.6",
67980 "_phantomChildren": {},
67981 "_requested": {
67982 "name": "bigi",
67983 "raw": "bigi@^1.2.0",
67984 "rawSpec": "^1.2.0",
67985 "scope": null,
67986 "spec": ">=1.2.0 <2.0.0",
67987 "type": "range"
67988 },
67989 "_requiredBy": [
67990 "/",
67991 "/ecurve"
67992 ],
67993 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
67994 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
67995 "_shrinkwrap": null,
67996 "_spec": "bigi@^1.2.0",
67997 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
67998 "bugs": {
67999 "url": "https://github.com/cryptocoinjs/bigi/issues"
68000 },
68001 "dependencies": {},
68002 "description": "Big integers.",
68003 "devDependencies": {
68004 "coveralls": "^2.11.2",
68005 "istanbul": "^0.3.5",
68006 "jshint": "^2.5.1",
68007 "mocha": "^2.1.0",
68008 "mochify": "^2.1.0"
68009 },
68010 "directories": {},
68011 "dist": {
68012 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
68013 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
68014 },
68015 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
68016 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
68017 "keywords": [
68018 "cryptography",
68019 "math",
68020 "bitcoin",
68021 "arbitrary",
68022 "precision",
68023 "arithmetic",
68024 "big",
68025 "integer",
68026 "int",
68027 "number",
68028 "biginteger",
68029 "bigint",
68030 "bignumber",
68031 "decimal",
68032 "float"
68033 ],
68034 "main": "./lib/index.js",
68035 "maintainers": [
68036 {
68037 "email": "boydb@midnightdesign.ws",
68038 "name": "midnightlightning"
68039 },
68040 {
68041 "email": "sidazhang89@gmail.com",
68042 "name": "sidazhang"
68043 },
68044 {
68045 "email": "npm@shesek.info",
68046 "name": "nadav"
68047 },
68048 {
68049 "email": "jprichardson@gmail.com",
68050 "name": "jprichardson"
68051 }
68052 ],
68053 "name": "bigi",
68054 "optionalDependencies": {},
68055 "readme": "ERROR: No README data found!",
68056 "repository": {
68057 "type": "git",
68058 "url": "git+https://github.com/cryptocoinjs/bigi.git"
68059 },
68060 "scripts": {
68061 "browser-test": "mochify --wd -R spec",
68062 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
68063 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
68064 "jshint": "jshint --config jshint.json lib/*.js ; true",
68065 "test": "_mocha -- test/*.js",
68066 "unit": "mocha"
68067 },
68068 "testling": {
68069 "browsers": [
68070 "ie/9..latest",
68071 "firefox/latest",
68072 "chrome/latest",
68073 "safari/6.0..latest",
68074 "iphone/6.0..latest",
68075 "android-browser/4.2..latest"
68076 ],
68077 "files": "test/*.js",
68078 "harness": "mocha"
68079 },
68080 "version": "1.4.2"
68081 }
68082
68083 },{}],156:[function(require,module,exports){
68084 // based on the aes implimentation in triple sec
68085 // https://github.com/keybase/triplesec
68086 // which is in turn based on the one from crypto-js
68087 // https://code.google.com/p/crypto-js/
68088
68089 var Buffer = require('safe-buffer').Buffer
68090
68091 function asUInt32Array (buf) {
68092 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
68093
68094 var len = (buf.length / 4) | 0
68095 var out = new Array(len)
68096
68097 for (var i = 0; i < len; i++) {
68098 out[i] = buf.readUInt32BE(i * 4)
68099 }
68100
68101 return out
68102 }
68103
68104 function scrubVec (v) {
68105 for (var i = 0; i < v.length; v++) {
68106 v[i] = 0
68107 }
68108 }
68109
68110 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
68111 var SUB_MIX0 = SUB_MIX[0]
68112 var SUB_MIX1 = SUB_MIX[1]
68113 var SUB_MIX2 = SUB_MIX[2]
68114 var SUB_MIX3 = SUB_MIX[3]
68115
68116 var s0 = M[0] ^ keySchedule[0]
68117 var s1 = M[1] ^ keySchedule[1]
68118 var s2 = M[2] ^ keySchedule[2]
68119 var s3 = M[3] ^ keySchedule[3]
68120 var t0, t1, t2, t3
68121 var ksRow = 4
68122
68123 for (var round = 1; round < nRounds; round++) {
68124 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
68125 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
68126 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
68127 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
68128 s0 = t0
68129 s1 = t1
68130 s2 = t2
68131 s3 = t3
68132 }
68133
68134 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
68135 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
68136 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
68137 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
68138 t0 = t0 >>> 0
68139 t1 = t1 >>> 0
68140 t2 = t2 >>> 0
68141 t3 = t3 >>> 0
68142
68143 return [t0, t1, t2, t3]
68144 }
68145
68146 // AES constants
68147 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
68148 var G = (function () {
68149 // Compute double table
68150 var d = new Array(256)
68151 for (var j = 0; j < 256; j++) {
68152 if (j < 128) {
68153 d[j] = j << 1
68154 } else {
68155 d[j] = (j << 1) ^ 0x11b
68156 }
68157 }
68158
68159 var SBOX = []
68160 var INV_SBOX = []
68161 var SUB_MIX = [[], [], [], []]
68162 var INV_SUB_MIX = [[], [], [], []]
68163
68164 // Walk GF(2^8)
68165 var x = 0
68166 var xi = 0
68167 for (var i = 0; i < 256; ++i) {
68168 // Compute sbox
68169 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
68170 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
68171 SBOX[x] = sx
68172 INV_SBOX[sx] = x
68173
68174 // Compute multiplication
68175 var x2 = d[x]
68176 var x4 = d[x2]
68177 var x8 = d[x4]
68178
68179 // Compute sub bytes, mix columns tables
68180 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
68181 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
68182 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
68183 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
68184 SUB_MIX[3][x] = t
68185
68186 // Compute inv sub bytes, inv mix columns tables
68187 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
68188 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
68189 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
68190 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
68191 INV_SUB_MIX[3][sx] = t
68192
68193 if (x === 0) {
68194 x = xi = 1
68195 } else {
68196 x = x2 ^ d[d[d[x8 ^ x2]]]
68197 xi ^= d[d[xi]]
68198 }
68199 }
68200
68201 return {
68202 SBOX: SBOX,
68203 INV_SBOX: INV_SBOX,
68204 SUB_MIX: SUB_MIX,
68205 INV_SUB_MIX: INV_SUB_MIX
68206 }
68207 })()
68208
68209 function AES (key) {
68210 this._key = asUInt32Array(key)
68211 this._reset()
68212 }
68213
68214 AES.blockSize = 4 * 4
68215 AES.keySize = 256 / 8
68216 AES.prototype.blockSize = AES.blockSize
68217 AES.prototype.keySize = AES.keySize
68218 AES.prototype._reset = function () {
68219 var keyWords = this._key
68220 var keySize = keyWords.length
68221 var nRounds = keySize + 6
68222 var ksRows = (nRounds + 1) * 4
68223
68224 var keySchedule = []
68225 for (var k = 0; k < keySize; k++) {
68226 keySchedule[k] = keyWords[k]
68227 }
68228
68229 for (k = keySize; k < ksRows; k++) {
68230 var t = keySchedule[k - 1]
68231
68232 if (k % keySize === 0) {
68233 t = (t << 8) | (t >>> 24)
68234 t =
68235 (G.SBOX[t >>> 24] << 24) |
68236 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68237 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68238 (G.SBOX[t & 0xff])
68239
68240 t ^= RCON[(k / keySize) | 0] << 24
68241 } else if (keySize > 6 && k % keySize === 4) {
68242 t =
68243 (G.SBOX[t >>> 24] << 24) |
68244 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68245 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68246 (G.SBOX[t & 0xff])
68247 }
68248
68249 keySchedule[k] = keySchedule[k - keySize] ^ t
68250 }
68251
68252 var invKeySchedule = []
68253 for (var ik = 0; ik < ksRows; ik++) {
68254 var ksR = ksRows - ik
68255 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
68256
68257 if (ik < 4 || ksR <= 4) {
68258 invKeySchedule[ik] = tt
68259 } else {
68260 invKeySchedule[ik] =
68261 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
68262 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
68263 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
68264 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
68265 }
68266 }
68267
68268 this._nRounds = nRounds
68269 this._keySchedule = keySchedule
68270 this._invKeySchedule = invKeySchedule
68271 }
68272
68273 AES.prototype.encryptBlockRaw = function (M) {
68274 M = asUInt32Array(M)
68275 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
68276 }
68277
68278 AES.prototype.encryptBlock = function (M) {
68279 var out = this.encryptBlockRaw(M)
68280 var buf = Buffer.allocUnsafe(16)
68281 buf.writeUInt32BE(out[0], 0)
68282 buf.writeUInt32BE(out[1], 4)
68283 buf.writeUInt32BE(out[2], 8)
68284 buf.writeUInt32BE(out[3], 12)
68285 return buf
68286 }
68287
68288 AES.prototype.decryptBlock = function (M) {
68289 M = asUInt32Array(M)
68290
68291 // swap
68292 var m1 = M[1]
68293 M[1] = M[3]
68294 M[3] = m1
68295
68296 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
68297 var buf = Buffer.allocUnsafe(16)
68298 buf.writeUInt32BE(out[0], 0)
68299 buf.writeUInt32BE(out[3], 4)
68300 buf.writeUInt32BE(out[2], 8)
68301 buf.writeUInt32BE(out[1], 12)
68302 return buf
68303 }
68304
68305 AES.prototype.scrub = function () {
68306 scrubVec(this._keySchedule)
68307 scrubVec(this._invKeySchedule)
68308 scrubVec(this._key)
68309 }
68310
68311 module.exports.AES = AES
68312
68313 },{"safe-buffer":193}],157:[function(require,module,exports){
68314 var aes = require('./aes')
68315 var Buffer = require('safe-buffer').Buffer
68316 var Transform = require('cipher-base')
68317 var inherits = require('inherits')
68318 var GHASH = require('./ghash')
68319 var xor = require('buffer-xor')
68320 var incr32 = require('./incr32')
68321
68322 function xorTest (a, b) {
68323 var out = 0
68324 if (a.length !== b.length) out++
68325
68326 var len = Math.min(a.length, b.length)
68327 for (var i = 0; i < len; ++i) {
68328 out += (a[i] ^ b[i])
68329 }
68330
68331 return out
68332 }
68333
68334 function calcIv (self, iv, ck) {
68335 if (iv.length === 12) {
68336 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
68337 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
68338 }
68339 var ghash = new GHASH(ck)
68340 var len = iv.length
68341 var toPad = len % 16
68342 ghash.update(iv)
68343 if (toPad) {
68344 toPad = 16 - toPad
68345 ghash.update(Buffer.alloc(toPad, 0))
68346 }
68347 ghash.update(Buffer.alloc(8, 0))
68348 var ivBits = len * 8
68349 var tail = Buffer.alloc(8)
68350 tail.writeUIntBE(ivBits, 0, 8)
68351 ghash.update(tail)
68352 self._finID = ghash.state
68353 var out = Buffer.from(self._finID)
68354 incr32(out)
68355 return out
68356 }
68357 function StreamCipher (mode, key, iv, decrypt) {
68358 Transform.call(this)
68359
68360 var h = Buffer.alloc(4, 0)
68361
68362 this._cipher = new aes.AES(key)
68363 var ck = this._cipher.encryptBlock(h)
68364 this._ghash = new GHASH(ck)
68365 iv = calcIv(this, iv, ck)
68366
68367 this._prev = Buffer.from(iv)
68368 this._cache = Buffer.allocUnsafe(0)
68369 this._secCache = Buffer.allocUnsafe(0)
68370 this._decrypt = decrypt
68371 this._alen = 0
68372 this._len = 0
68373 this._mode = mode
68374
68375 this._authTag = null
68376 this._called = false
68377 }
68378
68379 inherits(StreamCipher, Transform)
68380
68381 StreamCipher.prototype._update = function (chunk) {
68382 if (!this._called && this._alen) {
68383 var rump = 16 - (this._alen % 16)
68384 if (rump < 16) {
68385 rump = Buffer.alloc(rump, 0)
68386 this._ghash.update(rump)
68387 }
68388 }
68389
68390 this._called = true
68391 var out = this._mode.encrypt(this, chunk)
68392 if (this._decrypt) {
68393 this._ghash.update(chunk)
68394 } else {
68395 this._ghash.update(out)
68396 }
68397 this._len += chunk.length
68398 return out
68399 }
68400
68401 StreamCipher.prototype._final = function () {
68402 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
68403
68404 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
68405 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
68406
68407 this._authTag = tag
68408 this._cipher.scrub()
68409 }
68410
68411 StreamCipher.prototype.getAuthTag = function getAuthTag () {
68412 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
68413
68414 return this._authTag
68415 }
68416
68417 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
68418 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
68419
68420 this._authTag = tag
68421 }
68422
68423 StreamCipher.prototype.setAAD = function setAAD (buf) {
68424 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
68425
68426 this._ghash.update(buf)
68427 this._alen += buf.length
68428 }
68429
68430 module.exports = StreamCipher
68431
68432 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
68433 var ciphers = require('./encrypter')
68434 var deciphers = require('./decrypter')
68435 var modes = require('./modes/list.json')
68436
68437 function getCiphers () {
68438 return Object.keys(modes)
68439 }
68440
68441 exports.createCipher = exports.Cipher = ciphers.createCipher
68442 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
68443 exports.createDecipher = exports.Decipher = deciphers.createDecipher
68444 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
68445 exports.listCiphers = exports.getCiphers = getCiphers
68446
68447 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
68448 var AuthCipher = require('./authCipher')
68449 var Buffer = require('safe-buffer').Buffer
68450 var MODES = require('./modes')
68451 var StreamCipher = require('./streamCipher')
68452 var Transform = require('cipher-base')
68453 var aes = require('./aes')
68454 var ebtk = require('evp_bytestokey')
68455 var inherits = require('inherits')
68456
68457 function Decipher (mode, key, iv) {
68458 Transform.call(this)
68459
68460 this._cache = new Splitter()
68461 this._last = void 0
68462 this._cipher = new aes.AES(key)
68463 this._prev = Buffer.from(iv)
68464 this._mode = mode
68465 this._autopadding = true
68466 }
68467
68468 inherits(Decipher, Transform)
68469
68470 Decipher.prototype._update = function (data) {
68471 this._cache.add(data)
68472 var chunk
68473 var thing
68474 var out = []
68475 while ((chunk = this._cache.get(this._autopadding))) {
68476 thing = this._mode.decrypt(this, chunk)
68477 out.push(thing)
68478 }
68479 return Buffer.concat(out)
68480 }
68481
68482 Decipher.prototype._final = function () {
68483 var chunk = this._cache.flush()
68484 if (this._autopadding) {
68485 return unpad(this._mode.decrypt(this, chunk))
68486 } else if (chunk) {
68487 throw new Error('data not multiple of block length')
68488 }
68489 }
68490
68491 Decipher.prototype.setAutoPadding = function (setTo) {
68492 this._autopadding = !!setTo
68493 return this
68494 }
68495
68496 function Splitter () {
68497 this.cache = Buffer.allocUnsafe(0)
68498 }
68499
68500 Splitter.prototype.add = function (data) {
68501 this.cache = Buffer.concat([this.cache, data])
68502 }
68503
68504 Splitter.prototype.get = function (autoPadding) {
68505 var out
68506 if (autoPadding) {
68507 if (this.cache.length > 16) {
68508 out = this.cache.slice(0, 16)
68509 this.cache = this.cache.slice(16)
68510 return out
68511 }
68512 } else {
68513 if (this.cache.length >= 16) {
68514 out = this.cache.slice(0, 16)
68515 this.cache = this.cache.slice(16)
68516 return out
68517 }
68518 }
68519
68520 return null
68521 }
68522
68523 Splitter.prototype.flush = function () {
68524 if (this.cache.length) return this.cache
68525 }
68526
68527 function unpad (last) {
68528 var padded = last[15]
68529 var i = -1
68530 while (++i < padded) {
68531 if (last[(i + (16 - padded))] !== padded) {
68532 throw new Error('unable to decrypt data')
68533 }
68534 }
68535 if (padded === 16) return
68536
68537 return last.slice(0, 16 - padded)
68538 }
68539
68540 function createDecipheriv (suite, password, iv) {
68541 var config = MODES[suite.toLowerCase()]
68542 if (!config) throw new TypeError('invalid suite type')
68543
68544 if (typeof iv === 'string') iv = Buffer.from(iv)
68545 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68546
68547 if (typeof password === 'string') password = Buffer.from(password)
68548 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68549
68550 if (config.type === 'stream') {
68551 return new StreamCipher(config.module, password, iv, true)
68552 } else if (config.type === 'auth') {
68553 return new AuthCipher(config.module, password, iv, true)
68554 }
68555
68556 return new Decipher(config.module, password, iv)
68557 }
68558
68559 function createDecipher (suite, password) {
68560 var config = MODES[suite.toLowerCase()]
68561 if (!config) throw new TypeError('invalid suite type')
68562
68563 var keys = ebtk(password, false, config.key, config.iv)
68564 return createDecipheriv(suite, keys.key, keys.iv)
68565 }
68566
68567 exports.createDecipher = createDecipher
68568 exports.createDecipheriv = createDecipheriv
68569
68570 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
68571 var MODES = require('./modes')
68572 var AuthCipher = require('./authCipher')
68573 var Buffer = require('safe-buffer').Buffer
68574 var StreamCipher = require('./streamCipher')
68575 var Transform = require('cipher-base')
68576 var aes = require('./aes')
68577 var ebtk = require('evp_bytestokey')
68578 var inherits = require('inherits')
68579
68580 function Cipher (mode, key, iv) {
68581 Transform.call(this)
68582
68583 this._cache = new Splitter()
68584 this._cipher = new aes.AES(key)
68585 this._prev = Buffer.from(iv)
68586 this._mode = mode
68587 this._autopadding = true
68588 }
68589
68590 inherits(Cipher, Transform)
68591
68592 Cipher.prototype._update = function (data) {
68593 this._cache.add(data)
68594 var chunk
68595 var thing
68596 var out = []
68597
68598 while ((chunk = this._cache.get())) {
68599 thing = this._mode.encrypt(this, chunk)
68600 out.push(thing)
68601 }
68602
68603 return Buffer.concat(out)
68604 }
68605
68606 var PADDING = Buffer.alloc(16, 0x10)
68607
68608 Cipher.prototype._final = function () {
68609 var chunk = this._cache.flush()
68610 if (this._autopadding) {
68611 chunk = this._mode.encrypt(this, chunk)
68612 this._cipher.scrub()
68613 return chunk
68614 }
68615
68616 if (!chunk.equals(PADDING)) {
68617 this._cipher.scrub()
68618 throw new Error('data not multiple of block length')
68619 }
68620 }
68621
68622 Cipher.prototype.setAutoPadding = function (setTo) {
68623 this._autopadding = !!setTo
68624 return this
68625 }
68626
68627 function Splitter () {
68628 this.cache = Buffer.allocUnsafe(0)
68629 }
68630
68631 Splitter.prototype.add = function (data) {
68632 this.cache = Buffer.concat([this.cache, data])
68633 }
68634
68635 Splitter.prototype.get = function () {
68636 if (this.cache.length > 15) {
68637 var out = this.cache.slice(0, 16)
68638 this.cache = this.cache.slice(16)
68639 return out
68640 }
68641 return null
68642 }
68643
68644 Splitter.prototype.flush = function () {
68645 var len = 16 - this.cache.length
68646 var padBuff = Buffer.allocUnsafe(len)
68647
68648 var i = -1
68649 while (++i < len) {
68650 padBuff.writeUInt8(len, i)
68651 }
68652
68653 return Buffer.concat([this.cache, padBuff])
68654 }
68655
68656 function createCipheriv (suite, password, iv) {
68657 var config = MODES[suite.toLowerCase()]
68658 if (!config) throw new TypeError('invalid suite type')
68659
68660 if (typeof password === 'string') password = Buffer.from(password)
68661 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68662
68663 if (typeof iv === 'string') iv = Buffer.from(iv)
68664 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68665
68666 if (config.type === 'stream') {
68667 return new StreamCipher(config.module, password, iv)
68668 } else if (config.type === 'auth') {
68669 return new AuthCipher(config.module, password, iv)
68670 }
68671
68672 return new Cipher(config.module, password, iv)
68673 }
68674
68675 function createCipher (suite, password) {
68676 var config = MODES[suite.toLowerCase()]
68677 if (!config) throw new TypeError('invalid suite type')
68678
68679 var keys = ebtk(password, false, config.key, config.iv)
68680 return createCipheriv(suite, keys.key, keys.iv)
68681 }
68682
68683 exports.createCipheriv = createCipheriv
68684 exports.createCipher = createCipher
68685
68686 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
68687 var Buffer = require('safe-buffer').Buffer
68688 var ZEROES = Buffer.alloc(16, 0)
68689
68690 function toArray (buf) {
68691 return [
68692 buf.readUInt32BE(0),
68693 buf.readUInt32BE(4),
68694 buf.readUInt32BE(8),
68695 buf.readUInt32BE(12)
68696 ]
68697 }
68698
68699 function fromArray (out) {
68700 var buf = Buffer.allocUnsafe(16)
68701 buf.writeUInt32BE(out[0] >>> 0, 0)
68702 buf.writeUInt32BE(out[1] >>> 0, 4)
68703 buf.writeUInt32BE(out[2] >>> 0, 8)
68704 buf.writeUInt32BE(out[3] >>> 0, 12)
68705 return buf
68706 }
68707
68708 function GHASH (key) {
68709 this.h = key
68710 this.state = Buffer.alloc(16, 0)
68711 this.cache = Buffer.allocUnsafe(0)
68712 }
68713
68714 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
68715 // by Juho Vähä-Herttua
68716 GHASH.prototype.ghash = function (block) {
68717 var i = -1
68718 while (++i < block.length) {
68719 this.state[i] ^= block[i]
68720 }
68721 this._multiply()
68722 }
68723
68724 GHASH.prototype._multiply = function () {
68725 var Vi = toArray(this.h)
68726 var Zi = [0, 0, 0, 0]
68727 var j, xi, lsbVi
68728 var i = -1
68729 while (++i < 128) {
68730 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
68731 if (xi) {
68732 // Z_i+1 = Z_i ^ V_i
68733 Zi[0] ^= Vi[0]
68734 Zi[1] ^= Vi[1]
68735 Zi[2] ^= Vi[2]
68736 Zi[3] ^= Vi[3]
68737 }
68738
68739 // Store the value of LSB(V_i)
68740 lsbVi = (Vi[3] & 1) !== 0
68741
68742 // V_i+1 = V_i >> 1
68743 for (j = 3; j > 0; j--) {
68744 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
68745 }
68746 Vi[0] = Vi[0] >>> 1
68747
68748 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
68749 if (lsbVi) {
68750 Vi[0] = Vi[0] ^ (0xe1 << 24)
68751 }
68752 }
68753 this.state = fromArray(Zi)
68754 }
68755
68756 GHASH.prototype.update = function (buf) {
68757 this.cache = Buffer.concat([this.cache, buf])
68758 var chunk
68759 while (this.cache.length >= 16) {
68760 chunk = this.cache.slice(0, 16)
68761 this.cache = this.cache.slice(16)
68762 this.ghash(chunk)
68763 }
68764 }
68765
68766 GHASH.prototype.final = function (abl, bl) {
68767 if (this.cache.length) {
68768 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
68769 }
68770
68771 this.ghash(fromArray([0, abl, 0, bl]))
68772 return this.state
68773 }
68774
68775 module.exports = GHASH
68776
68777 },{"safe-buffer":193}],162:[function(require,module,exports){
68778 function incr32 (iv) {
68779 var len = iv.length
68780 var item
68781 while (len--) {
68782 item = iv.readUInt8(len)
68783 if (item === 255) {
68784 iv.writeUInt8(0, len)
68785 } else {
68786 item++
68787 iv.writeUInt8(item, len)
68788 break
68789 }
68790 }
68791 }
68792 module.exports = incr32
68793
68794 },{}],163:[function(require,module,exports){
68795 arguments[4][27][0].apply(exports,arguments)
68796 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
68797 var Buffer = require('safe-buffer').Buffer
68798 var xor = require('buffer-xor')
68799
68800 function encryptStart (self, data, decrypt) {
68801 var len = data.length
68802 var out = xor(data, self._cache)
68803 self._cache = self._cache.slice(len)
68804 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
68805 return out
68806 }
68807
68808 exports.encrypt = function (self, data, decrypt) {
68809 var out = Buffer.allocUnsafe(0)
68810 var len
68811
68812 while (data.length) {
68813 if (self._cache.length === 0) {
68814 self._cache = self._cipher.encryptBlock(self._prev)
68815 self._prev = Buffer.allocUnsafe(0)
68816 }
68817
68818 if (self._cache.length <= data.length) {
68819 len = self._cache.length
68820 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
68821 data = data.slice(len)
68822 } else {
68823 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
68824 break
68825 }
68826 }
68827
68828 return out
68829 }
68830
68831 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
68832 var Buffer = require('safe-buffer').Buffer
68833
68834 function encryptByte (self, byteParam, decrypt) {
68835 var pad
68836 var i = -1
68837 var len = 8
68838 var out = 0
68839 var bit, value
68840 while (++i < len) {
68841 pad = self._cipher.encryptBlock(self._prev)
68842 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
68843 value = pad[0] ^ bit
68844 out += ((value & 0x80) >> (i % 8))
68845 self._prev = shiftIn(self._prev, decrypt ? bit : value)
68846 }
68847 return out
68848 }
68849
68850 function shiftIn (buffer, value) {
68851 var len = buffer.length
68852 var i = -1
68853 var out = Buffer.allocUnsafe(buffer.length)
68854 buffer = Buffer.concat([buffer, Buffer.from([value])])
68855
68856 while (++i < len) {
68857 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
68858 }
68859
68860 return out
68861 }
68862
68863 exports.encrypt = function (self, chunk, decrypt) {
68864 var len = chunk.length
68865 var out = Buffer.allocUnsafe(len)
68866 var i = -1
68867
68868 while (++i < len) {
68869 out[i] = encryptByte(self, chunk[i], decrypt)
68870 }
68871
68872 return out
68873 }
68874
68875 },{"safe-buffer":193}],166:[function(require,module,exports){
68876 var Buffer = require('safe-buffer').Buffer
68877
68878 function encryptByte (self, byteParam, decrypt) {
68879 var pad = self._cipher.encryptBlock(self._prev)
68880 var out = pad[0] ^ byteParam
68881
68882 self._prev = Buffer.concat([
68883 self._prev.slice(1),
68884 Buffer.from([decrypt ? byteParam : out])
68885 ])
68886
68887 return out
68888 }
68889
68890 exports.encrypt = function (self, chunk, decrypt) {
68891 var len = chunk.length
68892 var out = Buffer.allocUnsafe(len)
68893 var i = -1
68894
68895 while (++i < len) {
68896 out[i] = encryptByte(self, chunk[i], decrypt)
68897 }
68898
68899 return out
68900 }
68901
68902 },{"safe-buffer":193}],167:[function(require,module,exports){
68903 var xor = require('buffer-xor')
68904 var Buffer = require('safe-buffer').Buffer
68905 var incr32 = require('../incr32')
68906
68907 function getBlock (self) {
68908 var out = self._cipher.encryptBlockRaw(self._prev)
68909 incr32(self._prev)
68910 return out
68911 }
68912
68913 var blockSize = 16
68914 exports.encrypt = function (self, chunk) {
68915 var chunkNum = Math.ceil(chunk.length / blockSize)
68916 var start = self._cache.length
68917 self._cache = Buffer.concat([
68918 self._cache,
68919 Buffer.allocUnsafe(chunkNum * blockSize)
68920 ])
68921 for (var i = 0; i < chunkNum; i++) {
68922 var out = getBlock(self)
68923 var offset = start + i * blockSize
68924 self._cache.writeUInt32BE(out[0], offset + 0)
68925 self._cache.writeUInt32BE(out[1], offset + 4)
68926 self._cache.writeUInt32BE(out[2], offset + 8)
68927 self._cache.writeUInt32BE(out[3], offset + 12)
68928 }
68929 var pad = self._cache.slice(0, chunk.length)
68930 self._cache = self._cache.slice(chunk.length)
68931 return xor(chunk, pad)
68932 }
68933
68934 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
68935 exports.encrypt = function (self, block) {
68936 return self._cipher.encryptBlock(block)
68937 }
68938
68939 exports.decrypt = function (self, block) {
68940 return self._cipher.decryptBlock(block)
68941 }
68942
68943 },{}],169:[function(require,module,exports){
68944 var modeModules = {
68945 ECB: require('./ecb'),
68946 CBC: require('./cbc'),
68947 CFB: require('./cfb'),
68948 CFB8: require('./cfb8'),
68949 CFB1: require('./cfb1'),
68950 OFB: require('./ofb'),
68951 CTR: require('./ctr'),
68952 GCM: require('./ctr')
68953 }
68954
68955 var modes = require('./list.json')
68956
68957 for (var key in modes) {
68958 modes[key].module = modeModules[modes[key].mode]
68959 }
68960
68961 module.exports = modes
68962
68963 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
68964 module.exports={
68965 "aes-128-ecb": {
68966 "cipher": "AES",
68967 "key": 128,
68968 "iv": 0,
68969 "mode": "ECB",
68970 "type": "block"
68971 },
68972 "aes-192-ecb": {
68973 "cipher": "AES",
68974 "key": 192,
68975 "iv": 0,
68976 "mode": "ECB",
68977 "type": "block"
68978 },
68979 "aes-256-ecb": {
68980 "cipher": "AES",
68981 "key": 256,
68982 "iv": 0,
68983 "mode": "ECB",
68984 "type": "block"
68985 },
68986 "aes-128-cbc": {
68987 "cipher": "AES",
68988 "key": 128,
68989 "iv": 16,
68990 "mode": "CBC",
68991 "type": "block"
68992 },
68993 "aes-192-cbc": {
68994 "cipher": "AES",
68995 "key": 192,
68996 "iv": 16,
68997 "mode": "CBC",
68998 "type": "block"
68999 },
69000 "aes-256-cbc": {
69001 "cipher": "AES",
69002 "key": 256,
69003 "iv": 16,
69004 "mode": "CBC",
69005 "type": "block"
69006 },
69007 "aes128": {
69008 "cipher": "AES",
69009 "key": 128,
69010 "iv": 16,
69011 "mode": "CBC",
69012 "type": "block"
69013 },
69014 "aes192": {
69015 "cipher": "AES",
69016 "key": 192,
69017 "iv": 16,
69018 "mode": "CBC",
69019 "type": "block"
69020 },
69021 "aes256": {
69022 "cipher": "AES",
69023 "key": 256,
69024 "iv": 16,
69025 "mode": "CBC",
69026 "type": "block"
69027 },
69028 "aes-128-cfb": {
69029 "cipher": "AES",
69030 "key": 128,
69031 "iv": 16,
69032 "mode": "CFB",
69033 "type": "stream"
69034 },
69035 "aes-192-cfb": {
69036 "cipher": "AES",
69037 "key": 192,
69038 "iv": 16,
69039 "mode": "CFB",
69040 "type": "stream"
69041 },
69042 "aes-256-cfb": {
69043 "cipher": "AES",
69044 "key": 256,
69045 "iv": 16,
69046 "mode": "CFB",
69047 "type": "stream"
69048 },
69049 "aes-128-cfb8": {
69050 "cipher": "AES",
69051 "key": 128,
69052 "iv": 16,
69053 "mode": "CFB8",
69054 "type": "stream"
69055 },
69056 "aes-192-cfb8": {
69057 "cipher": "AES",
69058 "key": 192,
69059 "iv": 16,
69060 "mode": "CFB8",
69061 "type": "stream"
69062 },
69063 "aes-256-cfb8": {
69064 "cipher": "AES",
69065 "key": 256,
69066 "iv": 16,
69067 "mode": "CFB8",
69068 "type": "stream"
69069 },
69070 "aes-128-cfb1": {
69071 "cipher": "AES",
69072 "key": 128,
69073 "iv": 16,
69074 "mode": "CFB1",
69075 "type": "stream"
69076 },
69077 "aes-192-cfb1": {
69078 "cipher": "AES",
69079 "key": 192,
69080 "iv": 16,
69081 "mode": "CFB1",
69082 "type": "stream"
69083 },
69084 "aes-256-cfb1": {
69085 "cipher": "AES",
69086 "key": 256,
69087 "iv": 16,
69088 "mode": "CFB1",
69089 "type": "stream"
69090 },
69091 "aes-128-ofb": {
69092 "cipher": "AES",
69093 "key": 128,
69094 "iv": 16,
69095 "mode": "OFB",
69096 "type": "stream"
69097 },
69098 "aes-192-ofb": {
69099 "cipher": "AES",
69100 "key": 192,
69101 "iv": 16,
69102 "mode": "OFB",
69103 "type": "stream"
69104 },
69105 "aes-256-ofb": {
69106 "cipher": "AES",
69107 "key": 256,
69108 "iv": 16,
69109 "mode": "OFB",
69110 "type": "stream"
69111 },
69112 "aes-128-ctr": {
69113 "cipher": "AES",
69114 "key": 128,
69115 "iv": 16,
69116 "mode": "CTR",
69117 "type": "stream"
69118 },
69119 "aes-192-ctr": {
69120 "cipher": "AES",
69121 "key": 192,
69122 "iv": 16,
69123 "mode": "CTR",
69124 "type": "stream"
69125 },
69126 "aes-256-ctr": {
69127 "cipher": "AES",
69128 "key": 256,
69129 "iv": 16,
69130 "mode": "CTR",
69131 "type": "stream"
69132 },
69133 "aes-128-gcm": {
69134 "cipher": "AES",
69135 "key": 128,
69136 "iv": 12,
69137 "mode": "GCM",
69138 "type": "auth"
69139 },
69140 "aes-192-gcm": {
69141 "cipher": "AES",
69142 "key": 192,
69143 "iv": 12,
69144 "mode": "GCM",
69145 "type": "auth"
69146 },
69147 "aes-256-gcm": {
69148 "cipher": "AES",
69149 "key": 256,
69150 "iv": 12,
69151 "mode": "GCM",
69152 "type": "auth"
69153 }
69154 }
69155
69156 },{}],171:[function(require,module,exports){
69157 arguments[4][33][0].apply(exports,arguments)
69158 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
69159 var aes = require('./aes')
69160 var Buffer = require('safe-buffer').Buffer
69161 var Transform = require('cipher-base')
69162 var inherits = require('inherits')
69163
69164 function StreamCipher (mode, key, iv, decrypt) {
69165 Transform.call(this)
69166
69167 this._cipher = new aes.AES(key)
69168 this._prev = Buffer.from(iv)
69169 this._cache = Buffer.allocUnsafe(0)
69170 this._secCache = Buffer.allocUnsafe(0)
69171 this._decrypt = decrypt
69172 this._mode = mode
69173 }
69174
69175 inherits(StreamCipher, Transform)
69176
69177 StreamCipher.prototype._update = function (chunk) {
69178 return this._mode.encrypt(this, chunk, this._decrypt)
69179 }
69180
69181 StreamCipher.prototype._final = function () {
69182 this._cipher.scrub()
69183 }
69184
69185 module.exports = StreamCipher
69186
69187 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
69188 var basex = require('base-x')
69189 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
69190
69191 module.exports = basex(ALPHABET)
69192
69193 },{"base-x":151}],174:[function(require,module,exports){
69194 'use strict'
69195
69196 var base58 = require('bs58')
69197 var Buffer = require('safe-buffer').Buffer
69198
69199 module.exports = function (checksumFn) {
69200 // Encode a buffer as a base58-check encoded string
69201 function encode (payload) {
69202 var checksum = checksumFn(payload)
69203
69204 return base58.encode(Buffer.concat([
69205 payload,
69206 checksum
69207 ], payload.length + 4))
69208 }
69209
69210 function decodeRaw (buffer) {
69211 var payload = buffer.slice(0, -4)
69212 var checksum = buffer.slice(-4)
69213 var newChecksum = checksumFn(payload)
69214
69215 if (checksum[0] ^ newChecksum[0] |
69216 checksum[1] ^ newChecksum[1] |
69217 checksum[2] ^ newChecksum[2] |
69218 checksum[3] ^ newChecksum[3]) return
69219
69220 return payload
69221 }
69222
69223 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
69224 function decodeUnsafe (string) {
69225 var buffer = base58.decodeUnsafe(string)
69226 if (!buffer) return
69227
69228 return decodeRaw(buffer)
69229 }
69230
69231 function decode (string) {
69232 var buffer = base58.decode(string)
69233 var payload = decodeRaw(buffer, checksumFn)
69234 if (!payload) throw new Error('Invalid checksum')
69235 return payload
69236 }
69237
69238 return {
69239 encode: encode,
69240 decode: decode,
69241 decodeUnsafe: decodeUnsafe
69242 }
69243 }
69244
69245 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
69246 'use strict'
69247
69248 var createHash = require('create-hash')
69249 var bs58checkBase = require('./base')
69250
69251 // SHA256(SHA256(buffer))
69252 function sha256x2 (buffer) {
69253 var tmp = createHash('sha256').update(buffer).digest()
69254 return createHash('sha256').update(tmp).digest()
69255 }
69256
69257 module.exports = bs58checkBase(sha256x2)
69258
69259 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
69260 arguments[4][46][0].apply(exports,arguments)
69261 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
69262 module.exports = function xorInplace (a, b) {
69263 var length = Math.min(a.length, b.length)
69264
69265 for (var i = 0; i < length; ++i) {
69266 a[i] = a[i] ^ b[i]
69267 }
69268
69269 return a.slice(0, length)
69270 }
69271
69272 },{}],178:[function(require,module,exports){
69273 var Buffer = require('safe-buffer').Buffer
69274 var Transform = require('stream').Transform
69275 var StringDecoder = require('string_decoder').StringDecoder
69276 var inherits = require('inherits')
69277
69278 function CipherBase (hashMode) {
69279 Transform.call(this)
69280 this.hashMode = typeof hashMode === 'string'
69281 if (this.hashMode) {
69282 this[hashMode] = this._finalOrDigest
69283 } else {
69284 this.final = this._finalOrDigest
69285 }
69286 if (this._final) {
69287 this.__final = this._final
69288 this._final = null
69289 }
69290 this._decoder = null
69291 this._encoding = null
69292 }
69293 inherits(CipherBase, Transform)
69294
69295 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
69296 if (typeof data === 'string') {
69297 data = Buffer.from(data, inputEnc)
69298 }
69299
69300 var outData = this._update(data)
69301 if (this.hashMode) return this
69302
69303 if (outputEnc) {
69304 outData = this._toString(outData, outputEnc)
69305 }
69306
69307 return outData
69308 }
69309
69310 CipherBase.prototype.setAutoPadding = function () {}
69311 CipherBase.prototype.getAuthTag = function () {
69312 throw new Error('trying to get auth tag in unsupported state')
69313 }
69314
69315 CipherBase.prototype.setAuthTag = function () {
69316 throw new Error('trying to set auth tag in unsupported state')
69317 }
69318
69319 CipherBase.prototype.setAAD = function () {
69320 throw new Error('trying to set aad in unsupported state')
69321 }
69322
69323 CipherBase.prototype._transform = function (data, _, next) {
69324 var err
69325 try {
69326 if (this.hashMode) {
69327 this._update(data)
69328 } else {
69329 this.push(this._update(data))
69330 }
69331 } catch (e) {
69332 err = e
69333 } finally {
69334 next(err)
69335 }
69336 }
69337 CipherBase.prototype._flush = function (done) {
69338 var err
69339 try {
69340 this.push(this.__final())
69341 } catch (e) {
69342 err = e
69343 }
69344
69345 done(err)
69346 }
69347 CipherBase.prototype._finalOrDigest = function (outputEnc) {
69348 var outData = this.__final() || Buffer.alloc(0)
69349 if (outputEnc) {
69350 outData = this._toString(outData, outputEnc, true)
69351 }
69352 return outData
69353 }
69354
69355 CipherBase.prototype._toString = function (value, enc, fin) {
69356 if (!this._decoder) {
69357 this._decoder = new StringDecoder(enc)
69358 this._encoding = enc
69359 }
69360
69361 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
69362
69363 var out = this._decoder.write(value)
69364 if (fin) {
69365 out += this._decoder.end()
69366 }
69367
69368 return out
69369 }
69370
69371 module.exports = CipherBase
69372
69373 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
69374 arguments[4][51][0].apply(exports,arguments)
69375 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
69376 arguments[4][52][0].apply(exports,arguments)
69377 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
69378 arguments[4][53][0].apply(exports,arguments)
69379 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
69380 var assert = require('assert')
69381 var BigInteger = require('bigi')
69382
69383 var Point = require('./point')
69384
69385 function Curve (p, a, b, Gx, Gy, n, h) {
69386 this.p = p
69387 this.a = a
69388 this.b = b
69389 this.G = Point.fromAffine(this, Gx, Gy)
69390 this.n = n
69391 this.h = h
69392
69393 this.infinity = new Point(this, null, null, BigInteger.ZERO)
69394
69395 // result caching
69396 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
69397
69398 // determine size of p in bytes
69399 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
69400 }
69401
69402 Curve.prototype.pointFromX = function (isOdd, x) {
69403 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
69404 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
69405
69406 var y = beta
69407 if (beta.isEven() ^ !isOdd) {
69408 y = this.p.subtract(y) // -y % p
69409 }
69410
69411 return Point.fromAffine(this, x, y)
69412 }
69413
69414 Curve.prototype.isInfinity = function (Q) {
69415 if (Q === this.infinity) return true
69416
69417 return Q.z.signum() === 0 && Q.y.signum() !== 0
69418 }
69419
69420 Curve.prototype.isOnCurve = function (Q) {
69421 if (this.isInfinity(Q)) return true
69422
69423 var x = Q.affineX
69424 var y = Q.affineY
69425 var a = this.a
69426 var b = this.b
69427 var p = this.p
69428
69429 // Check that xQ and yQ are integers in the interval [0, p - 1]
69430 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
69431 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
69432
69433 // and check that y^2 = x^3 + ax + b (mod p)
69434 var lhs = y.square().mod(p)
69435 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
69436 return lhs.equals(rhs)
69437 }
69438
69439 /**
69440 * Validate an elliptic curve point.
69441 *
69442 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
69443 */
69444 Curve.prototype.validate = function (Q) {
69445 // Check Q != O
69446 assert(!this.isInfinity(Q), 'Point is at infinity')
69447 assert(this.isOnCurve(Q), 'Point is not on the curve')
69448
69449 // Check nQ = O (where Q is a scalar multiple of G)
69450 var nQ = Q.multiply(this.n)
69451 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
69452
69453 return true
69454 }
69455
69456 module.exports = Curve
69457
69458 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
69459 module.exports={
69460 "secp128r1": {
69461 "p": "fffffffdffffffffffffffffffffffff",
69462 "a": "fffffffdfffffffffffffffffffffffc",
69463 "b": "e87579c11079f43dd824993c2cee5ed3",
69464 "n": "fffffffe0000000075a30d1b9038a115",
69465 "h": "01",
69466 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
69467 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
69468 },
69469 "secp160k1": {
69470 "p": "fffffffffffffffffffffffffffffffeffffac73",
69471 "a": "00",
69472 "b": "07",
69473 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
69474 "h": "01",
69475 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
69476 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
69477 },
69478 "secp160r1": {
69479 "p": "ffffffffffffffffffffffffffffffff7fffffff",
69480 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
69481 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
69482 "n": "0100000000000000000001f4c8f927aed3ca752257",
69483 "h": "01",
69484 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
69485 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
69486 },
69487 "secp192k1": {
69488 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
69489 "a": "00",
69490 "b": "03",
69491 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
69492 "h": "01",
69493 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
69494 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
69495 },
69496 "secp192r1": {
69497 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
69498 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
69499 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
69500 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
69501 "h": "01",
69502 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
69503 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
69504 },
69505 "secp256k1": {
69506 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
69507 "a": "00",
69508 "b": "07",
69509 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
69510 "h": "01",
69511 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
69512 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
69513 },
69514 "secp256r1": {
69515 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
69516 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
69517 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
69518 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
69519 "h": "01",
69520 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
69521 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
69522 }
69523 }
69524
69525 },{}],184:[function(require,module,exports){
69526 var Point = require('./point')
69527 var Curve = require('./curve')
69528
69529 var getCurveByName = require('./names')
69530
69531 module.exports = {
69532 Curve: Curve,
69533 Point: Point,
69534 getCurveByName: getCurveByName
69535 }
69536
69537 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
69538 var BigInteger = require('bigi')
69539
69540 var curves = require('./curves.json')
69541 var Curve = require('./curve')
69542
69543 function getCurveByName (name) {
69544 var curve = curves[name]
69545 if (!curve) return null
69546
69547 var p = new BigInteger(curve.p, 16)
69548 var a = new BigInteger(curve.a, 16)
69549 var b = new BigInteger(curve.b, 16)
69550 var n = new BigInteger(curve.n, 16)
69551 var h = new BigInteger(curve.h, 16)
69552 var Gx = new BigInteger(curve.Gx, 16)
69553 var Gy = new BigInteger(curve.Gy, 16)
69554
69555 return new Curve(p, a, b, Gx, Gy, n, h)
69556 }
69557
69558 module.exports = getCurveByName
69559
69560 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
69561 var assert = require('assert')
69562 var Buffer = require('safe-buffer').Buffer
69563 var BigInteger = require('bigi')
69564
69565 var THREE = BigInteger.valueOf(3)
69566
69567 function Point (curve, x, y, z) {
69568 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
69569
69570 this.curve = curve
69571 this.x = x
69572 this.y = y
69573 this.z = z
69574 this._zInv = null
69575
69576 this.compressed = true
69577 }
69578
69579 Object.defineProperty(Point.prototype, 'zInv', {
69580 get: function () {
69581 if (this._zInv === null) {
69582 this._zInv = this.z.modInverse(this.curve.p)
69583 }
69584
69585 return this._zInv
69586 }
69587 })
69588
69589 Object.defineProperty(Point.prototype, 'affineX', {
69590 get: function () {
69591 return this.x.multiply(this.zInv).mod(this.curve.p)
69592 }
69593 })
69594
69595 Object.defineProperty(Point.prototype, 'affineY', {
69596 get: function () {
69597 return this.y.multiply(this.zInv).mod(this.curve.p)
69598 }
69599 })
69600
69601 Point.fromAffine = function (curve, x, y) {
69602 return new Point(curve, x, y, BigInteger.ONE)
69603 }
69604
69605 Point.prototype.equals = function (other) {
69606 if (other === this) return true
69607 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
69608 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
69609
69610 // u = Y2 * Z1 - Y1 * Z2
69611 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
69612
69613 if (u.signum() !== 0) return false
69614
69615 // v = X2 * Z1 - X1 * Z2
69616 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
69617
69618 return v.signum() === 0
69619 }
69620
69621 Point.prototype.negate = function () {
69622 var y = this.curve.p.subtract(this.y)
69623
69624 return new Point(this.curve, this.x, y, this.z)
69625 }
69626
69627 Point.prototype.add = function (b) {
69628 if (this.curve.isInfinity(this)) return b
69629 if (this.curve.isInfinity(b)) return this
69630
69631 var x1 = this.x
69632 var y1 = this.y
69633 var x2 = b.x
69634 var y2 = b.y
69635
69636 // u = Y2 * Z1 - Y1 * Z2
69637 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
69638 // v = X2 * Z1 - X1 * Z2
69639 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
69640
69641 if (v.signum() === 0) {
69642 if (u.signum() === 0) {
69643 return this.twice() // this == b, so double
69644 }
69645
69646 return this.curve.infinity // this = -b, so infinity
69647 }
69648
69649 var v2 = v.square()
69650 var v3 = v2.multiply(v)
69651 var x1v2 = x1.multiply(v2)
69652 var zu2 = u.square().multiply(this.z)
69653
69654 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
69655 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
69656 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
69657 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)
69658 // z3 = v^3 * z1 * z2
69659 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
69660
69661 return new Point(this.curve, x3, y3, z3)
69662 }
69663
69664 Point.prototype.twice = function () {
69665 if (this.curve.isInfinity(this)) return this
69666 if (this.y.signum() === 0) return this.curve.infinity
69667
69668 var x1 = this.x
69669 var y1 = this.y
69670
69671 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
69672 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
69673 var a = this.curve.a
69674
69675 // w = 3 * x1^2 + a * z1^2
69676 var w = x1.square().multiply(THREE)
69677
69678 if (a.signum() !== 0) {
69679 w = w.add(this.z.square().multiply(a))
69680 }
69681
69682 w = w.mod(this.curve.p)
69683 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
69684 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
69685 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
69686 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
69687 // z3 = 8 * (y1 * z1)^3
69688 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
69689
69690 return new Point(this.curve, x3, y3, z3)
69691 }
69692
69693 // Simple NAF (Non-Adjacent Form) multiplication algorithm
69694 // TODO: modularize the multiplication algorithm
69695 Point.prototype.multiply = function (k) {
69696 if (this.curve.isInfinity(this)) return this
69697 if (k.signum() === 0) return this.curve.infinity
69698
69699 var e = k
69700 var h = e.multiply(THREE)
69701
69702 var neg = this.negate()
69703 var R = this
69704
69705 for (var i = h.bitLength() - 2; i > 0; --i) {
69706 var hBit = h.testBit(i)
69707 var eBit = e.testBit(i)
69708
69709 R = R.twice()
69710
69711 if (hBit !== eBit) {
69712 R = R.add(hBit ? this : neg)
69713 }
69714 }
69715
69716 return R
69717 }
69718
69719 // Compute this*j + x*k (simultaneous multiplication)
69720 Point.prototype.multiplyTwo = function (j, x, k) {
69721 var i = Math.max(j.bitLength(), k.bitLength()) - 1
69722 var R = this.curve.infinity
69723 var both = this.add(x)
69724
69725 while (i >= 0) {
69726 var jBit = j.testBit(i)
69727 var kBit = k.testBit(i)
69728
69729 R = R.twice()
69730
69731 if (jBit) {
69732 if (kBit) {
69733 R = R.add(both)
69734 } else {
69735 R = R.add(this)
69736 }
69737 } else if (kBit) {
69738 R = R.add(x)
69739 }
69740 --i
69741 }
69742
69743 return R
69744 }
69745
69746 Point.prototype.getEncoded = function (compressed) {
69747 if (compressed == null) compressed = this.compressed
69748 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
69749
69750 var x = this.affineX
69751 var y = this.affineY
69752 var byteLength = this.curve.pLength
69753 var buffer
69754
69755 // 0x02/0x03 | X
69756 if (compressed) {
69757 buffer = Buffer.allocUnsafe(1 + byteLength)
69758 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
69759
69760 // 0x04 | X | Y
69761 } else {
69762 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
69763 buffer.writeUInt8(0x04, 0)
69764
69765 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
69766 }
69767
69768 x.toBuffer(byteLength).copy(buffer, 1)
69769
69770 return buffer
69771 }
69772
69773 Point.decodeFrom = function (curve, buffer) {
69774 var type = buffer.readUInt8(0)
69775 var compressed = (type !== 4)
69776
69777 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
69778 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
69779
69780 var Q
69781 if (compressed) {
69782 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
69783 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
69784
69785 var isOdd = (type === 0x03)
69786 Q = curve.pointFromX(isOdd, x)
69787 } else {
69788 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
69789
69790 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
69791 Q = Point.fromAffine(curve, x, y)
69792 }
69793
69794 Q.compressed = compressed
69795 return Q
69796 }
69797
69798 Point.prototype.toString = function () {
69799 if (this.curve.isInfinity(this)) return '(INFINITY)'
69800
69801 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
69802 }
69803
69804 module.exports = Point
69805
69806 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
69807 var Buffer = require('safe-buffer').Buffer
69808 var MD5 = require('md5.js')
69809
69810 /* eslint-disable camelcase */
69811 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
69812 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
69813 if (salt) {
69814 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
69815 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
69816 }
69817
69818 var keyLen = keyBits / 8
69819 var key = Buffer.alloc(keyLen)
69820 var iv = Buffer.alloc(ivLen || 0)
69821 var tmp = Buffer.alloc(0)
69822
69823 while (keyLen > 0 || ivLen > 0) {
69824 var hash = new MD5()
69825 hash.update(tmp)
69826 hash.update(password)
69827 if (salt) hash.update(salt)
69828 tmp = hash.digest()
69829
69830 var used = 0
69831
69832 if (keyLen > 0) {
69833 var keyStart = key.length - keyLen
69834 used = Math.min(keyLen, tmp.length)
69835 tmp.copy(key, keyStart, 0, used)
69836 keyLen -= used
69837 }
69838
69839 if (used < tmp.length && ivLen > 0) {
69840 var ivStart = iv.length - ivLen
69841 var length = Math.min(ivLen, tmp.length - used)
69842 tmp.copy(iv, ivStart, used, used + length)
69843 ivLen -= length
69844 }
69845 }
69846
69847 tmp.fill(0)
69848 return { key: key, iv: iv }
69849 }
69850
69851 module.exports = EVP_BytesToKey
69852
69853 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
69854 arguments[4][85][0].apply(exports,arguments)
69855 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
69856 arguments[4][95][0].apply(exports,arguments)
69857 },{"dup":95}],190:[function(require,module,exports){
69858 (function (Buffer){
69859 'use strict'
69860 var inherits = require('inherits')
69861 var HashBase = require('hash-base')
69862
69863 var ARRAY16 = new Array(16)
69864
69865 function MD5 () {
69866 HashBase.call(this, 64)
69867
69868 // state
69869 this._a = 0x67452301
69870 this._b = 0xefcdab89
69871 this._c = 0x98badcfe
69872 this._d = 0x10325476
69873 }
69874
69875 inherits(MD5, HashBase)
69876
69877 MD5.prototype._update = function () {
69878 var M = ARRAY16
69879 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
69880
69881 var a = this._a
69882 var b = this._b
69883 var c = this._c
69884 var d = this._d
69885
69886 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
69887 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
69888 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
69889 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
69890 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
69891 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
69892 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
69893 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
69894 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
69895 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
69896 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
69897 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
69898 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
69899 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
69900 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
69901 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
69902
69903 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
69904 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
69905 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
69906 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
69907 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
69908 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
69909 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
69910 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
69911 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
69912 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
69913 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
69914 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
69915 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
69916 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
69917 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
69918 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
69919
69920 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
69921 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
69922 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
69923 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
69924 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
69925 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
69926 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
69927 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
69928 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
69929 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
69930 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
69931 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
69932 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
69933 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
69934 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
69935 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
69936
69937 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
69938 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
69939 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
69940 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
69941 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
69942 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
69943 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
69944 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
69945 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
69946 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
69947 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
69948 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
69949 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
69950 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
69951 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
69952 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
69953
69954 this._a = (this._a + a) | 0
69955 this._b = (this._b + b) | 0
69956 this._c = (this._c + c) | 0
69957 this._d = (this._d + d) | 0
69958 }
69959
69960 MD5.prototype._digest = function () {
69961 // create padding and handle blocks
69962 this._block[this._blockOffset++] = 0x80
69963 if (this._blockOffset > 56) {
69964 this._block.fill(0, this._blockOffset, 64)
69965 this._update()
69966 this._blockOffset = 0
69967 }
69968
69969 this._block.fill(0, this._blockOffset, 56)
69970 this._block.writeUInt32LE(this._length[0], 56)
69971 this._block.writeUInt32LE(this._length[1], 60)
69972 this._update()
69973
69974 // produce result
69975 var buffer = new Buffer(16)
69976 buffer.writeInt32LE(this._a, 0)
69977 buffer.writeInt32LE(this._b, 4)
69978 buffer.writeInt32LE(this._c, 8)
69979 buffer.writeInt32LE(this._d, 12)
69980 return buffer
69981 }
69982
69983 function rotl (x, n) {
69984 return (x << n) | (x >>> (32 - n))
69985 }
69986
69987 function fnF (a, b, c, d, m, k, s) {
69988 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
69989 }
69990
69991 function fnG (a, b, c, d, m, k, s) {
69992 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
69993 }
69994
69995 function fnH (a, b, c, d, m, k, s) {
69996 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
69997 }
69998
69999 function fnI (a, b, c, d, m, k, s) {
70000 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
70001 }
70002
70003 module.exports = MD5
70004
70005 }).call(this,require("buffer").Buffer)
70006 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
70007 'use strict'
70008 var Buffer = require('safe-buffer').Buffer
70009 var Transform = require('stream').Transform
70010 var inherits = require('inherits')
70011
70012 function throwIfNotStringOrBuffer (val, prefix) {
70013 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
70014 throw new TypeError(prefix + ' must be a string or a buffer')
70015 }
70016 }
70017
70018 function HashBase (blockSize) {
70019 Transform.call(this)
70020
70021 this._block = Buffer.allocUnsafe(blockSize)
70022 this._blockSize = blockSize
70023 this._blockOffset = 0
70024 this._length = [0, 0, 0, 0]
70025
70026 this._finalized = false
70027 }
70028
70029 inherits(HashBase, Transform)
70030
70031 HashBase.prototype._transform = function (chunk, encoding, callback) {
70032 var error = null
70033 try {
70034 this.update(chunk, encoding)
70035 } catch (err) {
70036 error = err
70037 }
70038
70039 callback(error)
70040 }
70041
70042 HashBase.prototype._flush = function (callback) {
70043 var error = null
70044 try {
70045 this.push(this.digest())
70046 } catch (err) {
70047 error = err
70048 }
70049
70050 callback(error)
70051 }
70052
70053 HashBase.prototype.update = function (data, encoding) {
70054 throwIfNotStringOrBuffer(data, 'Data')
70055 if (this._finalized) throw new Error('Digest already called')
70056 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
70057
70058 // consume data
70059 var block = this._block
70060 var offset = 0
70061 while (this._blockOffset + data.length - offset >= this._blockSize) {
70062 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
70063 this._update()
70064 this._blockOffset = 0
70065 }
70066 while (offset < data.length) block[this._blockOffset++] = data[offset++]
70067
70068 // update length
70069 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
70070 this._length[j] += carry
70071 carry = (this._length[j] / 0x0100000000) | 0
70072 if (carry > 0) this._length[j] -= 0x0100000000 * carry
70073 }
70074
70075 return this
70076 }
70077
70078 HashBase.prototype._update = function () {
70079 throw new Error('_update is not implemented')
70080 }
70081
70082 HashBase.prototype.digest = function (encoding) {
70083 if (this._finalized) throw new Error('Digest already called')
70084 this._finalized = true
70085
70086 var digest = this._digest()
70087 if (encoding !== undefined) digest = digest.toString(encoding)
70088
70089 // reset state
70090 this._block.fill(0)
70091 this._blockOffset = 0
70092 for (var i = 0; i < 4; ++i) this._length[i] = 0
70093
70094 return digest
70095 }
70096
70097 HashBase.prototype._digest = function () {
70098 throw new Error('_digest is not implemented')
70099 }
70100
70101 module.exports = HashBase
70102
70103 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
70104 arguments[4][133][0].apply(exports,arguments)
70105 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
70106 /* eslint-disable node/no-deprecated-api */
70107 var buffer = require('buffer')
70108 var Buffer = buffer.Buffer
70109
70110 // alternative to using Object.keys for old browsers
70111 function copyProps (src, dst) {
70112 for (var key in src) {
70113 dst[key] = src[key]
70114 }
70115 }
70116 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
70117 module.exports = buffer
70118 } else {
70119 // Copy properties from require('buffer')
70120 copyProps(buffer, exports)
70121 exports.Buffer = SafeBuffer
70122 }
70123
70124 function SafeBuffer (arg, encodingOrOffset, length) {
70125 return Buffer(arg, encodingOrOffset, length)
70126 }
70127
70128 // Copy static methods from Buffer
70129 copyProps(Buffer, SafeBuffer)
70130
70131 SafeBuffer.from = function (arg, encodingOrOffset, length) {
70132 if (typeof arg === 'number') {
70133 throw new TypeError('Argument must not be a number')
70134 }
70135 return Buffer(arg, encodingOrOffset, length)
70136 }
70137
70138 SafeBuffer.alloc = function (size, fill, encoding) {
70139 if (typeof size !== 'number') {
70140 throw new TypeError('Argument must be a number')
70141 }
70142 var buf = Buffer(size)
70143 if (fill !== undefined) {
70144 if (typeof encoding === 'string') {
70145 buf.fill(fill, encoding)
70146 } else {
70147 buf.fill(fill)
70148 }
70149 } else {
70150 buf.fill(0)
70151 }
70152 return buf
70153 }
70154
70155 SafeBuffer.allocUnsafe = function (size) {
70156 if (typeof size !== 'number') {
70157 throw new TypeError('Argument must be a number')
70158 }
70159 return Buffer(size)
70160 }
70161
70162 SafeBuffer.allocUnsafeSlow = function (size) {
70163 if (typeof size !== 'number') {
70164 throw new TypeError('Argument must be a number')
70165 }
70166 return buffer.SlowBuffer(size)
70167 }
70168
70169 },{"buffer":47}],194:[function(require,module,exports){
70170 (function (Buffer){
70171 var crypto = require('crypto')
70172 /* eslint-disable camelcase */
70173
70174 var MAX_VALUE = 0x7fffffff
70175
70176 // N = Cpu cost, r = Memory cost, p = parallelization cost
70177 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
70178 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
70179
70180 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
70181 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
70182
70183 var XY = new Buffer(256 * r)
70184 var V = new Buffer(128 * r * N)
70185
70186 // pseudo global
70187 var B32 = new Int32Array(16) // salsa20_8
70188 var x = new Int32Array(16) // salsa20_8
70189 var _X = new Buffer(64) // blockmix_salsa8
70190
70191 // pseudo global
70192 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
70193
70194 var tickCallback
70195 if (progressCallback) {
70196 var totalOps = p * N * 2
70197 var currentOp = 0
70198
70199 tickCallback = function () {
70200 ++currentOp
70201
70202 // send progress notifications once every 1,000 ops
70203 if (currentOp % 1000 === 0) {
70204 progressCallback({
70205 current: currentOp,
70206 total: totalOps,
70207 percent: (currentOp / totalOps) * 100.0
70208 })
70209 }
70210 }
70211 }
70212
70213 for (var i = 0; i < p; i++) {
70214 smix(B, i * 128 * r, r, N, V, XY)
70215 }
70216
70217 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
70218
70219 // all of these functions are actually moved to the top
70220 // due to function hoisting
70221
70222 function smix (B, Bi, r, N, V, XY) {
70223 var Xi = 0
70224 var Yi = 128 * r
70225 var i
70226
70227 B.copy(XY, Xi, Bi, Bi + Yi)
70228
70229 for (i = 0; i < N; i++) {
70230 XY.copy(V, i * Yi, Xi, Xi + Yi)
70231 blockmix_salsa8(XY, Xi, Yi, r)
70232
70233 if (tickCallback) tickCallback()
70234 }
70235
70236 for (i = 0; i < N; i++) {
70237 var offset = Xi + (2 * r - 1) * 64
70238 var j = XY.readUInt32LE(offset) & (N - 1)
70239 blockxor(V, j * Yi, XY, Xi, Yi)
70240 blockmix_salsa8(XY, Xi, Yi, r)
70241
70242 if (tickCallback) tickCallback()
70243 }
70244
70245 XY.copy(B, Bi, Xi, Xi + Yi)
70246 }
70247
70248 function blockmix_salsa8 (BY, Bi, Yi, r) {
70249 var i
70250
70251 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
70252
70253 for (i = 0; i < 2 * r; i++) {
70254 blockxor(BY, i * 64, _X, 0, 64)
70255 salsa20_8(_X)
70256 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
70257 }
70258
70259 for (i = 0; i < r; i++) {
70260 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
70261 }
70262
70263 for (i = 0; i < r; i++) {
70264 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
70265 }
70266 }
70267
70268 function R (a, b) {
70269 return (a << b) | (a >>> (32 - b))
70270 }
70271
70272 function salsa20_8 (B) {
70273 var i
70274
70275 for (i = 0; i < 16; i++) {
70276 B32[i] = (B[i * 4 + 0] & 0xff) << 0
70277 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
70278 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
70279 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
70280 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
70281 }
70282
70283 arraycopy(B32, 0, x, 0, 16)
70284
70285 for (i = 8; i > 0; i -= 2) {
70286 x[4] ^= R(x[0] + x[12], 7)
70287 x[8] ^= R(x[4] + x[0], 9)
70288 x[12] ^= R(x[8] + x[4], 13)
70289 x[0] ^= R(x[12] + x[8], 18)
70290 x[9] ^= R(x[5] + x[1], 7)
70291 x[13] ^= R(x[9] + x[5], 9)
70292 x[1] ^= R(x[13] + x[9], 13)
70293 x[5] ^= R(x[1] + x[13], 18)
70294 x[14] ^= R(x[10] + x[6], 7)
70295 x[2] ^= R(x[14] + x[10], 9)
70296 x[6] ^= R(x[2] + x[14], 13)
70297 x[10] ^= R(x[6] + x[2], 18)
70298 x[3] ^= R(x[15] + x[11], 7)
70299 x[7] ^= R(x[3] + x[15], 9)
70300 x[11] ^= R(x[7] + x[3], 13)
70301 x[15] ^= R(x[11] + x[7], 18)
70302 x[1] ^= R(x[0] + x[3], 7)
70303 x[2] ^= R(x[1] + x[0], 9)
70304 x[3] ^= R(x[2] + x[1], 13)
70305 x[0] ^= R(x[3] + x[2], 18)
70306 x[6] ^= R(x[5] + x[4], 7)
70307 x[7] ^= R(x[6] + x[5], 9)
70308 x[4] ^= R(x[7] + x[6], 13)
70309 x[5] ^= R(x[4] + x[7], 18)
70310 x[11] ^= R(x[10] + x[9], 7)
70311 x[8] ^= R(x[11] + x[10], 9)
70312 x[9] ^= R(x[8] + x[11], 13)
70313 x[10] ^= R(x[9] + x[8], 18)
70314 x[12] ^= R(x[15] + x[14], 7)
70315 x[13] ^= R(x[12] + x[15], 9)
70316 x[14] ^= R(x[13] + x[12], 13)
70317 x[15] ^= R(x[14] + x[13], 18)
70318 }
70319
70320 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
70321
70322 for (i = 0; i < 16; i++) {
70323 var bi = i * 4
70324 B[bi + 0] = (B32[i] >> 0 & 0xff)
70325 B[bi + 1] = (B32[i] >> 8 & 0xff)
70326 B[bi + 2] = (B32[i] >> 16 & 0xff)
70327 B[bi + 3] = (B32[i] >> 24 & 0xff)
70328 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
70329 }
70330 }
70331
70332 // naive approach... going back to loop unrolling may yield additional performance
70333 function blockxor (S, Si, D, Di, len) {
70334 for (var i = 0; i < len; i++) {
70335 D[Di + i] ^= S[Si + i]
70336 }
70337 }
70338 }
70339
70340 function arraycopy (src, srcPos, dest, destPos, length) {
70341 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
70342 src.copy(dest, destPos, srcPos, srcPos + length)
70343 } else {
70344 while (length--) {
70345 dest[destPos++] = src[srcPos++]
70346 }
70347 }
70348 }
70349
70350 module.exports = scrypt
70351
70352 }).call(this,require("buffer").Buffer)
70353 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
70354 var Buffer = require('safe-buffer').Buffer
70355
70356 // prototype class for hash functions
70357 function Hash (blockSize, finalSize) {
70358 this._block = Buffer.alloc(blockSize)
70359 this._finalSize = finalSize
70360 this._blockSize = blockSize
70361 this._len = 0
70362 }
70363
70364 Hash.prototype.update = function (data, enc) {
70365 if (typeof data === 'string') {
70366 enc = enc || 'utf8'
70367 data = Buffer.from(data, enc)
70368 }
70369
70370 var block = this._block
70371 var blockSize = this._blockSize
70372 var length = data.length
70373 var accum = this._len
70374
70375 for (var offset = 0; offset < length;) {
70376 var assigned = accum % blockSize
70377 var remainder = Math.min(length - offset, blockSize - assigned)
70378
70379 for (var i = 0; i < remainder; i++) {
70380 block[assigned + i] = data[offset + i]
70381 }
70382
70383 accum += remainder
70384 offset += remainder
70385
70386 if ((accum % blockSize) === 0) {
70387 this._update(block)
70388 }
70389 }
70390
70391 this._len += length
70392 return this
70393 }
70394
70395 Hash.prototype.digest = function (enc) {
70396 var rem = this._len % this._blockSize
70397
70398 this._block[rem] = 0x80
70399
70400 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
70401 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
70402 this._block.fill(0, rem + 1)
70403
70404 if (rem >= this._finalSize) {
70405 this._update(this._block)
70406 this._block.fill(0)
70407 }
70408
70409 var bits = this._len * 8
70410
70411 // uint32
70412 if (bits <= 0xffffffff) {
70413 this._block.writeUInt32BE(bits, this._blockSize - 4)
70414
70415 // uint64
70416 } else {
70417 var lowBits = (bits & 0xffffffff) >>> 0
70418 var highBits = (bits - lowBits) / 0x100000000
70419
70420 this._block.writeUInt32BE(highBits, this._blockSize - 8)
70421 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
70422 }
70423
70424 this._update(this._block)
70425 var hash = this._hash()
70426
70427 return enc ? hash.toString(enc) : hash
70428 }
70429
70430 Hash.prototype._update = function () {
70431 throw new Error('_update must be implemented by subclass')
70432 }
70433
70434 module.exports = Hash
70435
70436 },{"safe-buffer":193}],196:[function(require,module,exports){
70437 arguments[4][136][0].apply(exports,arguments)
70438 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
70439 /*
70440 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
70441 * in FIPS PUB 180-1
70442 * This source code is derived from sha1.js of the same repository.
70443 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
70444 * operation was added.
70445 */
70446
70447 var inherits = require('inherits')
70448 var Hash = require('./hash')
70449 var Buffer = require('safe-buffer').Buffer
70450
70451 var K = [
70452 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70453 ]
70454
70455 var W = new Array(80)
70456
70457 function Sha () {
70458 this.init()
70459 this._w = W
70460
70461 Hash.call(this, 64, 56)
70462 }
70463
70464 inherits(Sha, Hash)
70465
70466 Sha.prototype.init = function () {
70467 this._a = 0x67452301
70468 this._b = 0xefcdab89
70469 this._c = 0x98badcfe
70470 this._d = 0x10325476
70471 this._e = 0xc3d2e1f0
70472
70473 return this
70474 }
70475
70476 function rotl5 (num) {
70477 return (num << 5) | (num >>> 27)
70478 }
70479
70480 function rotl30 (num) {
70481 return (num << 30) | (num >>> 2)
70482 }
70483
70484 function ft (s, b, c, d) {
70485 if (s === 0) return (b & c) | ((~b) & d)
70486 if (s === 2) return (b & c) | (b & d) | (c & d)
70487 return b ^ c ^ d
70488 }
70489
70490 Sha.prototype._update = function (M) {
70491 var W = this._w
70492
70493 var a = this._a | 0
70494 var b = this._b | 0
70495 var c = this._c | 0
70496 var d = this._d | 0
70497 var e = this._e | 0
70498
70499 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70500 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
70501
70502 for (var j = 0; j < 80; ++j) {
70503 var s = ~~(j / 20)
70504 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70505
70506 e = d
70507 d = c
70508 c = rotl30(b)
70509 b = a
70510 a = t
70511 }
70512
70513 this._a = (a + this._a) | 0
70514 this._b = (b + this._b) | 0
70515 this._c = (c + this._c) | 0
70516 this._d = (d + this._d) | 0
70517 this._e = (e + this._e) | 0
70518 }
70519
70520 Sha.prototype._hash = function () {
70521 var H = Buffer.allocUnsafe(20)
70522
70523 H.writeInt32BE(this._a | 0, 0)
70524 H.writeInt32BE(this._b | 0, 4)
70525 H.writeInt32BE(this._c | 0, 8)
70526 H.writeInt32BE(this._d | 0, 12)
70527 H.writeInt32BE(this._e | 0, 16)
70528
70529 return H
70530 }
70531
70532 module.exports = Sha
70533
70534 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
70535 /*
70536 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
70537 * in FIPS PUB 180-1
70538 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
70539 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70540 * Distributed under the BSD License
70541 * See http://pajhome.org.uk/crypt/md5 for details.
70542 */
70543
70544 var inherits = require('inherits')
70545 var Hash = require('./hash')
70546 var Buffer = require('safe-buffer').Buffer
70547
70548 var K = [
70549 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70550 ]
70551
70552 var W = new Array(80)
70553
70554 function Sha1 () {
70555 this.init()
70556 this._w = W
70557
70558 Hash.call(this, 64, 56)
70559 }
70560
70561 inherits(Sha1, Hash)
70562
70563 Sha1.prototype.init = function () {
70564 this._a = 0x67452301
70565 this._b = 0xefcdab89
70566 this._c = 0x98badcfe
70567 this._d = 0x10325476
70568 this._e = 0xc3d2e1f0
70569
70570 return this
70571 }
70572
70573 function rotl1 (num) {
70574 return (num << 1) | (num >>> 31)
70575 }
70576
70577 function rotl5 (num) {
70578 return (num << 5) | (num >>> 27)
70579 }
70580
70581 function rotl30 (num) {
70582 return (num << 30) | (num >>> 2)
70583 }
70584
70585 function ft (s, b, c, d) {
70586 if (s === 0) return (b & c) | ((~b) & d)
70587 if (s === 2) return (b & c) | (b & d) | (c & d)
70588 return b ^ c ^ d
70589 }
70590
70591 Sha1.prototype._update = function (M) {
70592 var W = this._w
70593
70594 var a = this._a | 0
70595 var b = this._b | 0
70596 var c = this._c | 0
70597 var d = this._d | 0
70598 var e = this._e | 0
70599
70600 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70601 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
70602
70603 for (var j = 0; j < 80; ++j) {
70604 var s = ~~(j / 20)
70605 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70606
70607 e = d
70608 d = c
70609 c = rotl30(b)
70610 b = a
70611 a = t
70612 }
70613
70614 this._a = (a + this._a) | 0
70615 this._b = (b + this._b) | 0
70616 this._c = (c + this._c) | 0
70617 this._d = (d + this._d) | 0
70618 this._e = (e + this._e) | 0
70619 }
70620
70621 Sha1.prototype._hash = function () {
70622 var H = Buffer.allocUnsafe(20)
70623
70624 H.writeInt32BE(this._a | 0, 0)
70625 H.writeInt32BE(this._b | 0, 4)
70626 H.writeInt32BE(this._c | 0, 8)
70627 H.writeInt32BE(this._d | 0, 12)
70628 H.writeInt32BE(this._e | 0, 16)
70629
70630 return H
70631 }
70632
70633 module.exports = Sha1
70634
70635 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
70636 /**
70637 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70638 * in FIPS 180-2
70639 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70640 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70641 *
70642 */
70643
70644 var inherits = require('inherits')
70645 var Sha256 = require('./sha256')
70646 var Hash = require('./hash')
70647 var Buffer = require('safe-buffer').Buffer
70648
70649 var W = new Array(64)
70650
70651 function Sha224 () {
70652 this.init()
70653
70654 this._w = W // new Array(64)
70655
70656 Hash.call(this, 64, 56)
70657 }
70658
70659 inherits(Sha224, Sha256)
70660
70661 Sha224.prototype.init = function () {
70662 this._a = 0xc1059ed8
70663 this._b = 0x367cd507
70664 this._c = 0x3070dd17
70665 this._d = 0xf70e5939
70666 this._e = 0xffc00b31
70667 this._f = 0x68581511
70668 this._g = 0x64f98fa7
70669 this._h = 0xbefa4fa4
70670
70671 return this
70672 }
70673
70674 Sha224.prototype._hash = function () {
70675 var H = Buffer.allocUnsafe(28)
70676
70677 H.writeInt32BE(this._a, 0)
70678 H.writeInt32BE(this._b, 4)
70679 H.writeInt32BE(this._c, 8)
70680 H.writeInt32BE(this._d, 12)
70681 H.writeInt32BE(this._e, 16)
70682 H.writeInt32BE(this._f, 20)
70683 H.writeInt32BE(this._g, 24)
70684
70685 return H
70686 }
70687
70688 module.exports = Sha224
70689
70690 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
70691 /**
70692 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70693 * in FIPS 180-2
70694 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70695 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70696 *
70697 */
70698
70699 var inherits = require('inherits')
70700 var Hash = require('./hash')
70701 var Buffer = require('safe-buffer').Buffer
70702
70703 var K = [
70704 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
70705 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
70706 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
70707 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
70708 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
70709 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
70710 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
70711 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
70712 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
70713 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
70714 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
70715 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
70716 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
70717 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
70718 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
70719 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
70720 ]
70721
70722 var W = new Array(64)
70723
70724 function Sha256 () {
70725 this.init()
70726
70727 this._w = W // new Array(64)
70728
70729 Hash.call(this, 64, 56)
70730 }
70731
70732 inherits(Sha256, Hash)
70733
70734 Sha256.prototype.init = function () {
70735 this._a = 0x6a09e667
70736 this._b = 0xbb67ae85
70737 this._c = 0x3c6ef372
70738 this._d = 0xa54ff53a
70739 this._e = 0x510e527f
70740 this._f = 0x9b05688c
70741 this._g = 0x1f83d9ab
70742 this._h = 0x5be0cd19
70743
70744 return this
70745 }
70746
70747 function ch (x, y, z) {
70748 return z ^ (x & (y ^ z))
70749 }
70750
70751 function maj (x, y, z) {
70752 return (x & y) | (z & (x | y))
70753 }
70754
70755 function sigma0 (x) {
70756 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
70757 }
70758
70759 function sigma1 (x) {
70760 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
70761 }
70762
70763 function gamma0 (x) {
70764 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
70765 }
70766
70767 function gamma1 (x) {
70768 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
70769 }
70770
70771 Sha256.prototype._update = function (M) {
70772 var W = this._w
70773
70774 var a = this._a | 0
70775 var b = this._b | 0
70776 var c = this._c | 0
70777 var d = this._d | 0
70778 var e = this._e | 0
70779 var f = this._f | 0
70780 var g = this._g | 0
70781 var h = this._h | 0
70782
70783 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70784 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
70785
70786 for (var j = 0; j < 64; ++j) {
70787 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
70788 var T2 = (sigma0(a) + maj(a, b, c)) | 0
70789
70790 h = g
70791 g = f
70792 f = e
70793 e = (d + T1) | 0
70794 d = c
70795 c = b
70796 b = a
70797 a = (T1 + T2) | 0
70798 }
70799
70800 this._a = (a + this._a) | 0
70801 this._b = (b + this._b) | 0
70802 this._c = (c + this._c) | 0
70803 this._d = (d + this._d) | 0
70804 this._e = (e + this._e) | 0
70805 this._f = (f + this._f) | 0
70806 this._g = (g + this._g) | 0
70807 this._h = (h + this._h) | 0
70808 }
70809
70810 Sha256.prototype._hash = function () {
70811 var H = Buffer.allocUnsafe(32)
70812
70813 H.writeInt32BE(this._a, 0)
70814 H.writeInt32BE(this._b, 4)
70815 H.writeInt32BE(this._c, 8)
70816 H.writeInt32BE(this._d, 12)
70817 H.writeInt32BE(this._e, 16)
70818 H.writeInt32BE(this._f, 20)
70819 H.writeInt32BE(this._g, 24)
70820 H.writeInt32BE(this._h, 28)
70821
70822 return H
70823 }
70824
70825 module.exports = Sha256
70826
70827 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
70828 var inherits = require('inherits')
70829 var SHA512 = require('./sha512')
70830 var Hash = require('./hash')
70831 var Buffer = require('safe-buffer').Buffer
70832
70833 var W = new Array(160)
70834
70835 function Sha384 () {
70836 this.init()
70837 this._w = W
70838
70839 Hash.call(this, 128, 112)
70840 }
70841
70842 inherits(Sha384, SHA512)
70843
70844 Sha384.prototype.init = function () {
70845 this._ah = 0xcbbb9d5d
70846 this._bh = 0x629a292a
70847 this._ch = 0x9159015a
70848 this._dh = 0x152fecd8
70849 this._eh = 0x67332667
70850 this._fh = 0x8eb44a87
70851 this._gh = 0xdb0c2e0d
70852 this._hh = 0x47b5481d
70853
70854 this._al = 0xc1059ed8
70855 this._bl = 0x367cd507
70856 this._cl = 0x3070dd17
70857 this._dl = 0xf70e5939
70858 this._el = 0xffc00b31
70859 this._fl = 0x68581511
70860 this._gl = 0x64f98fa7
70861 this._hl = 0xbefa4fa4
70862
70863 return this
70864 }
70865
70866 Sha384.prototype._hash = function () {
70867 var H = Buffer.allocUnsafe(48)
70868
70869 function writeInt64BE (h, l, offset) {
70870 H.writeInt32BE(h, offset)
70871 H.writeInt32BE(l, offset + 4)
70872 }
70873
70874 writeInt64BE(this._ah, this._al, 0)
70875 writeInt64BE(this._bh, this._bl, 8)
70876 writeInt64BE(this._ch, this._cl, 16)
70877 writeInt64BE(this._dh, this._dl, 24)
70878 writeInt64BE(this._eh, this._el, 32)
70879 writeInt64BE(this._fh, this._fl, 40)
70880
70881 return H
70882 }
70883
70884 module.exports = Sha384
70885
70886 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
70887 var inherits = require('inherits')
70888 var Hash = require('./hash')
70889 var Buffer = require('safe-buffer').Buffer
70890
70891 var K = [
70892 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
70893 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
70894 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
70895 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
70896 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
70897 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
70898 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
70899 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
70900 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
70901 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
70902 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
70903 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
70904 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
70905 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
70906 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
70907 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
70908 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
70909 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
70910 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
70911 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
70912 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
70913 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
70914 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
70915 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
70916 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
70917 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
70918 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
70919 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
70920 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
70921 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
70922 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
70923 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
70924 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
70925 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
70926 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
70927 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
70928 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
70929 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
70930 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
70931 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
70932 ]
70933
70934 var W = new Array(160)
70935
70936 function Sha512 () {
70937 this.init()
70938 this._w = W
70939
70940 Hash.call(this, 128, 112)
70941 }
70942
70943 inherits(Sha512, Hash)
70944
70945 Sha512.prototype.init = function () {
70946 this._ah = 0x6a09e667
70947 this._bh = 0xbb67ae85
70948 this._ch = 0x3c6ef372
70949 this._dh = 0xa54ff53a
70950 this._eh = 0x510e527f
70951 this._fh = 0x9b05688c
70952 this._gh = 0x1f83d9ab
70953 this._hh = 0x5be0cd19
70954
70955 this._al = 0xf3bcc908
70956 this._bl = 0x84caa73b
70957 this._cl = 0xfe94f82b
70958 this._dl = 0x5f1d36f1
70959 this._el = 0xade682d1
70960 this._fl = 0x2b3e6c1f
70961 this._gl = 0xfb41bd6b
70962 this._hl = 0x137e2179
70963
70964 return this
70965 }
70966
70967 function Ch (x, y, z) {
70968 return z ^ (x & (y ^ z))
70969 }
70970
70971 function maj (x, y, z) {
70972 return (x & y) | (z & (x | y))
70973 }
70974
70975 function sigma0 (x, xl) {
70976 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
70977 }
70978
70979 function sigma1 (x, xl) {
70980 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
70981 }
70982
70983 function Gamma0 (x, xl) {
70984 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
70985 }
70986
70987 function Gamma0l (x, xl) {
70988 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
70989 }
70990
70991 function Gamma1 (x, xl) {
70992 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
70993 }
70994
70995 function Gamma1l (x, xl) {
70996 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
70997 }
70998
70999 function getCarry (a, b) {
71000 return (a >>> 0) < (b >>> 0) ? 1 : 0
71001 }
71002
71003 Sha512.prototype._update = function (M) {
71004 var W = this._w
71005
71006 var ah = this._ah | 0
71007 var bh = this._bh | 0
71008 var ch = this._ch | 0
71009 var dh = this._dh | 0
71010 var eh = this._eh | 0
71011 var fh = this._fh | 0
71012 var gh = this._gh | 0
71013 var hh = this._hh | 0
71014
71015 var al = this._al | 0
71016 var bl = this._bl | 0
71017 var cl = this._cl | 0
71018 var dl = this._dl | 0
71019 var el = this._el | 0
71020 var fl = this._fl | 0
71021 var gl = this._gl | 0
71022 var hl = this._hl | 0
71023
71024 for (var i = 0; i < 32; i += 2) {
71025 W[i] = M.readInt32BE(i * 4)
71026 W[i + 1] = M.readInt32BE(i * 4 + 4)
71027 }
71028 for (; i < 160; i += 2) {
71029 var xh = W[i - 15 * 2]
71030 var xl = W[i - 15 * 2 + 1]
71031 var gamma0 = Gamma0(xh, xl)
71032 var gamma0l = Gamma0l(xl, xh)
71033
71034 xh = W[i - 2 * 2]
71035 xl = W[i - 2 * 2 + 1]
71036 var gamma1 = Gamma1(xh, xl)
71037 var gamma1l = Gamma1l(xl, xh)
71038
71039 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
71040 var Wi7h = W[i - 7 * 2]
71041 var Wi7l = W[i - 7 * 2 + 1]
71042
71043 var Wi16h = W[i - 16 * 2]
71044 var Wi16l = W[i - 16 * 2 + 1]
71045
71046 var Wil = (gamma0l + Wi7l) | 0
71047 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
71048 Wil = (Wil + gamma1l) | 0
71049 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
71050 Wil = (Wil + Wi16l) | 0
71051 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
71052
71053 W[i] = Wih
71054 W[i + 1] = Wil
71055 }
71056
71057 for (var j = 0; j < 160; j += 2) {
71058 Wih = W[j]
71059 Wil = W[j + 1]
71060
71061 var majh = maj(ah, bh, ch)
71062 var majl = maj(al, bl, cl)
71063
71064 var sigma0h = sigma0(ah, al)
71065 var sigma0l = sigma0(al, ah)
71066 var sigma1h = sigma1(eh, el)
71067 var sigma1l = sigma1(el, eh)
71068
71069 // t1 = h + sigma1 + ch + K[j] + W[j]
71070 var Kih = K[j]
71071 var Kil = K[j + 1]
71072
71073 var chh = Ch(eh, fh, gh)
71074 var chl = Ch(el, fl, gl)
71075
71076 var t1l = (hl + sigma1l) | 0
71077 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
71078 t1l = (t1l + chl) | 0
71079 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
71080 t1l = (t1l + Kil) | 0
71081 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
71082 t1l = (t1l + Wil) | 0
71083 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
71084
71085 // t2 = sigma0 + maj
71086 var t2l = (sigma0l + majl) | 0
71087 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
71088
71089 hh = gh
71090 hl = gl
71091 gh = fh
71092 gl = fl
71093 fh = eh
71094 fl = el
71095 el = (dl + t1l) | 0
71096 eh = (dh + t1h + getCarry(el, dl)) | 0
71097 dh = ch
71098 dl = cl
71099 ch = bh
71100 cl = bl
71101 bh = ah
71102 bl = al
71103 al = (t1l + t2l) | 0
71104 ah = (t1h + t2h + getCarry(al, t1l)) | 0
71105 }
71106
71107 this._al = (this._al + al) | 0
71108 this._bl = (this._bl + bl) | 0
71109 this._cl = (this._cl + cl) | 0
71110 this._dl = (this._dl + dl) | 0
71111 this._el = (this._el + el) | 0
71112 this._fl = (this._fl + fl) | 0
71113 this._gl = (this._gl + gl) | 0
71114 this._hl = (this._hl + hl) | 0
71115
71116 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
71117 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
71118 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
71119 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
71120 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
71121 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
71122 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
71123 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
71124 }
71125
71126 Sha512.prototype._hash = function () {
71127 var H = Buffer.allocUnsafe(64)
71128
71129 function writeInt64BE (h, l, offset) {
71130 H.writeInt32BE(h, offset)
71131 H.writeInt32BE(l, offset + 4)
71132 }
71133
71134 writeInt64BE(this._ah, this._al, 0)
71135 writeInt64BE(this._bh, this._bl, 8)
71136 writeInt64BE(this._ch, this._cl, 16)
71137 writeInt64BE(this._dh, this._dl, 24)
71138 writeInt64BE(this._eh, this._el, 32)
71139 writeInt64BE(this._fh, this._fl, 40)
71140 writeInt64BE(this._gh, this._gl, 48)
71141 writeInt64BE(this._hh, this._hl, 56)
71142
71143 return H
71144 }
71145
71146 module.exports = Sha512
71147
71148 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
71149 });</script>
71150 <script>(function() {
71151
71152 // p2wpkh
71153
71154 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
71155 baseNetwork: "bitcoin",
71156 messagePrefix: '\x18Bitcoin Signed Message:\n',
71157 bech32: 'bc',
71158 bip32: {
71159 public: 0x04b24746,
71160 private: 0x04b2430c
71161 },
71162 pubKeyHash: 0x00,
71163 scriptHash: 0x05,
71164 wif: 0x80
71165 };
71166
71167 bitcoinjs.bitcoin.networks.testnet.p2wpkh = {
71168 baseNetwork: "testnet",
71169 messagePrefix: '\x18Bitcoin Signed Message:\n',
71170 bech32: 'tb',
71171 bip32: {
71172 public: 0x045f1cf6,
71173 private: 0x045f18bc
71174 },
71175 pubKeyHash: 0x6f,
71176 scriptHash: 0xc4,
71177 wif: 0xef
71178 };
71179
71180 // p2wpkh in p2sh
71181
71182 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
71183 baseNetwork: "bitcoin",
71184 messagePrefix: '\x18Bitcoin Signed Message:\n',
71185 bech32: 'bc',
71186 bip32: {
71187 public: 0x049d7cb2,
71188 private: 0x049d7878
71189 },
71190 pubKeyHash: 0x00,
71191 scriptHash: 0x05,
71192 wif: 0x80
71193 };
71194
71195 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
71196 baseNetwork: "testnet",
71197 messagePrefix: '\x18Bitcoin Signed Message:\n',
71198 bech32: 'tb',
71199 bip32: {
71200 public: 0x044a5262,
71201 private: 0x044a4e28
71202 },
71203 pubKeyHash: 0x6f,
71204 scriptHash: 0xc4,
71205 wif: 0xef
71206 };
71207
71208 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
71209 baseNetwork: "litecoin",
71210 messagePrefix: '\x19Litecoin Signed Message:\n',
71211 bip32: {
71212 public: 0x01b26ef6,
71213 private: 0x01b26792
71214 },
71215 pubKeyHash: 0x30,
71216 scriptHash: 0x32,
71217 wif: 0xb0
71218 };
71219
71220 bitcoinjs.bitcoin.networks.fujicoin.p2wpkh = {
71221 baseNetwork: "fujicoin",
71222 messagePrefix: '\x19FujiCoin Signed Message:\n',
71223 bech32: 'fc',
71224 bip32: {
71225 public: 0x04b24746,
71226 private: 0x04b2430c
71227 },
71228 pubKeyHash: 0x24,
71229 scriptHash: 0x10,
71230 wif: 0xa4
71231 };
71232
71233 bitcoinjs.bitcoin.networks.fujicoin.p2wpkhInP2sh = {
71234 baseNetwork: "fujicoin",
71235 messagePrefix: '\x19FujiCoin Signed Message:\n',
71236 bech32: 'fc',
71237 bip32: {
71238 public: 0x049d7cb2,
71239 private: 0x049d7878
71240 },
71241 pubKeyHash: 0x24,
71242 scriptHash: 0x10,
71243 wif: 0xa4
71244 };
71245
71246 bitcoinjs.bitcoin.networks.vertcoin.p2wpkh = {
71247 baseNetwork: "vertcoin",
71248 messagePrefix: '\x18Vertcoin Signed Message:\n',
71249 bech32: 'vtc',
71250 bip32: {
71251 public: 0x0488b21e,
71252 private: 0x0488ade4
71253 },
71254 pubKeyHash: 71,
71255 scriptHash: 5,
71256 wif: 0x80
71257 };
71258
71259 bitcoinjs.bitcoin.networks.vertcoin.p2wpkhInP2sh = {
71260 baseNetwork: "vertcoin",
71261 messagePrefix: '\x18Vertcoin Signed Message:\n',
71262 bip32: {
71263 public: 0x0488b21e,
71264 private: 0x0488ade4
71265 },
71266 pubKeyHash: 71,
71267 scriptHash: 5,
71268 wif: 0x80
71269 };
71270
71271 })();
71272 </script>
71273 <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.ethUtil = 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){
71274 (function (global){
71275 'use strict';
71276
71277 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
71278 // original notice:
71279
71280 /*!
71281 * The buffer module from node.js, for the browser.
71282 *
71283 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
71284 * @license MIT
71285 */
71286 function compare(a, b) {
71287 if (a === b) {
71288 return 0;
71289 }
71290
71291 var x = a.length;
71292 var y = b.length;
71293
71294 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
71295 if (a[i] !== b[i]) {
71296 x = a[i];
71297 y = b[i];
71298 break;
71299 }
71300 }
71301
71302 if (x < y) {
71303 return -1;
71304 }
71305 if (y < x) {
71306 return 1;
71307 }
71308 return 0;
71309 }
71310 function isBuffer(b) {
71311 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
71312 return global.Buffer.isBuffer(b);
71313 }
71314 return !!(b != null && b._isBuffer);
71315 }
71316
71317 // based on node assert, original notice:
71318
71319 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
71320 //
71321 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
71322 //
71323 // Originally from narwhal.js (http://narwhaljs.org)
71324 // Copyright (c) 2009 Thomas Robinson <280north.com>
71325 //
71326 // Permission is hereby granted, free of charge, to any person obtaining a copy
71327 // of this software and associated documentation files (the 'Software'), to
71328 // deal in the Software without restriction, including without limitation the
71329 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
71330 // sell copies of the Software, and to permit persons to whom the Software is
71331 // furnished to do so, subject to the following conditions:
71332 //
71333 // The above copyright notice and this permission notice shall be included in
71334 // all copies or substantial portions of the Software.
71335 //
71336 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
71337 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71338 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71339 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
71340 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
71341 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
71342
71343 var util = require('util/');
71344 var hasOwn = Object.prototype.hasOwnProperty;
71345 var pSlice = Array.prototype.slice;
71346 var functionsHaveNames = (function () {
71347 return function foo() {}.name === 'foo';
71348 }());
71349 function pToString (obj) {
71350 return Object.prototype.toString.call(obj);
71351 }
71352 function isView(arrbuf) {
71353 if (isBuffer(arrbuf)) {
71354 return false;
71355 }
71356 if (typeof global.ArrayBuffer !== 'function') {
71357 return false;
71358 }
71359 if (typeof ArrayBuffer.isView === 'function') {
71360 return ArrayBuffer.isView(arrbuf);
71361 }
71362 if (!arrbuf) {
71363 return false;
71364 }
71365 if (arrbuf instanceof DataView) {
71366 return true;
71367 }
71368 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
71369 return true;
71370 }
71371 return false;
71372 }
71373 // 1. The assert module provides functions that throw
71374 // AssertionError's when particular conditions are not met. The
71375 // assert module must conform to the following interface.
71376
71377 var assert = module.exports = ok;
71378
71379 // 2. The AssertionError is defined in assert.
71380 // new assert.AssertionError({ message: message,
71381 // actual: actual,
71382 // expected: expected })
71383
71384 var regex = /\s*function\s+([^\(\s]*)\s*/;
71385 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
71386 function getName(func) {
71387 if (!util.isFunction(func)) {
71388 return;
71389 }
71390 if (functionsHaveNames) {
71391 return func.name;
71392 }
71393 var str = func.toString();
71394 var match = str.match(regex);
71395 return match && match[1];
71396 }
71397 assert.AssertionError = function AssertionError(options) {
71398 this.name = 'AssertionError';
71399 this.actual = options.actual;
71400 this.expected = options.expected;
71401 this.operator = options.operator;
71402 if (options.message) {
71403 this.message = options.message;
71404 this.generatedMessage = false;
71405 } else {
71406 this.message = getMessage(this);
71407 this.generatedMessage = true;
71408 }
71409 var stackStartFunction = options.stackStartFunction || fail;
71410 if (Error.captureStackTrace) {
71411 Error.captureStackTrace(this, stackStartFunction);
71412 } else {
71413 // non v8 browsers so we can have a stacktrace
71414 var err = new Error();
71415 if (err.stack) {
71416 var out = err.stack;
71417
71418 // try to strip useless frames
71419 var fn_name = getName(stackStartFunction);
71420 var idx = out.indexOf('\n' + fn_name);
71421 if (idx >= 0) {
71422 // once we have located the function frame
71423 // we need to strip out everything before it (and its line)
71424 var next_line = out.indexOf('\n', idx + 1);
71425 out = out.substring(next_line + 1);
71426 }
71427
71428 this.stack = out;
71429 }
71430 }
71431 };
71432
71433 // assert.AssertionError instanceof Error
71434 util.inherits(assert.AssertionError, Error);
71435
71436 function truncate(s, n) {
71437 if (typeof s === 'string') {
71438 return s.length < n ? s : s.slice(0, n);
71439 } else {
71440 return s;
71441 }
71442 }
71443 function inspect(something) {
71444 if (functionsHaveNames || !util.isFunction(something)) {
71445 return util.inspect(something);
71446 }
71447 var rawname = getName(something);
71448 var name = rawname ? ': ' + rawname : '';
71449 return '[Function' + name + ']';
71450 }
71451 function getMessage(self) {
71452 return truncate(inspect(self.actual), 128) + ' ' +
71453 self.operator + ' ' +
71454 truncate(inspect(self.expected), 128);
71455 }
71456
71457 // At present only the three keys mentioned above are used and
71458 // understood by the spec. Implementations or sub modules can pass
71459 // other keys to the AssertionError's constructor - they will be
71460 // ignored.
71461
71462 // 3. All of the following functions must throw an AssertionError
71463 // when a corresponding condition is not met, with a message that
71464 // may be undefined if not provided. All assertion methods provide
71465 // both the actual and expected values to the assertion error for
71466 // display purposes.
71467
71468 function fail(actual, expected, message, operator, stackStartFunction) {
71469 throw new assert.AssertionError({
71470 message: message,
71471 actual: actual,
71472 expected: expected,
71473 operator: operator,
71474 stackStartFunction: stackStartFunction
71475 });
71476 }
71477
71478 // EXTENSION! allows for well behaved errors defined elsewhere.
71479 assert.fail = fail;
71480
71481 // 4. Pure assertion tests whether a value is truthy, as determined
71482 // by !!guard.
71483 // assert.ok(guard, message_opt);
71484 // This statement is equivalent to assert.equal(true, !!guard,
71485 // message_opt);. To test strictly for the value true, use
71486 // assert.strictEqual(true, guard, message_opt);.
71487
71488 function ok(value, message) {
71489 if (!value) fail(value, true, message, '==', assert.ok);
71490 }
71491 assert.ok = ok;
71492
71493 // 5. The equality assertion tests shallow, coercive equality with
71494 // ==.
71495 // assert.equal(actual, expected, message_opt);
71496
71497 assert.equal = function equal(actual, expected, message) {
71498 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
71499 };
71500
71501 // 6. The non-equality assertion tests for whether two objects are not equal
71502 // with != assert.notEqual(actual, expected, message_opt);
71503
71504 assert.notEqual = function notEqual(actual, expected, message) {
71505 if (actual == expected) {
71506 fail(actual, expected, message, '!=', assert.notEqual);
71507 }
71508 };
71509
71510 // 7. The equivalence assertion tests a deep equality relation.
71511 // assert.deepEqual(actual, expected, message_opt);
71512
71513 assert.deepEqual = function deepEqual(actual, expected, message) {
71514 if (!_deepEqual(actual, expected, false)) {
71515 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
71516 }
71517 };
71518
71519 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
71520 if (!_deepEqual(actual, expected, true)) {
71521 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
71522 }
71523 };
71524
71525 function _deepEqual(actual, expected, strict, memos) {
71526 // 7.1. All identical values are equivalent, as determined by ===.
71527 if (actual === expected) {
71528 return true;
71529 } else if (isBuffer(actual) && isBuffer(expected)) {
71530 return compare(actual, expected) === 0;
71531
71532 // 7.2. If the expected value is a Date object, the actual value is
71533 // equivalent if it is also a Date object that refers to the same time.
71534 } else if (util.isDate(actual) && util.isDate(expected)) {
71535 return actual.getTime() === expected.getTime();
71536
71537 // 7.3 If the expected value is a RegExp object, the actual value is
71538 // equivalent if it is also a RegExp object with the same source and
71539 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
71540 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
71541 return actual.source === expected.source &&
71542 actual.global === expected.global &&
71543 actual.multiline === expected.multiline &&
71544 actual.lastIndex === expected.lastIndex &&
71545 actual.ignoreCase === expected.ignoreCase;
71546
71547 // 7.4. Other pairs that do not both pass typeof value == 'object',
71548 // equivalence is determined by ==.
71549 } else if ((actual === null || typeof actual !== 'object') &&
71550 (expected === null || typeof expected !== 'object')) {
71551 return strict ? actual === expected : actual == expected;
71552
71553 // If both values are instances of typed arrays, wrap their underlying
71554 // ArrayBuffers in a Buffer each to increase performance
71555 // This optimization requires the arrays to have the same type as checked by
71556 // Object.prototype.toString (aka pToString). Never perform binary
71557 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
71558 // bit patterns are not identical.
71559 } else if (isView(actual) && isView(expected) &&
71560 pToString(actual) === pToString(expected) &&
71561 !(actual instanceof Float32Array ||
71562 actual instanceof Float64Array)) {
71563 return compare(new Uint8Array(actual.buffer),
71564 new Uint8Array(expected.buffer)) === 0;
71565
71566 // 7.5 For all other Object pairs, including Array objects, equivalence is
71567 // determined by having the same number of owned properties (as verified
71568 // with Object.prototype.hasOwnProperty.call), the same set of keys
71569 // (although not necessarily the same order), equivalent values for every
71570 // corresponding key, and an identical 'prototype' property. Note: this
71571 // accounts for both named and indexed properties on Arrays.
71572 } else if (isBuffer(actual) !== isBuffer(expected)) {
71573 return false;
71574 } else {
71575 memos = memos || {actual: [], expected: []};
71576
71577 var actualIndex = memos.actual.indexOf(actual);
71578 if (actualIndex !== -1) {
71579 if (actualIndex === memos.expected.indexOf(expected)) {
71580 return true;
71581 }
71582 }
71583
71584 memos.actual.push(actual);
71585 memos.expected.push(expected);
71586
71587 return objEquiv(actual, expected, strict, memos);
71588 }
71589 }
71590
71591 function isArguments(object) {
71592 return Object.prototype.toString.call(object) == '[object Arguments]';
71593 }
71594
71595 function objEquiv(a, b, strict, actualVisitedObjects) {
71596 if (a === null || a === undefined || b === null || b === undefined)
71597 return false;
71598 // if one is a primitive, the other must be same
71599 if (util.isPrimitive(a) || util.isPrimitive(b))
71600 return a === b;
71601 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
71602 return false;
71603 var aIsArgs = isArguments(a);
71604 var bIsArgs = isArguments(b);
71605 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
71606 return false;
71607 if (aIsArgs) {
71608 a = pSlice.call(a);
71609 b = pSlice.call(b);
71610 return _deepEqual(a, b, strict);
71611 }
71612 var ka = objectKeys(a);
71613 var kb = objectKeys(b);
71614 var key, i;
71615 // having the same number of owned properties (keys incorporates
71616 // hasOwnProperty)
71617 if (ka.length !== kb.length)
71618 return false;
71619 //the same set of keys (although not necessarily the same order),
71620 ka.sort();
71621 kb.sort();
71622 //~~~cheap key test
71623 for (i = ka.length - 1; i >= 0; i--) {
71624 if (ka[i] !== kb[i])
71625 return false;
71626 }
71627 //equivalent values for every corresponding key, and
71628 //~~~possibly expensive deep test
71629 for (i = ka.length - 1; i >= 0; i--) {
71630 key = ka[i];
71631 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
71632 return false;
71633 }
71634 return true;
71635 }
71636
71637 // 8. The non-equivalence assertion tests for any deep inequality.
71638 // assert.notDeepEqual(actual, expected, message_opt);
71639
71640 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
71641 if (_deepEqual(actual, expected, false)) {
71642 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
71643 }
71644 };
71645
71646 assert.notDeepStrictEqual = notDeepStrictEqual;
71647 function notDeepStrictEqual(actual, expected, message) {
71648 if (_deepEqual(actual, expected, true)) {
71649 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
71650 }
71651 }
71652
71653
71654 // 9. The strict equality assertion tests strict equality, as determined by ===.
71655 // assert.strictEqual(actual, expected, message_opt);
71656
71657 assert.strictEqual = function strictEqual(actual, expected, message) {
71658 if (actual !== expected) {
71659 fail(actual, expected, message, '===', assert.strictEqual);
71660 }
71661 };
71662
71663 // 10. The strict non-equality assertion tests for strict inequality, as
71664 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
71665
71666 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
71667 if (actual === expected) {
71668 fail(actual, expected, message, '!==', assert.notStrictEqual);
71669 }
71670 };
71671
71672 function expectedException(actual, expected) {
71673 if (!actual || !expected) {
71674 return false;
71675 }
71676
71677 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
71678 return expected.test(actual);
71679 }
71680
71681 try {
71682 if (actual instanceof expected) {
71683 return true;
71684 }
71685 } catch (e) {
71686 // Ignore. The instanceof check doesn't work for arrow functions.
71687 }
71688
71689 if (Error.isPrototypeOf(expected)) {
71690 return false;
71691 }
71692
71693 return expected.call({}, actual) === true;
71694 }
71695
71696 function _tryBlock(block) {
71697 var error;
71698 try {
71699 block();
71700 } catch (e) {
71701 error = e;
71702 }
71703 return error;
71704 }
71705
71706 function _throws(shouldThrow, block, expected, message) {
71707 var actual;
71708
71709 if (typeof block !== 'function') {
71710 throw new TypeError('"block" argument must be a function');
71711 }
71712
71713 if (typeof expected === 'string') {
71714 message = expected;
71715 expected = null;
71716 }
71717
71718 actual = _tryBlock(block);
71719
71720 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
71721 (message ? ' ' + message : '.');
71722
71723 if (shouldThrow && !actual) {
71724 fail(actual, expected, 'Missing expected exception' + message);
71725 }
71726
71727 var userProvidedMessage = typeof message === 'string';
71728 var isUnwantedException = !shouldThrow && util.isError(actual);
71729 var isUnexpectedException = !shouldThrow && actual && !expected;
71730
71731 if ((isUnwantedException &&
71732 userProvidedMessage &&
71733 expectedException(actual, expected)) ||
71734 isUnexpectedException) {
71735 fail(actual, expected, 'Got unwanted exception' + message);
71736 }
71737
71738 if ((shouldThrow && actual && expected &&
71739 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
71740 throw actual;
71741 }
71742 }
71743
71744 // 11. Expected to throw an error:
71745 // assert.throws(block, Error_opt, message_opt);
71746
71747 assert.throws = function(block, /*optional*/error, /*optional*/message) {
71748 _throws(true, block, error, message);
71749 };
71750
71751 // EXTENSION! This is annoying to write outside this module.
71752 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
71753 _throws(false, block, error, message);
71754 };
71755
71756 assert.ifError = function(err) { if (err) throw err; };
71757
71758 var objectKeys = Object.keys || function (obj) {
71759 var keys = [];
71760 for (var key in obj) {
71761 if (hasOwn.call(obj, key)) keys.push(key);
71762 }
71763 return keys;
71764 };
71765
71766 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
71767 },{"util/":30}],2:[function(require,module,exports){
71768 'use strict'
71769
71770 exports.byteLength = byteLength
71771 exports.toByteArray = toByteArray
71772 exports.fromByteArray = fromByteArray
71773
71774 var lookup = []
71775 var revLookup = []
71776 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
71777
71778 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
71779 for (var i = 0, len = code.length; i < len; ++i) {
71780 lookup[i] = code[i]
71781 revLookup[code.charCodeAt(i)] = i
71782 }
71783
71784 revLookup['-'.charCodeAt(0)] = 62
71785 revLookup['_'.charCodeAt(0)] = 63
71786
71787 function placeHoldersCount (b64) {
71788 var len = b64.length
71789 if (len % 4 > 0) {
71790 throw new Error('Invalid string. Length must be a multiple of 4')
71791 }
71792
71793 // the number of equal signs (place holders)
71794 // if there are two placeholders, than the two characters before it
71795 // represent one byte
71796 // if there is only one, then the three characters before it represent 2 bytes
71797 // this is just a cheap hack to not do indexOf twice
71798 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
71799 }
71800
71801 function byteLength (b64) {
71802 // base64 is 4/3 + up to two characters of the original data
71803 return b64.length * 3 / 4 - placeHoldersCount(b64)
71804 }
71805
71806 function toByteArray (b64) {
71807 var i, j, l, tmp, placeHolders, arr
71808 var len = b64.length
71809 placeHolders = placeHoldersCount(b64)
71810
71811 arr = new Arr(len * 3 / 4 - placeHolders)
71812
71813 // if there are placeholders, only get up to the last complete 4 chars
71814 l = placeHolders > 0 ? len - 4 : len
71815
71816 var L = 0
71817
71818 for (i = 0, j = 0; i < l; i += 4, j += 3) {
71819 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
71820 arr[L++] = (tmp >> 16) & 0xFF
71821 arr[L++] = (tmp >> 8) & 0xFF
71822 arr[L++] = tmp & 0xFF
71823 }
71824
71825 if (placeHolders === 2) {
71826 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
71827 arr[L++] = tmp & 0xFF
71828 } else if (placeHolders === 1) {
71829 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
71830 arr[L++] = (tmp >> 8) & 0xFF
71831 arr[L++] = tmp & 0xFF
71832 }
71833
71834 return arr
71835 }
71836
71837 function tripletToBase64 (num) {
71838 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
71839 }
71840
71841 function encodeChunk (uint8, start, end) {
71842 var tmp
71843 var output = []
71844 for (var i = start; i < end; i += 3) {
71845 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
71846 output.push(tripletToBase64(tmp))
71847 }
71848 return output.join('')
71849 }
71850
71851 function fromByteArray (uint8) {
71852 var tmp
71853 var len = uint8.length
71854 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
71855 var output = ''
71856 var parts = []
71857 var maxChunkLength = 16383 // must be multiple of 3
71858
71859 // go through the array every three bytes, we'll deal with trailing stuff later
71860 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
71861 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
71862 }
71863
71864 // pad the end with zeros, but make sure to not forget the extra bytes
71865 if (extraBytes === 1) {
71866 tmp = uint8[len - 1]
71867 output += lookup[tmp >> 2]
71868 output += lookup[(tmp << 4) & 0x3F]
71869 output += '=='
71870 } else if (extraBytes === 2) {
71871 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
71872 output += lookup[tmp >> 10]
71873 output += lookup[(tmp >> 4) & 0x3F]
71874 output += lookup[(tmp << 2) & 0x3F]
71875 output += '='
71876 }
71877
71878 parts.push(output)
71879
71880 return parts.join('')
71881 }
71882
71883 },{}],3:[function(require,module,exports){
71884
71885 },{}],4:[function(require,module,exports){
71886 (function (global){
71887 'use strict';
71888
71889 var buffer = require('buffer');
71890 var Buffer = buffer.Buffer;
71891 var SlowBuffer = buffer.SlowBuffer;
71892 var MAX_LEN = buffer.kMaxLength || 2147483647;
71893 exports.alloc = function alloc(size, fill, encoding) {
71894 if (typeof Buffer.alloc === 'function') {
71895 return Buffer.alloc(size, fill, encoding);
71896 }
71897 if (typeof encoding === 'number') {
71898 throw new TypeError('encoding must not be number');
71899 }
71900 if (typeof size !== 'number') {
71901 throw new TypeError('size must be a number');
71902 }
71903 if (size > MAX_LEN) {
71904 throw new RangeError('size is too large');
71905 }
71906 var enc = encoding;
71907 var _fill = fill;
71908 if (_fill === undefined) {
71909 enc = undefined;
71910 _fill = 0;
71911 }
71912 var buf = new Buffer(size);
71913 if (typeof _fill === 'string') {
71914 var fillBuf = new Buffer(_fill, enc);
71915 var flen = fillBuf.length;
71916 var i = -1;
71917 while (++i < size) {
71918 buf[i] = fillBuf[i % flen];
71919 }
71920 } else {
71921 buf.fill(_fill);
71922 }
71923 return buf;
71924 }
71925 exports.allocUnsafe = function allocUnsafe(size) {
71926 if (typeof Buffer.allocUnsafe === 'function') {
71927 return Buffer.allocUnsafe(size);
71928 }
71929 if (typeof size !== 'number') {
71930 throw new TypeError('size must be a number');
71931 }
71932 if (size > MAX_LEN) {
71933 throw new RangeError('size is too large');
71934 }
71935 return new Buffer(size);
71936 }
71937 exports.from = function from(value, encodingOrOffset, length) {
71938 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
71939 return Buffer.from(value, encodingOrOffset, length);
71940 }
71941 if (typeof value === 'number') {
71942 throw new TypeError('"value" argument must not be a number');
71943 }
71944 if (typeof value === 'string') {
71945 return new Buffer(value, encodingOrOffset);
71946 }
71947 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
71948 var offset = encodingOrOffset;
71949 if (arguments.length === 1) {
71950 return new Buffer(value);
71951 }
71952 if (typeof offset === 'undefined') {
71953 offset = 0;
71954 }
71955 var len = length;
71956 if (typeof len === 'undefined') {
71957 len = value.byteLength - offset;
71958 }
71959 if (offset >= value.byteLength) {
71960 throw new RangeError('\'offset\' is out of bounds');
71961 }
71962 if (len > value.byteLength - offset) {
71963 throw new RangeError('\'length\' is out of bounds');
71964 }
71965 return new Buffer(value.slice(offset, offset + len));
71966 }
71967 if (Buffer.isBuffer(value)) {
71968 var out = new Buffer(value.length);
71969 value.copy(out, 0, 0, value.length);
71970 return out;
71971 }
71972 if (value) {
71973 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
71974 return new Buffer(value);
71975 }
71976 if (value.type === 'Buffer' && Array.isArray(value.data)) {
71977 return new Buffer(value.data);
71978 }
71979 }
71980
71981 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
71982 }
71983 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
71984 if (typeof Buffer.allocUnsafeSlow === 'function') {
71985 return Buffer.allocUnsafeSlow(size);
71986 }
71987 if (typeof size !== 'number') {
71988 throw new TypeError('size must be a number');
71989 }
71990 if (size >= MAX_LEN) {
71991 throw new RangeError('size is too large');
71992 }
71993 return new SlowBuffer(size);
71994 }
71995
71996 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
71997 },{"buffer":5}],5:[function(require,module,exports){
71998 /*!
71999 * The buffer module from node.js, for the browser.
72000 *
72001 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
72002 * @license MIT
72003 */
72004 /* eslint-disable no-proto */
72005
72006 'use strict'
72007
72008 var base64 = require('base64-js')
72009 var ieee754 = require('ieee754')
72010
72011 exports.Buffer = Buffer
72012 exports.SlowBuffer = SlowBuffer
72013 exports.INSPECT_MAX_BYTES = 50
72014
72015 var K_MAX_LENGTH = 0x7fffffff
72016 exports.kMaxLength = K_MAX_LENGTH
72017
72018 /**
72019 * If `Buffer.TYPED_ARRAY_SUPPORT`:
72020 * === true Use Uint8Array implementation (fastest)
72021 * === false Print warning and recommend using `buffer` v4.x which has an Object
72022 * implementation (most compatible, even IE6)
72023 *
72024 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
72025 * Opera 11.6+, iOS 4.2+.
72026 *
72027 * We report that the browser does not support typed arrays if the are not subclassable
72028 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
72029 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
72030 * for __proto__ and has a buggy typed array implementation.
72031 */
72032 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
72033
72034 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
72035 typeof console.error === 'function') {
72036 console.error(
72037 'This browser lacks typed array (Uint8Array) support which is required by ' +
72038 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
72039 )
72040 }
72041
72042 function typedArraySupport () {
72043 // Can typed array instances can be augmented?
72044 try {
72045 var arr = new Uint8Array(1)
72046 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
72047 return arr.foo() === 42
72048 } catch (e) {
72049 return false
72050 }
72051 }
72052
72053 function createBuffer (length) {
72054 if (length > K_MAX_LENGTH) {
72055 throw new RangeError('Invalid typed array length')
72056 }
72057 // Return an augmented `Uint8Array` instance
72058 var buf = new Uint8Array(length)
72059 buf.__proto__ = Buffer.prototype
72060 return buf
72061 }
72062
72063 /**
72064 * The Buffer constructor returns instances of `Uint8Array` that have their
72065 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
72066 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
72067 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
72068 * returns a single octet.
72069 *
72070 * The `Uint8Array` prototype remains unmodified.
72071 */
72072
72073 function Buffer (arg, encodingOrOffset, length) {
72074 // Common case.
72075 if (typeof arg === 'number') {
72076 if (typeof encodingOrOffset === 'string') {
72077 throw new Error(
72078 'If encoding is specified then the first argument must be a string'
72079 )
72080 }
72081 return allocUnsafe(arg)
72082 }
72083 return from(arg, encodingOrOffset, length)
72084 }
72085
72086 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
72087 if (typeof Symbol !== 'undefined' && Symbol.species &&
72088 Buffer[Symbol.species] === Buffer) {
72089 Object.defineProperty(Buffer, Symbol.species, {
72090 value: null,
72091 configurable: true,
72092 enumerable: false,
72093 writable: false
72094 })
72095 }
72096
72097 Buffer.poolSize = 8192 // not used by this implementation
72098
72099 function from (value, encodingOrOffset, length) {
72100 if (typeof value === 'number') {
72101 throw new TypeError('"value" argument must not be a number')
72102 }
72103
72104 if (value instanceof ArrayBuffer) {
72105 return fromArrayBuffer(value, encodingOrOffset, length)
72106 }
72107
72108 if (typeof value === 'string') {
72109 return fromString(value, encodingOrOffset)
72110 }
72111
72112 return fromObject(value)
72113 }
72114
72115 /**
72116 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
72117 * if value is a number.
72118 * Buffer.from(str[, encoding])
72119 * Buffer.from(array)
72120 * Buffer.from(buffer)
72121 * Buffer.from(arrayBuffer[, byteOffset[, length]])
72122 **/
72123 Buffer.from = function (value, encodingOrOffset, length) {
72124 return from(value, encodingOrOffset, length)
72125 }
72126
72127 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
72128 // https://github.com/feross/buffer/pull/148
72129 Buffer.prototype.__proto__ = Uint8Array.prototype
72130 Buffer.__proto__ = Uint8Array
72131
72132 function assertSize (size) {
72133 if (typeof size !== 'number') {
72134 throw new TypeError('"size" argument must be a number')
72135 } else if (size < 0) {
72136 throw new RangeError('"size" argument must not be negative')
72137 }
72138 }
72139
72140 function alloc (size, fill, encoding) {
72141 assertSize(size)
72142 if (size <= 0) {
72143 return createBuffer(size)
72144 }
72145 if (fill !== undefined) {
72146 // Only pay attention to encoding if it's a string. This
72147 // prevents accidentally sending in a number that would
72148 // be interpretted as a start offset.
72149 return typeof encoding === 'string'
72150 ? createBuffer(size).fill(fill, encoding)
72151 : createBuffer(size).fill(fill)
72152 }
72153 return createBuffer(size)
72154 }
72155
72156 /**
72157 * Creates a new filled Buffer instance.
72158 * alloc(size[, fill[, encoding]])
72159 **/
72160 Buffer.alloc = function (size, fill, encoding) {
72161 return alloc(size, fill, encoding)
72162 }
72163
72164 function allocUnsafe (size) {
72165 assertSize(size)
72166 return createBuffer(size < 0 ? 0 : checked(size) | 0)
72167 }
72168
72169 /**
72170 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
72171 * */
72172 Buffer.allocUnsafe = function (size) {
72173 return allocUnsafe(size)
72174 }
72175 /**
72176 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
72177 */
72178 Buffer.allocUnsafeSlow = function (size) {
72179 return allocUnsafe(size)
72180 }
72181
72182 function fromString (string, encoding) {
72183 if (typeof encoding !== 'string' || encoding === '') {
72184 encoding = 'utf8'
72185 }
72186
72187 if (!Buffer.isEncoding(encoding)) {
72188 throw new TypeError('"encoding" must be a valid string encoding')
72189 }
72190
72191 var length = byteLength(string, encoding) | 0
72192 var buf = createBuffer(length)
72193
72194 var actual = buf.write(string, encoding)
72195
72196 if (actual !== length) {
72197 // Writing a hex string, for example, that contains invalid characters will
72198 // cause everything after the first invalid character to be ignored. (e.g.
72199 // 'abxxcd' will be treated as 'ab')
72200 buf = buf.slice(0, actual)
72201 }
72202
72203 return buf
72204 }
72205
72206 function fromArrayLike (array) {
72207 var length = array.length < 0 ? 0 : checked(array.length) | 0
72208 var buf = createBuffer(length)
72209 for (var i = 0; i < length; i += 1) {
72210 buf[i] = array[i] & 255
72211 }
72212 return buf
72213 }
72214
72215 function fromArrayBuffer (array, byteOffset, length) {
72216 if (byteOffset < 0 || array.byteLength < byteOffset) {
72217 throw new RangeError('\'offset\' is out of bounds')
72218 }
72219
72220 if (array.byteLength < byteOffset + (length || 0)) {
72221 throw new RangeError('\'length\' is out of bounds')
72222 }
72223
72224 var buf
72225 if (byteOffset === undefined && length === undefined) {
72226 buf = new Uint8Array(array)
72227 } else if (length === undefined) {
72228 buf = new Uint8Array(array, byteOffset)
72229 } else {
72230 buf = new Uint8Array(array, byteOffset, length)
72231 }
72232
72233 // Return an augmented `Uint8Array` instance
72234 buf.__proto__ = Buffer.prototype
72235 return buf
72236 }
72237
72238 function fromObject (obj) {
72239 if (Buffer.isBuffer(obj)) {
72240 var len = checked(obj.length) | 0
72241 var buf = createBuffer(len)
72242
72243 if (buf.length === 0) {
72244 return buf
72245 }
72246
72247 obj.copy(buf, 0, 0, len)
72248 return buf
72249 }
72250
72251 if (obj) {
72252 if (ArrayBuffer.isView(obj) || 'length' in obj) {
72253 if (typeof obj.length !== 'number' || isnan(obj.length)) {
72254 return createBuffer(0)
72255 }
72256 return fromArrayLike(obj)
72257 }
72258
72259 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
72260 return fromArrayLike(obj.data)
72261 }
72262 }
72263
72264 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
72265 }
72266
72267 function checked (length) {
72268 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
72269 // length is NaN (which is otherwise coerced to zero.)
72270 if (length >= K_MAX_LENGTH) {
72271 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
72272 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
72273 }
72274 return length | 0
72275 }
72276
72277 function SlowBuffer (length) {
72278 if (+length != length) { // eslint-disable-line eqeqeq
72279 length = 0
72280 }
72281 return Buffer.alloc(+length)
72282 }
72283
72284 Buffer.isBuffer = function isBuffer (b) {
72285 return b != null && b._isBuffer === true
72286 }
72287
72288 Buffer.compare = function compare (a, b) {
72289 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
72290 throw new TypeError('Arguments must be Buffers')
72291 }
72292
72293 if (a === b) return 0
72294
72295 var x = a.length
72296 var y = b.length
72297
72298 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
72299 if (a[i] !== b[i]) {
72300 x = a[i]
72301 y = b[i]
72302 break
72303 }
72304 }
72305
72306 if (x < y) return -1
72307 if (y < x) return 1
72308 return 0
72309 }
72310
72311 Buffer.isEncoding = function isEncoding (encoding) {
72312 switch (String(encoding).toLowerCase()) {
72313 case 'hex':
72314 case 'utf8':
72315 case 'utf-8':
72316 case 'ascii':
72317 case 'latin1':
72318 case 'binary':
72319 case 'base64':
72320 case 'ucs2':
72321 case 'ucs-2':
72322 case 'utf16le':
72323 case 'utf-16le':
72324 return true
72325 default:
72326 return false
72327 }
72328 }
72329
72330 Buffer.concat = function concat (list, length) {
72331 if (!Array.isArray(list)) {
72332 throw new TypeError('"list" argument must be an Array of Buffers')
72333 }
72334
72335 if (list.length === 0) {
72336 return Buffer.alloc(0)
72337 }
72338
72339 var i
72340 if (length === undefined) {
72341 length = 0
72342 for (i = 0; i < list.length; ++i) {
72343 length += list[i].length
72344 }
72345 }
72346
72347 var buffer = Buffer.allocUnsafe(length)
72348 var pos = 0
72349 for (i = 0; i < list.length; ++i) {
72350 var buf = list[i]
72351 if (!Buffer.isBuffer(buf)) {
72352 throw new TypeError('"list" argument must be an Array of Buffers')
72353 }
72354 buf.copy(buffer, pos)
72355 pos += buf.length
72356 }
72357 return buffer
72358 }
72359
72360 function byteLength (string, encoding) {
72361 if (Buffer.isBuffer(string)) {
72362 return string.length
72363 }
72364 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
72365 return string.byteLength
72366 }
72367 if (typeof string !== 'string') {
72368 string = '' + string
72369 }
72370
72371 var len = string.length
72372 if (len === 0) return 0
72373
72374 // Use a for loop to avoid recursion
72375 var loweredCase = false
72376 for (;;) {
72377 switch (encoding) {
72378 case 'ascii':
72379 case 'latin1':
72380 case 'binary':
72381 return len
72382 case 'utf8':
72383 case 'utf-8':
72384 case undefined:
72385 return utf8ToBytes(string).length
72386 case 'ucs2':
72387 case 'ucs-2':
72388 case 'utf16le':
72389 case 'utf-16le':
72390 return len * 2
72391 case 'hex':
72392 return len >>> 1
72393 case 'base64':
72394 return base64ToBytes(string).length
72395 default:
72396 if (loweredCase) return utf8ToBytes(string).length // assume utf8
72397 encoding = ('' + encoding).toLowerCase()
72398 loweredCase = true
72399 }
72400 }
72401 }
72402 Buffer.byteLength = byteLength
72403
72404 function slowToString (encoding, start, end) {
72405 var loweredCase = false
72406
72407 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
72408 // property of a typed array.
72409
72410 // This behaves neither like String nor Uint8Array in that we set start/end
72411 // to their upper/lower bounds if the value passed is out of range.
72412 // undefined is handled specially as per ECMA-262 6th Edition,
72413 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
72414 if (start === undefined || start < 0) {
72415 start = 0
72416 }
72417 // Return early if start > this.length. Done here to prevent potential uint32
72418 // coercion fail below.
72419 if (start > this.length) {
72420 return ''
72421 }
72422
72423 if (end === undefined || end > this.length) {
72424 end = this.length
72425 }
72426
72427 if (end <= 0) {
72428 return ''
72429 }
72430
72431 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
72432 end >>>= 0
72433 start >>>= 0
72434
72435 if (end <= start) {
72436 return ''
72437 }
72438
72439 if (!encoding) encoding = 'utf8'
72440
72441 while (true) {
72442 switch (encoding) {
72443 case 'hex':
72444 return hexSlice(this, start, end)
72445
72446 case 'utf8':
72447 case 'utf-8':
72448 return utf8Slice(this, start, end)
72449
72450 case 'ascii':
72451 return asciiSlice(this, start, end)
72452
72453 case 'latin1':
72454 case 'binary':
72455 return latin1Slice(this, start, end)
72456
72457 case 'base64':
72458 return base64Slice(this, start, end)
72459
72460 case 'ucs2':
72461 case 'ucs-2':
72462 case 'utf16le':
72463 case 'utf-16le':
72464 return utf16leSlice(this, start, end)
72465
72466 default:
72467 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72468 encoding = (encoding + '').toLowerCase()
72469 loweredCase = true
72470 }
72471 }
72472 }
72473
72474 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
72475 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
72476 // reliably in a browserify context because there could be multiple different
72477 // copies of the 'buffer' package in use. This method works even for Buffer
72478 // instances that were created from another copy of the `buffer` package.
72479 // See: https://github.com/feross/buffer/issues/154
72480 Buffer.prototype._isBuffer = true
72481
72482 function swap (b, n, m) {
72483 var i = b[n]
72484 b[n] = b[m]
72485 b[m] = i
72486 }
72487
72488 Buffer.prototype.swap16 = function swap16 () {
72489 var len = this.length
72490 if (len % 2 !== 0) {
72491 throw new RangeError('Buffer size must be a multiple of 16-bits')
72492 }
72493 for (var i = 0; i < len; i += 2) {
72494 swap(this, i, i + 1)
72495 }
72496 return this
72497 }
72498
72499 Buffer.prototype.swap32 = function swap32 () {
72500 var len = this.length
72501 if (len % 4 !== 0) {
72502 throw new RangeError('Buffer size must be a multiple of 32-bits')
72503 }
72504 for (var i = 0; i < len; i += 4) {
72505 swap(this, i, i + 3)
72506 swap(this, i + 1, i + 2)
72507 }
72508 return this
72509 }
72510
72511 Buffer.prototype.swap64 = function swap64 () {
72512 var len = this.length
72513 if (len % 8 !== 0) {
72514 throw new RangeError('Buffer size must be a multiple of 64-bits')
72515 }
72516 for (var i = 0; i < len; i += 8) {
72517 swap(this, i, i + 7)
72518 swap(this, i + 1, i + 6)
72519 swap(this, i + 2, i + 5)
72520 swap(this, i + 3, i + 4)
72521 }
72522 return this
72523 }
72524
72525 Buffer.prototype.toString = function toString () {
72526 var length = this.length
72527 if (length === 0) return ''
72528 if (arguments.length === 0) return utf8Slice(this, 0, length)
72529 return slowToString.apply(this, arguments)
72530 }
72531
72532 Buffer.prototype.equals = function equals (b) {
72533 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
72534 if (this === b) return true
72535 return Buffer.compare(this, b) === 0
72536 }
72537
72538 Buffer.prototype.inspect = function inspect () {
72539 var str = ''
72540 var max = exports.INSPECT_MAX_BYTES
72541 if (this.length > 0) {
72542 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
72543 if (this.length > max) str += ' ... '
72544 }
72545 return '<Buffer ' + str + '>'
72546 }
72547
72548 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
72549 if (!Buffer.isBuffer(target)) {
72550 throw new TypeError('Argument must be a Buffer')
72551 }
72552
72553 if (start === undefined) {
72554 start = 0
72555 }
72556 if (end === undefined) {
72557 end = target ? target.length : 0
72558 }
72559 if (thisStart === undefined) {
72560 thisStart = 0
72561 }
72562 if (thisEnd === undefined) {
72563 thisEnd = this.length
72564 }
72565
72566 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
72567 throw new RangeError('out of range index')
72568 }
72569
72570 if (thisStart >= thisEnd && start >= end) {
72571 return 0
72572 }
72573 if (thisStart >= thisEnd) {
72574 return -1
72575 }
72576 if (start >= end) {
72577 return 1
72578 }
72579
72580 start >>>= 0
72581 end >>>= 0
72582 thisStart >>>= 0
72583 thisEnd >>>= 0
72584
72585 if (this === target) return 0
72586
72587 var x = thisEnd - thisStart
72588 var y = end - start
72589 var len = Math.min(x, y)
72590
72591 var thisCopy = this.slice(thisStart, thisEnd)
72592 var targetCopy = target.slice(start, end)
72593
72594 for (var i = 0; i < len; ++i) {
72595 if (thisCopy[i] !== targetCopy[i]) {
72596 x = thisCopy[i]
72597 y = targetCopy[i]
72598 break
72599 }
72600 }
72601
72602 if (x < y) return -1
72603 if (y < x) return 1
72604 return 0
72605 }
72606
72607 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
72608 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
72609 //
72610 // Arguments:
72611 // - buffer - a Buffer to search
72612 // - val - a string, Buffer, or number
72613 // - byteOffset - an index into `buffer`; will be clamped to an int32
72614 // - encoding - an optional encoding, relevant is val is a string
72615 // - dir - true for indexOf, false for lastIndexOf
72616 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
72617 // Empty buffer means no match
72618 if (buffer.length === 0) return -1
72619
72620 // Normalize byteOffset
72621 if (typeof byteOffset === 'string') {
72622 encoding = byteOffset
72623 byteOffset = 0
72624 } else if (byteOffset > 0x7fffffff) {
72625 byteOffset = 0x7fffffff
72626 } else if (byteOffset < -0x80000000) {
72627 byteOffset = -0x80000000
72628 }
72629 byteOffset = +byteOffset // Coerce to Number.
72630 if (isNaN(byteOffset)) {
72631 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
72632 byteOffset = dir ? 0 : (buffer.length - 1)
72633 }
72634
72635 // Normalize byteOffset: negative offsets start from the end of the buffer
72636 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
72637 if (byteOffset >= buffer.length) {
72638 if (dir) return -1
72639 else byteOffset = buffer.length - 1
72640 } else if (byteOffset < 0) {
72641 if (dir) byteOffset = 0
72642 else return -1
72643 }
72644
72645 // Normalize val
72646 if (typeof val === 'string') {
72647 val = Buffer.from(val, encoding)
72648 }
72649
72650 // Finally, search either indexOf (if dir is true) or lastIndexOf
72651 if (Buffer.isBuffer(val)) {
72652 // Special case: looking for empty string/buffer always fails
72653 if (val.length === 0) {
72654 return -1
72655 }
72656 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
72657 } else if (typeof val === 'number') {
72658 val = val & 0xFF // Search for a byte value [0-255]
72659 if (typeof Uint8Array.prototype.indexOf === 'function') {
72660 if (dir) {
72661 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
72662 } else {
72663 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
72664 }
72665 }
72666 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
72667 }
72668
72669 throw new TypeError('val must be string, number or Buffer')
72670 }
72671
72672 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
72673 var indexSize = 1
72674 var arrLength = arr.length
72675 var valLength = val.length
72676
72677 if (encoding !== undefined) {
72678 encoding = String(encoding).toLowerCase()
72679 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
72680 encoding === 'utf16le' || encoding === 'utf-16le') {
72681 if (arr.length < 2 || val.length < 2) {
72682 return -1
72683 }
72684 indexSize = 2
72685 arrLength /= 2
72686 valLength /= 2
72687 byteOffset /= 2
72688 }
72689 }
72690
72691 function read (buf, i) {
72692 if (indexSize === 1) {
72693 return buf[i]
72694 } else {
72695 return buf.readUInt16BE(i * indexSize)
72696 }
72697 }
72698
72699 var i
72700 if (dir) {
72701 var foundIndex = -1
72702 for (i = byteOffset; i < arrLength; i++) {
72703 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
72704 if (foundIndex === -1) foundIndex = i
72705 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
72706 } else {
72707 if (foundIndex !== -1) i -= i - foundIndex
72708 foundIndex = -1
72709 }
72710 }
72711 } else {
72712 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
72713 for (i = byteOffset; i >= 0; i--) {
72714 var found = true
72715 for (var j = 0; j < valLength; j++) {
72716 if (read(arr, i + j) !== read(val, j)) {
72717 found = false
72718 break
72719 }
72720 }
72721 if (found) return i
72722 }
72723 }
72724
72725 return -1
72726 }
72727
72728 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
72729 return this.indexOf(val, byteOffset, encoding) !== -1
72730 }
72731
72732 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
72733 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
72734 }
72735
72736 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
72737 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
72738 }
72739
72740 function hexWrite (buf, string, offset, length) {
72741 offset = Number(offset) || 0
72742 var remaining = buf.length - offset
72743 if (!length) {
72744 length = remaining
72745 } else {
72746 length = Number(length)
72747 if (length > remaining) {
72748 length = remaining
72749 }
72750 }
72751
72752 // must be an even number of digits
72753 var strLen = string.length
72754 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
72755
72756 if (length > strLen / 2) {
72757 length = strLen / 2
72758 }
72759 for (var i = 0; i < length; ++i) {
72760 var parsed = parseInt(string.substr(i * 2, 2), 16)
72761 if (isNaN(parsed)) return i
72762 buf[offset + i] = parsed
72763 }
72764 return i
72765 }
72766
72767 function utf8Write (buf, string, offset, length) {
72768 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
72769 }
72770
72771 function asciiWrite (buf, string, offset, length) {
72772 return blitBuffer(asciiToBytes(string), buf, offset, length)
72773 }
72774
72775 function latin1Write (buf, string, offset, length) {
72776 return asciiWrite(buf, string, offset, length)
72777 }
72778
72779 function base64Write (buf, string, offset, length) {
72780 return blitBuffer(base64ToBytes(string), buf, offset, length)
72781 }
72782
72783 function ucs2Write (buf, string, offset, length) {
72784 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
72785 }
72786
72787 Buffer.prototype.write = function write (string, offset, length, encoding) {
72788 // Buffer#write(string)
72789 if (offset === undefined) {
72790 encoding = 'utf8'
72791 length = this.length
72792 offset = 0
72793 // Buffer#write(string, encoding)
72794 } else if (length === undefined && typeof offset === 'string') {
72795 encoding = offset
72796 length = this.length
72797 offset = 0
72798 // Buffer#write(string, offset[, length][, encoding])
72799 } else if (isFinite(offset)) {
72800 offset = offset >>> 0
72801 if (isFinite(length)) {
72802 length = length >>> 0
72803 if (encoding === undefined) encoding = 'utf8'
72804 } else {
72805 encoding = length
72806 length = undefined
72807 }
72808 } else {
72809 throw new Error(
72810 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
72811 )
72812 }
72813
72814 var remaining = this.length - offset
72815 if (length === undefined || length > remaining) length = remaining
72816
72817 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
72818 throw new RangeError('Attempt to write outside buffer bounds')
72819 }
72820
72821 if (!encoding) encoding = 'utf8'
72822
72823 var loweredCase = false
72824 for (;;) {
72825 switch (encoding) {
72826 case 'hex':
72827 return hexWrite(this, string, offset, length)
72828
72829 case 'utf8':
72830 case 'utf-8':
72831 return utf8Write(this, string, offset, length)
72832
72833 case 'ascii':
72834 return asciiWrite(this, string, offset, length)
72835
72836 case 'latin1':
72837 case 'binary':
72838 return latin1Write(this, string, offset, length)
72839
72840 case 'base64':
72841 // Warning: maxLength not taken into account in base64Write
72842 return base64Write(this, string, offset, length)
72843
72844 case 'ucs2':
72845 case 'ucs-2':
72846 case 'utf16le':
72847 case 'utf-16le':
72848 return ucs2Write(this, string, offset, length)
72849
72850 default:
72851 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72852 encoding = ('' + encoding).toLowerCase()
72853 loweredCase = true
72854 }
72855 }
72856 }
72857
72858 Buffer.prototype.toJSON = function toJSON () {
72859 return {
72860 type: 'Buffer',
72861 data: Array.prototype.slice.call(this._arr || this, 0)
72862 }
72863 }
72864
72865 function base64Slice (buf, start, end) {
72866 if (start === 0 && end === buf.length) {
72867 return base64.fromByteArray(buf)
72868 } else {
72869 return base64.fromByteArray(buf.slice(start, end))
72870 }
72871 }
72872
72873 function utf8Slice (buf, start, end) {
72874 end = Math.min(buf.length, end)
72875 var res = []
72876
72877 var i = start
72878 while (i < end) {
72879 var firstByte = buf[i]
72880 var codePoint = null
72881 var bytesPerSequence = (firstByte > 0xEF) ? 4
72882 : (firstByte > 0xDF) ? 3
72883 : (firstByte > 0xBF) ? 2
72884 : 1
72885
72886 if (i + bytesPerSequence <= end) {
72887 var secondByte, thirdByte, fourthByte, tempCodePoint
72888
72889 switch (bytesPerSequence) {
72890 case 1:
72891 if (firstByte < 0x80) {
72892 codePoint = firstByte
72893 }
72894 break
72895 case 2:
72896 secondByte = buf[i + 1]
72897 if ((secondByte & 0xC0) === 0x80) {
72898 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
72899 if (tempCodePoint > 0x7F) {
72900 codePoint = tempCodePoint
72901 }
72902 }
72903 break
72904 case 3:
72905 secondByte = buf[i + 1]
72906 thirdByte = buf[i + 2]
72907 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
72908 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
72909 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
72910 codePoint = tempCodePoint
72911 }
72912 }
72913 break
72914 case 4:
72915 secondByte = buf[i + 1]
72916 thirdByte = buf[i + 2]
72917 fourthByte = buf[i + 3]
72918 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
72919 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
72920 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
72921 codePoint = tempCodePoint
72922 }
72923 }
72924 }
72925 }
72926
72927 if (codePoint === null) {
72928 // we did not generate a valid codePoint so insert a
72929 // replacement char (U+FFFD) and advance only 1 byte
72930 codePoint = 0xFFFD
72931 bytesPerSequence = 1
72932 } else if (codePoint > 0xFFFF) {
72933 // encode to utf16 (surrogate pair dance)
72934 codePoint -= 0x10000
72935 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
72936 codePoint = 0xDC00 | codePoint & 0x3FF
72937 }
72938
72939 res.push(codePoint)
72940 i += bytesPerSequence
72941 }
72942
72943 return decodeCodePointsArray(res)
72944 }
72945
72946 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
72947 // the lowest limit is Chrome, with 0x10000 args.
72948 // We go 1 magnitude less, for safety
72949 var MAX_ARGUMENTS_LENGTH = 0x1000
72950
72951 function decodeCodePointsArray (codePoints) {
72952 var len = codePoints.length
72953 if (len <= MAX_ARGUMENTS_LENGTH) {
72954 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
72955 }
72956
72957 // Decode in chunks to avoid "call stack size exceeded".
72958 var res = ''
72959 var i = 0
72960 while (i < len) {
72961 res += String.fromCharCode.apply(
72962 String,
72963 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
72964 )
72965 }
72966 return res
72967 }
72968
72969 function asciiSlice (buf, start, end) {
72970 var ret = ''
72971 end = Math.min(buf.length, end)
72972
72973 for (var i = start; i < end; ++i) {
72974 ret += String.fromCharCode(buf[i] & 0x7F)
72975 }
72976 return ret
72977 }
72978
72979 function latin1Slice (buf, start, end) {
72980 var ret = ''
72981 end = Math.min(buf.length, end)
72982
72983 for (var i = start; i < end; ++i) {
72984 ret += String.fromCharCode(buf[i])
72985 }
72986 return ret
72987 }
72988
72989 function hexSlice (buf, start, end) {
72990 var len = buf.length
72991
72992 if (!start || start < 0) start = 0
72993 if (!end || end < 0 || end > len) end = len
72994
72995 var out = ''
72996 for (var i = start; i < end; ++i) {
72997 out += toHex(buf[i])
72998 }
72999 return out
73000 }
73001
73002 function utf16leSlice (buf, start, end) {
73003 var bytes = buf.slice(start, end)
73004 var res = ''
73005 for (var i = 0; i < bytes.length; i += 2) {
73006 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
73007 }
73008 return res
73009 }
73010
73011 Buffer.prototype.slice = function slice (start, end) {
73012 var len = this.length
73013 start = ~~start
73014 end = end === undefined ? len : ~~end
73015
73016 if (start < 0) {
73017 start += len
73018 if (start < 0) start = 0
73019 } else if (start > len) {
73020 start = len
73021 }
73022
73023 if (end < 0) {
73024 end += len
73025 if (end < 0) end = 0
73026 } else if (end > len) {
73027 end = len
73028 }
73029
73030 if (end < start) end = start
73031
73032 var newBuf = this.subarray(start, end)
73033 // Return an augmented `Uint8Array` instance
73034 newBuf.__proto__ = Buffer.prototype
73035 return newBuf
73036 }
73037
73038 /*
73039 * Need to make sure that buffer isn't trying to write out of bounds.
73040 */
73041 function checkOffset (offset, ext, length) {
73042 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
73043 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
73044 }
73045
73046 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
73047 offset = offset >>> 0
73048 byteLength = byteLength >>> 0
73049 if (!noAssert) checkOffset(offset, byteLength, this.length)
73050
73051 var val = this[offset]
73052 var mul = 1
73053 var i = 0
73054 while (++i < byteLength && (mul *= 0x100)) {
73055 val += this[offset + i] * mul
73056 }
73057
73058 return val
73059 }
73060
73061 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
73062 offset = offset >>> 0
73063 byteLength = byteLength >>> 0
73064 if (!noAssert) {
73065 checkOffset(offset, byteLength, this.length)
73066 }
73067
73068 var val = this[offset + --byteLength]
73069 var mul = 1
73070 while (byteLength > 0 && (mul *= 0x100)) {
73071 val += this[offset + --byteLength] * mul
73072 }
73073
73074 return val
73075 }
73076
73077 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
73078 offset = offset >>> 0
73079 if (!noAssert) checkOffset(offset, 1, this.length)
73080 return this[offset]
73081 }
73082
73083 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
73084 offset = offset >>> 0
73085 if (!noAssert) checkOffset(offset, 2, this.length)
73086 return this[offset] | (this[offset + 1] << 8)
73087 }
73088
73089 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
73090 offset = offset >>> 0
73091 if (!noAssert) checkOffset(offset, 2, this.length)
73092 return (this[offset] << 8) | this[offset + 1]
73093 }
73094
73095 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
73096 offset = offset >>> 0
73097 if (!noAssert) checkOffset(offset, 4, this.length)
73098
73099 return ((this[offset]) |
73100 (this[offset + 1] << 8) |
73101 (this[offset + 2] << 16)) +
73102 (this[offset + 3] * 0x1000000)
73103 }
73104
73105 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
73106 offset = offset >>> 0
73107 if (!noAssert) checkOffset(offset, 4, this.length)
73108
73109 return (this[offset] * 0x1000000) +
73110 ((this[offset + 1] << 16) |
73111 (this[offset + 2] << 8) |
73112 this[offset + 3])
73113 }
73114
73115 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
73116 offset = offset >>> 0
73117 byteLength = byteLength >>> 0
73118 if (!noAssert) checkOffset(offset, byteLength, this.length)
73119
73120 var val = this[offset]
73121 var mul = 1
73122 var i = 0
73123 while (++i < byteLength && (mul *= 0x100)) {
73124 val += this[offset + i] * mul
73125 }
73126 mul *= 0x80
73127
73128 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73129
73130 return val
73131 }
73132
73133 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
73134 offset = offset >>> 0
73135 byteLength = byteLength >>> 0
73136 if (!noAssert) checkOffset(offset, byteLength, this.length)
73137
73138 var i = byteLength
73139 var mul = 1
73140 var val = this[offset + --i]
73141 while (i > 0 && (mul *= 0x100)) {
73142 val += this[offset + --i] * mul
73143 }
73144 mul *= 0x80
73145
73146 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73147
73148 return val
73149 }
73150
73151 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
73152 offset = offset >>> 0
73153 if (!noAssert) checkOffset(offset, 1, this.length)
73154 if (!(this[offset] & 0x80)) return (this[offset])
73155 return ((0xff - this[offset] + 1) * -1)
73156 }
73157
73158 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
73159 offset = offset >>> 0
73160 if (!noAssert) checkOffset(offset, 2, this.length)
73161 var val = this[offset] | (this[offset + 1] << 8)
73162 return (val & 0x8000) ? val | 0xFFFF0000 : val
73163 }
73164
73165 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
73166 offset = offset >>> 0
73167 if (!noAssert) checkOffset(offset, 2, this.length)
73168 var val = this[offset + 1] | (this[offset] << 8)
73169 return (val & 0x8000) ? val | 0xFFFF0000 : val
73170 }
73171
73172 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
73173 offset = offset >>> 0
73174 if (!noAssert) checkOffset(offset, 4, this.length)
73175
73176 return (this[offset]) |
73177 (this[offset + 1] << 8) |
73178 (this[offset + 2] << 16) |
73179 (this[offset + 3] << 24)
73180 }
73181
73182 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
73183 offset = offset >>> 0
73184 if (!noAssert) checkOffset(offset, 4, this.length)
73185
73186 return (this[offset] << 24) |
73187 (this[offset + 1] << 16) |
73188 (this[offset + 2] << 8) |
73189 (this[offset + 3])
73190 }
73191
73192 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
73193 offset = offset >>> 0
73194 if (!noAssert) checkOffset(offset, 4, this.length)
73195 return ieee754.read(this, offset, true, 23, 4)
73196 }
73197
73198 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
73199 offset = offset >>> 0
73200 if (!noAssert) checkOffset(offset, 4, this.length)
73201 return ieee754.read(this, offset, false, 23, 4)
73202 }
73203
73204 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
73205 offset = offset >>> 0
73206 if (!noAssert) checkOffset(offset, 8, this.length)
73207 return ieee754.read(this, offset, true, 52, 8)
73208 }
73209
73210 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
73211 offset = offset >>> 0
73212 if (!noAssert) checkOffset(offset, 8, this.length)
73213 return ieee754.read(this, offset, false, 52, 8)
73214 }
73215
73216 function checkInt (buf, value, offset, ext, max, min) {
73217 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
73218 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
73219 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73220 }
73221
73222 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
73223 value = +value
73224 offset = offset >>> 0
73225 byteLength = byteLength >>> 0
73226 if (!noAssert) {
73227 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73228 checkInt(this, value, offset, byteLength, maxBytes, 0)
73229 }
73230
73231 var mul = 1
73232 var i = 0
73233 this[offset] = value & 0xFF
73234 while (++i < byteLength && (mul *= 0x100)) {
73235 this[offset + i] = (value / mul) & 0xFF
73236 }
73237
73238 return offset + byteLength
73239 }
73240
73241 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
73242 value = +value
73243 offset = offset >>> 0
73244 byteLength = byteLength >>> 0
73245 if (!noAssert) {
73246 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73247 checkInt(this, value, offset, byteLength, maxBytes, 0)
73248 }
73249
73250 var i = byteLength - 1
73251 var mul = 1
73252 this[offset + i] = value & 0xFF
73253 while (--i >= 0 && (mul *= 0x100)) {
73254 this[offset + i] = (value / mul) & 0xFF
73255 }
73256
73257 return offset + byteLength
73258 }
73259
73260 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
73261 value = +value
73262 offset = offset >>> 0
73263 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
73264 this[offset] = (value & 0xff)
73265 return offset + 1
73266 }
73267
73268 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
73269 value = +value
73270 offset = offset >>> 0
73271 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73272 this[offset] = (value & 0xff)
73273 this[offset + 1] = (value >>> 8)
73274 return offset + 2
73275 }
73276
73277 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
73278 value = +value
73279 offset = offset >>> 0
73280 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73281 this[offset] = (value >>> 8)
73282 this[offset + 1] = (value & 0xff)
73283 return offset + 2
73284 }
73285
73286 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
73287 value = +value
73288 offset = offset >>> 0
73289 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73290 this[offset + 3] = (value >>> 24)
73291 this[offset + 2] = (value >>> 16)
73292 this[offset + 1] = (value >>> 8)
73293 this[offset] = (value & 0xff)
73294 return offset + 4
73295 }
73296
73297 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
73298 value = +value
73299 offset = offset >>> 0
73300 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73301 this[offset] = (value >>> 24)
73302 this[offset + 1] = (value >>> 16)
73303 this[offset + 2] = (value >>> 8)
73304 this[offset + 3] = (value & 0xff)
73305 return offset + 4
73306 }
73307
73308 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
73309 value = +value
73310 offset = offset >>> 0
73311 if (!noAssert) {
73312 var limit = Math.pow(2, (8 * byteLength) - 1)
73313
73314 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73315 }
73316
73317 var i = 0
73318 var mul = 1
73319 var sub = 0
73320 this[offset] = value & 0xFF
73321 while (++i < byteLength && (mul *= 0x100)) {
73322 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
73323 sub = 1
73324 }
73325 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73326 }
73327
73328 return offset + byteLength
73329 }
73330
73331 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
73332 value = +value
73333 offset = offset >>> 0
73334 if (!noAssert) {
73335 var limit = Math.pow(2, (8 * byteLength) - 1)
73336
73337 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73338 }
73339
73340 var i = byteLength - 1
73341 var mul = 1
73342 var sub = 0
73343 this[offset + i] = value & 0xFF
73344 while (--i >= 0 && (mul *= 0x100)) {
73345 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
73346 sub = 1
73347 }
73348 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73349 }
73350
73351 return offset + byteLength
73352 }
73353
73354 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
73355 value = +value
73356 offset = offset >>> 0
73357 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
73358 if (value < 0) value = 0xff + value + 1
73359 this[offset] = (value & 0xff)
73360 return offset + 1
73361 }
73362
73363 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
73364 value = +value
73365 offset = offset >>> 0
73366 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73367 this[offset] = (value & 0xff)
73368 this[offset + 1] = (value >>> 8)
73369 return offset + 2
73370 }
73371
73372 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
73373 value = +value
73374 offset = offset >>> 0
73375 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73376 this[offset] = (value >>> 8)
73377 this[offset + 1] = (value & 0xff)
73378 return offset + 2
73379 }
73380
73381 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
73382 value = +value
73383 offset = offset >>> 0
73384 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73385 this[offset] = (value & 0xff)
73386 this[offset + 1] = (value >>> 8)
73387 this[offset + 2] = (value >>> 16)
73388 this[offset + 3] = (value >>> 24)
73389 return offset + 4
73390 }
73391
73392 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
73393 value = +value
73394 offset = offset >>> 0
73395 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73396 if (value < 0) value = 0xffffffff + value + 1
73397 this[offset] = (value >>> 24)
73398 this[offset + 1] = (value >>> 16)
73399 this[offset + 2] = (value >>> 8)
73400 this[offset + 3] = (value & 0xff)
73401 return offset + 4
73402 }
73403
73404 function checkIEEE754 (buf, value, offset, ext, max, min) {
73405 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73406 if (offset < 0) throw new RangeError('Index out of range')
73407 }
73408
73409 function writeFloat (buf, value, offset, littleEndian, noAssert) {
73410 value = +value
73411 offset = offset >>> 0
73412 if (!noAssert) {
73413 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
73414 }
73415 ieee754.write(buf, value, offset, littleEndian, 23, 4)
73416 return offset + 4
73417 }
73418
73419 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
73420 return writeFloat(this, value, offset, true, noAssert)
73421 }
73422
73423 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
73424 return writeFloat(this, value, offset, false, noAssert)
73425 }
73426
73427 function writeDouble (buf, value, offset, littleEndian, noAssert) {
73428 value = +value
73429 offset = offset >>> 0
73430 if (!noAssert) {
73431 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
73432 }
73433 ieee754.write(buf, value, offset, littleEndian, 52, 8)
73434 return offset + 8
73435 }
73436
73437 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
73438 return writeDouble(this, value, offset, true, noAssert)
73439 }
73440
73441 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
73442 return writeDouble(this, value, offset, false, noAssert)
73443 }
73444
73445 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
73446 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
73447 if (!start) start = 0
73448 if (!end && end !== 0) end = this.length
73449 if (targetStart >= target.length) targetStart = target.length
73450 if (!targetStart) targetStart = 0
73451 if (end > 0 && end < start) end = start
73452
73453 // Copy 0 bytes; we're done
73454 if (end === start) return 0
73455 if (target.length === 0 || this.length === 0) return 0
73456
73457 // Fatal error conditions
73458 if (targetStart < 0) {
73459 throw new RangeError('targetStart out of bounds')
73460 }
73461 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
73462 if (end < 0) throw new RangeError('sourceEnd out of bounds')
73463
73464 // Are we oob?
73465 if (end > this.length) end = this.length
73466 if (target.length - targetStart < end - start) {
73467 end = target.length - targetStart + start
73468 }
73469
73470 var len = end - start
73471 var i
73472
73473 if (this === target && start < targetStart && targetStart < end) {
73474 // descending copy from end
73475 for (i = len - 1; i >= 0; --i) {
73476 target[i + targetStart] = this[i + start]
73477 }
73478 } else if (len < 1000) {
73479 // ascending copy from start
73480 for (i = 0; i < len; ++i) {
73481 target[i + targetStart] = this[i + start]
73482 }
73483 } else {
73484 Uint8Array.prototype.set.call(
73485 target,
73486 this.subarray(start, start + len),
73487 targetStart
73488 )
73489 }
73490
73491 return len
73492 }
73493
73494 // Usage:
73495 // buffer.fill(number[, offset[, end]])
73496 // buffer.fill(buffer[, offset[, end]])
73497 // buffer.fill(string[, offset[, end]][, encoding])
73498 Buffer.prototype.fill = function fill (val, start, end, encoding) {
73499 // Handle string cases:
73500 if (typeof val === 'string') {
73501 if (typeof start === 'string') {
73502 encoding = start
73503 start = 0
73504 end = this.length
73505 } else if (typeof end === 'string') {
73506 encoding = end
73507 end = this.length
73508 }
73509 if (val.length === 1) {
73510 var code = val.charCodeAt(0)
73511 if (code < 256) {
73512 val = code
73513 }
73514 }
73515 if (encoding !== undefined && typeof encoding !== 'string') {
73516 throw new TypeError('encoding must be a string')
73517 }
73518 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
73519 throw new TypeError('Unknown encoding: ' + encoding)
73520 }
73521 } else if (typeof val === 'number') {
73522 val = val & 255
73523 }
73524
73525 // Invalid ranges are not set to a default, so can range check early.
73526 if (start < 0 || this.length < start || this.length < end) {
73527 throw new RangeError('Out of range index')
73528 }
73529
73530 if (end <= start) {
73531 return this
73532 }
73533
73534 start = start >>> 0
73535 end = end === undefined ? this.length : end >>> 0
73536
73537 if (!val) val = 0
73538
73539 var i
73540 if (typeof val === 'number') {
73541 for (i = start; i < end; ++i) {
73542 this[i] = val
73543 }
73544 } else {
73545 var bytes = Buffer.isBuffer(val)
73546 ? val
73547 : new Buffer(val, encoding)
73548 var len = bytes.length
73549 for (i = 0; i < end - start; ++i) {
73550 this[i + start] = bytes[i % len]
73551 }
73552 }
73553
73554 return this
73555 }
73556
73557 // HELPER FUNCTIONS
73558 // ================
73559
73560 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
73561
73562 function base64clean (str) {
73563 // Node strips out invalid characters like \n and \t from the string, base64-js does not
73564 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
73565 // Node converts strings with length < 2 to ''
73566 if (str.length < 2) return ''
73567 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
73568 while (str.length % 4 !== 0) {
73569 str = str + '='
73570 }
73571 return str
73572 }
73573
73574 function stringtrim (str) {
73575 if (str.trim) return str.trim()
73576 return str.replace(/^\s+|\s+$/g, '')
73577 }
73578
73579 function toHex (n) {
73580 if (n < 16) return '0' + n.toString(16)
73581 return n.toString(16)
73582 }
73583
73584 function utf8ToBytes (string, units) {
73585 units = units || Infinity
73586 var codePoint
73587 var length = string.length
73588 var leadSurrogate = null
73589 var bytes = []
73590
73591 for (var i = 0; i < length; ++i) {
73592 codePoint = string.charCodeAt(i)
73593
73594 // is surrogate component
73595 if (codePoint > 0xD7FF && codePoint < 0xE000) {
73596 // last char was a lead
73597 if (!leadSurrogate) {
73598 // no lead yet
73599 if (codePoint > 0xDBFF) {
73600 // unexpected trail
73601 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73602 continue
73603 } else if (i + 1 === length) {
73604 // unpaired lead
73605 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73606 continue
73607 }
73608
73609 // valid lead
73610 leadSurrogate = codePoint
73611
73612 continue
73613 }
73614
73615 // 2 leads in a row
73616 if (codePoint < 0xDC00) {
73617 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73618 leadSurrogate = codePoint
73619 continue
73620 }
73621
73622 // valid surrogate pair
73623 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
73624 } else if (leadSurrogate) {
73625 // valid bmp char, but last char was a lead
73626 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73627 }
73628
73629 leadSurrogate = null
73630
73631 // encode utf8
73632 if (codePoint < 0x80) {
73633 if ((units -= 1) < 0) break
73634 bytes.push(codePoint)
73635 } else if (codePoint < 0x800) {
73636 if ((units -= 2) < 0) break
73637 bytes.push(
73638 codePoint >> 0x6 | 0xC0,
73639 codePoint & 0x3F | 0x80
73640 )
73641 } else if (codePoint < 0x10000) {
73642 if ((units -= 3) < 0) break
73643 bytes.push(
73644 codePoint >> 0xC | 0xE0,
73645 codePoint >> 0x6 & 0x3F | 0x80,
73646 codePoint & 0x3F | 0x80
73647 )
73648 } else if (codePoint < 0x110000) {
73649 if ((units -= 4) < 0) break
73650 bytes.push(
73651 codePoint >> 0x12 | 0xF0,
73652 codePoint >> 0xC & 0x3F | 0x80,
73653 codePoint >> 0x6 & 0x3F | 0x80,
73654 codePoint & 0x3F | 0x80
73655 )
73656 } else {
73657 throw new Error('Invalid code point')
73658 }
73659 }
73660
73661 return bytes
73662 }
73663
73664 function asciiToBytes (str) {
73665 var byteArray = []
73666 for (var i = 0; i < str.length; ++i) {
73667 // Node's code seems to be doing this and not & 0x7F..
73668 byteArray.push(str.charCodeAt(i) & 0xFF)
73669 }
73670 return byteArray
73671 }
73672
73673 function utf16leToBytes (str, units) {
73674 var c, hi, lo
73675 var byteArray = []
73676 for (var i = 0; i < str.length; ++i) {
73677 if ((units -= 2) < 0) break
73678
73679 c = str.charCodeAt(i)
73680 hi = c >> 8
73681 lo = c % 256
73682 byteArray.push(lo)
73683 byteArray.push(hi)
73684 }
73685
73686 return byteArray
73687 }
73688
73689 function base64ToBytes (str) {
73690 return base64.toByteArray(base64clean(str))
73691 }
73692
73693 function blitBuffer (src, dst, offset, length) {
73694 for (var i = 0; i < length; ++i) {
73695 if ((i + offset >= dst.length) || (i >= src.length)) break
73696 dst[i + offset] = src[i]
73697 }
73698 return i
73699 }
73700
73701 function isnan (val) {
73702 return val !== val // eslint-disable-line no-self-compare
73703 }
73704
73705 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
73706 (function (Buffer){
73707 // Copyright Joyent, Inc. and other Node contributors.
73708 //
73709 // Permission is hereby granted, free of charge, to any person obtaining a
73710 // copy of this software and associated documentation files (the
73711 // "Software"), to deal in the Software without restriction, including
73712 // without limitation the rights to use, copy, modify, merge, publish,
73713 // distribute, sublicense, and/or sell copies of the Software, and to permit
73714 // persons to whom the Software is furnished to do so, subject to the
73715 // following conditions:
73716 //
73717 // The above copyright notice and this permission notice shall be included
73718 // in all copies or substantial portions of the Software.
73719 //
73720 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73721 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73722 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73723 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73724 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73725 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73726 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73727
73728 // NOTE: These type checking functions intentionally don't use `instanceof`
73729 // because it is fragile and can be easily faked with `Object.create()`.
73730
73731 function isArray(arg) {
73732 if (Array.isArray) {
73733 return Array.isArray(arg);
73734 }
73735 return objectToString(arg) === '[object Array]';
73736 }
73737 exports.isArray = isArray;
73738
73739 function isBoolean(arg) {
73740 return typeof arg === 'boolean';
73741 }
73742 exports.isBoolean = isBoolean;
73743
73744 function isNull(arg) {
73745 return arg === null;
73746 }
73747 exports.isNull = isNull;
73748
73749 function isNullOrUndefined(arg) {
73750 return arg == null;
73751 }
73752 exports.isNullOrUndefined = isNullOrUndefined;
73753
73754 function isNumber(arg) {
73755 return typeof arg === 'number';
73756 }
73757 exports.isNumber = isNumber;
73758
73759 function isString(arg) {
73760 return typeof arg === 'string';
73761 }
73762 exports.isString = isString;
73763
73764 function isSymbol(arg) {
73765 return typeof arg === 'symbol';
73766 }
73767 exports.isSymbol = isSymbol;
73768
73769 function isUndefined(arg) {
73770 return arg === void 0;
73771 }
73772 exports.isUndefined = isUndefined;
73773
73774 function isRegExp(re) {
73775 return objectToString(re) === '[object RegExp]';
73776 }
73777 exports.isRegExp = isRegExp;
73778
73779 function isObject(arg) {
73780 return typeof arg === 'object' && arg !== null;
73781 }
73782 exports.isObject = isObject;
73783
73784 function isDate(d) {
73785 return objectToString(d) === '[object Date]';
73786 }
73787 exports.isDate = isDate;
73788
73789 function isError(e) {
73790 return (objectToString(e) === '[object Error]' || e instanceof Error);
73791 }
73792 exports.isError = isError;
73793
73794 function isFunction(arg) {
73795 return typeof arg === 'function';
73796 }
73797 exports.isFunction = isFunction;
73798
73799 function isPrimitive(arg) {
73800 return arg === null ||
73801 typeof arg === 'boolean' ||
73802 typeof arg === 'number' ||
73803 typeof arg === 'string' ||
73804 typeof arg === 'symbol' || // ES6 symbol
73805 typeof arg === 'undefined';
73806 }
73807 exports.isPrimitive = isPrimitive;
73808
73809 exports.isBuffer = Buffer.isBuffer;
73810
73811 function objectToString(o) {
73812 return Object.prototype.toString.call(o);
73813 }
73814
73815 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
73816 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
73817 // Copyright Joyent, Inc. and other Node contributors.
73818 //
73819 // Permission is hereby granted, free of charge, to any person obtaining a
73820 // copy of this software and associated documentation files (the
73821 // "Software"), to deal in the Software without restriction, including
73822 // without limitation the rights to use, copy, modify, merge, publish,
73823 // distribute, sublicense, and/or sell copies of the Software, and to permit
73824 // persons to whom the Software is furnished to do so, subject to the
73825 // following conditions:
73826 //
73827 // The above copyright notice and this permission notice shall be included
73828 // in all copies or substantial portions of the Software.
73829 //
73830 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73831 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73832 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73833 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73834 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73835 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73836 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73837
73838 function EventEmitter() {
73839 this._events = this._events || {};
73840 this._maxListeners = this._maxListeners || undefined;
73841 }
73842 module.exports = EventEmitter;
73843
73844 // Backwards-compat with node 0.10.x
73845 EventEmitter.EventEmitter = EventEmitter;
73846
73847 EventEmitter.prototype._events = undefined;
73848 EventEmitter.prototype._maxListeners = undefined;
73849
73850 // By default EventEmitters will print a warning if more than 10 listeners are
73851 // added to it. This is a useful default which helps finding memory leaks.
73852 EventEmitter.defaultMaxListeners = 10;
73853
73854 // Obviously not all Emitters should be limited to 10. This function allows
73855 // that to be increased. Set to zero for unlimited.
73856 EventEmitter.prototype.setMaxListeners = function(n) {
73857 if (!isNumber(n) || n < 0 || isNaN(n))
73858 throw TypeError('n must be a positive number');
73859 this._maxListeners = n;
73860 return this;
73861 };
73862
73863 EventEmitter.prototype.emit = function(type) {
73864 var er, handler, len, args, i, listeners;
73865
73866 if (!this._events)
73867 this._events = {};
73868
73869 // If there is no 'error' event listener then throw.
73870 if (type === 'error') {
73871 if (!this._events.error ||
73872 (isObject(this._events.error) && !this._events.error.length)) {
73873 er = arguments[1];
73874 if (er instanceof Error) {
73875 throw er; // Unhandled 'error' event
73876 } else {
73877 // At least give some kind of context to the user
73878 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
73879 err.context = er;
73880 throw err;
73881 }
73882 }
73883 }
73884
73885 handler = this._events[type];
73886
73887 if (isUndefined(handler))
73888 return false;
73889
73890 if (isFunction(handler)) {
73891 switch (arguments.length) {
73892 // fast cases
73893 case 1:
73894 handler.call(this);
73895 break;
73896 case 2:
73897 handler.call(this, arguments[1]);
73898 break;
73899 case 3:
73900 handler.call(this, arguments[1], arguments[2]);
73901 break;
73902 // slower
73903 default:
73904 args = Array.prototype.slice.call(arguments, 1);
73905 handler.apply(this, args);
73906 }
73907 } else if (isObject(handler)) {
73908 args = Array.prototype.slice.call(arguments, 1);
73909 listeners = handler.slice();
73910 len = listeners.length;
73911 for (i = 0; i < len; i++)
73912 listeners[i].apply(this, args);
73913 }
73914
73915 return true;
73916 };
73917
73918 EventEmitter.prototype.addListener = function(type, listener) {
73919 var m;
73920
73921 if (!isFunction(listener))
73922 throw TypeError('listener must be a function');
73923
73924 if (!this._events)
73925 this._events = {};
73926
73927 // To avoid recursion in the case that type === "newListener"! Before
73928 // adding it to the listeners, first emit "newListener".
73929 if (this._events.newListener)
73930 this.emit('newListener', type,
73931 isFunction(listener.listener) ?
73932 listener.listener : listener);
73933
73934 if (!this._events[type])
73935 // Optimize the case of one listener. Don't need the extra array object.
73936 this._events[type] = listener;
73937 else if (isObject(this._events[type]))
73938 // If we've already got an array, just append.
73939 this._events[type].push(listener);
73940 else
73941 // Adding the second element, need to change to array.
73942 this._events[type] = [this._events[type], listener];
73943
73944 // Check for listener leak
73945 if (isObject(this._events[type]) && !this._events[type].warned) {
73946 if (!isUndefined(this._maxListeners)) {
73947 m = this._maxListeners;
73948 } else {
73949 m = EventEmitter.defaultMaxListeners;
73950 }
73951
73952 if (m && m > 0 && this._events[type].length > m) {
73953 this._events[type].warned = true;
73954 console.error('(node) warning: possible EventEmitter memory ' +
73955 'leak detected. %d listeners added. ' +
73956 'Use emitter.setMaxListeners() to increase limit.',
73957 this._events[type].length);
73958 if (typeof console.trace === 'function') {
73959 // not supported in IE 10
73960 console.trace();
73961 }
73962 }
73963 }
73964
73965 return this;
73966 };
73967
73968 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
73969
73970 EventEmitter.prototype.once = function(type, listener) {
73971 if (!isFunction(listener))
73972 throw TypeError('listener must be a function');
73973
73974 var fired = false;
73975
73976 function g() {
73977 this.removeListener(type, g);
73978
73979 if (!fired) {
73980 fired = true;
73981 listener.apply(this, arguments);
73982 }
73983 }
73984
73985 g.listener = listener;
73986 this.on(type, g);
73987
73988 return this;
73989 };
73990
73991 // emits a 'removeListener' event iff the listener was removed
73992 EventEmitter.prototype.removeListener = function(type, listener) {
73993 var list, position, length, i;
73994
73995 if (!isFunction(listener))
73996 throw TypeError('listener must be a function');
73997
73998 if (!this._events || !this._events[type])
73999 return this;
74000
74001 list = this._events[type];
74002 length = list.length;
74003 position = -1;
74004
74005 if (list === listener ||
74006 (isFunction(list.listener) && list.listener === listener)) {
74007 delete this._events[type];
74008 if (this._events.removeListener)
74009 this.emit('removeListener', type, listener);
74010
74011 } else if (isObject(list)) {
74012 for (i = length; i-- > 0;) {
74013 if (list[i] === listener ||
74014 (list[i].listener && list[i].listener === listener)) {
74015 position = i;
74016 break;
74017 }
74018 }
74019
74020 if (position < 0)
74021 return this;
74022
74023 if (list.length === 1) {
74024 list.length = 0;
74025 delete this._events[type];
74026 } else {
74027 list.splice(position, 1);
74028 }
74029
74030 if (this._events.removeListener)
74031 this.emit('removeListener', type, listener);
74032 }
74033
74034 return this;
74035 };
74036
74037 EventEmitter.prototype.removeAllListeners = function(type) {
74038 var key, listeners;
74039
74040 if (!this._events)
74041 return this;
74042
74043 // not listening for removeListener, no need to emit
74044 if (!this._events.removeListener) {
74045 if (arguments.length === 0)
74046 this._events = {};
74047 else if (this._events[type])
74048 delete this._events[type];
74049 return this;
74050 }
74051
74052 // emit removeListener for all listeners on all events
74053 if (arguments.length === 0) {
74054 for (key in this._events) {
74055 if (key === 'removeListener') continue;
74056 this.removeAllListeners(key);
74057 }
74058 this.removeAllListeners('removeListener');
74059 this._events = {};
74060 return this;
74061 }
74062
74063 listeners = this._events[type];
74064
74065 if (isFunction(listeners)) {
74066 this.removeListener(type, listeners);
74067 } else if (listeners) {
74068 // LIFO order
74069 while (listeners.length)
74070 this.removeListener(type, listeners[listeners.length - 1]);
74071 }
74072 delete this._events[type];
74073
74074 return this;
74075 };
74076
74077 EventEmitter.prototype.listeners = function(type) {
74078 var ret;
74079 if (!this._events || !this._events[type])
74080 ret = [];
74081 else if (isFunction(this._events[type]))
74082 ret = [this._events[type]];
74083 else
74084 ret = this._events[type].slice();
74085 return ret;
74086 };
74087
74088 EventEmitter.prototype.listenerCount = function(type) {
74089 if (this._events) {
74090 var evlistener = this._events[type];
74091
74092 if (isFunction(evlistener))
74093 return 1;
74094 else if (evlistener)
74095 return evlistener.length;
74096 }
74097 return 0;
74098 };
74099
74100 EventEmitter.listenerCount = function(emitter, type) {
74101 return emitter.listenerCount(type);
74102 };
74103
74104 function isFunction(arg) {
74105 return typeof arg === 'function';
74106 }
74107
74108 function isNumber(arg) {
74109 return typeof arg === 'number';
74110 }
74111
74112 function isObject(arg) {
74113 return typeof arg === 'object' && arg !== null;
74114 }
74115
74116 function isUndefined(arg) {
74117 return arg === void 0;
74118 }
74119
74120 },{}],8:[function(require,module,exports){
74121 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
74122 var e, m
74123 var eLen = nBytes * 8 - mLen - 1
74124 var eMax = (1 << eLen) - 1
74125 var eBias = eMax >> 1
74126 var nBits = -7
74127 var i = isLE ? (nBytes - 1) : 0
74128 var d = isLE ? -1 : 1
74129 var s = buffer[offset + i]
74130
74131 i += d
74132
74133 e = s & ((1 << (-nBits)) - 1)
74134 s >>= (-nBits)
74135 nBits += eLen
74136 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74137
74138 m = e & ((1 << (-nBits)) - 1)
74139 e >>= (-nBits)
74140 nBits += mLen
74141 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74142
74143 if (e === 0) {
74144 e = 1 - eBias
74145 } else if (e === eMax) {
74146 return m ? NaN : ((s ? -1 : 1) * Infinity)
74147 } else {
74148 m = m + Math.pow(2, mLen)
74149 e = e - eBias
74150 }
74151 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
74152 }
74153
74154 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
74155 var e, m, c
74156 var eLen = nBytes * 8 - mLen - 1
74157 var eMax = (1 << eLen) - 1
74158 var eBias = eMax >> 1
74159 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
74160 var i = isLE ? 0 : (nBytes - 1)
74161 var d = isLE ? 1 : -1
74162 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
74163
74164 value = Math.abs(value)
74165
74166 if (isNaN(value) || value === Infinity) {
74167 m = isNaN(value) ? 1 : 0
74168 e = eMax
74169 } else {
74170 e = Math.floor(Math.log(value) / Math.LN2)
74171 if (value * (c = Math.pow(2, -e)) < 1) {
74172 e--
74173 c *= 2
74174 }
74175 if (e + eBias >= 1) {
74176 value += rt / c
74177 } else {
74178 value += rt * Math.pow(2, 1 - eBias)
74179 }
74180 if (value * c >= 2) {
74181 e++
74182 c /= 2
74183 }
74184
74185 if (e + eBias >= eMax) {
74186 m = 0
74187 e = eMax
74188 } else if (e + eBias >= 1) {
74189 m = (value * c - 1) * Math.pow(2, mLen)
74190 e = e + eBias
74191 } else {
74192 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
74193 e = 0
74194 }
74195 }
74196
74197 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
74198
74199 e = (e << mLen) | m
74200 eLen += mLen
74201 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
74202
74203 buffer[offset + i - d] |= s * 128
74204 }
74205
74206 },{}],9:[function(require,module,exports){
74207 if (typeof Object.create === 'function') {
74208 // implementation from standard node.js 'util' module
74209 module.exports = function inherits(ctor, superCtor) {
74210 ctor.super_ = superCtor
74211 ctor.prototype = Object.create(superCtor.prototype, {
74212 constructor: {
74213 value: ctor,
74214 enumerable: false,
74215 writable: true,
74216 configurable: true
74217 }
74218 });
74219 };
74220 } else {
74221 // old school shim for old browsers
74222 module.exports = function inherits(ctor, superCtor) {
74223 ctor.super_ = superCtor
74224 var TempCtor = function () {}
74225 TempCtor.prototype = superCtor.prototype
74226 ctor.prototype = new TempCtor()
74227 ctor.prototype.constructor = ctor
74228 }
74229 }
74230
74231 },{}],10:[function(require,module,exports){
74232 /*!
74233 * Determine if an object is a Buffer
74234 *
74235 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
74236 * @license MIT
74237 */
74238
74239 // The _isBuffer check is for Safari 5-7 support, because it's missing
74240 // Object.prototype.constructor. Remove this eventually
74241 module.exports = function (obj) {
74242 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
74243 }
74244
74245 function isBuffer (obj) {
74246 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
74247 }
74248
74249 // For Node v0.10 support. Remove this eventually.
74250 function isSlowBuffer (obj) {
74251 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
74252 }
74253
74254 },{}],11:[function(require,module,exports){
74255 var toString = {}.toString;
74256
74257 module.exports = Array.isArray || function (arr) {
74258 return toString.call(arr) == '[object Array]';
74259 };
74260
74261 },{}],12:[function(require,module,exports){
74262 (function (process){
74263 'use strict';
74264
74265 if (!process.version ||
74266 process.version.indexOf('v0.') === 0 ||
74267 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
74268 module.exports = nextTick;
74269 } else {
74270 module.exports = process.nextTick;
74271 }
74272
74273 function nextTick(fn, arg1, arg2, arg3) {
74274 if (typeof fn !== 'function') {
74275 throw new TypeError('"callback" argument must be a function');
74276 }
74277 var len = arguments.length;
74278 var args, i;
74279 switch (len) {
74280 case 0:
74281 case 1:
74282 return process.nextTick(fn);
74283 case 2:
74284 return process.nextTick(function afterTickOne() {
74285 fn.call(null, arg1);
74286 });
74287 case 3:
74288 return process.nextTick(function afterTickTwo() {
74289 fn.call(null, arg1, arg2);
74290 });
74291 case 4:
74292 return process.nextTick(function afterTickThree() {
74293 fn.call(null, arg1, arg2, arg3);
74294 });
74295 default:
74296 args = new Array(len - 1);
74297 i = 0;
74298 while (i < args.length) {
74299 args[i++] = arguments[i];
74300 }
74301 return process.nextTick(function afterTick() {
74302 fn.apply(null, args);
74303 });
74304 }
74305 }
74306
74307 }).call(this,require('_process'))
74308 },{"_process":13}],13:[function(require,module,exports){
74309 // shim for using process in browser
74310 var process = module.exports = {};
74311
74312 // cached from whatever global is present so that test runners that stub it
74313 // don't break things. But we need to wrap it in a try catch in case it is
74314 // wrapped in strict mode code which doesn't define any globals. It's inside a
74315 // function because try/catches deoptimize in certain engines.
74316
74317 var cachedSetTimeout;
74318 var cachedClearTimeout;
74319
74320 function defaultSetTimout() {
74321 throw new Error('setTimeout has not been defined');
74322 }
74323 function defaultClearTimeout () {
74324 throw new Error('clearTimeout has not been defined');
74325 }
74326 (function () {
74327 try {
74328 if (typeof setTimeout === 'function') {
74329 cachedSetTimeout = setTimeout;
74330 } else {
74331 cachedSetTimeout = defaultSetTimout;
74332 }
74333 } catch (e) {
74334 cachedSetTimeout = defaultSetTimout;
74335 }
74336 try {
74337 if (typeof clearTimeout === 'function') {
74338 cachedClearTimeout = clearTimeout;
74339 } else {
74340 cachedClearTimeout = defaultClearTimeout;
74341 }
74342 } catch (e) {
74343 cachedClearTimeout = defaultClearTimeout;
74344 }
74345 } ())
74346 function runTimeout(fun) {
74347 if (cachedSetTimeout === setTimeout) {
74348 //normal enviroments in sane situations
74349 return setTimeout(fun, 0);
74350 }
74351 // if setTimeout wasn't available but was latter defined
74352 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
74353 cachedSetTimeout = setTimeout;
74354 return setTimeout(fun, 0);
74355 }
74356 try {
74357 // when when somebody has screwed with setTimeout but no I.E. maddness
74358 return cachedSetTimeout(fun, 0);
74359 } catch(e){
74360 try {
74361 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74362 return cachedSetTimeout.call(null, fun, 0);
74363 } catch(e){
74364 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
74365 return cachedSetTimeout.call(this, fun, 0);
74366 }
74367 }
74368
74369
74370 }
74371 function runClearTimeout(marker) {
74372 if (cachedClearTimeout === clearTimeout) {
74373 //normal enviroments in sane situations
74374 return clearTimeout(marker);
74375 }
74376 // if clearTimeout wasn't available but was latter defined
74377 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
74378 cachedClearTimeout = clearTimeout;
74379 return clearTimeout(marker);
74380 }
74381 try {
74382 // when when somebody has screwed with setTimeout but no I.E. maddness
74383 return cachedClearTimeout(marker);
74384 } catch (e){
74385 try {
74386 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74387 return cachedClearTimeout.call(null, marker);
74388 } catch (e){
74389 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
74390 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
74391 return cachedClearTimeout.call(this, marker);
74392 }
74393 }
74394
74395
74396
74397 }
74398 var queue = [];
74399 var draining = false;
74400 var currentQueue;
74401 var queueIndex = -1;
74402
74403 function cleanUpNextTick() {
74404 if (!draining || !currentQueue) {
74405 return;
74406 }
74407 draining = false;
74408 if (currentQueue.length) {
74409 queue = currentQueue.concat(queue);
74410 } else {
74411 queueIndex = -1;
74412 }
74413 if (queue.length) {
74414 drainQueue();
74415 }
74416 }
74417
74418 function drainQueue() {
74419 if (draining) {
74420 return;
74421 }
74422 var timeout = runTimeout(cleanUpNextTick);
74423 draining = true;
74424
74425 var len = queue.length;
74426 while(len) {
74427 currentQueue = queue;
74428 queue = [];
74429 while (++queueIndex < len) {
74430 if (currentQueue) {
74431 currentQueue[queueIndex].run();
74432 }
74433 }
74434 queueIndex = -1;
74435 len = queue.length;
74436 }
74437 currentQueue = null;
74438 draining = false;
74439 runClearTimeout(timeout);
74440 }
74441
74442 process.nextTick = function (fun) {
74443 var args = new Array(arguments.length - 1);
74444 if (arguments.length > 1) {
74445 for (var i = 1; i < arguments.length; i++) {
74446 args[i - 1] = arguments[i];
74447 }
74448 }
74449 queue.push(new Item(fun, args));
74450 if (queue.length === 1 && !draining) {
74451 runTimeout(drainQueue);
74452 }
74453 };
74454
74455 // v8 likes predictible objects
74456 function Item(fun, array) {
74457 this.fun = fun;
74458 this.array = array;
74459 }
74460 Item.prototype.run = function () {
74461 this.fun.apply(null, this.array);
74462 };
74463 process.title = 'browser';
74464 process.browser = true;
74465 process.env = {};
74466 process.argv = [];
74467 process.version = ''; // empty string to avoid regexp issues
74468 process.versions = {};
74469
74470 function noop() {}
74471
74472 process.on = noop;
74473 process.addListener = noop;
74474 process.once = noop;
74475 process.off = noop;
74476 process.removeListener = noop;
74477 process.removeAllListeners = noop;
74478 process.emit = noop;
74479
74480 process.binding = function (name) {
74481 throw new Error('process.binding is not supported');
74482 };
74483
74484 process.cwd = function () { return '/' };
74485 process.chdir = function (dir) {
74486 throw new Error('process.chdir is not supported');
74487 };
74488 process.umask = function() { return 0; };
74489
74490 },{}],14:[function(require,module,exports){
74491 module.exports = require("./lib/_stream_duplex.js")
74492
74493 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
74494 // a duplex stream is just a stream that is both readable and writable.
74495 // Since JS doesn't have multiple prototypal inheritance, this class
74496 // prototypally inherits from Readable, and then parasitically from
74497 // Writable.
74498
74499 'use strict';
74500
74501 /*<replacement>*/
74502
74503 var objectKeys = Object.keys || function (obj) {
74504 var keys = [];
74505 for (var key in obj) {
74506 keys.push(key);
74507 }return keys;
74508 };
74509 /*</replacement>*/
74510
74511 module.exports = Duplex;
74512
74513 /*<replacement>*/
74514 var processNextTick = require('process-nextick-args');
74515 /*</replacement>*/
74516
74517 /*<replacement>*/
74518 var util = require('core-util-is');
74519 util.inherits = require('inherits');
74520 /*</replacement>*/
74521
74522 var Readable = require('./_stream_readable');
74523 var Writable = require('./_stream_writable');
74524
74525 util.inherits(Duplex, Readable);
74526
74527 var keys = objectKeys(Writable.prototype);
74528 for (var v = 0; v < keys.length; v++) {
74529 var method = keys[v];
74530 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
74531 }
74532
74533 function Duplex(options) {
74534 if (!(this instanceof Duplex)) return new Duplex(options);
74535
74536 Readable.call(this, options);
74537 Writable.call(this, options);
74538
74539 if (options && options.readable === false) this.readable = false;
74540
74541 if (options && options.writable === false) this.writable = false;
74542
74543 this.allowHalfOpen = true;
74544 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
74545
74546 this.once('end', onend);
74547 }
74548
74549 // the no-half-open enforcer
74550 function onend() {
74551 // if we allow half-open state, or if the writable side ended,
74552 // then we're ok.
74553 if (this.allowHalfOpen || this._writableState.ended) return;
74554
74555 // no more data can be written.
74556 // But allow more writes to happen in this tick.
74557 processNextTick(onEndNT, this);
74558 }
74559
74560 function onEndNT(self) {
74561 self.end();
74562 }
74563
74564 function forEach(xs, f) {
74565 for (var i = 0, l = xs.length; i < l; i++) {
74566 f(xs[i], i);
74567 }
74568 }
74569 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
74570 // a passthrough stream.
74571 // basically just the most minimal sort of Transform stream.
74572 // Every written chunk gets output as-is.
74573
74574 'use strict';
74575
74576 module.exports = PassThrough;
74577
74578 var Transform = require('./_stream_transform');
74579
74580 /*<replacement>*/
74581 var util = require('core-util-is');
74582 util.inherits = require('inherits');
74583 /*</replacement>*/
74584
74585 util.inherits(PassThrough, Transform);
74586
74587 function PassThrough(options) {
74588 if (!(this instanceof PassThrough)) return new PassThrough(options);
74589
74590 Transform.call(this, options);
74591 }
74592
74593 PassThrough.prototype._transform = function (chunk, encoding, cb) {
74594 cb(null, chunk);
74595 };
74596 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
74597 (function (process){
74598 'use strict';
74599
74600 module.exports = Readable;
74601
74602 /*<replacement>*/
74603 var processNextTick = require('process-nextick-args');
74604 /*</replacement>*/
74605
74606 /*<replacement>*/
74607 var isArray = require('isarray');
74608 /*</replacement>*/
74609
74610 /*<replacement>*/
74611 var Duplex;
74612 /*</replacement>*/
74613
74614 Readable.ReadableState = ReadableState;
74615
74616 /*<replacement>*/
74617 var EE = require('events').EventEmitter;
74618
74619 var EElistenerCount = function (emitter, type) {
74620 return emitter.listeners(type).length;
74621 };
74622 /*</replacement>*/
74623
74624 /*<replacement>*/
74625 var Stream;
74626 (function () {
74627 try {
74628 Stream = require('st' + 'ream');
74629 } catch (_) {} finally {
74630 if (!Stream) Stream = require('events').EventEmitter;
74631 }
74632 })();
74633 /*</replacement>*/
74634
74635 var Buffer = require('buffer').Buffer;
74636 /*<replacement>*/
74637 var bufferShim = require('buffer-shims');
74638 /*</replacement>*/
74639
74640 /*<replacement>*/
74641 var util = require('core-util-is');
74642 util.inherits = require('inherits');
74643 /*</replacement>*/
74644
74645 /*<replacement>*/
74646 var debugUtil = require('util');
74647 var debug = void 0;
74648 if (debugUtil && debugUtil.debuglog) {
74649 debug = debugUtil.debuglog('stream');
74650 } else {
74651 debug = function () {};
74652 }
74653 /*</replacement>*/
74654
74655 var BufferList = require('./internal/streams/BufferList');
74656 var StringDecoder;
74657
74658 util.inherits(Readable, Stream);
74659
74660 function prependListener(emitter, event, fn) {
74661 // Sadly this is not cacheable as some libraries bundle their own
74662 // event emitter implementation with them.
74663 if (typeof emitter.prependListener === 'function') {
74664 return emitter.prependListener(event, fn);
74665 } else {
74666 // This is a hack to make sure that our error handler is attached before any
74667 // userland ones. NEVER DO THIS. This is here only because this code needs
74668 // to continue to work with older versions of Node.js that do not include
74669 // the prependListener() method. The goal is to eventually remove this hack.
74670 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
74671 }
74672 }
74673
74674 function ReadableState(options, stream) {
74675 Duplex = Duplex || require('./_stream_duplex');
74676
74677 options = options || {};
74678
74679 // object stream flag. Used to make read(n) ignore n and to
74680 // make all the buffer merging and length checks go away
74681 this.objectMode = !!options.objectMode;
74682
74683 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
74684
74685 // the point at which it stops calling _read() to fill the buffer
74686 // Note: 0 is a valid value, means "don't call _read preemptively ever"
74687 var hwm = options.highWaterMark;
74688 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
74689 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
74690
74691 // cast to ints.
74692 this.highWaterMark = ~ ~this.highWaterMark;
74693
74694 // A linked list is used to store data chunks instead of an array because the
74695 // linked list can remove elements from the beginning faster than
74696 // array.shift()
74697 this.buffer = new BufferList();
74698 this.length = 0;
74699 this.pipes = null;
74700 this.pipesCount = 0;
74701 this.flowing = null;
74702 this.ended = false;
74703 this.endEmitted = false;
74704 this.reading = false;
74705
74706 // a flag to be able to tell if the onwrite cb is called immediately,
74707 // or on a later tick. We set this to true at first, because any
74708 // actions that shouldn't happen until "later" should generally also
74709 // not happen before the first write call.
74710 this.sync = true;
74711
74712 // whenever we return null, then we set a flag to say
74713 // that we're awaiting a 'readable' event emission.
74714 this.needReadable = false;
74715 this.emittedReadable = false;
74716 this.readableListening = false;
74717 this.resumeScheduled = false;
74718
74719 // Crypto is kind of old and crusty. Historically, its default string
74720 // encoding is 'binary' so we have to make this configurable.
74721 // Everything else in the universe uses 'utf8', though.
74722 this.defaultEncoding = options.defaultEncoding || 'utf8';
74723
74724 // when piping, we only care about 'readable' events that happen
74725 // after read()ing all the bytes and not getting any pushback.
74726 this.ranOut = false;
74727
74728 // the number of writers that are awaiting a drain event in .pipe()s
74729 this.awaitDrain = 0;
74730
74731 // if true, a maybeReadMore has been scheduled
74732 this.readingMore = false;
74733
74734 this.decoder = null;
74735 this.encoding = null;
74736 if (options.encoding) {
74737 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74738 this.decoder = new StringDecoder(options.encoding);
74739 this.encoding = options.encoding;
74740 }
74741 }
74742
74743 function Readable(options) {
74744 Duplex = Duplex || require('./_stream_duplex');
74745
74746 if (!(this instanceof Readable)) return new Readable(options);
74747
74748 this._readableState = new ReadableState(options, this);
74749
74750 // legacy
74751 this.readable = true;
74752
74753 if (options && typeof options.read === 'function') this._read = options.read;
74754
74755 Stream.call(this);
74756 }
74757
74758 // Manually shove something into the read() buffer.
74759 // This returns true if the highWaterMark has not been hit yet,
74760 // similar to how Writable.write() returns true if you should
74761 // write() some more.
74762 Readable.prototype.push = function (chunk, encoding) {
74763 var state = this._readableState;
74764
74765 if (!state.objectMode && typeof chunk === 'string') {
74766 encoding = encoding || state.defaultEncoding;
74767 if (encoding !== state.encoding) {
74768 chunk = bufferShim.from(chunk, encoding);
74769 encoding = '';
74770 }
74771 }
74772
74773 return readableAddChunk(this, state, chunk, encoding, false);
74774 };
74775
74776 // Unshift should *always* be something directly out of read()
74777 Readable.prototype.unshift = function (chunk) {
74778 var state = this._readableState;
74779 return readableAddChunk(this, state, chunk, '', true);
74780 };
74781
74782 Readable.prototype.isPaused = function () {
74783 return this._readableState.flowing === false;
74784 };
74785
74786 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
74787 var er = chunkInvalid(state, chunk);
74788 if (er) {
74789 stream.emit('error', er);
74790 } else if (chunk === null) {
74791 state.reading = false;
74792 onEofChunk(stream, state);
74793 } else if (state.objectMode || chunk && chunk.length > 0) {
74794 if (state.ended && !addToFront) {
74795 var e = new Error('stream.push() after EOF');
74796 stream.emit('error', e);
74797 } else if (state.endEmitted && addToFront) {
74798 var _e = new Error('stream.unshift() after end event');
74799 stream.emit('error', _e);
74800 } else {
74801 var skipAdd;
74802 if (state.decoder && !addToFront && !encoding) {
74803 chunk = state.decoder.write(chunk);
74804 skipAdd = !state.objectMode && chunk.length === 0;
74805 }
74806
74807 if (!addToFront) state.reading = false;
74808
74809 // Don't add to the buffer if we've decoded to an empty string chunk and
74810 // we're not in object mode
74811 if (!skipAdd) {
74812 // if we want the data now, just emit it.
74813 if (state.flowing && state.length === 0 && !state.sync) {
74814 stream.emit('data', chunk);
74815 stream.read(0);
74816 } else {
74817 // update the buffer info.
74818 state.length += state.objectMode ? 1 : chunk.length;
74819 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
74820
74821 if (state.needReadable) emitReadable(stream);
74822 }
74823 }
74824
74825 maybeReadMore(stream, state);
74826 }
74827 } else if (!addToFront) {
74828 state.reading = false;
74829 }
74830
74831 return needMoreData(state);
74832 }
74833
74834 // if it's past the high water mark, we can push in some more.
74835 // Also, if we have no data yet, we can stand some
74836 // more bytes. This is to work around cases where hwm=0,
74837 // such as the repl. Also, if the push() triggered a
74838 // readable event, and the user called read(largeNumber) such that
74839 // needReadable was set, then we ought to push more, so that another
74840 // 'readable' event will be triggered.
74841 function needMoreData(state) {
74842 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
74843 }
74844
74845 // backwards compatibility.
74846 Readable.prototype.setEncoding = function (enc) {
74847 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74848 this._readableState.decoder = new StringDecoder(enc);
74849 this._readableState.encoding = enc;
74850 return this;
74851 };
74852
74853 // Don't raise the hwm > 8MB
74854 var MAX_HWM = 0x800000;
74855 function computeNewHighWaterMark(n) {
74856 if (n >= MAX_HWM) {
74857 n = MAX_HWM;
74858 } else {
74859 // Get the next highest power of 2 to prevent increasing hwm excessively in
74860 // tiny amounts
74861 n--;
74862 n |= n >>> 1;
74863 n |= n >>> 2;
74864 n |= n >>> 4;
74865 n |= n >>> 8;
74866 n |= n >>> 16;
74867 n++;
74868 }
74869 return n;
74870 }
74871
74872 // This function is designed to be inlinable, so please take care when making
74873 // changes to the function body.
74874 function howMuchToRead(n, state) {
74875 if (n <= 0 || state.length === 0 && state.ended) return 0;
74876 if (state.objectMode) return 1;
74877 if (n !== n) {
74878 // Only flow one buffer at a time
74879 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
74880 }
74881 // If we're asking for more than the current hwm, then raise the hwm.
74882 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
74883 if (n <= state.length) return n;
74884 // Don't have enough
74885 if (!state.ended) {
74886 state.needReadable = true;
74887 return 0;
74888 }
74889 return state.length;
74890 }
74891
74892 // you can override either this method, or the async _read(n) below.
74893 Readable.prototype.read = function (n) {
74894 debug('read', n);
74895 n = parseInt(n, 10);
74896 var state = this._readableState;
74897 var nOrig = n;
74898
74899 if (n !== 0) state.emittedReadable = false;
74900
74901 // if we're doing read(0) to trigger a readable event, but we
74902 // already have a bunch of data in the buffer, then just trigger
74903 // the 'readable' event and move on.
74904 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
74905 debug('read: emitReadable', state.length, state.ended);
74906 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
74907 return null;
74908 }
74909
74910 n = howMuchToRead(n, state);
74911
74912 // if we've ended, and we're now clear, then finish it up.
74913 if (n === 0 && state.ended) {
74914 if (state.length === 0) endReadable(this);
74915 return null;
74916 }
74917
74918 // All the actual chunk generation logic needs to be
74919 // *below* the call to _read. The reason is that in certain
74920 // synthetic stream cases, such as passthrough streams, _read
74921 // may be a completely synchronous operation which may change
74922 // the state of the read buffer, providing enough data when
74923 // before there was *not* enough.
74924 //
74925 // So, the steps are:
74926 // 1. Figure out what the state of things will be after we do
74927 // a read from the buffer.
74928 //
74929 // 2. If that resulting state will trigger a _read, then call _read.
74930 // Note that this may be asynchronous, or synchronous. Yes, it is
74931 // deeply ugly to write APIs this way, but that still doesn't mean
74932 // that the Readable class should behave improperly, as streams are
74933 // designed to be sync/async agnostic.
74934 // Take note if the _read call is sync or async (ie, if the read call
74935 // has returned yet), so that we know whether or not it's safe to emit
74936 // 'readable' etc.
74937 //
74938 // 3. Actually pull the requested chunks out of the buffer and return.
74939
74940 // if we need a readable event, then we need to do some reading.
74941 var doRead = state.needReadable;
74942 debug('need readable', doRead);
74943
74944 // if we currently have less than the highWaterMark, then also read some
74945 if (state.length === 0 || state.length - n < state.highWaterMark) {
74946 doRead = true;
74947 debug('length less than watermark', doRead);
74948 }
74949
74950 // however, if we've ended, then there's no point, and if we're already
74951 // reading, then it's unnecessary.
74952 if (state.ended || state.reading) {
74953 doRead = false;
74954 debug('reading or ended', doRead);
74955 } else if (doRead) {
74956 debug('do read');
74957 state.reading = true;
74958 state.sync = true;
74959 // if the length is currently zero, then we *need* a readable event.
74960 if (state.length === 0) state.needReadable = true;
74961 // call internal read method
74962 this._read(state.highWaterMark);
74963 state.sync = false;
74964 // If _read pushed data synchronously, then `reading` will be false,
74965 // and we need to re-evaluate how much data we can return to the user.
74966 if (!state.reading) n = howMuchToRead(nOrig, state);
74967 }
74968
74969 var ret;
74970 if (n > 0) ret = fromList(n, state);else ret = null;
74971
74972 if (ret === null) {
74973 state.needReadable = true;
74974 n = 0;
74975 } else {
74976 state.length -= n;
74977 }
74978
74979 if (state.length === 0) {
74980 // If we have nothing in the buffer, then we want to know
74981 // as soon as we *do* get something into the buffer.
74982 if (!state.ended) state.needReadable = true;
74983
74984 // If we tried to read() past the EOF, then emit end on the next tick.
74985 if (nOrig !== n && state.ended) endReadable(this);
74986 }
74987
74988 if (ret !== null) this.emit('data', ret);
74989
74990 return ret;
74991 };
74992
74993 function chunkInvalid(state, chunk) {
74994 var er = null;
74995 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
74996 er = new TypeError('Invalid non-string/buffer chunk');
74997 }
74998 return er;
74999 }
75000
75001 function onEofChunk(stream, state) {
75002 if (state.ended) return;
75003 if (state.decoder) {
75004 var chunk = state.decoder.end();
75005 if (chunk && chunk.length) {
75006 state.buffer.push(chunk);
75007 state.length += state.objectMode ? 1 : chunk.length;
75008 }
75009 }
75010 state.ended = true;
75011
75012 // emit 'readable' now to make sure it gets picked up.
75013 emitReadable(stream);
75014 }
75015
75016 // Don't emit readable right away in sync mode, because this can trigger
75017 // another read() call => stack overflow. This way, it might trigger
75018 // a nextTick recursion warning, but that's not so bad.
75019 function emitReadable(stream) {
75020 var state = stream._readableState;
75021 state.needReadable = false;
75022 if (!state.emittedReadable) {
75023 debug('emitReadable', state.flowing);
75024 state.emittedReadable = true;
75025 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
75026 }
75027 }
75028
75029 function emitReadable_(stream) {
75030 debug('emit readable');
75031 stream.emit('readable');
75032 flow(stream);
75033 }
75034
75035 // at this point, the user has presumably seen the 'readable' event,
75036 // and called read() to consume some data. that may have triggered
75037 // in turn another _read(n) call, in which case reading = true if
75038 // it's in progress.
75039 // However, if we're not ended, or reading, and the length < hwm,
75040 // then go ahead and try to read some more preemptively.
75041 function maybeReadMore(stream, state) {
75042 if (!state.readingMore) {
75043 state.readingMore = true;
75044 processNextTick(maybeReadMore_, stream, state);
75045 }
75046 }
75047
75048 function maybeReadMore_(stream, state) {
75049 var len = state.length;
75050 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
75051 debug('maybeReadMore read 0');
75052 stream.read(0);
75053 if (len === state.length)
75054 // didn't get any data, stop spinning.
75055 break;else len = state.length;
75056 }
75057 state.readingMore = false;
75058 }
75059
75060 // abstract method. to be overridden in specific implementation classes.
75061 // call cb(er, data) where data is <= n in length.
75062 // for virtual (non-string, non-buffer) streams, "length" is somewhat
75063 // arbitrary, and perhaps not very meaningful.
75064 Readable.prototype._read = function (n) {
75065 this.emit('error', new Error('_read() is not implemented'));
75066 };
75067
75068 Readable.prototype.pipe = function (dest, pipeOpts) {
75069 var src = this;
75070 var state = this._readableState;
75071
75072 switch (state.pipesCount) {
75073 case 0:
75074 state.pipes = dest;
75075 break;
75076 case 1:
75077 state.pipes = [state.pipes, dest];
75078 break;
75079 default:
75080 state.pipes.push(dest);
75081 break;
75082 }
75083 state.pipesCount += 1;
75084 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
75085
75086 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
75087
75088 var endFn = doEnd ? onend : cleanup;
75089 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
75090
75091 dest.on('unpipe', onunpipe);
75092 function onunpipe(readable) {
75093 debug('onunpipe');
75094 if (readable === src) {
75095 cleanup();
75096 }
75097 }
75098
75099 function onend() {
75100 debug('onend');
75101 dest.end();
75102 }
75103
75104 // when the dest drains, it reduces the awaitDrain counter
75105 // on the source. This would be more elegant with a .once()
75106 // handler in flow(), but adding and removing repeatedly is
75107 // too slow.
75108 var ondrain = pipeOnDrain(src);
75109 dest.on('drain', ondrain);
75110
75111 var cleanedUp = false;
75112 function cleanup() {
75113 debug('cleanup');
75114 // cleanup event handlers once the pipe is broken
75115 dest.removeListener('close', onclose);
75116 dest.removeListener('finish', onfinish);
75117 dest.removeListener('drain', ondrain);
75118 dest.removeListener('error', onerror);
75119 dest.removeListener('unpipe', onunpipe);
75120 src.removeListener('end', onend);
75121 src.removeListener('end', cleanup);
75122 src.removeListener('data', ondata);
75123
75124 cleanedUp = true;
75125
75126 // if the reader is waiting for a drain event from this
75127 // specific writer, then it would cause it to never start
75128 // flowing again.
75129 // So, if this is awaiting a drain, then we just call it now.
75130 // If we don't know, then assume that we are waiting for one.
75131 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
75132 }
75133
75134 // If the user pushes more data while we're writing to dest then we'll end up
75135 // in ondata again. However, we only want to increase awaitDrain once because
75136 // dest will only emit one 'drain' event for the multiple writes.
75137 // => Introduce a guard on increasing awaitDrain.
75138 var increasedAwaitDrain = false;
75139 src.on('data', ondata);
75140 function ondata(chunk) {
75141 debug('ondata');
75142 increasedAwaitDrain = false;
75143 var ret = dest.write(chunk);
75144 if (false === ret && !increasedAwaitDrain) {
75145 // If the user unpiped during `dest.write()`, it is possible
75146 // to get stuck in a permanently paused state if that write
75147 // also returned false.
75148 // => Check whether `dest` is still a piping destination.
75149 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
75150 debug('false write response, pause', src._readableState.awaitDrain);
75151 src._readableState.awaitDrain++;
75152 increasedAwaitDrain = true;
75153 }
75154 src.pause();
75155 }
75156 }
75157
75158 // if the dest has an error, then stop piping into it.
75159 // however, don't suppress the throwing behavior for this.
75160 function onerror(er) {
75161 debug('onerror', er);
75162 unpipe();
75163 dest.removeListener('error', onerror);
75164 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
75165 }
75166
75167 // Make sure our error handler is attached before userland ones.
75168 prependListener(dest, 'error', onerror);
75169
75170 // Both close and finish should trigger unpipe, but only once.
75171 function onclose() {
75172 dest.removeListener('finish', onfinish);
75173 unpipe();
75174 }
75175 dest.once('close', onclose);
75176 function onfinish() {
75177 debug('onfinish');
75178 dest.removeListener('close', onclose);
75179 unpipe();
75180 }
75181 dest.once('finish', onfinish);
75182
75183 function unpipe() {
75184 debug('unpipe');
75185 src.unpipe(dest);
75186 }
75187
75188 // tell the dest that it's being piped to
75189 dest.emit('pipe', src);
75190
75191 // start the flow if it hasn't been started already.
75192 if (!state.flowing) {
75193 debug('pipe resume');
75194 src.resume();
75195 }
75196
75197 return dest;
75198 };
75199
75200 function pipeOnDrain(src) {
75201 return function () {
75202 var state = src._readableState;
75203 debug('pipeOnDrain', state.awaitDrain);
75204 if (state.awaitDrain) state.awaitDrain--;
75205 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
75206 state.flowing = true;
75207 flow(src);
75208 }
75209 };
75210 }
75211
75212 Readable.prototype.unpipe = function (dest) {
75213 var state = this._readableState;
75214
75215 // if we're not piping anywhere, then do nothing.
75216 if (state.pipesCount === 0) return this;
75217
75218 // just one destination. most common case.
75219 if (state.pipesCount === 1) {
75220 // passed in one, but it's not the right one.
75221 if (dest && dest !== state.pipes) return this;
75222
75223 if (!dest) dest = state.pipes;
75224
75225 // got a match.
75226 state.pipes = null;
75227 state.pipesCount = 0;
75228 state.flowing = false;
75229 if (dest) dest.emit('unpipe', this);
75230 return this;
75231 }
75232
75233 // slow case. multiple pipe destinations.
75234
75235 if (!dest) {
75236 // remove all.
75237 var dests = state.pipes;
75238 var len = state.pipesCount;
75239 state.pipes = null;
75240 state.pipesCount = 0;
75241 state.flowing = false;
75242
75243 for (var i = 0; i < len; i++) {
75244 dests[i].emit('unpipe', this);
75245 }return this;
75246 }
75247
75248 // try to find the right one.
75249 var index = indexOf(state.pipes, dest);
75250 if (index === -1) return this;
75251
75252 state.pipes.splice(index, 1);
75253 state.pipesCount -= 1;
75254 if (state.pipesCount === 1) state.pipes = state.pipes[0];
75255
75256 dest.emit('unpipe', this);
75257
75258 return this;
75259 };
75260
75261 // set up data events if they are asked for
75262 // Ensure readable listeners eventually get something
75263 Readable.prototype.on = function (ev, fn) {
75264 var res = Stream.prototype.on.call(this, ev, fn);
75265
75266 if (ev === 'data') {
75267 // Start flowing on next tick if stream isn't explicitly paused
75268 if (this._readableState.flowing !== false) this.resume();
75269 } else if (ev === 'readable') {
75270 var state = this._readableState;
75271 if (!state.endEmitted && !state.readableListening) {
75272 state.readableListening = state.needReadable = true;
75273 state.emittedReadable = false;
75274 if (!state.reading) {
75275 processNextTick(nReadingNextTick, this);
75276 } else if (state.length) {
75277 emitReadable(this, state);
75278 }
75279 }
75280 }
75281
75282 return res;
75283 };
75284 Readable.prototype.addListener = Readable.prototype.on;
75285
75286 function nReadingNextTick(self) {
75287 debug('readable nexttick read 0');
75288 self.read(0);
75289 }
75290
75291 // pause() and resume() are remnants of the legacy readable stream API
75292 // If the user uses them, then switch into old mode.
75293 Readable.prototype.resume = function () {
75294 var state = this._readableState;
75295 if (!state.flowing) {
75296 debug('resume');
75297 state.flowing = true;
75298 resume(this, state);
75299 }
75300 return this;
75301 };
75302
75303 function resume(stream, state) {
75304 if (!state.resumeScheduled) {
75305 state.resumeScheduled = true;
75306 processNextTick(resume_, stream, state);
75307 }
75308 }
75309
75310 function resume_(stream, state) {
75311 if (!state.reading) {
75312 debug('resume read 0');
75313 stream.read(0);
75314 }
75315
75316 state.resumeScheduled = false;
75317 state.awaitDrain = 0;
75318 stream.emit('resume');
75319 flow(stream);
75320 if (state.flowing && !state.reading) stream.read(0);
75321 }
75322
75323 Readable.prototype.pause = function () {
75324 debug('call pause flowing=%j', this._readableState.flowing);
75325 if (false !== this._readableState.flowing) {
75326 debug('pause');
75327 this._readableState.flowing = false;
75328 this.emit('pause');
75329 }
75330 return this;
75331 };
75332
75333 function flow(stream) {
75334 var state = stream._readableState;
75335 debug('flow', state.flowing);
75336 while (state.flowing && stream.read() !== null) {}
75337 }
75338
75339 // wrap an old-style stream as the async data source.
75340 // This is *not* part of the readable stream interface.
75341 // It is an ugly unfortunate mess of history.
75342 Readable.prototype.wrap = function (stream) {
75343 var state = this._readableState;
75344 var paused = false;
75345
75346 var self = this;
75347 stream.on('end', function () {
75348 debug('wrapped end');
75349 if (state.decoder && !state.ended) {
75350 var chunk = state.decoder.end();
75351 if (chunk && chunk.length) self.push(chunk);
75352 }
75353
75354 self.push(null);
75355 });
75356
75357 stream.on('data', function (chunk) {
75358 debug('wrapped data');
75359 if (state.decoder) chunk = state.decoder.write(chunk);
75360
75361 // don't skip over falsy values in objectMode
75362 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
75363
75364 var ret = self.push(chunk);
75365 if (!ret) {
75366 paused = true;
75367 stream.pause();
75368 }
75369 });
75370
75371 // proxy all the other methods.
75372 // important when wrapping filters and duplexes.
75373 for (var i in stream) {
75374 if (this[i] === undefined && typeof stream[i] === 'function') {
75375 this[i] = function (method) {
75376 return function () {
75377 return stream[method].apply(stream, arguments);
75378 };
75379 }(i);
75380 }
75381 }
75382
75383 // proxy certain important events.
75384 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
75385 forEach(events, function (ev) {
75386 stream.on(ev, self.emit.bind(self, ev));
75387 });
75388
75389 // when we try to consume some more bytes, simply unpause the
75390 // underlying stream.
75391 self._read = function (n) {
75392 debug('wrapped _read', n);
75393 if (paused) {
75394 paused = false;
75395 stream.resume();
75396 }
75397 };
75398
75399 return self;
75400 };
75401
75402 // exposed for testing purposes only.
75403 Readable._fromList = fromList;
75404
75405 // Pluck off n bytes from an array of buffers.
75406 // Length is the combined lengths of all the buffers in the list.
75407 // This function is designed to be inlinable, so please take care when making
75408 // changes to the function body.
75409 function fromList(n, state) {
75410 // nothing buffered
75411 if (state.length === 0) return null;
75412
75413 var ret;
75414 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
75415 // read it all, truncate the list
75416 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
75417 state.buffer.clear();
75418 } else {
75419 // read part of list
75420 ret = fromListPartial(n, state.buffer, state.decoder);
75421 }
75422
75423 return ret;
75424 }
75425
75426 // Extracts only enough buffered data to satisfy the amount requested.
75427 // This function is designed to be inlinable, so please take care when making
75428 // changes to the function body.
75429 function fromListPartial(n, list, hasStrings) {
75430 var ret;
75431 if (n < list.head.data.length) {
75432 // slice is the same for buffers and strings
75433 ret = list.head.data.slice(0, n);
75434 list.head.data = list.head.data.slice(n);
75435 } else if (n === list.head.data.length) {
75436 // first chunk is a perfect match
75437 ret = list.shift();
75438 } else {
75439 // result spans more than one buffer
75440 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
75441 }
75442 return ret;
75443 }
75444
75445 // Copies a specified amount of characters from the list of buffered data
75446 // chunks.
75447 // This function is designed to be inlinable, so please take care when making
75448 // changes to the function body.
75449 function copyFromBufferString(n, list) {
75450 var p = list.head;
75451 var c = 1;
75452 var ret = p.data;
75453 n -= ret.length;
75454 while (p = p.next) {
75455 var str = p.data;
75456 var nb = n > str.length ? str.length : n;
75457 if (nb === str.length) ret += str;else ret += str.slice(0, n);
75458 n -= nb;
75459 if (n === 0) {
75460 if (nb === str.length) {
75461 ++c;
75462 if (p.next) list.head = p.next;else list.head = list.tail = null;
75463 } else {
75464 list.head = p;
75465 p.data = str.slice(nb);
75466 }
75467 break;
75468 }
75469 ++c;
75470 }
75471 list.length -= c;
75472 return ret;
75473 }
75474
75475 // Copies a specified amount of bytes from the list of buffered data chunks.
75476 // This function is designed to be inlinable, so please take care when making
75477 // changes to the function body.
75478 function copyFromBuffer(n, list) {
75479 var ret = bufferShim.allocUnsafe(n);
75480 var p = list.head;
75481 var c = 1;
75482 p.data.copy(ret);
75483 n -= p.data.length;
75484 while (p = p.next) {
75485 var buf = p.data;
75486 var nb = n > buf.length ? buf.length : n;
75487 buf.copy(ret, ret.length - n, 0, nb);
75488 n -= nb;
75489 if (n === 0) {
75490 if (nb === buf.length) {
75491 ++c;
75492 if (p.next) list.head = p.next;else list.head = list.tail = null;
75493 } else {
75494 list.head = p;
75495 p.data = buf.slice(nb);
75496 }
75497 break;
75498 }
75499 ++c;
75500 }
75501 list.length -= c;
75502 return ret;
75503 }
75504
75505 function endReadable(stream) {
75506 var state = stream._readableState;
75507
75508 // If we get here before consuming all the bytes, then that is a
75509 // bug in node. Should never happen.
75510 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
75511
75512 if (!state.endEmitted) {
75513 state.ended = true;
75514 processNextTick(endReadableNT, state, stream);
75515 }
75516 }
75517
75518 function endReadableNT(state, stream) {
75519 // Check that we didn't get one last unshift.
75520 if (!state.endEmitted && state.length === 0) {
75521 state.endEmitted = true;
75522 stream.readable = false;
75523 stream.emit('end');
75524 }
75525 }
75526
75527 function forEach(xs, f) {
75528 for (var i = 0, l = xs.length; i < l; i++) {
75529 f(xs[i], i);
75530 }
75531 }
75532
75533 function indexOf(xs, x) {
75534 for (var i = 0, l = xs.length; i < l; i++) {
75535 if (xs[i] === x) return i;
75536 }
75537 return -1;
75538 }
75539 }).call(this,require('_process'))
75540 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
75541 // a transform stream is a readable/writable stream where you do
75542 // something with the data. Sometimes it's called a "filter",
75543 // but that's not a great name for it, since that implies a thing where
75544 // some bits pass through, and others are simply ignored. (That would
75545 // be a valid example of a transform, of course.)
75546 //
75547 // While the output is causally related to the input, it's not a
75548 // necessarily symmetric or synchronous transformation. For example,
75549 // a zlib stream might take multiple plain-text writes(), and then
75550 // emit a single compressed chunk some time in the future.
75551 //
75552 // Here's how this works:
75553 //
75554 // The Transform stream has all the aspects of the readable and writable
75555 // stream classes. When you write(chunk), that calls _write(chunk,cb)
75556 // internally, and returns false if there's a lot of pending writes
75557 // buffered up. When you call read(), that calls _read(n) until
75558 // there's enough pending readable data buffered up.
75559 //
75560 // In a transform stream, the written data is placed in a buffer. When
75561 // _read(n) is called, it transforms the queued up data, calling the
75562 // buffered _write cb's as it consumes chunks. If consuming a single
75563 // written chunk would result in multiple output chunks, then the first
75564 // outputted bit calls the readcb, and subsequent chunks just go into
75565 // the read buffer, and will cause it to emit 'readable' if necessary.
75566 //
75567 // This way, back-pressure is actually determined by the reading side,
75568 // since _read has to be called to start processing a new chunk. However,
75569 // a pathological inflate type of transform can cause excessive buffering
75570 // here. For example, imagine a stream where every byte of input is
75571 // interpreted as an integer from 0-255, and then results in that many
75572 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
75573 // 1kb of data being output. In this case, you could write a very small
75574 // amount of input, and end up with a very large amount of output. In
75575 // such a pathological inflating mechanism, there'd be no way to tell
75576 // the system to stop doing the transform. A single 4MB write could
75577 // cause the system to run out of memory.
75578 //
75579 // However, even in such a pathological case, only a single written chunk
75580 // would be consumed, and then the rest would wait (un-transformed) until
75581 // the results of the previous transformed chunk were consumed.
75582
75583 'use strict';
75584
75585 module.exports = Transform;
75586
75587 var Duplex = require('./_stream_duplex');
75588
75589 /*<replacement>*/
75590 var util = require('core-util-is');
75591 util.inherits = require('inherits');
75592 /*</replacement>*/
75593
75594 util.inherits(Transform, Duplex);
75595
75596 function TransformState(stream) {
75597 this.afterTransform = function (er, data) {
75598 return afterTransform(stream, er, data);
75599 };
75600
75601 this.needTransform = false;
75602 this.transforming = false;
75603 this.writecb = null;
75604 this.writechunk = null;
75605 this.writeencoding = null;
75606 }
75607
75608 function afterTransform(stream, er, data) {
75609 var ts = stream._transformState;
75610 ts.transforming = false;
75611
75612 var cb = ts.writecb;
75613
75614 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
75615
75616 ts.writechunk = null;
75617 ts.writecb = null;
75618
75619 if (data !== null && data !== undefined) stream.push(data);
75620
75621 cb(er);
75622
75623 var rs = stream._readableState;
75624 rs.reading = false;
75625 if (rs.needReadable || rs.length < rs.highWaterMark) {
75626 stream._read(rs.highWaterMark);
75627 }
75628 }
75629
75630 function Transform(options) {
75631 if (!(this instanceof Transform)) return new Transform(options);
75632
75633 Duplex.call(this, options);
75634
75635 this._transformState = new TransformState(this);
75636
75637 var stream = this;
75638
75639 // start out asking for a readable event once data is transformed.
75640 this._readableState.needReadable = true;
75641
75642 // we have implemented the _read method, and done the other things
75643 // that Readable wants before the first _read call, so unset the
75644 // sync guard flag.
75645 this._readableState.sync = false;
75646
75647 if (options) {
75648 if (typeof options.transform === 'function') this._transform = options.transform;
75649
75650 if (typeof options.flush === 'function') this._flush = options.flush;
75651 }
75652
75653 // When the writable side finishes, then flush out anything remaining.
75654 this.once('prefinish', function () {
75655 if (typeof this._flush === 'function') this._flush(function (er, data) {
75656 done(stream, er, data);
75657 });else done(stream);
75658 });
75659 }
75660
75661 Transform.prototype.push = function (chunk, encoding) {
75662 this._transformState.needTransform = false;
75663 return Duplex.prototype.push.call(this, chunk, encoding);
75664 };
75665
75666 // This is the part where you do stuff!
75667 // override this function in implementation classes.
75668 // 'chunk' is an input chunk.
75669 //
75670 // Call `push(newChunk)` to pass along transformed output
75671 // to the readable side. You may call 'push' zero or more times.
75672 //
75673 // Call `cb(err)` when you are done with this chunk. If you pass
75674 // an error, then that'll put the hurt on the whole operation. If you
75675 // never call cb(), then you'll never get another chunk.
75676 Transform.prototype._transform = function (chunk, encoding, cb) {
75677 throw new Error('_transform() is not implemented');
75678 };
75679
75680 Transform.prototype._write = function (chunk, encoding, cb) {
75681 var ts = this._transformState;
75682 ts.writecb = cb;
75683 ts.writechunk = chunk;
75684 ts.writeencoding = encoding;
75685 if (!ts.transforming) {
75686 var rs = this._readableState;
75687 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
75688 }
75689 };
75690
75691 // Doesn't matter what the args are here.
75692 // _transform does all the work.
75693 // That we got here means that the readable side wants more data.
75694 Transform.prototype._read = function (n) {
75695 var ts = this._transformState;
75696
75697 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
75698 ts.transforming = true;
75699 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
75700 } else {
75701 // mark that we need a transform, so that any data that comes in
75702 // will get processed, now that we've asked for it.
75703 ts.needTransform = true;
75704 }
75705 };
75706
75707 function done(stream, er, data) {
75708 if (er) return stream.emit('error', er);
75709
75710 if (data !== null && data !== undefined) stream.push(data);
75711
75712 // if there's nothing in the write buffer, then that means
75713 // that nothing more will ever be provided
75714 var ws = stream._writableState;
75715 var ts = stream._transformState;
75716
75717 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
75718
75719 if (ts.transforming) throw new Error('Calling transform done when still transforming');
75720
75721 return stream.push(null);
75722 }
75723 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
75724 (function (process){
75725 // A bit simpler than readable streams.
75726 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
75727 // the drain event emission and buffering.
75728
75729 'use strict';
75730
75731 module.exports = Writable;
75732
75733 /*<replacement>*/
75734 var processNextTick = require('process-nextick-args');
75735 /*</replacement>*/
75736
75737 /*<replacement>*/
75738 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
75739 /*</replacement>*/
75740
75741 /*<replacement>*/
75742 var Duplex;
75743 /*</replacement>*/
75744
75745 Writable.WritableState = WritableState;
75746
75747 /*<replacement>*/
75748 var util = require('core-util-is');
75749 util.inherits = require('inherits');
75750 /*</replacement>*/
75751
75752 /*<replacement>*/
75753 var internalUtil = {
75754 deprecate: require('util-deprecate')
75755 };
75756 /*</replacement>*/
75757
75758 /*<replacement>*/
75759 var Stream;
75760 (function () {
75761 try {
75762 Stream = require('st' + 'ream');
75763 } catch (_) {} finally {
75764 if (!Stream) Stream = require('events').EventEmitter;
75765 }
75766 })();
75767 /*</replacement>*/
75768
75769 var Buffer = require('buffer').Buffer;
75770 /*<replacement>*/
75771 var bufferShim = require('buffer-shims');
75772 /*</replacement>*/
75773
75774 util.inherits(Writable, Stream);
75775
75776 function nop() {}
75777
75778 function WriteReq(chunk, encoding, cb) {
75779 this.chunk = chunk;
75780 this.encoding = encoding;
75781 this.callback = cb;
75782 this.next = null;
75783 }
75784
75785 function WritableState(options, stream) {
75786 Duplex = Duplex || require('./_stream_duplex');
75787
75788 options = options || {};
75789
75790 // object stream flag to indicate whether or not this stream
75791 // contains buffers or objects.
75792 this.objectMode = !!options.objectMode;
75793
75794 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
75795
75796 // the point at which write() starts returning false
75797 // Note: 0 is a valid value, means that we always return false if
75798 // the entire buffer is not flushed immediately on write()
75799 var hwm = options.highWaterMark;
75800 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
75801 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
75802
75803 // cast to ints.
75804 this.highWaterMark = ~ ~this.highWaterMark;
75805
75806 // drain event flag.
75807 this.needDrain = false;
75808 // at the start of calling end()
75809 this.ending = false;
75810 // when end() has been called, and returned
75811 this.ended = false;
75812 // when 'finish' is emitted
75813 this.finished = false;
75814
75815 // should we decode strings into buffers before passing to _write?
75816 // this is here so that some node-core streams can optimize string
75817 // handling at a lower level.
75818 var noDecode = options.decodeStrings === false;
75819 this.decodeStrings = !noDecode;
75820
75821 // Crypto is kind of old and crusty. Historically, its default string
75822 // encoding is 'binary' so we have to make this configurable.
75823 // Everything else in the universe uses 'utf8', though.
75824 this.defaultEncoding = options.defaultEncoding || 'utf8';
75825
75826 // not an actual buffer we keep track of, but a measurement
75827 // of how much we're waiting to get pushed to some underlying
75828 // socket or file.
75829 this.length = 0;
75830
75831 // a flag to see when we're in the middle of a write.
75832 this.writing = false;
75833
75834 // when true all writes will be buffered until .uncork() call
75835 this.corked = 0;
75836
75837 // a flag to be able to tell if the onwrite cb is called immediately,
75838 // or on a later tick. We set this to true at first, because any
75839 // actions that shouldn't happen until "later" should generally also
75840 // not happen before the first write call.
75841 this.sync = true;
75842
75843 // a flag to know if we're processing previously buffered items, which
75844 // may call the _write() callback in the same tick, so that we don't
75845 // end up in an overlapped onwrite situation.
75846 this.bufferProcessing = false;
75847
75848 // the callback that's passed to _write(chunk,cb)
75849 this.onwrite = function (er) {
75850 onwrite(stream, er);
75851 };
75852
75853 // the callback that the user supplies to write(chunk,encoding,cb)
75854 this.writecb = null;
75855
75856 // the amount that is being written when _write is called.
75857 this.writelen = 0;
75858
75859 this.bufferedRequest = null;
75860 this.lastBufferedRequest = null;
75861
75862 // number of pending user-supplied write callbacks
75863 // this must be 0 before 'finish' can be emitted
75864 this.pendingcb = 0;
75865
75866 // emit prefinish if the only thing we're waiting for is _write cbs
75867 // This is relevant for synchronous Transform streams
75868 this.prefinished = false;
75869
75870 // True if the error was already emitted and should not be thrown again
75871 this.errorEmitted = false;
75872
75873 // count buffered requests
75874 this.bufferedRequestCount = 0;
75875
75876 // allocate the first CorkedRequest, there is always
75877 // one allocated and free to use, and we maintain at most two
75878 this.corkedRequestsFree = new CorkedRequest(this);
75879 }
75880
75881 WritableState.prototype.getBuffer = function getBuffer() {
75882 var current = this.bufferedRequest;
75883 var out = [];
75884 while (current) {
75885 out.push(current);
75886 current = current.next;
75887 }
75888 return out;
75889 };
75890
75891 (function () {
75892 try {
75893 Object.defineProperty(WritableState.prototype, 'buffer', {
75894 get: internalUtil.deprecate(function () {
75895 return this.getBuffer();
75896 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
75897 });
75898 } catch (_) {}
75899 })();
75900
75901 // Test _writableState for inheritance to account for Duplex streams,
75902 // whose prototype chain only points to Readable.
75903 var realHasInstance;
75904 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
75905 realHasInstance = Function.prototype[Symbol.hasInstance];
75906 Object.defineProperty(Writable, Symbol.hasInstance, {
75907 value: function (object) {
75908 if (realHasInstance.call(this, object)) return true;
75909
75910 return object && object._writableState instanceof WritableState;
75911 }
75912 });
75913 } else {
75914 realHasInstance = function (object) {
75915 return object instanceof this;
75916 };
75917 }
75918
75919 function Writable(options) {
75920 Duplex = Duplex || require('./_stream_duplex');
75921
75922 // Writable ctor is applied to Duplexes, too.
75923 // `realHasInstance` is necessary because using plain `instanceof`
75924 // would return false, as no `_writableState` property is attached.
75925
75926 // Trying to use the custom `instanceof` for Writable here will also break the
75927 // Node.js LazyTransform implementation, which has a non-trivial getter for
75928 // `_writableState` that would lead to infinite recursion.
75929 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
75930 return new Writable(options);
75931 }
75932
75933 this._writableState = new WritableState(options, this);
75934
75935 // legacy.
75936 this.writable = true;
75937
75938 if (options) {
75939 if (typeof options.write === 'function') this._write = options.write;
75940
75941 if (typeof options.writev === 'function') this._writev = options.writev;
75942 }
75943
75944 Stream.call(this);
75945 }
75946
75947 // Otherwise people can pipe Writable streams, which is just wrong.
75948 Writable.prototype.pipe = function () {
75949 this.emit('error', new Error('Cannot pipe, not readable'));
75950 };
75951
75952 function writeAfterEnd(stream, cb) {
75953 var er = new Error('write after end');
75954 // TODO: defer error events consistently everywhere, not just the cb
75955 stream.emit('error', er);
75956 processNextTick(cb, er);
75957 }
75958
75959 // If we get something that is not a buffer, string, null, or undefined,
75960 // and we're not in objectMode, then that's an error.
75961 // Otherwise stream chunks are all considered to be of length=1, and the
75962 // watermarks determine how many objects to keep in the buffer, rather than
75963 // how many bytes or characters.
75964 function validChunk(stream, state, chunk, cb) {
75965 var valid = true;
75966 var er = false;
75967 // Always throw error if a null is written
75968 // if we are not in object mode then throw
75969 // if it is not a buffer, string, or undefined.
75970 if (chunk === null) {
75971 er = new TypeError('May not write null values to stream');
75972 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
75973 er = new TypeError('Invalid non-string/buffer chunk');
75974 }
75975 if (er) {
75976 stream.emit('error', er);
75977 processNextTick(cb, er);
75978 valid = false;
75979 }
75980 return valid;
75981 }
75982
75983 Writable.prototype.write = function (chunk, encoding, cb) {
75984 var state = this._writableState;
75985 var ret = false;
75986
75987 if (typeof encoding === 'function') {
75988 cb = encoding;
75989 encoding = null;
75990 }
75991
75992 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
75993
75994 if (typeof cb !== 'function') cb = nop;
75995
75996 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
75997 state.pendingcb++;
75998 ret = writeOrBuffer(this, state, chunk, encoding, cb);
75999 }
76000
76001 return ret;
76002 };
76003
76004 Writable.prototype.cork = function () {
76005 var state = this._writableState;
76006
76007 state.corked++;
76008 };
76009
76010 Writable.prototype.uncork = function () {
76011 var state = this._writableState;
76012
76013 if (state.corked) {
76014 state.corked--;
76015
76016 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
76017 }
76018 };
76019
76020 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
76021 // node::ParseEncoding() requires lower case.
76022 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
76023 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
76024 this._writableState.defaultEncoding = encoding;
76025 return this;
76026 };
76027
76028 function decodeChunk(state, chunk, encoding) {
76029 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
76030 chunk = bufferShim.from(chunk, encoding);
76031 }
76032 return chunk;
76033 }
76034
76035 // if we're already writing something, then just put this
76036 // in the queue, and wait our turn. Otherwise, call _write
76037 // If we return false, then we need a drain event, so set that flag.
76038 function writeOrBuffer(stream, state, chunk, encoding, cb) {
76039 chunk = decodeChunk(state, chunk, encoding);
76040
76041 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
76042 var len = state.objectMode ? 1 : chunk.length;
76043
76044 state.length += len;
76045
76046 var ret = state.length < state.highWaterMark;
76047 // we must ensure that previous needDrain will not be reset to false.
76048 if (!ret) state.needDrain = true;
76049
76050 if (state.writing || state.corked) {
76051 var last = state.lastBufferedRequest;
76052 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
76053 if (last) {
76054 last.next = state.lastBufferedRequest;
76055 } else {
76056 state.bufferedRequest = state.lastBufferedRequest;
76057 }
76058 state.bufferedRequestCount += 1;
76059 } else {
76060 doWrite(stream, state, false, len, chunk, encoding, cb);
76061 }
76062
76063 return ret;
76064 }
76065
76066 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
76067 state.writelen = len;
76068 state.writecb = cb;
76069 state.writing = true;
76070 state.sync = true;
76071 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
76072 state.sync = false;
76073 }
76074
76075 function onwriteError(stream, state, sync, er, cb) {
76076 --state.pendingcb;
76077 if (sync) processNextTick(cb, er);else cb(er);
76078
76079 stream._writableState.errorEmitted = true;
76080 stream.emit('error', er);
76081 }
76082
76083 function onwriteStateUpdate(state) {
76084 state.writing = false;
76085 state.writecb = null;
76086 state.length -= state.writelen;
76087 state.writelen = 0;
76088 }
76089
76090 function onwrite(stream, er) {
76091 var state = stream._writableState;
76092 var sync = state.sync;
76093 var cb = state.writecb;
76094
76095 onwriteStateUpdate(state);
76096
76097 if (er) onwriteError(stream, state, sync, er, cb);else {
76098 // Check if we're actually ready to finish, but don't emit yet
76099 var finished = needFinish(state);
76100
76101 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
76102 clearBuffer(stream, state);
76103 }
76104
76105 if (sync) {
76106 /*<replacement>*/
76107 asyncWrite(afterWrite, stream, state, finished, cb);
76108 /*</replacement>*/
76109 } else {
76110 afterWrite(stream, state, finished, cb);
76111 }
76112 }
76113 }
76114
76115 function afterWrite(stream, state, finished, cb) {
76116 if (!finished) onwriteDrain(stream, state);
76117 state.pendingcb--;
76118 cb();
76119 finishMaybe(stream, state);
76120 }
76121
76122 // Must force callback to be called on nextTick, so that we don't
76123 // emit 'drain' before the write() consumer gets the 'false' return
76124 // value, and has a chance to attach a 'drain' listener.
76125 function onwriteDrain(stream, state) {
76126 if (state.length === 0 && state.needDrain) {
76127 state.needDrain = false;
76128 stream.emit('drain');
76129 }
76130 }
76131
76132 // if there's something in the buffer waiting, then process it
76133 function clearBuffer(stream, state) {
76134 state.bufferProcessing = true;
76135 var entry = state.bufferedRequest;
76136
76137 if (stream._writev && entry && entry.next) {
76138 // Fast case, write everything using _writev()
76139 var l = state.bufferedRequestCount;
76140 var buffer = new Array(l);
76141 var holder = state.corkedRequestsFree;
76142 holder.entry = entry;
76143
76144 var count = 0;
76145 while (entry) {
76146 buffer[count] = entry;
76147 entry = entry.next;
76148 count += 1;
76149 }
76150
76151 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
76152
76153 // doWrite is almost always async, defer these to save a bit of time
76154 // as the hot path ends with doWrite
76155 state.pendingcb++;
76156 state.lastBufferedRequest = null;
76157 if (holder.next) {
76158 state.corkedRequestsFree = holder.next;
76159 holder.next = null;
76160 } else {
76161 state.corkedRequestsFree = new CorkedRequest(state);
76162 }
76163 } else {
76164 // Slow case, write chunks one-by-one
76165 while (entry) {
76166 var chunk = entry.chunk;
76167 var encoding = entry.encoding;
76168 var cb = entry.callback;
76169 var len = state.objectMode ? 1 : chunk.length;
76170
76171 doWrite(stream, state, false, len, chunk, encoding, cb);
76172 entry = entry.next;
76173 // if we didn't call the onwrite immediately, then
76174 // it means that we need to wait until it does.
76175 // also, that means that the chunk and cb are currently
76176 // being processed, so move the buffer counter past them.
76177 if (state.writing) {
76178 break;
76179 }
76180 }
76181
76182 if (entry === null) state.lastBufferedRequest = null;
76183 }
76184
76185 state.bufferedRequestCount = 0;
76186 state.bufferedRequest = entry;
76187 state.bufferProcessing = false;
76188 }
76189
76190 Writable.prototype._write = function (chunk, encoding, cb) {
76191 cb(new Error('_write() is not implemented'));
76192 };
76193
76194 Writable.prototype._writev = null;
76195
76196 Writable.prototype.end = function (chunk, encoding, cb) {
76197 var state = this._writableState;
76198
76199 if (typeof chunk === 'function') {
76200 cb = chunk;
76201 chunk = null;
76202 encoding = null;
76203 } else if (typeof encoding === 'function') {
76204 cb = encoding;
76205 encoding = null;
76206 }
76207
76208 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
76209
76210 // .end() fully uncorks
76211 if (state.corked) {
76212 state.corked = 1;
76213 this.uncork();
76214 }
76215
76216 // ignore unnecessary end() calls.
76217 if (!state.ending && !state.finished) endWritable(this, state, cb);
76218 };
76219
76220 function needFinish(state) {
76221 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
76222 }
76223
76224 function prefinish(stream, state) {
76225 if (!state.prefinished) {
76226 state.prefinished = true;
76227 stream.emit('prefinish');
76228 }
76229 }
76230
76231 function finishMaybe(stream, state) {
76232 var need = needFinish(state);
76233 if (need) {
76234 if (state.pendingcb === 0) {
76235 prefinish(stream, state);
76236 state.finished = true;
76237 stream.emit('finish');
76238 } else {
76239 prefinish(stream, state);
76240 }
76241 }
76242 return need;
76243 }
76244
76245 function endWritable(stream, state, cb) {
76246 state.ending = true;
76247 finishMaybe(stream, state);
76248 if (cb) {
76249 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
76250 }
76251 state.ended = true;
76252 stream.writable = false;
76253 }
76254
76255 // It seems a linked list but it is not
76256 // there will be only 2 of these for each stream
76257 function CorkedRequest(state) {
76258 var _this = this;
76259
76260 this.next = null;
76261 this.entry = null;
76262
76263 this.finish = function (err) {
76264 var entry = _this.entry;
76265 _this.entry = null;
76266 while (entry) {
76267 var cb = entry.callback;
76268 state.pendingcb--;
76269 cb(err);
76270 entry = entry.next;
76271 }
76272 if (state.corkedRequestsFree) {
76273 state.corkedRequestsFree.next = _this;
76274 } else {
76275 state.corkedRequestsFree = _this;
76276 }
76277 };
76278 }
76279 }).call(this,require('_process'))
76280 },{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
76281 'use strict';
76282
76283 var Buffer = require('buffer').Buffer;
76284 /*<replacement>*/
76285 var bufferShim = require('buffer-shims');
76286 /*</replacement>*/
76287
76288 module.exports = BufferList;
76289
76290 function BufferList() {
76291 this.head = null;
76292 this.tail = null;
76293 this.length = 0;
76294 }
76295
76296 BufferList.prototype.push = function (v) {
76297 var entry = { data: v, next: null };
76298 if (this.length > 0) this.tail.next = entry;else this.head = entry;
76299 this.tail = entry;
76300 ++this.length;
76301 };
76302
76303 BufferList.prototype.unshift = function (v) {
76304 var entry = { data: v, next: this.head };
76305 if (this.length === 0) this.tail = entry;
76306 this.head = entry;
76307 ++this.length;
76308 };
76309
76310 BufferList.prototype.shift = function () {
76311 if (this.length === 0) return;
76312 var ret = this.head.data;
76313 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
76314 --this.length;
76315 return ret;
76316 };
76317
76318 BufferList.prototype.clear = function () {
76319 this.head = this.tail = null;
76320 this.length = 0;
76321 };
76322
76323 BufferList.prototype.join = function (s) {
76324 if (this.length === 0) return '';
76325 var p = this.head;
76326 var ret = '' + p.data;
76327 while (p = p.next) {
76328 ret += s + p.data;
76329 }return ret;
76330 };
76331
76332 BufferList.prototype.concat = function (n) {
76333 if (this.length === 0) return bufferShim.alloc(0);
76334 if (this.length === 1) return this.head.data;
76335 var ret = bufferShim.allocUnsafe(n >>> 0);
76336 var p = this.head;
76337 var i = 0;
76338 while (p) {
76339 p.data.copy(ret, i);
76340 i += p.data.length;
76341 p = p.next;
76342 }
76343 return ret;
76344 };
76345 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
76346 module.exports = require("./lib/_stream_passthrough.js")
76347
76348 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
76349 (function (process){
76350 var Stream = (function (){
76351 try {
76352 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
76353 } catch(_){}
76354 }());
76355 exports = module.exports = require('./lib/_stream_readable.js');
76356 exports.Stream = Stream || exports;
76357 exports.Readable = exports;
76358 exports.Writable = require('./lib/_stream_writable.js');
76359 exports.Duplex = require('./lib/_stream_duplex.js');
76360 exports.Transform = require('./lib/_stream_transform.js');
76361 exports.PassThrough = require('./lib/_stream_passthrough.js');
76362
76363 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
76364 module.exports = Stream;
76365 }
76366
76367 }).call(this,require('_process'))
76368 },{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
76369 module.exports = require("./lib/_stream_transform.js")
76370
76371 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
76372 module.exports = require("./lib/_stream_writable.js")
76373
76374 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
76375 // Copyright Joyent, Inc. and other Node contributors.
76376 //
76377 // Permission is hereby granted, free of charge, to any person obtaining a
76378 // copy of this software and associated documentation files (the
76379 // "Software"), to deal in the Software without restriction, including
76380 // without limitation the rights to use, copy, modify, merge, publish,
76381 // distribute, sublicense, and/or sell copies of the Software, and to permit
76382 // persons to whom the Software is furnished to do so, subject to the
76383 // following conditions:
76384 //
76385 // The above copyright notice and this permission notice shall be included
76386 // in all copies or substantial portions of the Software.
76387 //
76388 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76389 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76390 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76391 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76392 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76393 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76394 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76395
76396 module.exports = Stream;
76397
76398 var EE = require('events').EventEmitter;
76399 var inherits = require('inherits');
76400
76401 inherits(Stream, EE);
76402 Stream.Readable = require('readable-stream/readable.js');
76403 Stream.Writable = require('readable-stream/writable.js');
76404 Stream.Duplex = require('readable-stream/duplex.js');
76405 Stream.Transform = require('readable-stream/transform.js');
76406 Stream.PassThrough = require('readable-stream/passthrough.js');
76407
76408 // Backwards-compat with node 0.4.x
76409 Stream.Stream = Stream;
76410
76411
76412
76413 // old-style streams. Note that the pipe method (the only relevant
76414 // part of this class) is overridden in the Readable class.
76415
76416 function Stream() {
76417 EE.call(this);
76418 }
76419
76420 Stream.prototype.pipe = function(dest, options) {
76421 var source = this;
76422
76423 function ondata(chunk) {
76424 if (dest.writable) {
76425 if (false === dest.write(chunk) && source.pause) {
76426 source.pause();
76427 }
76428 }
76429 }
76430
76431 source.on('data', ondata);
76432
76433 function ondrain() {
76434 if (source.readable && source.resume) {
76435 source.resume();
76436 }
76437 }
76438
76439 dest.on('drain', ondrain);
76440
76441 // If the 'end' option is not supplied, dest.end() will be called when
76442 // source gets the 'end' or 'close' events. Only dest.end() once.
76443 if (!dest._isStdio && (!options || options.end !== false)) {
76444 source.on('end', onend);
76445 source.on('close', onclose);
76446 }
76447
76448 var didOnEnd = false;
76449 function onend() {
76450 if (didOnEnd) return;
76451 didOnEnd = true;
76452
76453 dest.end();
76454 }
76455
76456
76457 function onclose() {
76458 if (didOnEnd) return;
76459 didOnEnd = true;
76460
76461 if (typeof dest.destroy === 'function') dest.destroy();
76462 }
76463
76464 // don't leave dangling pipes when there are errors.
76465 function onerror(er) {
76466 cleanup();
76467 if (EE.listenerCount(this, 'error') === 0) {
76468 throw er; // Unhandled stream error in pipe.
76469 }
76470 }
76471
76472 source.on('error', onerror);
76473 dest.on('error', onerror);
76474
76475 // remove all the event listeners that were added.
76476 function cleanup() {
76477 source.removeListener('data', ondata);
76478 dest.removeListener('drain', ondrain);
76479
76480 source.removeListener('end', onend);
76481 source.removeListener('close', onclose);
76482
76483 source.removeListener('error', onerror);
76484 dest.removeListener('error', onerror);
76485
76486 source.removeListener('end', cleanup);
76487 source.removeListener('close', cleanup);
76488
76489 dest.removeListener('close', cleanup);
76490 }
76491
76492 source.on('end', cleanup);
76493 source.on('close', cleanup);
76494
76495 dest.on('close', cleanup);
76496
76497 dest.emit('pipe', source);
76498
76499 // Allow for unix-like usage: A.pipe(B).pipe(C)
76500 return dest;
76501 };
76502
76503 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
76504 // Copyright Joyent, Inc. and other Node contributors.
76505 //
76506 // Permission is hereby granted, free of charge, to any person obtaining a
76507 // copy of this software and associated documentation files (the
76508 // "Software"), to deal in the Software without restriction, including
76509 // without limitation the rights to use, copy, modify, merge, publish,
76510 // distribute, sublicense, and/or sell copies of the Software, and to permit
76511 // persons to whom the Software is furnished to do so, subject to the
76512 // following conditions:
76513 //
76514 // The above copyright notice and this permission notice shall be included
76515 // in all copies or substantial portions of the Software.
76516 //
76517 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76518 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76519 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76520 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76521 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76522 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76523 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76524
76525 var Buffer = require('buffer').Buffer;
76526
76527 var isBufferEncoding = Buffer.isEncoding
76528 || function(encoding) {
76529 switch (encoding && encoding.toLowerCase()) {
76530 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;
76531 default: return false;
76532 }
76533 }
76534
76535
76536 function assertEncoding(encoding) {
76537 if (encoding && !isBufferEncoding(encoding)) {
76538 throw new Error('Unknown encoding: ' + encoding);
76539 }
76540 }
76541
76542 // StringDecoder provides an interface for efficiently splitting a series of
76543 // buffers into a series of JS strings without breaking apart multi-byte
76544 // characters. CESU-8 is handled as part of the UTF-8 encoding.
76545 //
76546 // @TODO Handling all encodings inside a single object makes it very difficult
76547 // to reason about this code, so it should be split up in the future.
76548 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
76549 // points as used by CESU-8.
76550 var StringDecoder = exports.StringDecoder = function(encoding) {
76551 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
76552 assertEncoding(encoding);
76553 switch (this.encoding) {
76554 case 'utf8':
76555 // CESU-8 represents each of Surrogate Pair by 3-bytes
76556 this.surrogateSize = 3;
76557 break;
76558 case 'ucs2':
76559 case 'utf16le':
76560 // UTF-16 represents each of Surrogate Pair by 2-bytes
76561 this.surrogateSize = 2;
76562 this.detectIncompleteChar = utf16DetectIncompleteChar;
76563 break;
76564 case 'base64':
76565 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
76566 this.surrogateSize = 3;
76567 this.detectIncompleteChar = base64DetectIncompleteChar;
76568 break;
76569 default:
76570 this.write = passThroughWrite;
76571 return;
76572 }
76573
76574 // Enough space to store all bytes of a single character. UTF-8 needs 4
76575 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
76576 this.charBuffer = new Buffer(6);
76577 // Number of bytes received for the current incomplete multi-byte character.
76578 this.charReceived = 0;
76579 // Number of bytes expected for the current incomplete multi-byte character.
76580 this.charLength = 0;
76581 };
76582
76583
76584 // write decodes the given buffer and returns it as JS string that is
76585 // guaranteed to not contain any partial multi-byte characters. Any partial
76586 // character found at the end of the buffer is buffered up, and will be
76587 // returned when calling write again with the remaining bytes.
76588 //
76589 // Note: Converting a Buffer containing an orphan surrogate to a String
76590 // currently works, but converting a String to a Buffer (via `new Buffer`, or
76591 // Buffer#write) will replace incomplete surrogates with the unicode
76592 // replacement character. See https://codereview.chromium.org/121173009/ .
76593 StringDecoder.prototype.write = function(buffer) {
76594 var charStr = '';
76595 // if our last write ended with an incomplete multibyte character
76596 while (this.charLength) {
76597 // determine how many remaining bytes this buffer has to offer for this char
76598 var available = (buffer.length >= this.charLength - this.charReceived) ?
76599 this.charLength - this.charReceived :
76600 buffer.length;
76601
76602 // add the new bytes to the char buffer
76603 buffer.copy(this.charBuffer, this.charReceived, 0, available);
76604 this.charReceived += available;
76605
76606 if (this.charReceived < this.charLength) {
76607 // still not enough chars in this buffer? wait for more ...
76608 return '';
76609 }
76610
76611 // remove bytes belonging to the current character from the buffer
76612 buffer = buffer.slice(available, buffer.length);
76613
76614 // get the character that was split
76615 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
76616
76617 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76618 var charCode = charStr.charCodeAt(charStr.length - 1);
76619 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76620 this.charLength += this.surrogateSize;
76621 charStr = '';
76622 continue;
76623 }
76624 this.charReceived = this.charLength = 0;
76625
76626 // if there are no more bytes in this buffer, just emit our char
76627 if (buffer.length === 0) {
76628 return charStr;
76629 }
76630 break;
76631 }
76632
76633 // determine and set charLength / charReceived
76634 this.detectIncompleteChar(buffer);
76635
76636 var end = buffer.length;
76637 if (this.charLength) {
76638 // buffer the incomplete character bytes we got
76639 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
76640 end -= this.charReceived;
76641 }
76642
76643 charStr += buffer.toString(this.encoding, 0, end);
76644
76645 var end = charStr.length - 1;
76646 var charCode = charStr.charCodeAt(end);
76647 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76648 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76649 var size = this.surrogateSize;
76650 this.charLength += size;
76651 this.charReceived += size;
76652 this.charBuffer.copy(this.charBuffer, size, 0, size);
76653 buffer.copy(this.charBuffer, 0, 0, size);
76654 return charStr.substring(0, end);
76655 }
76656
76657 // or just emit the charStr
76658 return charStr;
76659 };
76660
76661 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
76662 // the end of the given buffer. If so, it sets this.charLength to the byte
76663 // length that character, and sets this.charReceived to the number of bytes
76664 // that are available for this character.
76665 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
76666 // determine how many bytes we have to check at the end of this buffer
76667 var i = (buffer.length >= 3) ? 3 : buffer.length;
76668
76669 // Figure out if one of the last i bytes of our buffer announces an
76670 // incomplete char.
76671 for (; i > 0; i--) {
76672 var c = buffer[buffer.length - i];
76673
76674 // See http://en.wikipedia.org/wiki/UTF-8#Description
76675
76676 // 110XXXXX
76677 if (i == 1 && c >> 5 == 0x06) {
76678 this.charLength = 2;
76679 break;
76680 }
76681
76682 // 1110XXXX
76683 if (i <= 2 && c >> 4 == 0x0E) {
76684 this.charLength = 3;
76685 break;
76686 }
76687
76688 // 11110XXX
76689 if (i <= 3 && c >> 3 == 0x1E) {
76690 this.charLength = 4;
76691 break;
76692 }
76693 }
76694 this.charReceived = i;
76695 };
76696
76697 StringDecoder.prototype.end = function(buffer) {
76698 var res = '';
76699 if (buffer && buffer.length)
76700 res = this.write(buffer);
76701
76702 if (this.charReceived) {
76703 var cr = this.charReceived;
76704 var buf = this.charBuffer;
76705 var enc = this.encoding;
76706 res += buf.slice(0, cr).toString(enc);
76707 }
76708
76709 return res;
76710 };
76711
76712 function passThroughWrite(buffer) {
76713 return buffer.toString(this.encoding);
76714 }
76715
76716 function utf16DetectIncompleteChar(buffer) {
76717 this.charReceived = buffer.length % 2;
76718 this.charLength = this.charReceived ? 2 : 0;
76719 }
76720
76721 function base64DetectIncompleteChar(buffer) {
76722 this.charReceived = buffer.length % 3;
76723 this.charLength = this.charReceived ? 3 : 0;
76724 }
76725
76726 },{"buffer":5}],27:[function(require,module,exports){
76727 (function (global){
76728
76729 /**
76730 * Module exports.
76731 */
76732
76733 module.exports = deprecate;
76734
76735 /**
76736 * Mark that a method should not be used.
76737 * Returns a modified function which warns once by default.
76738 *
76739 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
76740 *
76741 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
76742 * will throw an Error when invoked.
76743 *
76744 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
76745 * will invoke `console.trace()` instead of `console.error()`.
76746 *
76747 * @param {Function} fn - the function to deprecate
76748 * @param {String} msg - the string to print to the console when `fn` is invoked
76749 * @returns {Function} a new "deprecated" version of `fn`
76750 * @api public
76751 */
76752
76753 function deprecate (fn, msg) {
76754 if (config('noDeprecation')) {
76755 return fn;
76756 }
76757
76758 var warned = false;
76759 function deprecated() {
76760 if (!warned) {
76761 if (config('throwDeprecation')) {
76762 throw new Error(msg);
76763 } else if (config('traceDeprecation')) {
76764 console.trace(msg);
76765 } else {
76766 console.warn(msg);
76767 }
76768 warned = true;
76769 }
76770 return fn.apply(this, arguments);
76771 }
76772
76773 return deprecated;
76774 }
76775
76776 /**
76777 * Checks `localStorage` for boolean values for the given `name`.
76778 *
76779 * @param {String} name
76780 * @returns {Boolean}
76781 * @api private
76782 */
76783
76784 function config (name) {
76785 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
76786 try {
76787 if (!global.localStorage) return false;
76788 } catch (_) {
76789 return false;
76790 }
76791 var val = global.localStorage[name];
76792 if (null == val) return false;
76793 return String(val).toLowerCase() === 'true';
76794 }
76795
76796 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
76797 },{}],28:[function(require,module,exports){
76798 arguments[4][9][0].apply(exports,arguments)
76799 },{"dup":9}],29:[function(require,module,exports){
76800 module.exports = function isBuffer(arg) {
76801 return arg && typeof arg === 'object'
76802 && typeof arg.copy === 'function'
76803 && typeof arg.fill === 'function'
76804 && typeof arg.readUInt8 === 'function';
76805 }
76806 },{}],30:[function(require,module,exports){
76807 (function (process,global){
76808 // Copyright Joyent, Inc. and other Node contributors.
76809 //
76810 // Permission is hereby granted, free of charge, to any person obtaining a
76811 // copy of this software and associated documentation files (the
76812 // "Software"), to deal in the Software without restriction, including
76813 // without limitation the rights to use, copy, modify, merge, publish,
76814 // distribute, sublicense, and/or sell copies of the Software, and to permit
76815 // persons to whom the Software is furnished to do so, subject to the
76816 // following conditions:
76817 //
76818 // The above copyright notice and this permission notice shall be included
76819 // in all copies or substantial portions of the Software.
76820 //
76821 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76822 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76823 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76824 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76825 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76826 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76827 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76828
76829 var formatRegExp = /%[sdj%]/g;
76830 exports.format = function(f) {
76831 if (!isString(f)) {
76832 var objects = [];
76833 for (var i = 0; i < arguments.length; i++) {
76834 objects.push(inspect(arguments[i]));
76835 }
76836 return objects.join(' ');
76837 }
76838
76839 var i = 1;
76840 var args = arguments;
76841 var len = args.length;
76842 var str = String(f).replace(formatRegExp, function(x) {
76843 if (x === '%%') return '%';
76844 if (i >= len) return x;
76845 switch (x) {
76846 case '%s': return String(args[i++]);
76847 case '%d': return Number(args[i++]);
76848 case '%j':
76849 try {
76850 return JSON.stringify(args[i++]);
76851 } catch (_) {
76852 return '[Circular]';
76853 }
76854 default:
76855 return x;
76856 }
76857 });
76858 for (var x = args[i]; i < len; x = args[++i]) {
76859 if (isNull(x) || !isObject(x)) {
76860 str += ' ' + x;
76861 } else {
76862 str += ' ' + inspect(x);
76863 }
76864 }
76865 return str;
76866 };
76867
76868
76869 // Mark that a method should not be used.
76870 // Returns a modified function which warns once by default.
76871 // If --no-deprecation is set, then it is a no-op.
76872 exports.deprecate = function(fn, msg) {
76873 // Allow for deprecating things in the process of starting up.
76874 if (isUndefined(global.process)) {
76875 return function() {
76876 return exports.deprecate(fn, msg).apply(this, arguments);
76877 };
76878 }
76879
76880 if (process.noDeprecation === true) {
76881 return fn;
76882 }
76883
76884 var warned = false;
76885 function deprecated() {
76886 if (!warned) {
76887 if (process.throwDeprecation) {
76888 throw new Error(msg);
76889 } else if (process.traceDeprecation) {
76890 console.trace(msg);
76891 } else {
76892 console.error(msg);
76893 }
76894 warned = true;
76895 }
76896 return fn.apply(this, arguments);
76897 }
76898
76899 return deprecated;
76900 };
76901
76902
76903 var debugs = {};
76904 var debugEnviron;
76905 exports.debuglog = function(set) {
76906 if (isUndefined(debugEnviron))
76907 debugEnviron = process.env.NODE_DEBUG || '';
76908 set = set.toUpperCase();
76909 if (!debugs[set]) {
76910 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
76911 var pid = process.pid;
76912 debugs[set] = function() {
76913 var msg = exports.format.apply(exports, arguments);
76914 console.error('%s %d: %s', set, pid, msg);
76915 };
76916 } else {
76917 debugs[set] = function() {};
76918 }
76919 }
76920 return debugs[set];
76921 };
76922
76923
76924 /**
76925 * Echos the value of a value. Trys to print the value out
76926 * in the best way possible given the different types.
76927 *
76928 * @param {Object} obj The object to print out.
76929 * @param {Object} opts Optional options object that alters the output.
76930 */
76931 /* legacy: obj, showHidden, depth, colors*/
76932 function inspect(obj, opts) {
76933 // default options
76934 var ctx = {
76935 seen: [],
76936 stylize: stylizeNoColor
76937 };
76938 // legacy...
76939 if (arguments.length >= 3) ctx.depth = arguments[2];
76940 if (arguments.length >= 4) ctx.colors = arguments[3];
76941 if (isBoolean(opts)) {
76942 // legacy...
76943 ctx.showHidden = opts;
76944 } else if (opts) {
76945 // got an "options" object
76946 exports._extend(ctx, opts);
76947 }
76948 // set default options
76949 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
76950 if (isUndefined(ctx.depth)) ctx.depth = 2;
76951 if (isUndefined(ctx.colors)) ctx.colors = false;
76952 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
76953 if (ctx.colors) ctx.stylize = stylizeWithColor;
76954 return formatValue(ctx, obj, ctx.depth);
76955 }
76956 exports.inspect = inspect;
76957
76958
76959 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
76960 inspect.colors = {
76961 'bold' : [1, 22],
76962 'italic' : [3, 23],
76963 'underline' : [4, 24],
76964 'inverse' : [7, 27],
76965 'white' : [37, 39],
76966 'grey' : [90, 39],
76967 'black' : [30, 39],
76968 'blue' : [34, 39],
76969 'cyan' : [36, 39],
76970 'green' : [32, 39],
76971 'magenta' : [35, 39],
76972 'red' : [31, 39],
76973 'yellow' : [33, 39]
76974 };
76975
76976 // Don't use 'blue' not visible on cmd.exe
76977 inspect.styles = {
76978 'special': 'cyan',
76979 'number': 'yellow',
76980 'boolean': 'yellow',
76981 'undefined': 'grey',
76982 'null': 'bold',
76983 'string': 'green',
76984 'date': 'magenta',
76985 // "name": intentionally not styling
76986 'regexp': 'red'
76987 };
76988
76989
76990 function stylizeWithColor(str, styleType) {
76991 var style = inspect.styles[styleType];
76992
76993 if (style) {
76994 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
76995 '\u001b[' + inspect.colors[style][1] + 'm';
76996 } else {
76997 return str;
76998 }
76999 }
77000
77001
77002 function stylizeNoColor(str, styleType) {
77003 return str;
77004 }
77005
77006
77007 function arrayToHash(array) {
77008 var hash = {};
77009
77010 array.forEach(function(val, idx) {
77011 hash[val] = true;
77012 });
77013
77014 return hash;
77015 }
77016
77017
77018 function formatValue(ctx, value, recurseTimes) {
77019 // Provide a hook for user-specified inspect functions.
77020 // Check that value is an object with an inspect function on it
77021 if (ctx.customInspect &&
77022 value &&
77023 isFunction(value.inspect) &&
77024 // Filter out the util module, it's inspect function is special
77025 value.inspect !== exports.inspect &&
77026 // Also filter out any prototype objects using the circular check.
77027 !(value.constructor && value.constructor.prototype === value)) {
77028 var ret = value.inspect(recurseTimes, ctx);
77029 if (!isString(ret)) {
77030 ret = formatValue(ctx, ret, recurseTimes);
77031 }
77032 return ret;
77033 }
77034
77035 // Primitive types cannot have properties
77036 var primitive = formatPrimitive(ctx, value);
77037 if (primitive) {
77038 return primitive;
77039 }
77040
77041 // Look up the keys of the object.
77042 var keys = Object.keys(value);
77043 var visibleKeys = arrayToHash(keys);
77044
77045 if (ctx.showHidden) {
77046 keys = Object.getOwnPropertyNames(value);
77047 }
77048
77049 // IE doesn't make error fields non-enumerable
77050 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
77051 if (isError(value)
77052 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
77053 return formatError(value);
77054 }
77055
77056 // Some type of object without properties can be shortcutted.
77057 if (keys.length === 0) {
77058 if (isFunction(value)) {
77059 var name = value.name ? ': ' + value.name : '';
77060 return ctx.stylize('[Function' + name + ']', 'special');
77061 }
77062 if (isRegExp(value)) {
77063 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77064 }
77065 if (isDate(value)) {
77066 return ctx.stylize(Date.prototype.toString.call(value), 'date');
77067 }
77068 if (isError(value)) {
77069 return formatError(value);
77070 }
77071 }
77072
77073 var base = '', array = false, braces = ['{', '}'];
77074
77075 // Make Array say that they are Array
77076 if (isArray(value)) {
77077 array = true;
77078 braces = ['[', ']'];
77079 }
77080
77081 // Make functions say that they are functions
77082 if (isFunction(value)) {
77083 var n = value.name ? ': ' + value.name : '';
77084 base = ' [Function' + n + ']';
77085 }
77086
77087 // Make RegExps say that they are RegExps
77088 if (isRegExp(value)) {
77089 base = ' ' + RegExp.prototype.toString.call(value);
77090 }
77091
77092 // Make dates with properties first say the date
77093 if (isDate(value)) {
77094 base = ' ' + Date.prototype.toUTCString.call(value);
77095 }
77096
77097 // Make error with message first say the error
77098 if (isError(value)) {
77099 base = ' ' + formatError(value);
77100 }
77101
77102 if (keys.length === 0 && (!array || value.length == 0)) {
77103 return braces[0] + base + braces[1];
77104 }
77105
77106 if (recurseTimes < 0) {
77107 if (isRegExp(value)) {
77108 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77109 } else {
77110 return ctx.stylize('[Object]', 'special');
77111 }
77112 }
77113
77114 ctx.seen.push(value);
77115
77116 var output;
77117 if (array) {
77118 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
77119 } else {
77120 output = keys.map(function(key) {
77121 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
77122 });
77123 }
77124
77125 ctx.seen.pop();
77126
77127 return reduceToSingleString(output, base, braces);
77128 }
77129
77130
77131 function formatPrimitive(ctx, value) {
77132 if (isUndefined(value))
77133 return ctx.stylize('undefined', 'undefined');
77134 if (isString(value)) {
77135 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
77136 .replace(/'/g, "\\'")
77137 .replace(/\\"/g, '"') + '\'';
77138 return ctx.stylize(simple, 'string');
77139 }
77140 if (isNumber(value))
77141 return ctx.stylize('' + value, 'number');
77142 if (isBoolean(value))
77143 return ctx.stylize('' + value, 'boolean');
77144 // For some reason typeof null is "object", so special case here.
77145 if (isNull(value))
77146 return ctx.stylize('null', 'null');
77147 }
77148
77149
77150 function formatError(value) {
77151 return '[' + Error.prototype.toString.call(value) + ']';
77152 }
77153
77154
77155 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
77156 var output = [];
77157 for (var i = 0, l = value.length; i < l; ++i) {
77158 if (hasOwnProperty(value, String(i))) {
77159 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77160 String(i), true));
77161 } else {
77162 output.push('');
77163 }
77164 }
77165 keys.forEach(function(key) {
77166 if (!key.match(/^\d+$/)) {
77167 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77168 key, true));
77169 }
77170 });
77171 return output;
77172 }
77173
77174
77175 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
77176 var name, str, desc;
77177 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
77178 if (desc.get) {
77179 if (desc.set) {
77180 str = ctx.stylize('[Getter/Setter]', 'special');
77181 } else {
77182 str = ctx.stylize('[Getter]', 'special');
77183 }
77184 } else {
77185 if (desc.set) {
77186 str = ctx.stylize('[Setter]', 'special');
77187 }
77188 }
77189 if (!hasOwnProperty(visibleKeys, key)) {
77190 name = '[' + key + ']';
77191 }
77192 if (!str) {
77193 if (ctx.seen.indexOf(desc.value) < 0) {
77194 if (isNull(recurseTimes)) {
77195 str = formatValue(ctx, desc.value, null);
77196 } else {
77197 str = formatValue(ctx, desc.value, recurseTimes - 1);
77198 }
77199 if (str.indexOf('\n') > -1) {
77200 if (array) {
77201 str = str.split('\n').map(function(line) {
77202 return ' ' + line;
77203 }).join('\n').substr(2);
77204 } else {
77205 str = '\n' + str.split('\n').map(function(line) {
77206 return ' ' + line;
77207 }).join('\n');
77208 }
77209 }
77210 } else {
77211 str = ctx.stylize('[Circular]', 'special');
77212 }
77213 }
77214 if (isUndefined(name)) {
77215 if (array && key.match(/^\d+$/)) {
77216 return str;
77217 }
77218 name = JSON.stringify('' + key);
77219 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
77220 name = name.substr(1, name.length - 2);
77221 name = ctx.stylize(name, 'name');
77222 } else {
77223 name = name.replace(/'/g, "\\'")
77224 .replace(/\\"/g, '"')
77225 .replace(/(^"|"$)/g, "'");
77226 name = ctx.stylize(name, 'string');
77227 }
77228 }
77229
77230 return name + ': ' + str;
77231 }
77232
77233
77234 function reduceToSingleString(output, base, braces) {
77235 var numLinesEst = 0;
77236 var length = output.reduce(function(prev, cur) {
77237 numLinesEst++;
77238 if (cur.indexOf('\n') >= 0) numLinesEst++;
77239 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
77240 }, 0);
77241
77242 if (length > 60) {
77243 return braces[0] +
77244 (base === '' ? '' : base + '\n ') +
77245 ' ' +
77246 output.join(',\n ') +
77247 ' ' +
77248 braces[1];
77249 }
77250
77251 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
77252 }
77253
77254
77255 // NOTE: These type checking functions intentionally don't use `instanceof`
77256 // because it is fragile and can be easily faked with `Object.create()`.
77257 function isArray(ar) {
77258 return Array.isArray(ar);
77259 }
77260 exports.isArray = isArray;
77261
77262 function isBoolean(arg) {
77263 return typeof arg === 'boolean';
77264 }
77265 exports.isBoolean = isBoolean;
77266
77267 function isNull(arg) {
77268 return arg === null;
77269 }
77270 exports.isNull = isNull;
77271
77272 function isNullOrUndefined(arg) {
77273 return arg == null;
77274 }
77275 exports.isNullOrUndefined = isNullOrUndefined;
77276
77277 function isNumber(arg) {
77278 return typeof arg === 'number';
77279 }
77280 exports.isNumber = isNumber;
77281
77282 function isString(arg) {
77283 return typeof arg === 'string';
77284 }
77285 exports.isString = isString;
77286
77287 function isSymbol(arg) {
77288 return typeof arg === 'symbol';
77289 }
77290 exports.isSymbol = isSymbol;
77291
77292 function isUndefined(arg) {
77293 return arg === void 0;
77294 }
77295 exports.isUndefined = isUndefined;
77296
77297 function isRegExp(re) {
77298 return isObject(re) && objectToString(re) === '[object RegExp]';
77299 }
77300 exports.isRegExp = isRegExp;
77301
77302 function isObject(arg) {
77303 return typeof arg === 'object' && arg !== null;
77304 }
77305 exports.isObject = isObject;
77306
77307 function isDate(d) {
77308 return isObject(d) && objectToString(d) === '[object Date]';
77309 }
77310 exports.isDate = isDate;
77311
77312 function isError(e) {
77313 return isObject(e) &&
77314 (objectToString(e) === '[object Error]' || e instanceof Error);
77315 }
77316 exports.isError = isError;
77317
77318 function isFunction(arg) {
77319 return typeof arg === 'function';
77320 }
77321 exports.isFunction = isFunction;
77322
77323 function isPrimitive(arg) {
77324 return arg === null ||
77325 typeof arg === 'boolean' ||
77326 typeof arg === 'number' ||
77327 typeof arg === 'string' ||
77328 typeof arg === 'symbol' || // ES6 symbol
77329 typeof arg === 'undefined';
77330 }
77331 exports.isPrimitive = isPrimitive;
77332
77333 exports.isBuffer = require('./support/isBuffer');
77334
77335 function objectToString(o) {
77336 return Object.prototype.toString.call(o);
77337 }
77338
77339
77340 function pad(n) {
77341 return n < 10 ? '0' + n.toString(10) : n.toString(10);
77342 }
77343
77344
77345 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
77346 'Oct', 'Nov', 'Dec'];
77347
77348 // 26 Feb 16:19:34
77349 function timestamp() {
77350 var d = new Date();
77351 var time = [pad(d.getHours()),
77352 pad(d.getMinutes()),
77353 pad(d.getSeconds())].join(':');
77354 return [d.getDate(), months[d.getMonth()], time].join(' ');
77355 }
77356
77357
77358 // log is just a thin wrapper to console.log that prepends a timestamp
77359 exports.log = function() {
77360 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
77361 };
77362
77363
77364 /**
77365 * Inherit the prototype methods from one constructor into another.
77366 *
77367 * The Function.prototype.inherits from lang.js rewritten as a standalone
77368 * function (not on Function.prototype). NOTE: If this file is to be loaded
77369 * during bootstrapping this function needs to be rewritten using some native
77370 * functions as prototype setup using normal JavaScript does not work as
77371 * expected during bootstrapping (see mirror.js in r114903).
77372 *
77373 * @param {function} ctor Constructor function which needs to inherit the
77374 * prototype.
77375 * @param {function} superCtor Constructor function to inherit prototype from.
77376 */
77377 exports.inherits = require('inherits');
77378
77379 exports._extend = function(origin, add) {
77380 // Don't do anything if add isn't an object
77381 if (!add || !isObject(add)) return origin;
77382
77383 var keys = Object.keys(add);
77384 var i = keys.length;
77385 while (i--) {
77386 origin[keys[i]] = add[keys[i]];
77387 }
77388 return origin;
77389 };
77390
77391 function hasOwnProperty(obj, prop) {
77392 return Object.prototype.hasOwnProperty.call(obj, prop);
77393 }
77394
77395 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
77396 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
77397 (function (Buffer){
77398 const createKeccakHash = require('keccak')
77399 const secp256k1 = require('secp256k1')
77400 const assert = require('assert')
77401 const rlp = require('rlp')
77402 const BN = require('bn.js')
77403 const createHash = require('create-hash')
77404 Object.assign(exports, require('ethjs-util'))
77405
77406 /**
77407 * the max integer that this VM can handle (a ```BN```)
77408 * @var {BN} MAX_INTEGER
77409 */
77410 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
77411
77412 /**
77413 * 2^256 (a ```BN```)
77414 * @var {BN} TWO_POW256
77415 */
77416 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
77417
77418 /**
77419 * SHA3-256 hash of null (a ```String```)
77420 * @var {String} SHA3_NULL_S
77421 */
77422 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
77423
77424 /**
77425 * SHA3-256 hash of null (a ```Buffer```)
77426 * @var {Buffer} SHA3_NULL
77427 */
77428 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
77429
77430 /**
77431 * SHA3-256 of an RLP of an empty array (a ```String```)
77432 * @var {String} SHA3_RLP_ARRAY_S
77433 */
77434 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
77435
77436 /**
77437 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
77438 * @var {Buffer} SHA3_RLP_ARRAY
77439 */
77440 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
77441
77442 /**
77443 * SHA3-256 hash of the RLP of null (a ```String```)
77444 * @var {String} SHA3_RLP_S
77445 */
77446 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
77447
77448 /**
77449 * SHA3-256 hash of the RLP of null (a ```Buffer```)
77450 * @var {Buffer} SHA3_RLP
77451 */
77452 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
77453
77454 /**
77455 * [`BN`](https://github.com/indutny/bn.js)
77456 * @var {Function}
77457 */
77458 exports.BN = BN
77459
77460 /**
77461 * [`rlp`](https://github.com/ethereumjs/rlp)
77462 * @var {Function}
77463 */
77464 exports.rlp = rlp
77465
77466 /**
77467 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
77468 * @var {Object}
77469 */
77470 exports.secp256k1 = secp256k1
77471
77472 /**
77473 * Returns a buffer filled with 0s
77474 * @method zeros
77475 * @param {Number} bytes the number of bytes the buffer should be
77476 * @return {Buffer}
77477 */
77478 exports.zeros = function (bytes) {
77479 return Buffer.allocUnsafe(bytes).fill(0)
77480 }
77481
77482 /**
77483 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77484 * Or it truncates the beginning if it exceeds.
77485 * @method lsetLength
77486 * @param {Buffer|Array} msg the value to pad
77487 * @param {Number} length the number of bytes the output should be
77488 * @param {Boolean} [right=false] whether to start padding form the left or right
77489 * @return {Buffer|Array}
77490 */
77491 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
77492 var buf = exports.zeros(length)
77493 msg = exports.toBuffer(msg)
77494 if (right) {
77495 if (msg.length < length) {
77496 msg.copy(buf)
77497 return buf
77498 }
77499 return msg.slice(0, length)
77500 } else {
77501 if (msg.length < length) {
77502 msg.copy(buf, length - msg.length)
77503 return buf
77504 }
77505 return msg.slice(-length)
77506 }
77507 }
77508
77509 /**
77510 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77511 * Or it truncates the beginning if it exceeds.
77512 * @param {Buffer|Array} msg the value to pad
77513 * @param {Number} length the number of bytes the output should be
77514 * @return {Buffer|Array}
77515 */
77516 exports.setLengthRight = function (msg, length) {
77517 return exports.setLength(msg, length, true)
77518 }
77519
77520 /**
77521 * Trims leading zeros from a `Buffer` or an `Array`
77522 * @param {Buffer|Array|String} a
77523 * @return {Buffer|Array|String}
77524 */
77525 exports.unpad = exports.stripZeros = function (a) {
77526 a = exports.stripHexPrefix(a)
77527 var first = a[0]
77528 while (a.length > 0 && first.toString() === '0') {
77529 a = a.slice(1)
77530 first = a[0]
77531 }
77532 return a
77533 }
77534 /**
77535 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
77536 * @param {*} v the value
77537 */
77538 exports.toBuffer = function (v) {
77539 if (!Buffer.isBuffer(v)) {
77540 if (Array.isArray(v)) {
77541 v = Buffer.from(v)
77542 } else if (typeof v === 'string') {
77543 if (exports.isHexPrefixed(v)) {
77544 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
77545 } else {
77546 v = Buffer.from(v)
77547 }
77548 } else if (typeof v === 'number') {
77549 v = exports.intToBuffer(v)
77550 } else if (v === null || v === undefined) {
77551 v = Buffer.allocUnsafe(0)
77552 } else if (v.toArray) {
77553 // converts a BN to a Buffer
77554 v = Buffer.from(v.toArray())
77555 } else {
77556 throw new Error('invalid type')
77557 }
77558 }
77559 return v
77560 }
77561
77562 /**
77563 * Converts a `Buffer` to a `Number`
77564 * @param {Buffer} buf
77565 * @return {Number}
77566 * @throws If the input number exceeds 53 bits.
77567 */
77568 exports.bufferToInt = function (buf) {
77569 return new BN(exports.toBuffer(buf)).toNumber()
77570 }
77571
77572 /**
77573 * Converts a `Buffer` into a hex `String`
77574 * @param {Buffer} buf
77575 * @return {String}
77576 */
77577 exports.bufferToHex = function (buf) {
77578 buf = exports.toBuffer(buf)
77579 return '0x' + buf.toString('hex')
77580 }
77581
77582 /**
77583 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
77584 * @param {Buffer} num
77585 * @return {BN}
77586 */
77587 exports.fromSigned = function (num) {
77588 return new BN(num).fromTwos(256)
77589 }
77590
77591 /**
77592 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
77593 * @param {BN} num
77594 * @return {Buffer}
77595 */
77596 exports.toUnsigned = function (num) {
77597 return Buffer.from(num.toTwos(256).toArray())
77598 }
77599
77600 /**
77601 * Creates SHA-3 hash of the input
77602 * @param {Buffer|Array|String|Number} a the input data
77603 * @param {Number} [bits=256] the SHA width
77604 * @return {Buffer}
77605 */
77606 exports.sha3 = function (a, bits) {
77607 a = exports.toBuffer(a)
77608 if (!bits) bits = 256
77609
77610 return createKeccakHash('keccak' + bits).update(a).digest()
77611 }
77612
77613 /**
77614 * Creates SHA256 hash of the input
77615 * @param {Buffer|Array|String|Number} a the input data
77616 * @return {Buffer}
77617 */
77618 exports.sha256 = function (a) {
77619 a = exports.toBuffer(a)
77620 return createHash('sha256').update(a).digest()
77621 }
77622
77623 /**
77624 * Creates RIPEMD160 hash of the input
77625 * @param {Buffer|Array|String|Number} a the input data
77626 * @param {Boolean} padded whether it should be padded to 256 bits or not
77627 * @return {Buffer}
77628 */
77629 exports.ripemd160 = function (a, padded) {
77630 a = exports.toBuffer(a)
77631 var hash = createHash('rmd160').update(a).digest()
77632 if (padded === true) {
77633 return exports.setLength(hash, 32)
77634 } else {
77635 return hash
77636 }
77637 }
77638
77639 /**
77640 * Creates SHA-3 hash of the RLP encoded version of the input
77641 * @param {Buffer|Array|String|Number} a the input data
77642 * @return {Buffer}
77643 */
77644 exports.rlphash = function (a) {
77645 return exports.sha3(rlp.encode(a))
77646 }
77647
77648 /**
77649 * Checks if the private key satisfies the rules of the curve secp256k1.
77650 * @param {Buffer} privateKey
77651 * @return {Boolean}
77652 */
77653 exports.isValidPrivate = function (privateKey) {
77654 return secp256k1.privateKeyVerify(privateKey)
77655 }
77656
77657 /**
77658 * Checks if the public key satisfies the rules of the curve secp256k1
77659 * and the requirements of Ethereum.
77660 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
77661 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77662 * @return {Boolean}
77663 */
77664 exports.isValidPublic = function (publicKey, sanitize) {
77665 if (publicKey.length === 64) {
77666 // Convert to SEC1 for secp256k1
77667 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
77668 }
77669
77670 if (!sanitize) {
77671 return false
77672 }
77673
77674 return secp256k1.publicKeyVerify(publicKey)
77675 }
77676
77677 /**
77678 * Returns the ethereum address of a given public key.
77679 * Accepts "Ethereum public keys" and SEC1 encoded keys.
77680 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
77681 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77682 * @return {Buffer}
77683 */
77684 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
77685 pubKey = exports.toBuffer(pubKey)
77686 if (sanitize && (pubKey.length !== 64)) {
77687 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
77688 }
77689 assert(pubKey.length === 64)
77690 // Only take the lower 160bits of the hash
77691 return exports.sha3(pubKey).slice(-20)
77692 }
77693
77694 /**
77695 * Returns the ethereum public key of a given private key
77696 * @param {Buffer} privateKey A private key must be 256 bits wide
77697 * @return {Buffer}
77698 */
77699 var privateToPublic = exports.privateToPublic = function (privateKey) {
77700 privateKey = exports.toBuffer(privateKey)
77701 // skip the type flag and use the X, Y points
77702 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
77703 }
77704
77705 /**
77706 * Converts a public key to the Ethereum format.
77707 * @param {Buffer} publicKey
77708 * @return {Buffer}
77709 */
77710 exports.importPublic = function (publicKey) {
77711 publicKey = exports.toBuffer(publicKey)
77712 if (publicKey.length !== 64) {
77713 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
77714 }
77715 return publicKey
77716 }
77717
77718 /**
77719 * ECDSA sign
77720 * @param {Buffer} msgHash
77721 * @param {Buffer} privateKey
77722 * @return {Object}
77723 */
77724 exports.ecsign = function (msgHash, privateKey) {
77725 var sig = secp256k1.sign(msgHash, privateKey)
77726
77727 var ret = {}
77728 ret.r = sig.signature.slice(0, 32)
77729 ret.s = sig.signature.slice(32, 64)
77730 ret.v = sig.recovery + 27
77731 return ret
77732 }
77733
77734 /**
77735 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
77736 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
77737 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
77738 * used to produce the signature.
77739 * @param message
77740 * @returns {Buffer} hash
77741 */
77742 exports.hashPersonalMessage = function (message) {
77743 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
77744 return exports.sha3(Buffer.concat([prefix, message]))
77745 }
77746
77747 /**
77748 * ECDSA public key recovery from signature
77749 * @param {Buffer} msgHash
77750 * @param {Number} v
77751 * @param {Buffer} r
77752 * @param {Buffer} s
77753 * @return {Buffer} publicKey
77754 */
77755 exports.ecrecover = function (msgHash, v, r, s) {
77756 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
77757 var recovery = v - 27
77758 if (recovery !== 0 && recovery !== 1) {
77759 throw new Error('Invalid signature v value')
77760 }
77761 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
77762 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
77763 }
77764
77765 /**
77766 * Convert signature parameters into the format of `eth_sign` RPC method
77767 * @param {Number} v
77768 * @param {Buffer} r
77769 * @param {Buffer} s
77770 * @return {String} sig
77771 */
77772 exports.toRpcSig = function (v, r, s) {
77773 // NOTE: with potential introduction of chainId this might need to be updated
77774 if (v !== 27 && v !== 28) {
77775 throw new Error('Invalid recovery id')
77776 }
77777
77778 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
77779 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
77780 return exports.bufferToHex(Buffer.concat([
77781 exports.setLengthLeft(r, 32),
77782 exports.setLengthLeft(s, 32),
77783 exports.toBuffer(v - 27)
77784 ]))
77785 }
77786
77787 /**
77788 * Convert signature format of the `eth_sign` RPC method to signature parameters
77789 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
77790 * @param {String} sig
77791 * @return {Object}
77792 */
77793 exports.fromRpcSig = function (sig) {
77794 sig = exports.toBuffer(sig)
77795
77796 // NOTE: with potential introduction of chainId this might need to be updated
77797 if (sig.length !== 65) {
77798 throw new Error('Invalid signature length')
77799 }
77800
77801 var v = sig[64]
77802 // support both versions of `eth_sign` responses
77803 if (v < 27) {
77804 v += 27
77805 }
77806
77807 return {
77808 v: v,
77809 r: sig.slice(0, 32),
77810 s: sig.slice(32, 64)
77811 }
77812 }
77813
77814 /**
77815 * Returns the ethereum address of a given private key
77816 * @param {Buffer} privateKey A private key must be 256 bits wide
77817 * @return {Buffer}
77818 */
77819 exports.privateToAddress = function (privateKey) {
77820 return exports.publicToAddress(privateToPublic(privateKey))
77821 }
77822
77823 /**
77824 * Checks if the address is a valid. Accepts checksummed addresses too
77825 * @param {String} address
77826 * @return {Boolean}
77827 */
77828 exports.isValidAddress = function (address) {
77829 return /^0x[0-9a-fA-F]{40}$/i.test(address)
77830 }
77831
77832 /**
77833 * Returns a checksummed address
77834 * @param {String} address
77835 * @return {String}
77836 */
77837 exports.toChecksumAddress = function (address) {
77838 address = exports.stripHexPrefix(address).toLowerCase()
77839 var hash = exports.sha3(address).toString('hex')
77840 var ret = '0x'
77841
77842 for (var i = 0; i < address.length; i++) {
77843 if (parseInt(hash[i], 16) >= 8) {
77844 ret += address[i].toUpperCase()
77845 } else {
77846 ret += address[i]
77847 }
77848 }
77849
77850 return ret
77851 }
77852
77853 /**
77854 * Checks if the address is a valid checksummed address
77855 * @param {Buffer} address
77856 * @return {Boolean}
77857 */
77858 exports.isValidChecksumAddress = function (address) {
77859 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
77860 }
77861
77862 /**
77863 * Generates an address of a newly created contract
77864 * @param {Buffer} from the address which is creating this new address
77865 * @param {Buffer} nonce the nonce of the from account
77866 * @return {Buffer}
77867 */
77868 exports.generateAddress = function (from, nonce) {
77869 from = exports.toBuffer(from)
77870 nonce = new BN(nonce)
77871
77872 if (nonce.isZero()) {
77873 // in RLP we want to encode null in the case of zero nonce
77874 // read the RLP documentation for an answer if you dare
77875 nonce = null
77876 } else {
77877 nonce = Buffer.from(nonce.toArray())
77878 }
77879
77880 // Only take the lower 160bits of the hash
77881 return exports.rlphash([from, nonce]).slice(-20)
77882 }
77883
77884 /**
77885 * Returns true if the supplied address belongs to a precompiled account
77886 * @param {Buffer|String} address
77887 * @return {Boolean}
77888 */
77889 exports.isPrecompiled = function (address) {
77890 var a = exports.unpad(address)
77891 return a.length === 1 && a[0] > 0 && a[0] < 5
77892 }
77893
77894 /**
77895 * Adds "0x" to a given `String` if it does not already start with "0x"
77896 * @param {String} str
77897 * @return {String}
77898 */
77899 exports.addHexPrefix = function (str) {
77900 if (typeof str !== 'string') {
77901 return str
77902 }
77903
77904 return exports.isHexPrefixed(str) ? str : '0x' + str
77905 }
77906
77907 /**
77908 * Validate ECDSA signature
77909 * @method isValidSignature
77910 * @param {Buffer} v
77911 * @param {Buffer} r
77912 * @param {Buffer} s
77913 * @param {Boolean} [homestead=true]
77914 * @return {Boolean}
77915 */
77916
77917 exports.isValidSignature = function (v, r, s, homestead) {
77918 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
77919 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
77920
77921 if (r.length !== 32 || s.length !== 32) {
77922 return false
77923 }
77924
77925 if (v !== 27 && v !== 28) {
77926 return false
77927 }
77928
77929 r = new BN(r)
77930 s = new BN(s)
77931
77932 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
77933 return false
77934 }
77935
77936 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
77937 return false
77938 }
77939
77940 return true
77941 }
77942
77943 /**
77944 * Converts a `Buffer` or `Array` to JSON
77945 * @param {Buffer|Array} ba
77946 * @return {Array|String|null}
77947 */
77948 exports.baToJSON = function (ba) {
77949 if (Buffer.isBuffer(ba)) {
77950 return '0x' + ba.toString('hex')
77951 } else if (ba instanceof Array) {
77952 var array = []
77953 for (var i = 0; i < ba.length; i++) {
77954 array.push(exports.baToJSON(ba[i]))
77955 }
77956 return array
77957 }
77958 }
77959
77960 /**
77961 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
77962 * @param {Object} self the `Object` to define properties on
77963 * @param {Array} fields an array fields to define. Fields can contain:
77964 * * `name` - the name of the properties
77965 * * `length` - the number of bytes the field can have
77966 * * `allowLess` - if the field can be less than the length
77967 * * `allowEmpty`
77968 * @param {*} data data to be validated against the definitions
77969 */
77970 exports.defineProperties = function (self, fields, data) {
77971 self.raw = []
77972 self._fields = []
77973
77974 // attach the `toJSON`
77975 self.toJSON = function (label) {
77976 if (label) {
77977 var obj = {}
77978 self._fields.forEach(function (field) {
77979 obj[field] = '0x' + self[field].toString('hex')
77980 })
77981 return obj
77982 }
77983 return exports.baToJSON(this.raw)
77984 }
77985
77986 self.serialize = function serialize () {
77987 return rlp.encode(self.raw)
77988 }
77989
77990 fields.forEach(function (field, i) {
77991 self._fields.push(field.name)
77992 function getter () {
77993 return self.raw[i]
77994 }
77995 function setter (v) {
77996 v = exports.toBuffer(v)
77997
77998 if (v.toString('hex') === '00' && !field.allowZero) {
77999 v = Buffer.allocUnsafe(0)
78000 }
78001
78002 if (field.allowLess && field.length) {
78003 v = exports.stripZeros(v)
78004 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
78005 } else if (!(field.allowZero && v.length === 0) && field.length) {
78006 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
78007 }
78008
78009 self.raw[i] = v
78010 }
78011
78012 Object.defineProperty(self, field.name, {
78013 enumerable: true,
78014 configurable: true,
78015 get: getter,
78016 set: setter
78017 })
78018
78019 if (field.default) {
78020 self[field.name] = field.default
78021 }
78022
78023 // attach alias
78024 if (field.alias) {
78025 Object.defineProperty(self, field.alias, {
78026 enumerable: false,
78027 configurable: true,
78028 set: setter,
78029 get: getter
78030 })
78031 }
78032 })
78033
78034 // if the constuctor is passed data
78035 if (data) {
78036 if (typeof data === 'string') {
78037 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
78038 }
78039
78040 if (Buffer.isBuffer(data)) {
78041 data = rlp.decode(data)
78042 }
78043
78044 if (Array.isArray(data)) {
78045 if (data.length > self._fields.length) {
78046 throw (new Error('wrong number of fields in data'))
78047 }
78048
78049 // make sure all the items are buffers
78050 data.forEach(function (d, i) {
78051 self[self._fields[i]] = exports.toBuffer(d)
78052 })
78053 } else if (typeof data === 'object') {
78054 const keys = Object.keys(data)
78055 fields.forEach(function (field) {
78056 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
78057 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
78058 })
78059 } else {
78060 throw new Error('invalid data')
78061 }
78062 }
78063 }
78064
78065 }).call(this,require("buffer").Buffer)
78066 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
78067 (function (Buffer){
78068 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
78069 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78070 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
78071
78072 function check (buffer) {
78073 if (buffer.length < 8) return false
78074 if (buffer.length > 72) return false
78075 if (buffer[0] !== 0x30) return false
78076 if (buffer[1] !== buffer.length - 2) return false
78077 if (buffer[2] !== 0x02) return false
78078
78079 var lenR = buffer[3]
78080 if (lenR === 0) return false
78081 if (5 + lenR >= buffer.length) return false
78082 if (buffer[4 + lenR] !== 0x02) return false
78083
78084 var lenS = buffer[5 + lenR]
78085 if (lenS === 0) return false
78086 if ((6 + lenR + lenS) !== buffer.length) return false
78087
78088 if (buffer[4] & 0x80) return false
78089 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
78090
78091 if (buffer[lenR + 6] & 0x80) return false
78092 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
78093 return true
78094 }
78095
78096 function decode (buffer) {
78097 if (buffer.length < 8) throw new Error('DER sequence length is too short')
78098 if (buffer.length > 72) throw new Error('DER sequence length is too long')
78099 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
78100 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
78101 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
78102
78103 var lenR = buffer[3]
78104 if (lenR === 0) throw new Error('R length is zero')
78105 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
78106 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
78107
78108 var lenS = buffer[5 + lenR]
78109 if (lenS === 0) throw new Error('S length is zero')
78110 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
78111
78112 if (buffer[4] & 0x80) throw new Error('R value is negative')
78113 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
78114
78115 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
78116 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
78117
78118 // non-BIP66 - extract R, S values
78119 return {
78120 r: buffer.slice(4, 4 + lenR),
78121 s: buffer.slice(6 + lenR)
78122 }
78123 }
78124
78125 /*
78126 * Expects r and s to be positive DER integers.
78127 *
78128 * The DER format uses the most significant bit as a sign bit (& 0x80).
78129 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
78130 *
78131 * Examples:
78132 *
78133 * 0 => 0x00
78134 * 1 => 0x01
78135 * -1 => 0xff
78136 * 127 => 0x7f
78137 * -127 => 0x81
78138 * 128 => 0x0080
78139 * -128 => 0x80
78140 * 255 => 0x00ff
78141 * -255 => 0xff01
78142 * 16300 => 0x3fac
78143 * -16300 => 0xc054
78144 * 62300 => 0x00f35c
78145 * -62300 => 0xff0ca4
78146 */
78147 function encode (r, s) {
78148 var lenR = r.length
78149 var lenS = s.length
78150 if (lenR === 0) throw new Error('R length is zero')
78151 if (lenS === 0) throw new Error('S length is zero')
78152 if (lenR > 33) throw new Error('R length is too long')
78153 if (lenS > 33) throw new Error('S length is too long')
78154 if (r[0] & 0x80) throw new Error('R value is negative')
78155 if (s[0] & 0x80) throw new Error('S value is negative')
78156 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
78157 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
78158
78159 var signature = new Buffer(6 + lenR + lenS)
78160
78161 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78162 signature[0] = 0x30
78163 signature[1] = signature.length - 2
78164 signature[2] = 0x02
78165 signature[3] = r.length
78166 r.copy(signature, 4)
78167 signature[4 + lenR] = 0x02
78168 signature[5 + lenR] = s.length
78169 s.copy(signature, 6 + lenR)
78170
78171 return signature
78172 }
78173
78174 module.exports = {
78175 check: check,
78176 decode: decode,
78177 encode: encode
78178 }
78179
78180 }).call(this,require("buffer").Buffer)
78181 },{"buffer":5}],33:[function(require,module,exports){
78182 (function (module, exports) {
78183 'use strict';
78184
78185 // Utils
78186 function assert (val, msg) {
78187 if (!val) throw new Error(msg || 'Assertion failed');
78188 }
78189
78190 // Could use `inherits` module, but don't want to move from single file
78191 // architecture yet.
78192 function inherits (ctor, superCtor) {
78193 ctor.super_ = superCtor;
78194 var TempCtor = function () {};
78195 TempCtor.prototype = superCtor.prototype;
78196 ctor.prototype = new TempCtor();
78197 ctor.prototype.constructor = ctor;
78198 }
78199
78200 // BN
78201
78202 function BN (number, base, endian) {
78203 if (BN.isBN(number)) {
78204 return number;
78205 }
78206
78207 this.negative = 0;
78208 this.words = null;
78209 this.length = 0;
78210
78211 // Reduction context
78212 this.red = null;
78213
78214 if (number !== null) {
78215 if (base === 'le' || base === 'be') {
78216 endian = base;
78217 base = 10;
78218 }
78219
78220 this._init(number || 0, base || 10, endian || 'be');
78221 }
78222 }
78223 if (typeof module === 'object') {
78224 module.exports = BN;
78225 } else {
78226 exports.BN = BN;
78227 }
78228
78229 BN.BN = BN;
78230 BN.wordSize = 26;
78231
78232 var Buffer;
78233 try {
78234 Buffer = require('buf' + 'fer').Buffer;
78235 } catch (e) {
78236 }
78237
78238 BN.isBN = function isBN (num) {
78239 if (num instanceof BN) {
78240 return true;
78241 }
78242
78243 return num !== null && typeof num === 'object' &&
78244 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
78245 };
78246
78247 BN.max = function max (left, right) {
78248 if (left.cmp(right) > 0) return left;
78249 return right;
78250 };
78251
78252 BN.min = function min (left, right) {
78253 if (left.cmp(right) < 0) return left;
78254 return right;
78255 };
78256
78257 BN.prototype._init = function init (number, base, endian) {
78258 if (typeof number === 'number') {
78259 return this._initNumber(number, base, endian);
78260 }
78261
78262 if (typeof number === 'object') {
78263 return this._initArray(number, base, endian);
78264 }
78265
78266 if (base === 'hex') {
78267 base = 16;
78268 }
78269 assert(base === (base | 0) && base >= 2 && base <= 36);
78270
78271 number = number.toString().replace(/\s+/g, '');
78272 var start = 0;
78273 if (number[0] === '-') {
78274 start++;
78275 }
78276
78277 if (base === 16) {
78278 this._parseHex(number, start);
78279 } else {
78280 this._parseBase(number, base, start);
78281 }
78282
78283 if (number[0] === '-') {
78284 this.negative = 1;
78285 }
78286
78287 this.strip();
78288
78289 if (endian !== 'le') return;
78290
78291 this._initArray(this.toArray(), base, endian);
78292 };
78293
78294 BN.prototype._initNumber = function _initNumber (number, base, endian) {
78295 if (number < 0) {
78296 this.negative = 1;
78297 number = -number;
78298 }
78299 if (number < 0x4000000) {
78300 this.words = [ number & 0x3ffffff ];
78301 this.length = 1;
78302 } else if (number < 0x10000000000000) {
78303 this.words = [
78304 number & 0x3ffffff,
78305 (number / 0x4000000) & 0x3ffffff
78306 ];
78307 this.length = 2;
78308 } else {
78309 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
78310 this.words = [
78311 number & 0x3ffffff,
78312 (number / 0x4000000) & 0x3ffffff,
78313 1
78314 ];
78315 this.length = 3;
78316 }
78317
78318 if (endian !== 'le') return;
78319
78320 // Reverse the bytes
78321 this._initArray(this.toArray(), base, endian);
78322 };
78323
78324 BN.prototype._initArray = function _initArray (number, base, endian) {
78325 // Perhaps a Uint8Array
78326 assert(typeof number.length === 'number');
78327 if (number.length <= 0) {
78328 this.words = [ 0 ];
78329 this.length = 1;
78330 return this;
78331 }
78332
78333 this.length = Math.ceil(number.length / 3);
78334 this.words = new Array(this.length);
78335 for (var i = 0; i < this.length; i++) {
78336 this.words[i] = 0;
78337 }
78338
78339 var j, w;
78340 var off = 0;
78341 if (endian === 'be') {
78342 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
78343 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
78344 this.words[j] |= (w << off) & 0x3ffffff;
78345 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78346 off += 24;
78347 if (off >= 26) {
78348 off -= 26;
78349 j++;
78350 }
78351 }
78352 } else if (endian === 'le') {
78353 for (i = 0, j = 0; i < number.length; i += 3) {
78354 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
78355 this.words[j] |= (w << off) & 0x3ffffff;
78356 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78357 off += 24;
78358 if (off >= 26) {
78359 off -= 26;
78360 j++;
78361 }
78362 }
78363 }
78364 return this.strip();
78365 };
78366
78367 function parseHex (str, start, end) {
78368 var r = 0;
78369 var len = Math.min(str.length, end);
78370 for (var i = start; i < len; i++) {
78371 var c = str.charCodeAt(i) - 48;
78372
78373 r <<= 4;
78374
78375 // 'a' - 'f'
78376 if (c >= 49 && c <= 54) {
78377 r |= c - 49 + 0xa;
78378
78379 // 'A' - 'F'
78380 } else if (c >= 17 && c <= 22) {
78381 r |= c - 17 + 0xa;
78382
78383 // '0' - '9'
78384 } else {
78385 r |= c & 0xf;
78386 }
78387 }
78388 return r;
78389 }
78390
78391 BN.prototype._parseHex = function _parseHex (number, start) {
78392 // Create possibly bigger array to ensure that it fits the number
78393 this.length = Math.ceil((number.length - start) / 6);
78394 this.words = new Array(this.length);
78395 for (var i = 0; i < this.length; i++) {
78396 this.words[i] = 0;
78397 }
78398
78399 var j, w;
78400 // Scan 24-bit chunks and add them to the number
78401 var off = 0;
78402 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
78403 w = parseHex(number, i, i + 6);
78404 this.words[j] |= (w << off) & 0x3ffffff;
78405 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
78406 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78407 off += 24;
78408 if (off >= 26) {
78409 off -= 26;
78410 j++;
78411 }
78412 }
78413 if (i + 6 !== start) {
78414 w = parseHex(number, start, i + 6);
78415 this.words[j] |= (w << off) & 0x3ffffff;
78416 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78417 }
78418 this.strip();
78419 };
78420
78421 function parseBase (str, start, end, mul) {
78422 var r = 0;
78423 var len = Math.min(str.length, end);
78424 for (var i = start; i < len; i++) {
78425 var c = str.charCodeAt(i) - 48;
78426
78427 r *= mul;
78428
78429 // 'a'
78430 if (c >= 49) {
78431 r += c - 49 + 0xa;
78432
78433 // 'A'
78434 } else if (c >= 17) {
78435 r += c - 17 + 0xa;
78436
78437 // '0' - '9'
78438 } else {
78439 r += c;
78440 }
78441 }
78442 return r;
78443 }
78444
78445 BN.prototype._parseBase = function _parseBase (number, base, start) {
78446 // Initialize as zero
78447 this.words = [ 0 ];
78448 this.length = 1;
78449
78450 // Find length of limb in base
78451 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
78452 limbLen++;
78453 }
78454 limbLen--;
78455 limbPow = (limbPow / base) | 0;
78456
78457 var total = number.length - start;
78458 var mod = total % limbLen;
78459 var end = Math.min(total, total - mod) + start;
78460
78461 var word = 0;
78462 for (var i = start; i < end; i += limbLen) {
78463 word = parseBase(number, i, i + limbLen, base);
78464
78465 this.imuln(limbPow);
78466 if (this.words[0] + word < 0x4000000) {
78467 this.words[0] += word;
78468 } else {
78469 this._iaddn(word);
78470 }
78471 }
78472
78473 if (mod !== 0) {
78474 var pow = 1;
78475 word = parseBase(number, i, number.length, base);
78476
78477 for (i = 0; i < mod; i++) {
78478 pow *= base;
78479 }
78480
78481 this.imuln(pow);
78482 if (this.words[0] + word < 0x4000000) {
78483 this.words[0] += word;
78484 } else {
78485 this._iaddn(word);
78486 }
78487 }
78488 };
78489
78490 BN.prototype.copy = function copy (dest) {
78491 dest.words = new Array(this.length);
78492 for (var i = 0; i < this.length; i++) {
78493 dest.words[i] = this.words[i];
78494 }
78495 dest.length = this.length;
78496 dest.negative = this.negative;
78497 dest.red = this.red;
78498 };
78499
78500 BN.prototype.clone = function clone () {
78501 var r = new BN(null);
78502 this.copy(r);
78503 return r;
78504 };
78505
78506 BN.prototype._expand = function _expand (size) {
78507 while (this.length < size) {
78508 this.words[this.length++] = 0;
78509 }
78510 return this;
78511 };
78512
78513 // Remove leading `0` from `this`
78514 BN.prototype.strip = function strip () {
78515 while (this.length > 1 && this.words[this.length - 1] === 0) {
78516 this.length--;
78517 }
78518 return this._normSign();
78519 };
78520
78521 BN.prototype._normSign = function _normSign () {
78522 // -0 = 0
78523 if (this.length === 1 && this.words[0] === 0) {
78524 this.negative = 0;
78525 }
78526 return this;
78527 };
78528
78529 BN.prototype.inspect = function inspect () {
78530 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
78531 };
78532
78533 /*
78534
78535 var zeros = [];
78536 var groupSizes = [];
78537 var groupBases = [];
78538
78539 var s = '';
78540 var i = -1;
78541 while (++i < BN.wordSize) {
78542 zeros[i] = s;
78543 s += '0';
78544 }
78545 groupSizes[0] = 0;
78546 groupSizes[1] = 0;
78547 groupBases[0] = 0;
78548 groupBases[1] = 0;
78549 var base = 2 - 1;
78550 while (++base < 36 + 1) {
78551 var groupSize = 0;
78552 var groupBase = 1;
78553 while (groupBase < (1 << BN.wordSize) / base) {
78554 groupBase *= base;
78555 groupSize += 1;
78556 }
78557 groupSizes[base] = groupSize;
78558 groupBases[base] = groupBase;
78559 }
78560
78561 */
78562
78563 var zeros = [
78564 '',
78565 '0',
78566 '00',
78567 '000',
78568 '0000',
78569 '00000',
78570 '000000',
78571 '0000000',
78572 '00000000',
78573 '000000000',
78574 '0000000000',
78575 '00000000000',
78576 '000000000000',
78577 '0000000000000',
78578 '00000000000000',
78579 '000000000000000',
78580 '0000000000000000',
78581 '00000000000000000',
78582 '000000000000000000',
78583 '0000000000000000000',
78584 '00000000000000000000',
78585 '000000000000000000000',
78586 '0000000000000000000000',
78587 '00000000000000000000000',
78588 '000000000000000000000000',
78589 '0000000000000000000000000'
78590 ];
78591
78592 var groupSizes = [
78593 0, 0,
78594 25, 16, 12, 11, 10, 9, 8,
78595 8, 7, 7, 7, 7, 6, 6,
78596 6, 6, 6, 6, 6, 5, 5,
78597 5, 5, 5, 5, 5, 5, 5,
78598 5, 5, 5, 5, 5, 5, 5
78599 ];
78600
78601 var groupBases = [
78602 0, 0,
78603 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
78604 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
78605 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
78606 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
78607 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
78608 ];
78609
78610 BN.prototype.toString = function toString (base, padding) {
78611 base = base || 10;
78612 padding = padding | 0 || 1;
78613
78614 var out;
78615 if (base === 16 || base === 'hex') {
78616 out = '';
78617 var off = 0;
78618 var carry = 0;
78619 for (var i = 0; i < this.length; i++) {
78620 var w = this.words[i];
78621 var word = (((w << off) | carry) & 0xffffff).toString(16);
78622 carry = (w >>> (24 - off)) & 0xffffff;
78623 if (carry !== 0 || i !== this.length - 1) {
78624 out = zeros[6 - word.length] + word + out;
78625 } else {
78626 out = word + out;
78627 }
78628 off += 2;
78629 if (off >= 26) {
78630 off -= 26;
78631 i--;
78632 }
78633 }
78634 if (carry !== 0) {
78635 out = carry.toString(16) + out;
78636 }
78637 while (out.length % padding !== 0) {
78638 out = '0' + out;
78639 }
78640 if (this.negative !== 0) {
78641 out = '-' + out;
78642 }
78643 return out;
78644 }
78645
78646 if (base === (base | 0) && base >= 2 && base <= 36) {
78647 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
78648 var groupSize = groupSizes[base];
78649 // var groupBase = Math.pow(base, groupSize);
78650 var groupBase = groupBases[base];
78651 out = '';
78652 var c = this.clone();
78653 c.negative = 0;
78654 while (!c.isZero()) {
78655 var r = c.modn(groupBase).toString(base);
78656 c = c.idivn(groupBase);
78657
78658 if (!c.isZero()) {
78659 out = zeros[groupSize - r.length] + r + out;
78660 } else {
78661 out = r + out;
78662 }
78663 }
78664 if (this.isZero()) {
78665 out = '0' + out;
78666 }
78667 while (out.length % padding !== 0) {
78668 out = '0' + out;
78669 }
78670 if (this.negative !== 0) {
78671 out = '-' + out;
78672 }
78673 return out;
78674 }
78675
78676 assert(false, 'Base should be between 2 and 36');
78677 };
78678
78679 BN.prototype.toNumber = function toNumber () {
78680 var ret = this.words[0];
78681 if (this.length === 2) {
78682 ret += this.words[1] * 0x4000000;
78683 } else if (this.length === 3 && this.words[2] === 0x01) {
78684 // NOTE: at this stage it is known that the top bit is set
78685 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
78686 } else if (this.length > 2) {
78687 assert(false, 'Number can only safely store up to 53 bits');
78688 }
78689 return (this.negative !== 0) ? -ret : ret;
78690 };
78691
78692 BN.prototype.toJSON = function toJSON () {
78693 return this.toString(16);
78694 };
78695
78696 BN.prototype.toBuffer = function toBuffer (endian, length) {
78697 assert(typeof Buffer !== 'undefined');
78698 return this.toArrayLike(Buffer, endian, length);
78699 };
78700
78701 BN.prototype.toArray = function toArray (endian, length) {
78702 return this.toArrayLike(Array, endian, length);
78703 };
78704
78705 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
78706 var byteLength = this.byteLength();
78707 var reqLength = length || Math.max(1, byteLength);
78708 assert(byteLength <= reqLength, 'byte array longer than desired length');
78709 assert(reqLength > 0, 'Requested array length <= 0');
78710
78711 this.strip();
78712 var littleEndian = endian === 'le';
78713 var res = new ArrayType(reqLength);
78714
78715 var b, i;
78716 var q = this.clone();
78717 if (!littleEndian) {
78718 // Assume big-endian
78719 for (i = 0; i < reqLength - byteLength; i++) {
78720 res[i] = 0;
78721 }
78722
78723 for (i = 0; !q.isZero(); i++) {
78724 b = q.andln(0xff);
78725 q.iushrn(8);
78726
78727 res[reqLength - i - 1] = b;
78728 }
78729 } else {
78730 for (i = 0; !q.isZero(); i++) {
78731 b = q.andln(0xff);
78732 q.iushrn(8);
78733
78734 res[i] = b;
78735 }
78736
78737 for (; i < reqLength; i++) {
78738 res[i] = 0;
78739 }
78740 }
78741
78742 return res;
78743 };
78744
78745 if (Math.clz32) {
78746 BN.prototype._countBits = function _countBits (w) {
78747 return 32 - Math.clz32(w);
78748 };
78749 } else {
78750 BN.prototype._countBits = function _countBits (w) {
78751 var t = w;
78752 var r = 0;
78753 if (t >= 0x1000) {
78754 r += 13;
78755 t >>>= 13;
78756 }
78757 if (t >= 0x40) {
78758 r += 7;
78759 t >>>= 7;
78760 }
78761 if (t >= 0x8) {
78762 r += 4;
78763 t >>>= 4;
78764 }
78765 if (t >= 0x02) {
78766 r += 2;
78767 t >>>= 2;
78768 }
78769 return r + t;
78770 };
78771 }
78772
78773 BN.prototype._zeroBits = function _zeroBits (w) {
78774 // Short-cut
78775 if (w === 0) return 26;
78776
78777 var t = w;
78778 var r = 0;
78779 if ((t & 0x1fff) === 0) {
78780 r += 13;
78781 t >>>= 13;
78782 }
78783 if ((t & 0x7f) === 0) {
78784 r += 7;
78785 t >>>= 7;
78786 }
78787 if ((t & 0xf) === 0) {
78788 r += 4;
78789 t >>>= 4;
78790 }
78791 if ((t & 0x3) === 0) {
78792 r += 2;
78793 t >>>= 2;
78794 }
78795 if ((t & 0x1) === 0) {
78796 r++;
78797 }
78798 return r;
78799 };
78800
78801 // Return number of used bits in a BN
78802 BN.prototype.bitLength = function bitLength () {
78803 var w = this.words[this.length - 1];
78804 var hi = this._countBits(w);
78805 return (this.length - 1) * 26 + hi;
78806 };
78807
78808 function toBitArray (num) {
78809 var w = new Array(num.bitLength());
78810
78811 for (var bit = 0; bit < w.length; bit++) {
78812 var off = (bit / 26) | 0;
78813 var wbit = bit % 26;
78814
78815 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
78816 }
78817
78818 return w;
78819 }
78820
78821 // Number of trailing zero bits
78822 BN.prototype.zeroBits = function zeroBits () {
78823 if (this.isZero()) return 0;
78824
78825 var r = 0;
78826 for (var i = 0; i < this.length; i++) {
78827 var b = this._zeroBits(this.words[i]);
78828 r += b;
78829 if (b !== 26) break;
78830 }
78831 return r;
78832 };
78833
78834 BN.prototype.byteLength = function byteLength () {
78835 return Math.ceil(this.bitLength() / 8);
78836 };
78837
78838 BN.prototype.toTwos = function toTwos (width) {
78839 if (this.negative !== 0) {
78840 return this.abs().inotn(width).iaddn(1);
78841 }
78842 return this.clone();
78843 };
78844
78845 BN.prototype.fromTwos = function fromTwos (width) {
78846 if (this.testn(width - 1)) {
78847 return this.notn(width).iaddn(1).ineg();
78848 }
78849 return this.clone();
78850 };
78851
78852 BN.prototype.isNeg = function isNeg () {
78853 return this.negative !== 0;
78854 };
78855
78856 // Return negative clone of `this`
78857 BN.prototype.neg = function neg () {
78858 return this.clone().ineg();
78859 };
78860
78861 BN.prototype.ineg = function ineg () {
78862 if (!this.isZero()) {
78863 this.negative ^= 1;
78864 }
78865
78866 return this;
78867 };
78868
78869 // Or `num` with `this` in-place
78870 BN.prototype.iuor = function iuor (num) {
78871 while (this.length < num.length) {
78872 this.words[this.length++] = 0;
78873 }
78874
78875 for (var i = 0; i < num.length; i++) {
78876 this.words[i] = this.words[i] | num.words[i];
78877 }
78878
78879 return this.strip();
78880 };
78881
78882 BN.prototype.ior = function ior (num) {
78883 assert((this.negative | num.negative) === 0);
78884 return this.iuor(num);
78885 };
78886
78887 // Or `num` with `this`
78888 BN.prototype.or = function or (num) {
78889 if (this.length > num.length) return this.clone().ior(num);
78890 return num.clone().ior(this);
78891 };
78892
78893 BN.prototype.uor = function uor (num) {
78894 if (this.length > num.length) return this.clone().iuor(num);
78895 return num.clone().iuor(this);
78896 };
78897
78898 // And `num` with `this` in-place
78899 BN.prototype.iuand = function iuand (num) {
78900 // b = min-length(num, this)
78901 var b;
78902 if (this.length > num.length) {
78903 b = num;
78904 } else {
78905 b = this;
78906 }
78907
78908 for (var i = 0; i < b.length; i++) {
78909 this.words[i] = this.words[i] & num.words[i];
78910 }
78911
78912 this.length = b.length;
78913
78914 return this.strip();
78915 };
78916
78917 BN.prototype.iand = function iand (num) {
78918 assert((this.negative | num.negative) === 0);
78919 return this.iuand(num);
78920 };
78921
78922 // And `num` with `this`
78923 BN.prototype.and = function and (num) {
78924 if (this.length > num.length) return this.clone().iand(num);
78925 return num.clone().iand(this);
78926 };
78927
78928 BN.prototype.uand = function uand (num) {
78929 if (this.length > num.length) return this.clone().iuand(num);
78930 return num.clone().iuand(this);
78931 };
78932
78933 // Xor `num` with `this` in-place
78934 BN.prototype.iuxor = function iuxor (num) {
78935 // a.length > b.length
78936 var a;
78937 var b;
78938 if (this.length > num.length) {
78939 a = this;
78940 b = num;
78941 } else {
78942 a = num;
78943 b = this;
78944 }
78945
78946 for (var i = 0; i < b.length; i++) {
78947 this.words[i] = a.words[i] ^ b.words[i];
78948 }
78949
78950 if (this !== a) {
78951 for (; i < a.length; i++) {
78952 this.words[i] = a.words[i];
78953 }
78954 }
78955
78956 this.length = a.length;
78957
78958 return this.strip();
78959 };
78960
78961 BN.prototype.ixor = function ixor (num) {
78962 assert((this.negative | num.negative) === 0);
78963 return this.iuxor(num);
78964 };
78965
78966 // Xor `num` with `this`
78967 BN.prototype.xor = function xor (num) {
78968 if (this.length > num.length) return this.clone().ixor(num);
78969 return num.clone().ixor(this);
78970 };
78971
78972 BN.prototype.uxor = function uxor (num) {
78973 if (this.length > num.length) return this.clone().iuxor(num);
78974 return num.clone().iuxor(this);
78975 };
78976
78977 // Not ``this`` with ``width`` bitwidth
78978 BN.prototype.inotn = function inotn (width) {
78979 assert(typeof width === 'number' && width >= 0);
78980
78981 var bytesNeeded = Math.ceil(width / 26) | 0;
78982 var bitsLeft = width % 26;
78983
78984 // Extend the buffer with leading zeroes
78985 this._expand(bytesNeeded);
78986
78987 if (bitsLeft > 0) {
78988 bytesNeeded--;
78989 }
78990
78991 // Handle complete words
78992 for (var i = 0; i < bytesNeeded; i++) {
78993 this.words[i] = ~this.words[i] & 0x3ffffff;
78994 }
78995
78996 // Handle the residue
78997 if (bitsLeft > 0) {
78998 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
78999 }
79000
79001 // And remove leading zeroes
79002 return this.strip();
79003 };
79004
79005 BN.prototype.notn = function notn (width) {
79006 return this.clone().inotn(width);
79007 };
79008
79009 // Set `bit` of `this`
79010 BN.prototype.setn = function setn (bit, val) {
79011 assert(typeof bit === 'number' && bit >= 0);
79012
79013 var off = (bit / 26) | 0;
79014 var wbit = bit % 26;
79015
79016 this._expand(off + 1);
79017
79018 if (val) {
79019 this.words[off] = this.words[off] | (1 << wbit);
79020 } else {
79021 this.words[off] = this.words[off] & ~(1 << wbit);
79022 }
79023
79024 return this.strip();
79025 };
79026
79027 // Add `num` to `this` in-place
79028 BN.prototype.iadd = function iadd (num) {
79029 var r;
79030
79031 // negative + positive
79032 if (this.negative !== 0 && num.negative === 0) {
79033 this.negative = 0;
79034 r = this.isub(num);
79035 this.negative ^= 1;
79036 return this._normSign();
79037
79038 // positive + negative
79039 } else if (this.negative === 0 && num.negative !== 0) {
79040 num.negative = 0;
79041 r = this.isub(num);
79042 num.negative = 1;
79043 return r._normSign();
79044 }
79045
79046 // a.length > b.length
79047 var a, b;
79048 if (this.length > num.length) {
79049 a = this;
79050 b = num;
79051 } else {
79052 a = num;
79053 b = this;
79054 }
79055
79056 var carry = 0;
79057 for (var i = 0; i < b.length; i++) {
79058 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
79059 this.words[i] = r & 0x3ffffff;
79060 carry = r >>> 26;
79061 }
79062 for (; carry !== 0 && i < a.length; i++) {
79063 r = (a.words[i] | 0) + carry;
79064 this.words[i] = r & 0x3ffffff;
79065 carry = r >>> 26;
79066 }
79067
79068 this.length = a.length;
79069 if (carry !== 0) {
79070 this.words[this.length] = carry;
79071 this.length++;
79072 // Copy the rest of the words
79073 } else if (a !== this) {
79074 for (; i < a.length; i++) {
79075 this.words[i] = a.words[i];
79076 }
79077 }
79078
79079 return this;
79080 };
79081
79082 // Add `num` to `this`
79083 BN.prototype.add = function add (num) {
79084 var res;
79085 if (num.negative !== 0 && this.negative === 0) {
79086 num.negative = 0;
79087 res = this.sub(num);
79088 num.negative ^= 1;
79089 return res;
79090 } else if (num.negative === 0 && this.negative !== 0) {
79091 this.negative = 0;
79092 res = num.sub(this);
79093 this.negative = 1;
79094 return res;
79095 }
79096
79097 if (this.length > num.length) return this.clone().iadd(num);
79098
79099 return num.clone().iadd(this);
79100 };
79101
79102 // Subtract `num` from `this` in-place
79103 BN.prototype.isub = function isub (num) {
79104 // this - (-num) = this + num
79105 if (num.negative !== 0) {
79106 num.negative = 0;
79107 var r = this.iadd(num);
79108 num.negative = 1;
79109 return r._normSign();
79110
79111 // -this - num = -(this + num)
79112 } else if (this.negative !== 0) {
79113 this.negative = 0;
79114 this.iadd(num);
79115 this.negative = 1;
79116 return this._normSign();
79117 }
79118
79119 // At this point both numbers are positive
79120 var cmp = this.cmp(num);
79121
79122 // Optimization - zeroify
79123 if (cmp === 0) {
79124 this.negative = 0;
79125 this.length = 1;
79126 this.words[0] = 0;
79127 return this;
79128 }
79129
79130 // a > b
79131 var a, b;
79132 if (cmp > 0) {
79133 a = this;
79134 b = num;
79135 } else {
79136 a = num;
79137 b = this;
79138 }
79139
79140 var carry = 0;
79141 for (var i = 0; i < b.length; i++) {
79142 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
79143 carry = r >> 26;
79144 this.words[i] = r & 0x3ffffff;
79145 }
79146 for (; carry !== 0 && i < a.length; i++) {
79147 r = (a.words[i] | 0) + carry;
79148 carry = r >> 26;
79149 this.words[i] = r & 0x3ffffff;
79150 }
79151
79152 // Copy rest of the words
79153 if (carry === 0 && i < a.length && a !== this) {
79154 for (; i < a.length; i++) {
79155 this.words[i] = a.words[i];
79156 }
79157 }
79158
79159 this.length = Math.max(this.length, i);
79160
79161 if (a !== this) {
79162 this.negative = 1;
79163 }
79164
79165 return this.strip();
79166 };
79167
79168 // Subtract `num` from `this`
79169 BN.prototype.sub = function sub (num) {
79170 return this.clone().isub(num);
79171 };
79172
79173 function smallMulTo (self, num, out) {
79174 out.negative = num.negative ^ self.negative;
79175 var len = (self.length + num.length) | 0;
79176 out.length = len;
79177 len = (len - 1) | 0;
79178
79179 // Peel one iteration (compiler can't do it, because of code complexity)
79180 var a = self.words[0] | 0;
79181 var b = num.words[0] | 0;
79182 var r = a * b;
79183
79184 var lo = r & 0x3ffffff;
79185 var carry = (r / 0x4000000) | 0;
79186 out.words[0] = lo;
79187
79188 for (var k = 1; k < len; k++) {
79189 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79190 // note that ncarry could be >= 0x3ffffff
79191 var ncarry = carry >>> 26;
79192 var rword = carry & 0x3ffffff;
79193 var maxJ = Math.min(k, num.length - 1);
79194 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79195 var i = (k - j) | 0;
79196 a = self.words[i] | 0;
79197 b = num.words[j] | 0;
79198 r = a * b + rword;
79199 ncarry += (r / 0x4000000) | 0;
79200 rword = r & 0x3ffffff;
79201 }
79202 out.words[k] = rword | 0;
79203 carry = ncarry | 0;
79204 }
79205 if (carry !== 0) {
79206 out.words[k] = carry | 0;
79207 } else {
79208 out.length--;
79209 }
79210
79211 return out.strip();
79212 }
79213
79214 // TODO(indutny): it may be reasonable to omit it for users who don't need
79215 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
79216 // multiplication (like elliptic secp256k1).
79217 var comb10MulTo = function comb10MulTo (self, num, out) {
79218 var a = self.words;
79219 var b = num.words;
79220 var o = out.words;
79221 var c = 0;
79222 var lo;
79223 var mid;
79224 var hi;
79225 var a0 = a[0] | 0;
79226 var al0 = a0 & 0x1fff;
79227 var ah0 = a0 >>> 13;
79228 var a1 = a[1] | 0;
79229 var al1 = a1 & 0x1fff;
79230 var ah1 = a1 >>> 13;
79231 var a2 = a[2] | 0;
79232 var al2 = a2 & 0x1fff;
79233 var ah2 = a2 >>> 13;
79234 var a3 = a[3] | 0;
79235 var al3 = a3 & 0x1fff;
79236 var ah3 = a3 >>> 13;
79237 var a4 = a[4] | 0;
79238 var al4 = a4 & 0x1fff;
79239 var ah4 = a4 >>> 13;
79240 var a5 = a[5] | 0;
79241 var al5 = a5 & 0x1fff;
79242 var ah5 = a5 >>> 13;
79243 var a6 = a[6] | 0;
79244 var al6 = a6 & 0x1fff;
79245 var ah6 = a6 >>> 13;
79246 var a7 = a[7] | 0;
79247 var al7 = a7 & 0x1fff;
79248 var ah7 = a7 >>> 13;
79249 var a8 = a[8] | 0;
79250 var al8 = a8 & 0x1fff;
79251 var ah8 = a8 >>> 13;
79252 var a9 = a[9] | 0;
79253 var al9 = a9 & 0x1fff;
79254 var ah9 = a9 >>> 13;
79255 var b0 = b[0] | 0;
79256 var bl0 = b0 & 0x1fff;
79257 var bh0 = b0 >>> 13;
79258 var b1 = b[1] | 0;
79259 var bl1 = b1 & 0x1fff;
79260 var bh1 = b1 >>> 13;
79261 var b2 = b[2] | 0;
79262 var bl2 = b2 & 0x1fff;
79263 var bh2 = b2 >>> 13;
79264 var b3 = b[3] | 0;
79265 var bl3 = b3 & 0x1fff;
79266 var bh3 = b3 >>> 13;
79267 var b4 = b[4] | 0;
79268 var bl4 = b4 & 0x1fff;
79269 var bh4 = b4 >>> 13;
79270 var b5 = b[5] | 0;
79271 var bl5 = b5 & 0x1fff;
79272 var bh5 = b5 >>> 13;
79273 var b6 = b[6] | 0;
79274 var bl6 = b6 & 0x1fff;
79275 var bh6 = b6 >>> 13;
79276 var b7 = b[7] | 0;
79277 var bl7 = b7 & 0x1fff;
79278 var bh7 = b7 >>> 13;
79279 var b8 = b[8] | 0;
79280 var bl8 = b8 & 0x1fff;
79281 var bh8 = b8 >>> 13;
79282 var b9 = b[9] | 0;
79283 var bl9 = b9 & 0x1fff;
79284 var bh9 = b9 >>> 13;
79285
79286 out.negative = self.negative ^ num.negative;
79287 out.length = 19;
79288 /* k = 0 */
79289 lo = Math.imul(al0, bl0);
79290 mid = Math.imul(al0, bh0);
79291 mid = (mid + Math.imul(ah0, bl0)) | 0;
79292 hi = Math.imul(ah0, bh0);
79293 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79294 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
79295 w0 &= 0x3ffffff;
79296 /* k = 1 */
79297 lo = Math.imul(al1, bl0);
79298 mid = Math.imul(al1, bh0);
79299 mid = (mid + Math.imul(ah1, bl0)) | 0;
79300 hi = Math.imul(ah1, bh0);
79301 lo = (lo + Math.imul(al0, bl1)) | 0;
79302 mid = (mid + Math.imul(al0, bh1)) | 0;
79303 mid = (mid + Math.imul(ah0, bl1)) | 0;
79304 hi = (hi + Math.imul(ah0, bh1)) | 0;
79305 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79306 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
79307 w1 &= 0x3ffffff;
79308 /* k = 2 */
79309 lo = Math.imul(al2, bl0);
79310 mid = Math.imul(al2, bh0);
79311 mid = (mid + Math.imul(ah2, bl0)) | 0;
79312 hi = Math.imul(ah2, bh0);
79313 lo = (lo + Math.imul(al1, bl1)) | 0;
79314 mid = (mid + Math.imul(al1, bh1)) | 0;
79315 mid = (mid + Math.imul(ah1, bl1)) | 0;
79316 hi = (hi + Math.imul(ah1, bh1)) | 0;
79317 lo = (lo + Math.imul(al0, bl2)) | 0;
79318 mid = (mid + Math.imul(al0, bh2)) | 0;
79319 mid = (mid + Math.imul(ah0, bl2)) | 0;
79320 hi = (hi + Math.imul(ah0, bh2)) | 0;
79321 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79322 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
79323 w2 &= 0x3ffffff;
79324 /* k = 3 */
79325 lo = Math.imul(al3, bl0);
79326 mid = Math.imul(al3, bh0);
79327 mid = (mid + Math.imul(ah3, bl0)) | 0;
79328 hi = Math.imul(ah3, bh0);
79329 lo = (lo + Math.imul(al2, bl1)) | 0;
79330 mid = (mid + Math.imul(al2, bh1)) | 0;
79331 mid = (mid + Math.imul(ah2, bl1)) | 0;
79332 hi = (hi + Math.imul(ah2, bh1)) | 0;
79333 lo = (lo + Math.imul(al1, bl2)) | 0;
79334 mid = (mid + Math.imul(al1, bh2)) | 0;
79335 mid = (mid + Math.imul(ah1, bl2)) | 0;
79336 hi = (hi + Math.imul(ah1, bh2)) | 0;
79337 lo = (lo + Math.imul(al0, bl3)) | 0;
79338 mid = (mid + Math.imul(al0, bh3)) | 0;
79339 mid = (mid + Math.imul(ah0, bl3)) | 0;
79340 hi = (hi + Math.imul(ah0, bh3)) | 0;
79341 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79342 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
79343 w3 &= 0x3ffffff;
79344 /* k = 4 */
79345 lo = Math.imul(al4, bl0);
79346 mid = Math.imul(al4, bh0);
79347 mid = (mid + Math.imul(ah4, bl0)) | 0;
79348 hi = Math.imul(ah4, bh0);
79349 lo = (lo + Math.imul(al3, bl1)) | 0;
79350 mid = (mid + Math.imul(al3, bh1)) | 0;
79351 mid = (mid + Math.imul(ah3, bl1)) | 0;
79352 hi = (hi + Math.imul(ah3, bh1)) | 0;
79353 lo = (lo + Math.imul(al2, bl2)) | 0;
79354 mid = (mid + Math.imul(al2, bh2)) | 0;
79355 mid = (mid + Math.imul(ah2, bl2)) | 0;
79356 hi = (hi + Math.imul(ah2, bh2)) | 0;
79357 lo = (lo + Math.imul(al1, bl3)) | 0;
79358 mid = (mid + Math.imul(al1, bh3)) | 0;
79359 mid = (mid + Math.imul(ah1, bl3)) | 0;
79360 hi = (hi + Math.imul(ah1, bh3)) | 0;
79361 lo = (lo + Math.imul(al0, bl4)) | 0;
79362 mid = (mid + Math.imul(al0, bh4)) | 0;
79363 mid = (mid + Math.imul(ah0, bl4)) | 0;
79364 hi = (hi + Math.imul(ah0, bh4)) | 0;
79365 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79366 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
79367 w4 &= 0x3ffffff;
79368 /* k = 5 */
79369 lo = Math.imul(al5, bl0);
79370 mid = Math.imul(al5, bh0);
79371 mid = (mid + Math.imul(ah5, bl0)) | 0;
79372 hi = Math.imul(ah5, bh0);
79373 lo = (lo + Math.imul(al4, bl1)) | 0;
79374 mid = (mid + Math.imul(al4, bh1)) | 0;
79375 mid = (mid + Math.imul(ah4, bl1)) | 0;
79376 hi = (hi + Math.imul(ah4, bh1)) | 0;
79377 lo = (lo + Math.imul(al3, bl2)) | 0;
79378 mid = (mid + Math.imul(al3, bh2)) | 0;
79379 mid = (mid + Math.imul(ah3, bl2)) | 0;
79380 hi = (hi + Math.imul(ah3, bh2)) | 0;
79381 lo = (lo + Math.imul(al2, bl3)) | 0;
79382 mid = (mid + Math.imul(al2, bh3)) | 0;
79383 mid = (mid + Math.imul(ah2, bl3)) | 0;
79384 hi = (hi + Math.imul(ah2, bh3)) | 0;
79385 lo = (lo + Math.imul(al1, bl4)) | 0;
79386 mid = (mid + Math.imul(al1, bh4)) | 0;
79387 mid = (mid + Math.imul(ah1, bl4)) | 0;
79388 hi = (hi + Math.imul(ah1, bh4)) | 0;
79389 lo = (lo + Math.imul(al0, bl5)) | 0;
79390 mid = (mid + Math.imul(al0, bh5)) | 0;
79391 mid = (mid + Math.imul(ah0, bl5)) | 0;
79392 hi = (hi + Math.imul(ah0, bh5)) | 0;
79393 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79394 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
79395 w5 &= 0x3ffffff;
79396 /* k = 6 */
79397 lo = Math.imul(al6, bl0);
79398 mid = Math.imul(al6, bh0);
79399 mid = (mid + Math.imul(ah6, bl0)) | 0;
79400 hi = Math.imul(ah6, bh0);
79401 lo = (lo + Math.imul(al5, bl1)) | 0;
79402 mid = (mid + Math.imul(al5, bh1)) | 0;
79403 mid = (mid + Math.imul(ah5, bl1)) | 0;
79404 hi = (hi + Math.imul(ah5, bh1)) | 0;
79405 lo = (lo + Math.imul(al4, bl2)) | 0;
79406 mid = (mid + Math.imul(al4, bh2)) | 0;
79407 mid = (mid + Math.imul(ah4, bl2)) | 0;
79408 hi = (hi + Math.imul(ah4, bh2)) | 0;
79409 lo = (lo + Math.imul(al3, bl3)) | 0;
79410 mid = (mid + Math.imul(al3, bh3)) | 0;
79411 mid = (mid + Math.imul(ah3, bl3)) | 0;
79412 hi = (hi + Math.imul(ah3, bh3)) | 0;
79413 lo = (lo + Math.imul(al2, bl4)) | 0;
79414 mid = (mid + Math.imul(al2, bh4)) | 0;
79415 mid = (mid + Math.imul(ah2, bl4)) | 0;
79416 hi = (hi + Math.imul(ah2, bh4)) | 0;
79417 lo = (lo + Math.imul(al1, bl5)) | 0;
79418 mid = (mid + Math.imul(al1, bh5)) | 0;
79419 mid = (mid + Math.imul(ah1, bl5)) | 0;
79420 hi = (hi + Math.imul(ah1, bh5)) | 0;
79421 lo = (lo + Math.imul(al0, bl6)) | 0;
79422 mid = (mid + Math.imul(al0, bh6)) | 0;
79423 mid = (mid + Math.imul(ah0, bl6)) | 0;
79424 hi = (hi + Math.imul(ah0, bh6)) | 0;
79425 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79426 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
79427 w6 &= 0x3ffffff;
79428 /* k = 7 */
79429 lo = Math.imul(al7, bl0);
79430 mid = Math.imul(al7, bh0);
79431 mid = (mid + Math.imul(ah7, bl0)) | 0;
79432 hi = Math.imul(ah7, bh0);
79433 lo = (lo + Math.imul(al6, bl1)) | 0;
79434 mid = (mid + Math.imul(al6, bh1)) | 0;
79435 mid = (mid + Math.imul(ah6, bl1)) | 0;
79436 hi = (hi + Math.imul(ah6, bh1)) | 0;
79437 lo = (lo + Math.imul(al5, bl2)) | 0;
79438 mid = (mid + Math.imul(al5, bh2)) | 0;
79439 mid = (mid + Math.imul(ah5, bl2)) | 0;
79440 hi = (hi + Math.imul(ah5, bh2)) | 0;
79441 lo = (lo + Math.imul(al4, bl3)) | 0;
79442 mid = (mid + Math.imul(al4, bh3)) | 0;
79443 mid = (mid + Math.imul(ah4, bl3)) | 0;
79444 hi = (hi + Math.imul(ah4, bh3)) | 0;
79445 lo = (lo + Math.imul(al3, bl4)) | 0;
79446 mid = (mid + Math.imul(al3, bh4)) | 0;
79447 mid = (mid + Math.imul(ah3, bl4)) | 0;
79448 hi = (hi + Math.imul(ah3, bh4)) | 0;
79449 lo = (lo + Math.imul(al2, bl5)) | 0;
79450 mid = (mid + Math.imul(al2, bh5)) | 0;
79451 mid = (mid + Math.imul(ah2, bl5)) | 0;
79452 hi = (hi + Math.imul(ah2, bh5)) | 0;
79453 lo = (lo + Math.imul(al1, bl6)) | 0;
79454 mid = (mid + Math.imul(al1, bh6)) | 0;
79455 mid = (mid + Math.imul(ah1, bl6)) | 0;
79456 hi = (hi + Math.imul(ah1, bh6)) | 0;
79457 lo = (lo + Math.imul(al0, bl7)) | 0;
79458 mid = (mid + Math.imul(al0, bh7)) | 0;
79459 mid = (mid + Math.imul(ah0, bl7)) | 0;
79460 hi = (hi + Math.imul(ah0, bh7)) | 0;
79461 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79462 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
79463 w7 &= 0x3ffffff;
79464 /* k = 8 */
79465 lo = Math.imul(al8, bl0);
79466 mid = Math.imul(al8, bh0);
79467 mid = (mid + Math.imul(ah8, bl0)) | 0;
79468 hi = Math.imul(ah8, bh0);
79469 lo = (lo + Math.imul(al7, bl1)) | 0;
79470 mid = (mid + Math.imul(al7, bh1)) | 0;
79471 mid = (mid + Math.imul(ah7, bl1)) | 0;
79472 hi = (hi + Math.imul(ah7, bh1)) | 0;
79473 lo = (lo + Math.imul(al6, bl2)) | 0;
79474 mid = (mid + Math.imul(al6, bh2)) | 0;
79475 mid = (mid + Math.imul(ah6, bl2)) | 0;
79476 hi = (hi + Math.imul(ah6, bh2)) | 0;
79477 lo = (lo + Math.imul(al5, bl3)) | 0;
79478 mid = (mid + Math.imul(al5, bh3)) | 0;
79479 mid = (mid + Math.imul(ah5, bl3)) | 0;
79480 hi = (hi + Math.imul(ah5, bh3)) | 0;
79481 lo = (lo + Math.imul(al4, bl4)) | 0;
79482 mid = (mid + Math.imul(al4, bh4)) | 0;
79483 mid = (mid + Math.imul(ah4, bl4)) | 0;
79484 hi = (hi + Math.imul(ah4, bh4)) | 0;
79485 lo = (lo + Math.imul(al3, bl5)) | 0;
79486 mid = (mid + Math.imul(al3, bh5)) | 0;
79487 mid = (mid + Math.imul(ah3, bl5)) | 0;
79488 hi = (hi + Math.imul(ah3, bh5)) | 0;
79489 lo = (lo + Math.imul(al2, bl6)) | 0;
79490 mid = (mid + Math.imul(al2, bh6)) | 0;
79491 mid = (mid + Math.imul(ah2, bl6)) | 0;
79492 hi = (hi + Math.imul(ah2, bh6)) | 0;
79493 lo = (lo + Math.imul(al1, bl7)) | 0;
79494 mid = (mid + Math.imul(al1, bh7)) | 0;
79495 mid = (mid + Math.imul(ah1, bl7)) | 0;
79496 hi = (hi + Math.imul(ah1, bh7)) | 0;
79497 lo = (lo + Math.imul(al0, bl8)) | 0;
79498 mid = (mid + Math.imul(al0, bh8)) | 0;
79499 mid = (mid + Math.imul(ah0, bl8)) | 0;
79500 hi = (hi + Math.imul(ah0, bh8)) | 0;
79501 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79502 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
79503 w8 &= 0x3ffffff;
79504 /* k = 9 */
79505 lo = Math.imul(al9, bl0);
79506 mid = Math.imul(al9, bh0);
79507 mid = (mid + Math.imul(ah9, bl0)) | 0;
79508 hi = Math.imul(ah9, bh0);
79509 lo = (lo + Math.imul(al8, bl1)) | 0;
79510 mid = (mid + Math.imul(al8, bh1)) | 0;
79511 mid = (mid + Math.imul(ah8, bl1)) | 0;
79512 hi = (hi + Math.imul(ah8, bh1)) | 0;
79513 lo = (lo + Math.imul(al7, bl2)) | 0;
79514 mid = (mid + Math.imul(al7, bh2)) | 0;
79515 mid = (mid + Math.imul(ah7, bl2)) | 0;
79516 hi = (hi + Math.imul(ah7, bh2)) | 0;
79517 lo = (lo + Math.imul(al6, bl3)) | 0;
79518 mid = (mid + Math.imul(al6, bh3)) | 0;
79519 mid = (mid + Math.imul(ah6, bl3)) | 0;
79520 hi = (hi + Math.imul(ah6, bh3)) | 0;
79521 lo = (lo + Math.imul(al5, bl4)) | 0;
79522 mid = (mid + Math.imul(al5, bh4)) | 0;
79523 mid = (mid + Math.imul(ah5, bl4)) | 0;
79524 hi = (hi + Math.imul(ah5, bh4)) | 0;
79525 lo = (lo + Math.imul(al4, bl5)) | 0;
79526 mid = (mid + Math.imul(al4, bh5)) | 0;
79527 mid = (mid + Math.imul(ah4, bl5)) | 0;
79528 hi = (hi + Math.imul(ah4, bh5)) | 0;
79529 lo = (lo + Math.imul(al3, bl6)) | 0;
79530 mid = (mid + Math.imul(al3, bh6)) | 0;
79531 mid = (mid + Math.imul(ah3, bl6)) | 0;
79532 hi = (hi + Math.imul(ah3, bh6)) | 0;
79533 lo = (lo + Math.imul(al2, bl7)) | 0;
79534 mid = (mid + Math.imul(al2, bh7)) | 0;
79535 mid = (mid + Math.imul(ah2, bl7)) | 0;
79536 hi = (hi + Math.imul(ah2, bh7)) | 0;
79537 lo = (lo + Math.imul(al1, bl8)) | 0;
79538 mid = (mid + Math.imul(al1, bh8)) | 0;
79539 mid = (mid + Math.imul(ah1, bl8)) | 0;
79540 hi = (hi + Math.imul(ah1, bh8)) | 0;
79541 lo = (lo + Math.imul(al0, bl9)) | 0;
79542 mid = (mid + Math.imul(al0, bh9)) | 0;
79543 mid = (mid + Math.imul(ah0, bl9)) | 0;
79544 hi = (hi + Math.imul(ah0, bh9)) | 0;
79545 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79546 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
79547 w9 &= 0x3ffffff;
79548 /* k = 10 */
79549 lo = Math.imul(al9, bl1);
79550 mid = Math.imul(al9, bh1);
79551 mid = (mid + Math.imul(ah9, bl1)) | 0;
79552 hi = Math.imul(ah9, bh1);
79553 lo = (lo + Math.imul(al8, bl2)) | 0;
79554 mid = (mid + Math.imul(al8, bh2)) | 0;
79555 mid = (mid + Math.imul(ah8, bl2)) | 0;
79556 hi = (hi + Math.imul(ah8, bh2)) | 0;
79557 lo = (lo + Math.imul(al7, bl3)) | 0;
79558 mid = (mid + Math.imul(al7, bh3)) | 0;
79559 mid = (mid + Math.imul(ah7, bl3)) | 0;
79560 hi = (hi + Math.imul(ah7, bh3)) | 0;
79561 lo = (lo + Math.imul(al6, bl4)) | 0;
79562 mid = (mid + Math.imul(al6, bh4)) | 0;
79563 mid = (mid + Math.imul(ah6, bl4)) | 0;
79564 hi = (hi + Math.imul(ah6, bh4)) | 0;
79565 lo = (lo + Math.imul(al5, bl5)) | 0;
79566 mid = (mid + Math.imul(al5, bh5)) | 0;
79567 mid = (mid + Math.imul(ah5, bl5)) | 0;
79568 hi = (hi + Math.imul(ah5, bh5)) | 0;
79569 lo = (lo + Math.imul(al4, bl6)) | 0;
79570 mid = (mid + Math.imul(al4, bh6)) | 0;
79571 mid = (mid + Math.imul(ah4, bl6)) | 0;
79572 hi = (hi + Math.imul(ah4, bh6)) | 0;
79573 lo = (lo + Math.imul(al3, bl7)) | 0;
79574 mid = (mid + Math.imul(al3, bh7)) | 0;
79575 mid = (mid + Math.imul(ah3, bl7)) | 0;
79576 hi = (hi + Math.imul(ah3, bh7)) | 0;
79577 lo = (lo + Math.imul(al2, bl8)) | 0;
79578 mid = (mid + Math.imul(al2, bh8)) | 0;
79579 mid = (mid + Math.imul(ah2, bl8)) | 0;
79580 hi = (hi + Math.imul(ah2, bh8)) | 0;
79581 lo = (lo + Math.imul(al1, bl9)) | 0;
79582 mid = (mid + Math.imul(al1, bh9)) | 0;
79583 mid = (mid + Math.imul(ah1, bl9)) | 0;
79584 hi = (hi + Math.imul(ah1, bh9)) | 0;
79585 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79586 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
79587 w10 &= 0x3ffffff;
79588 /* k = 11 */
79589 lo = Math.imul(al9, bl2);
79590 mid = Math.imul(al9, bh2);
79591 mid = (mid + Math.imul(ah9, bl2)) | 0;
79592 hi = Math.imul(ah9, bh2);
79593 lo = (lo + Math.imul(al8, bl3)) | 0;
79594 mid = (mid + Math.imul(al8, bh3)) | 0;
79595 mid = (mid + Math.imul(ah8, bl3)) | 0;
79596 hi = (hi + Math.imul(ah8, bh3)) | 0;
79597 lo = (lo + Math.imul(al7, bl4)) | 0;
79598 mid = (mid + Math.imul(al7, bh4)) | 0;
79599 mid = (mid + Math.imul(ah7, bl4)) | 0;
79600 hi = (hi + Math.imul(ah7, bh4)) | 0;
79601 lo = (lo + Math.imul(al6, bl5)) | 0;
79602 mid = (mid + Math.imul(al6, bh5)) | 0;
79603 mid = (mid + Math.imul(ah6, bl5)) | 0;
79604 hi = (hi + Math.imul(ah6, bh5)) | 0;
79605 lo = (lo + Math.imul(al5, bl6)) | 0;
79606 mid = (mid + Math.imul(al5, bh6)) | 0;
79607 mid = (mid + Math.imul(ah5, bl6)) | 0;
79608 hi = (hi + Math.imul(ah5, bh6)) | 0;
79609 lo = (lo + Math.imul(al4, bl7)) | 0;
79610 mid = (mid + Math.imul(al4, bh7)) | 0;
79611 mid = (mid + Math.imul(ah4, bl7)) | 0;
79612 hi = (hi + Math.imul(ah4, bh7)) | 0;
79613 lo = (lo + Math.imul(al3, bl8)) | 0;
79614 mid = (mid + Math.imul(al3, bh8)) | 0;
79615 mid = (mid + Math.imul(ah3, bl8)) | 0;
79616 hi = (hi + Math.imul(ah3, bh8)) | 0;
79617 lo = (lo + Math.imul(al2, bl9)) | 0;
79618 mid = (mid + Math.imul(al2, bh9)) | 0;
79619 mid = (mid + Math.imul(ah2, bl9)) | 0;
79620 hi = (hi + Math.imul(ah2, bh9)) | 0;
79621 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79622 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
79623 w11 &= 0x3ffffff;
79624 /* k = 12 */
79625 lo = Math.imul(al9, bl3);
79626 mid = Math.imul(al9, bh3);
79627 mid = (mid + Math.imul(ah9, bl3)) | 0;
79628 hi = Math.imul(ah9, bh3);
79629 lo = (lo + Math.imul(al8, bl4)) | 0;
79630 mid = (mid + Math.imul(al8, bh4)) | 0;
79631 mid = (mid + Math.imul(ah8, bl4)) | 0;
79632 hi = (hi + Math.imul(ah8, bh4)) | 0;
79633 lo = (lo + Math.imul(al7, bl5)) | 0;
79634 mid = (mid + Math.imul(al7, bh5)) | 0;
79635 mid = (mid + Math.imul(ah7, bl5)) | 0;
79636 hi = (hi + Math.imul(ah7, bh5)) | 0;
79637 lo = (lo + Math.imul(al6, bl6)) | 0;
79638 mid = (mid + Math.imul(al6, bh6)) | 0;
79639 mid = (mid + Math.imul(ah6, bl6)) | 0;
79640 hi = (hi + Math.imul(ah6, bh6)) | 0;
79641 lo = (lo + Math.imul(al5, bl7)) | 0;
79642 mid = (mid + Math.imul(al5, bh7)) | 0;
79643 mid = (mid + Math.imul(ah5, bl7)) | 0;
79644 hi = (hi + Math.imul(ah5, bh7)) | 0;
79645 lo = (lo + Math.imul(al4, bl8)) | 0;
79646 mid = (mid + Math.imul(al4, bh8)) | 0;
79647 mid = (mid + Math.imul(ah4, bl8)) | 0;
79648 hi = (hi + Math.imul(ah4, bh8)) | 0;
79649 lo = (lo + Math.imul(al3, bl9)) | 0;
79650 mid = (mid + Math.imul(al3, bh9)) | 0;
79651 mid = (mid + Math.imul(ah3, bl9)) | 0;
79652 hi = (hi + Math.imul(ah3, bh9)) | 0;
79653 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79654 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
79655 w12 &= 0x3ffffff;
79656 /* k = 13 */
79657 lo = Math.imul(al9, bl4);
79658 mid = Math.imul(al9, bh4);
79659 mid = (mid + Math.imul(ah9, bl4)) | 0;
79660 hi = Math.imul(ah9, bh4);
79661 lo = (lo + Math.imul(al8, bl5)) | 0;
79662 mid = (mid + Math.imul(al8, bh5)) | 0;
79663 mid = (mid + Math.imul(ah8, bl5)) | 0;
79664 hi = (hi + Math.imul(ah8, bh5)) | 0;
79665 lo = (lo + Math.imul(al7, bl6)) | 0;
79666 mid = (mid + Math.imul(al7, bh6)) | 0;
79667 mid = (mid + Math.imul(ah7, bl6)) | 0;
79668 hi = (hi + Math.imul(ah7, bh6)) | 0;
79669 lo = (lo + Math.imul(al6, bl7)) | 0;
79670 mid = (mid + Math.imul(al6, bh7)) | 0;
79671 mid = (mid + Math.imul(ah6, bl7)) | 0;
79672 hi = (hi + Math.imul(ah6, bh7)) | 0;
79673 lo = (lo + Math.imul(al5, bl8)) | 0;
79674 mid = (mid + Math.imul(al5, bh8)) | 0;
79675 mid = (mid + Math.imul(ah5, bl8)) | 0;
79676 hi = (hi + Math.imul(ah5, bh8)) | 0;
79677 lo = (lo + Math.imul(al4, bl9)) | 0;
79678 mid = (mid + Math.imul(al4, bh9)) | 0;
79679 mid = (mid + Math.imul(ah4, bl9)) | 0;
79680 hi = (hi + Math.imul(ah4, bh9)) | 0;
79681 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79682 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
79683 w13 &= 0x3ffffff;
79684 /* k = 14 */
79685 lo = Math.imul(al9, bl5);
79686 mid = Math.imul(al9, bh5);
79687 mid = (mid + Math.imul(ah9, bl5)) | 0;
79688 hi = Math.imul(ah9, bh5);
79689 lo = (lo + Math.imul(al8, bl6)) | 0;
79690 mid = (mid + Math.imul(al8, bh6)) | 0;
79691 mid = (mid + Math.imul(ah8, bl6)) | 0;
79692 hi = (hi + Math.imul(ah8, bh6)) | 0;
79693 lo = (lo + Math.imul(al7, bl7)) | 0;
79694 mid = (mid + Math.imul(al7, bh7)) | 0;
79695 mid = (mid + Math.imul(ah7, bl7)) | 0;
79696 hi = (hi + Math.imul(ah7, bh7)) | 0;
79697 lo = (lo + Math.imul(al6, bl8)) | 0;
79698 mid = (mid + Math.imul(al6, bh8)) | 0;
79699 mid = (mid + Math.imul(ah6, bl8)) | 0;
79700 hi = (hi + Math.imul(ah6, bh8)) | 0;
79701 lo = (lo + Math.imul(al5, bl9)) | 0;
79702 mid = (mid + Math.imul(al5, bh9)) | 0;
79703 mid = (mid + Math.imul(ah5, bl9)) | 0;
79704 hi = (hi + Math.imul(ah5, bh9)) | 0;
79705 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79706 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
79707 w14 &= 0x3ffffff;
79708 /* k = 15 */
79709 lo = Math.imul(al9, bl6);
79710 mid = Math.imul(al9, bh6);
79711 mid = (mid + Math.imul(ah9, bl6)) | 0;
79712 hi = Math.imul(ah9, bh6);
79713 lo = (lo + Math.imul(al8, bl7)) | 0;
79714 mid = (mid + Math.imul(al8, bh7)) | 0;
79715 mid = (mid + Math.imul(ah8, bl7)) | 0;
79716 hi = (hi + Math.imul(ah8, bh7)) | 0;
79717 lo = (lo + Math.imul(al7, bl8)) | 0;
79718 mid = (mid + Math.imul(al7, bh8)) | 0;
79719 mid = (mid + Math.imul(ah7, bl8)) | 0;
79720 hi = (hi + Math.imul(ah7, bh8)) | 0;
79721 lo = (lo + Math.imul(al6, bl9)) | 0;
79722 mid = (mid + Math.imul(al6, bh9)) | 0;
79723 mid = (mid + Math.imul(ah6, bl9)) | 0;
79724 hi = (hi + Math.imul(ah6, bh9)) | 0;
79725 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79726 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
79727 w15 &= 0x3ffffff;
79728 /* k = 16 */
79729 lo = Math.imul(al9, bl7);
79730 mid = Math.imul(al9, bh7);
79731 mid = (mid + Math.imul(ah9, bl7)) | 0;
79732 hi = Math.imul(ah9, bh7);
79733 lo = (lo + Math.imul(al8, bl8)) | 0;
79734 mid = (mid + Math.imul(al8, bh8)) | 0;
79735 mid = (mid + Math.imul(ah8, bl8)) | 0;
79736 hi = (hi + Math.imul(ah8, bh8)) | 0;
79737 lo = (lo + Math.imul(al7, bl9)) | 0;
79738 mid = (mid + Math.imul(al7, bh9)) | 0;
79739 mid = (mid + Math.imul(ah7, bl9)) | 0;
79740 hi = (hi + Math.imul(ah7, bh9)) | 0;
79741 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79742 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
79743 w16 &= 0x3ffffff;
79744 /* k = 17 */
79745 lo = Math.imul(al9, bl8);
79746 mid = Math.imul(al9, bh8);
79747 mid = (mid + Math.imul(ah9, bl8)) | 0;
79748 hi = Math.imul(ah9, bh8);
79749 lo = (lo + Math.imul(al8, bl9)) | 0;
79750 mid = (mid + Math.imul(al8, bh9)) | 0;
79751 mid = (mid + Math.imul(ah8, bl9)) | 0;
79752 hi = (hi + Math.imul(ah8, bh9)) | 0;
79753 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79754 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
79755 w17 &= 0x3ffffff;
79756 /* k = 18 */
79757 lo = Math.imul(al9, bl9);
79758 mid = Math.imul(al9, bh9);
79759 mid = (mid + Math.imul(ah9, bl9)) | 0;
79760 hi = Math.imul(ah9, bh9);
79761 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79762 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
79763 w18 &= 0x3ffffff;
79764 o[0] = w0;
79765 o[1] = w1;
79766 o[2] = w2;
79767 o[3] = w3;
79768 o[4] = w4;
79769 o[5] = w5;
79770 o[6] = w6;
79771 o[7] = w7;
79772 o[8] = w8;
79773 o[9] = w9;
79774 o[10] = w10;
79775 o[11] = w11;
79776 o[12] = w12;
79777 o[13] = w13;
79778 o[14] = w14;
79779 o[15] = w15;
79780 o[16] = w16;
79781 o[17] = w17;
79782 o[18] = w18;
79783 if (c !== 0) {
79784 o[19] = c;
79785 out.length++;
79786 }
79787 return out;
79788 };
79789
79790 // Polyfill comb
79791 if (!Math.imul) {
79792 comb10MulTo = smallMulTo;
79793 }
79794
79795 function bigMulTo (self, num, out) {
79796 out.negative = num.negative ^ self.negative;
79797 out.length = self.length + num.length;
79798
79799 var carry = 0;
79800 var hncarry = 0;
79801 for (var k = 0; k < out.length - 1; k++) {
79802 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79803 // note that ncarry could be >= 0x3ffffff
79804 var ncarry = hncarry;
79805 hncarry = 0;
79806 var rword = carry & 0x3ffffff;
79807 var maxJ = Math.min(k, num.length - 1);
79808 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79809 var i = k - j;
79810 var a = self.words[i] | 0;
79811 var b = num.words[j] | 0;
79812 var r = a * b;
79813
79814 var lo = r & 0x3ffffff;
79815 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
79816 lo = (lo + rword) | 0;
79817 rword = lo & 0x3ffffff;
79818 ncarry = (ncarry + (lo >>> 26)) | 0;
79819
79820 hncarry += ncarry >>> 26;
79821 ncarry &= 0x3ffffff;
79822 }
79823 out.words[k] = rword;
79824 carry = ncarry;
79825 ncarry = hncarry;
79826 }
79827 if (carry !== 0) {
79828 out.words[k] = carry;
79829 } else {
79830 out.length--;
79831 }
79832
79833 return out.strip();
79834 }
79835
79836 function jumboMulTo (self, num, out) {
79837 var fftm = new FFTM();
79838 return fftm.mulp(self, num, out);
79839 }
79840
79841 BN.prototype.mulTo = function mulTo (num, out) {
79842 var res;
79843 var len = this.length + num.length;
79844 if (this.length === 10 && num.length === 10) {
79845 res = comb10MulTo(this, num, out);
79846 } else if (len < 63) {
79847 res = smallMulTo(this, num, out);
79848 } else if (len < 1024) {
79849 res = bigMulTo(this, num, out);
79850 } else {
79851 res = jumboMulTo(this, num, out);
79852 }
79853
79854 return res;
79855 };
79856
79857 // Cooley-Tukey algorithm for FFT
79858 // slightly revisited to rely on looping instead of recursion
79859
79860 function FFTM (x, y) {
79861 this.x = x;
79862 this.y = y;
79863 }
79864
79865 FFTM.prototype.makeRBT = function makeRBT (N) {
79866 var t = new Array(N);
79867 var l = BN.prototype._countBits(N) - 1;
79868 for (var i = 0; i < N; i++) {
79869 t[i] = this.revBin(i, l, N);
79870 }
79871
79872 return t;
79873 };
79874
79875 // Returns binary-reversed representation of `x`
79876 FFTM.prototype.revBin = function revBin (x, l, N) {
79877 if (x === 0 || x === N - 1) return x;
79878
79879 var rb = 0;
79880 for (var i = 0; i < l; i++) {
79881 rb |= (x & 1) << (l - i - 1);
79882 x >>= 1;
79883 }
79884
79885 return rb;
79886 };
79887
79888 // Performs "tweedling" phase, therefore 'emulating'
79889 // behaviour of the recursive algorithm
79890 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
79891 for (var i = 0; i < N; i++) {
79892 rtws[i] = rws[rbt[i]];
79893 itws[i] = iws[rbt[i]];
79894 }
79895 };
79896
79897 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
79898 this.permute(rbt, rws, iws, rtws, itws, N);
79899
79900 for (var s = 1; s < N; s <<= 1) {
79901 var l = s << 1;
79902
79903 var rtwdf = Math.cos(2 * Math.PI / l);
79904 var itwdf = Math.sin(2 * Math.PI / l);
79905
79906 for (var p = 0; p < N; p += l) {
79907 var rtwdf_ = rtwdf;
79908 var itwdf_ = itwdf;
79909
79910 for (var j = 0; j < s; j++) {
79911 var re = rtws[p + j];
79912 var ie = itws[p + j];
79913
79914 var ro = rtws[p + j + s];
79915 var io = itws[p + j + s];
79916
79917 var rx = rtwdf_ * ro - itwdf_ * io;
79918
79919 io = rtwdf_ * io + itwdf_ * ro;
79920 ro = rx;
79921
79922 rtws[p + j] = re + ro;
79923 itws[p + j] = ie + io;
79924
79925 rtws[p + j + s] = re - ro;
79926 itws[p + j + s] = ie - io;
79927
79928 /* jshint maxdepth : false */
79929 if (j !== l) {
79930 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
79931
79932 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
79933 rtwdf_ = rx;
79934 }
79935 }
79936 }
79937 }
79938 };
79939
79940 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
79941 var N = Math.max(m, n) | 1;
79942 var odd = N & 1;
79943 var i = 0;
79944 for (N = N / 2 | 0; N; N = N >>> 1) {
79945 i++;
79946 }
79947
79948 return 1 << i + 1 + odd;
79949 };
79950
79951 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
79952 if (N <= 1) return;
79953
79954 for (var i = 0; i < N / 2; i++) {
79955 var t = rws[i];
79956
79957 rws[i] = rws[N - i - 1];
79958 rws[N - i - 1] = t;
79959
79960 t = iws[i];
79961
79962 iws[i] = -iws[N - i - 1];
79963 iws[N - i - 1] = -t;
79964 }
79965 };
79966
79967 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
79968 var carry = 0;
79969 for (var i = 0; i < N / 2; i++) {
79970 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
79971 Math.round(ws[2 * i] / N) +
79972 carry;
79973
79974 ws[i] = w & 0x3ffffff;
79975
79976 if (w < 0x4000000) {
79977 carry = 0;
79978 } else {
79979 carry = w / 0x4000000 | 0;
79980 }
79981 }
79982
79983 return ws;
79984 };
79985
79986 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
79987 var carry = 0;
79988 for (var i = 0; i < len; i++) {
79989 carry = carry + (ws[i] | 0);
79990
79991 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
79992 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
79993 }
79994
79995 // Pad with zeroes
79996 for (i = 2 * len; i < N; ++i) {
79997 rws[i] = 0;
79998 }
79999
80000 assert(carry === 0);
80001 assert((carry & ~0x1fff) === 0);
80002 };
80003
80004 FFTM.prototype.stub = function stub (N) {
80005 var ph = new Array(N);
80006 for (var i = 0; i < N; i++) {
80007 ph[i] = 0;
80008 }
80009
80010 return ph;
80011 };
80012
80013 FFTM.prototype.mulp = function mulp (x, y, out) {
80014 var N = 2 * this.guessLen13b(x.length, y.length);
80015
80016 var rbt = this.makeRBT(N);
80017
80018 var _ = this.stub(N);
80019
80020 var rws = new Array(N);
80021 var rwst = new Array(N);
80022 var iwst = new Array(N);
80023
80024 var nrws = new Array(N);
80025 var nrwst = new Array(N);
80026 var niwst = new Array(N);
80027
80028 var rmws = out.words;
80029 rmws.length = N;
80030
80031 this.convert13b(x.words, x.length, rws, N);
80032 this.convert13b(y.words, y.length, nrws, N);
80033
80034 this.transform(rws, _, rwst, iwst, N, rbt);
80035 this.transform(nrws, _, nrwst, niwst, N, rbt);
80036
80037 for (var i = 0; i < N; i++) {
80038 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
80039 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
80040 rwst[i] = rx;
80041 }
80042
80043 this.conjugate(rwst, iwst, N);
80044 this.transform(rwst, iwst, rmws, _, N, rbt);
80045 this.conjugate(rmws, _, N);
80046 this.normalize13b(rmws, N);
80047
80048 out.negative = x.negative ^ y.negative;
80049 out.length = x.length + y.length;
80050 return out.strip();
80051 };
80052
80053 // Multiply `this` by `num`
80054 BN.prototype.mul = function mul (num) {
80055 var out = new BN(null);
80056 out.words = new Array(this.length + num.length);
80057 return this.mulTo(num, out);
80058 };
80059
80060 // Multiply employing FFT
80061 BN.prototype.mulf = function mulf (num) {
80062 var out = new BN(null);
80063 out.words = new Array(this.length + num.length);
80064 return jumboMulTo(this, num, out);
80065 };
80066
80067 // In-place Multiplication
80068 BN.prototype.imul = function imul (num) {
80069 return this.clone().mulTo(num, this);
80070 };
80071
80072 BN.prototype.imuln = function imuln (num) {
80073 assert(typeof num === 'number');
80074 assert(num < 0x4000000);
80075
80076 // Carry
80077 var carry = 0;
80078 for (var i = 0; i < this.length; i++) {
80079 var w = (this.words[i] | 0) * num;
80080 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
80081 carry >>= 26;
80082 carry += (w / 0x4000000) | 0;
80083 // NOTE: lo is 27bit maximum
80084 carry += lo >>> 26;
80085 this.words[i] = lo & 0x3ffffff;
80086 }
80087
80088 if (carry !== 0) {
80089 this.words[i] = carry;
80090 this.length++;
80091 }
80092
80093 return this;
80094 };
80095
80096 BN.prototype.muln = function muln (num) {
80097 return this.clone().imuln(num);
80098 };
80099
80100 // `this` * `this`
80101 BN.prototype.sqr = function sqr () {
80102 return this.mul(this);
80103 };
80104
80105 // `this` * `this` in-place
80106 BN.prototype.isqr = function isqr () {
80107 return this.imul(this.clone());
80108 };
80109
80110 // Math.pow(`this`, `num`)
80111 BN.prototype.pow = function pow (num) {
80112 var w = toBitArray(num);
80113 if (w.length === 0) return new BN(1);
80114
80115 // Skip leading zeroes
80116 var res = this;
80117 for (var i = 0; i < w.length; i++, res = res.sqr()) {
80118 if (w[i] !== 0) break;
80119 }
80120
80121 if (++i < w.length) {
80122 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
80123 if (w[i] === 0) continue;
80124
80125 res = res.mul(q);
80126 }
80127 }
80128
80129 return res;
80130 };
80131
80132 // Shift-left in-place
80133 BN.prototype.iushln = function iushln (bits) {
80134 assert(typeof bits === 'number' && bits >= 0);
80135 var r = bits % 26;
80136 var s = (bits - r) / 26;
80137 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
80138 var i;
80139
80140 if (r !== 0) {
80141 var carry = 0;
80142
80143 for (i = 0; i < this.length; i++) {
80144 var newCarry = this.words[i] & carryMask;
80145 var c = ((this.words[i] | 0) - newCarry) << r;
80146 this.words[i] = c | carry;
80147 carry = newCarry >>> (26 - r);
80148 }
80149
80150 if (carry) {
80151 this.words[i] = carry;
80152 this.length++;
80153 }
80154 }
80155
80156 if (s !== 0) {
80157 for (i = this.length - 1; i >= 0; i--) {
80158 this.words[i + s] = this.words[i];
80159 }
80160
80161 for (i = 0; i < s; i++) {
80162 this.words[i] = 0;
80163 }
80164
80165 this.length += s;
80166 }
80167
80168 return this.strip();
80169 };
80170
80171 BN.prototype.ishln = function ishln (bits) {
80172 // TODO(indutny): implement me
80173 assert(this.negative === 0);
80174 return this.iushln(bits);
80175 };
80176
80177 // Shift-right in-place
80178 // NOTE: `hint` is a lowest bit before trailing zeroes
80179 // NOTE: if `extended` is present - it will be filled with destroyed bits
80180 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
80181 assert(typeof bits === 'number' && bits >= 0);
80182 var h;
80183 if (hint) {
80184 h = (hint - (hint % 26)) / 26;
80185 } else {
80186 h = 0;
80187 }
80188
80189 var r = bits % 26;
80190 var s = Math.min((bits - r) / 26, this.length);
80191 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80192 var maskedWords = extended;
80193
80194 h -= s;
80195 h = Math.max(0, h);
80196
80197 // Extended mode, copy masked part
80198 if (maskedWords) {
80199 for (var i = 0; i < s; i++) {
80200 maskedWords.words[i] = this.words[i];
80201 }
80202 maskedWords.length = s;
80203 }
80204
80205 if (s === 0) {
80206 // No-op, we should not move anything at all
80207 } else if (this.length > s) {
80208 this.length -= s;
80209 for (i = 0; i < this.length; i++) {
80210 this.words[i] = this.words[i + s];
80211 }
80212 } else {
80213 this.words[0] = 0;
80214 this.length = 1;
80215 }
80216
80217 var carry = 0;
80218 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
80219 var word = this.words[i] | 0;
80220 this.words[i] = (carry << (26 - r)) | (word >>> r);
80221 carry = word & mask;
80222 }
80223
80224 // Push carried bits as a mask
80225 if (maskedWords && carry !== 0) {
80226 maskedWords.words[maskedWords.length++] = carry;
80227 }
80228
80229 if (this.length === 0) {
80230 this.words[0] = 0;
80231 this.length = 1;
80232 }
80233
80234 return this.strip();
80235 };
80236
80237 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
80238 // TODO(indutny): implement me
80239 assert(this.negative === 0);
80240 return this.iushrn(bits, hint, extended);
80241 };
80242
80243 // Shift-left
80244 BN.prototype.shln = function shln (bits) {
80245 return this.clone().ishln(bits);
80246 };
80247
80248 BN.prototype.ushln = function ushln (bits) {
80249 return this.clone().iushln(bits);
80250 };
80251
80252 // Shift-right
80253 BN.prototype.shrn = function shrn (bits) {
80254 return this.clone().ishrn(bits);
80255 };
80256
80257 BN.prototype.ushrn = function ushrn (bits) {
80258 return this.clone().iushrn(bits);
80259 };
80260
80261 // Test if n bit is set
80262 BN.prototype.testn = function testn (bit) {
80263 assert(typeof bit === 'number' && bit >= 0);
80264 var r = bit % 26;
80265 var s = (bit - r) / 26;
80266 var q = 1 << r;
80267
80268 // Fast case: bit is much higher than all existing words
80269 if (this.length <= s) return false;
80270
80271 // Check bit and return
80272 var w = this.words[s];
80273
80274 return !!(w & q);
80275 };
80276
80277 // Return only lowers bits of number (in-place)
80278 BN.prototype.imaskn = function imaskn (bits) {
80279 assert(typeof bits === 'number' && bits >= 0);
80280 var r = bits % 26;
80281 var s = (bits - r) / 26;
80282
80283 assert(this.negative === 0, 'imaskn works only with positive numbers');
80284
80285 if (this.length <= s) {
80286 return this;
80287 }
80288
80289 if (r !== 0) {
80290 s++;
80291 }
80292 this.length = Math.min(s, this.length);
80293
80294 if (r !== 0) {
80295 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80296 this.words[this.length - 1] &= mask;
80297 }
80298
80299 return this.strip();
80300 };
80301
80302 // Return only lowers bits of number
80303 BN.prototype.maskn = function maskn (bits) {
80304 return this.clone().imaskn(bits);
80305 };
80306
80307 // Add plain number `num` to `this`
80308 BN.prototype.iaddn = function iaddn (num) {
80309 assert(typeof num === 'number');
80310 assert(num < 0x4000000);
80311 if (num < 0) return this.isubn(-num);
80312
80313 // Possible sign change
80314 if (this.negative !== 0) {
80315 if (this.length === 1 && (this.words[0] | 0) < num) {
80316 this.words[0] = num - (this.words[0] | 0);
80317 this.negative = 0;
80318 return this;
80319 }
80320
80321 this.negative = 0;
80322 this.isubn(num);
80323 this.negative = 1;
80324 return this;
80325 }
80326
80327 // Add without checks
80328 return this._iaddn(num);
80329 };
80330
80331 BN.prototype._iaddn = function _iaddn (num) {
80332 this.words[0] += num;
80333
80334 // Carry
80335 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
80336 this.words[i] -= 0x4000000;
80337 if (i === this.length - 1) {
80338 this.words[i + 1] = 1;
80339 } else {
80340 this.words[i + 1]++;
80341 }
80342 }
80343 this.length = Math.max(this.length, i + 1);
80344
80345 return this;
80346 };
80347
80348 // Subtract plain number `num` from `this`
80349 BN.prototype.isubn = function isubn (num) {
80350 assert(typeof num === 'number');
80351 assert(num < 0x4000000);
80352 if (num < 0) return this.iaddn(-num);
80353
80354 if (this.negative !== 0) {
80355 this.negative = 0;
80356 this.iaddn(num);
80357 this.negative = 1;
80358 return this;
80359 }
80360
80361 this.words[0] -= num;
80362
80363 if (this.length === 1 && this.words[0] < 0) {
80364 this.words[0] = -this.words[0];
80365 this.negative = 1;
80366 } else {
80367 // Carry
80368 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
80369 this.words[i] += 0x4000000;
80370 this.words[i + 1] -= 1;
80371 }
80372 }
80373
80374 return this.strip();
80375 };
80376
80377 BN.prototype.addn = function addn (num) {
80378 return this.clone().iaddn(num);
80379 };
80380
80381 BN.prototype.subn = function subn (num) {
80382 return this.clone().isubn(num);
80383 };
80384
80385 BN.prototype.iabs = function iabs () {
80386 this.negative = 0;
80387
80388 return this;
80389 };
80390
80391 BN.prototype.abs = function abs () {
80392 return this.clone().iabs();
80393 };
80394
80395 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
80396 var len = num.length + shift;
80397 var i;
80398
80399 this._expand(len);
80400
80401 var w;
80402 var carry = 0;
80403 for (i = 0; i < num.length; i++) {
80404 w = (this.words[i + shift] | 0) + carry;
80405 var right = (num.words[i] | 0) * mul;
80406 w -= right & 0x3ffffff;
80407 carry = (w >> 26) - ((right / 0x4000000) | 0);
80408 this.words[i + shift] = w & 0x3ffffff;
80409 }
80410 for (; i < this.length - shift; i++) {
80411 w = (this.words[i + shift] | 0) + carry;
80412 carry = w >> 26;
80413 this.words[i + shift] = w & 0x3ffffff;
80414 }
80415
80416 if (carry === 0) return this.strip();
80417
80418 // Subtraction overflow
80419 assert(carry === -1);
80420 carry = 0;
80421 for (i = 0; i < this.length; i++) {
80422 w = -(this.words[i] | 0) + carry;
80423 carry = w >> 26;
80424 this.words[i] = w & 0x3ffffff;
80425 }
80426 this.negative = 1;
80427
80428 return this.strip();
80429 };
80430
80431 BN.prototype._wordDiv = function _wordDiv (num, mode) {
80432 var shift = this.length - num.length;
80433
80434 var a = this.clone();
80435 var b = num;
80436
80437 // Normalize
80438 var bhi = b.words[b.length - 1] | 0;
80439 var bhiBits = this._countBits(bhi);
80440 shift = 26 - bhiBits;
80441 if (shift !== 0) {
80442 b = b.ushln(shift);
80443 a.iushln(shift);
80444 bhi = b.words[b.length - 1] | 0;
80445 }
80446
80447 // Initialize quotient
80448 var m = a.length - b.length;
80449 var q;
80450
80451 if (mode !== 'mod') {
80452 q = new BN(null);
80453 q.length = m + 1;
80454 q.words = new Array(q.length);
80455 for (var i = 0; i < q.length; i++) {
80456 q.words[i] = 0;
80457 }
80458 }
80459
80460 var diff = a.clone()._ishlnsubmul(b, 1, m);
80461 if (diff.negative === 0) {
80462 a = diff;
80463 if (q) {
80464 q.words[m] = 1;
80465 }
80466 }
80467
80468 for (var j = m - 1; j >= 0; j--) {
80469 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
80470 (a.words[b.length + j - 1] | 0);
80471
80472 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
80473 // (0x7ffffff)
80474 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
80475
80476 a._ishlnsubmul(b, qj, j);
80477 while (a.negative !== 0) {
80478 qj--;
80479 a.negative = 0;
80480 a._ishlnsubmul(b, 1, j);
80481 if (!a.isZero()) {
80482 a.negative ^= 1;
80483 }
80484 }
80485 if (q) {
80486 q.words[j] = qj;
80487 }
80488 }
80489 if (q) {
80490 q.strip();
80491 }
80492 a.strip();
80493
80494 // Denormalize
80495 if (mode !== 'div' && shift !== 0) {
80496 a.iushrn(shift);
80497 }
80498
80499 return {
80500 div: q || null,
80501 mod: a
80502 };
80503 };
80504
80505 // NOTE: 1) `mode` can be set to `mod` to request mod only,
80506 // to `div` to request div only, or be absent to
80507 // request both div & mod
80508 // 2) `positive` is true if unsigned mod is requested
80509 BN.prototype.divmod = function divmod (num, mode, positive) {
80510 assert(!num.isZero());
80511
80512 if (this.isZero()) {
80513 return {
80514 div: new BN(0),
80515 mod: new BN(0)
80516 };
80517 }
80518
80519 var div, mod, res;
80520 if (this.negative !== 0 && num.negative === 0) {
80521 res = this.neg().divmod(num, mode);
80522
80523 if (mode !== 'mod') {
80524 div = res.div.neg();
80525 }
80526
80527 if (mode !== 'div') {
80528 mod = res.mod.neg();
80529 if (positive && mod.negative !== 0) {
80530 mod.iadd(num);
80531 }
80532 }
80533
80534 return {
80535 div: div,
80536 mod: mod
80537 };
80538 }
80539
80540 if (this.negative === 0 && num.negative !== 0) {
80541 res = this.divmod(num.neg(), mode);
80542
80543 if (mode !== 'mod') {
80544 div = res.div.neg();
80545 }
80546
80547 return {
80548 div: div,
80549 mod: res.mod
80550 };
80551 }
80552
80553 if ((this.negative & num.negative) !== 0) {
80554 res = this.neg().divmod(num.neg(), mode);
80555
80556 if (mode !== 'div') {
80557 mod = res.mod.neg();
80558 if (positive && mod.negative !== 0) {
80559 mod.isub(num);
80560 }
80561 }
80562
80563 return {
80564 div: res.div,
80565 mod: mod
80566 };
80567 }
80568
80569 // Both numbers are positive at this point
80570
80571 // Strip both numbers to approximate shift value
80572 if (num.length > this.length || this.cmp(num) < 0) {
80573 return {
80574 div: new BN(0),
80575 mod: this
80576 };
80577 }
80578
80579 // Very short reduction
80580 if (num.length === 1) {
80581 if (mode === 'div') {
80582 return {
80583 div: this.divn(num.words[0]),
80584 mod: null
80585 };
80586 }
80587
80588 if (mode === 'mod') {
80589 return {
80590 div: null,
80591 mod: new BN(this.modn(num.words[0]))
80592 };
80593 }
80594
80595 return {
80596 div: this.divn(num.words[0]),
80597 mod: new BN(this.modn(num.words[0]))
80598 };
80599 }
80600
80601 return this._wordDiv(num, mode);
80602 };
80603
80604 // Find `this` / `num`
80605 BN.prototype.div = function div (num) {
80606 return this.divmod(num, 'div', false).div;
80607 };
80608
80609 // Find `this` % `num`
80610 BN.prototype.mod = function mod (num) {
80611 return this.divmod(num, 'mod', false).mod;
80612 };
80613
80614 BN.prototype.umod = function umod (num) {
80615 return this.divmod(num, 'mod', true).mod;
80616 };
80617
80618 // Find Round(`this` / `num`)
80619 BN.prototype.divRound = function divRound (num) {
80620 var dm = this.divmod(num);
80621
80622 // Fast case - exact division
80623 if (dm.mod.isZero()) return dm.div;
80624
80625 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
80626
80627 var half = num.ushrn(1);
80628 var r2 = num.andln(1);
80629 var cmp = mod.cmp(half);
80630
80631 // Round down
80632 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
80633
80634 // Round up
80635 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
80636 };
80637
80638 BN.prototype.modn = function modn (num) {
80639 assert(num <= 0x3ffffff);
80640 var p = (1 << 26) % num;
80641
80642 var acc = 0;
80643 for (var i = this.length - 1; i >= 0; i--) {
80644 acc = (p * acc + (this.words[i] | 0)) % num;
80645 }
80646
80647 return acc;
80648 };
80649
80650 // In-place division by number
80651 BN.prototype.idivn = function idivn (num) {
80652 assert(num <= 0x3ffffff);
80653
80654 var carry = 0;
80655 for (var i = this.length - 1; i >= 0; i--) {
80656 var w = (this.words[i] | 0) + carry * 0x4000000;
80657 this.words[i] = (w / num) | 0;
80658 carry = w % num;
80659 }
80660
80661 return this.strip();
80662 };
80663
80664 BN.prototype.divn = function divn (num) {
80665 return this.clone().idivn(num);
80666 };
80667
80668 BN.prototype.egcd = function egcd (p) {
80669 assert(p.negative === 0);
80670 assert(!p.isZero());
80671
80672 var x = this;
80673 var y = p.clone();
80674
80675 if (x.negative !== 0) {
80676 x = x.umod(p);
80677 } else {
80678 x = x.clone();
80679 }
80680
80681 // A * x + B * y = x
80682 var A = new BN(1);
80683 var B = new BN(0);
80684
80685 // C * x + D * y = y
80686 var C = new BN(0);
80687 var D = new BN(1);
80688
80689 var g = 0;
80690
80691 while (x.isEven() && y.isEven()) {
80692 x.iushrn(1);
80693 y.iushrn(1);
80694 ++g;
80695 }
80696
80697 var yp = y.clone();
80698 var xp = x.clone();
80699
80700 while (!x.isZero()) {
80701 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80702 if (i > 0) {
80703 x.iushrn(i);
80704 while (i-- > 0) {
80705 if (A.isOdd() || B.isOdd()) {
80706 A.iadd(yp);
80707 B.isub(xp);
80708 }
80709
80710 A.iushrn(1);
80711 B.iushrn(1);
80712 }
80713 }
80714
80715 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80716 if (j > 0) {
80717 y.iushrn(j);
80718 while (j-- > 0) {
80719 if (C.isOdd() || D.isOdd()) {
80720 C.iadd(yp);
80721 D.isub(xp);
80722 }
80723
80724 C.iushrn(1);
80725 D.iushrn(1);
80726 }
80727 }
80728
80729 if (x.cmp(y) >= 0) {
80730 x.isub(y);
80731 A.isub(C);
80732 B.isub(D);
80733 } else {
80734 y.isub(x);
80735 C.isub(A);
80736 D.isub(B);
80737 }
80738 }
80739
80740 return {
80741 a: C,
80742 b: D,
80743 gcd: y.iushln(g)
80744 };
80745 };
80746
80747 // This is reduced incarnation of the binary EEA
80748 // above, designated to invert members of the
80749 // _prime_ fields F(p) at a maximal speed
80750 BN.prototype._invmp = function _invmp (p) {
80751 assert(p.negative === 0);
80752 assert(!p.isZero());
80753
80754 var a = this;
80755 var b = p.clone();
80756
80757 if (a.negative !== 0) {
80758 a = a.umod(p);
80759 } else {
80760 a = a.clone();
80761 }
80762
80763 var x1 = new BN(1);
80764 var x2 = new BN(0);
80765
80766 var delta = b.clone();
80767
80768 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
80769 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80770 if (i > 0) {
80771 a.iushrn(i);
80772 while (i-- > 0) {
80773 if (x1.isOdd()) {
80774 x1.iadd(delta);
80775 }
80776
80777 x1.iushrn(1);
80778 }
80779 }
80780
80781 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80782 if (j > 0) {
80783 b.iushrn(j);
80784 while (j-- > 0) {
80785 if (x2.isOdd()) {
80786 x2.iadd(delta);
80787 }
80788
80789 x2.iushrn(1);
80790 }
80791 }
80792
80793 if (a.cmp(b) >= 0) {
80794 a.isub(b);
80795 x1.isub(x2);
80796 } else {
80797 b.isub(a);
80798 x2.isub(x1);
80799 }
80800 }
80801
80802 var res;
80803 if (a.cmpn(1) === 0) {
80804 res = x1;
80805 } else {
80806 res = x2;
80807 }
80808
80809 if (res.cmpn(0) < 0) {
80810 res.iadd(p);
80811 }
80812
80813 return res;
80814 };
80815
80816 BN.prototype.gcd = function gcd (num) {
80817 if (this.isZero()) return num.abs();
80818 if (num.isZero()) return this.abs();
80819
80820 var a = this.clone();
80821 var b = num.clone();
80822 a.negative = 0;
80823 b.negative = 0;
80824
80825 // Remove common factor of two
80826 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
80827 a.iushrn(1);
80828 b.iushrn(1);
80829 }
80830
80831 do {
80832 while (a.isEven()) {
80833 a.iushrn(1);
80834 }
80835 while (b.isEven()) {
80836 b.iushrn(1);
80837 }
80838
80839 var r = a.cmp(b);
80840 if (r < 0) {
80841 // Swap `a` and `b` to make `a` always bigger than `b`
80842 var t = a;
80843 a = b;
80844 b = t;
80845 } else if (r === 0 || b.cmpn(1) === 0) {
80846 break;
80847 }
80848
80849 a.isub(b);
80850 } while (true);
80851
80852 return b.iushln(shift);
80853 };
80854
80855 // Invert number in the field F(num)
80856 BN.prototype.invm = function invm (num) {
80857 return this.egcd(num).a.umod(num);
80858 };
80859
80860 BN.prototype.isEven = function isEven () {
80861 return (this.words[0] & 1) === 0;
80862 };
80863
80864 BN.prototype.isOdd = function isOdd () {
80865 return (this.words[0] & 1) === 1;
80866 };
80867
80868 // And first word and num
80869 BN.prototype.andln = function andln (num) {
80870 return this.words[0] & num;
80871 };
80872
80873 // Increment at the bit position in-line
80874 BN.prototype.bincn = function bincn (bit) {
80875 assert(typeof bit === 'number');
80876 var r = bit % 26;
80877 var s = (bit - r) / 26;
80878 var q = 1 << r;
80879
80880 // Fast case: bit is much higher than all existing words
80881 if (this.length <= s) {
80882 this._expand(s + 1);
80883 this.words[s] |= q;
80884 return this;
80885 }
80886
80887 // Add bit and propagate, if needed
80888 var carry = q;
80889 for (var i = s; carry !== 0 && i < this.length; i++) {
80890 var w = this.words[i] | 0;
80891 w += carry;
80892 carry = w >>> 26;
80893 w &= 0x3ffffff;
80894 this.words[i] = w;
80895 }
80896 if (carry !== 0) {
80897 this.words[i] = carry;
80898 this.length++;
80899 }
80900 return this;
80901 };
80902
80903 BN.prototype.isZero = function isZero () {
80904 return this.length === 1 && this.words[0] === 0;
80905 };
80906
80907 BN.prototype.cmpn = function cmpn (num) {
80908 var negative = num < 0;
80909
80910 if (this.negative !== 0 && !negative) return -1;
80911 if (this.negative === 0 && negative) return 1;
80912
80913 this.strip();
80914
80915 var res;
80916 if (this.length > 1) {
80917 res = 1;
80918 } else {
80919 if (negative) {
80920 num = -num;
80921 }
80922
80923 assert(num <= 0x3ffffff, 'Number is too big');
80924
80925 var w = this.words[0] | 0;
80926 res = w === num ? 0 : w < num ? -1 : 1;
80927 }
80928 if (this.negative !== 0) return -res | 0;
80929 return res;
80930 };
80931
80932 // Compare two numbers and return:
80933 // 1 - if `this` > `num`
80934 // 0 - if `this` == `num`
80935 // -1 - if `this` < `num`
80936 BN.prototype.cmp = function cmp (num) {
80937 if (this.negative !== 0 && num.negative === 0) return -1;
80938 if (this.negative === 0 && num.negative !== 0) return 1;
80939
80940 var res = this.ucmp(num);
80941 if (this.negative !== 0) return -res | 0;
80942 return res;
80943 };
80944
80945 // Unsigned comparison
80946 BN.prototype.ucmp = function ucmp (num) {
80947 // At this point both numbers have the same sign
80948 if (this.length > num.length) return 1;
80949 if (this.length < num.length) return -1;
80950
80951 var res = 0;
80952 for (var i = this.length - 1; i >= 0; i--) {
80953 var a = this.words[i] | 0;
80954 var b = num.words[i] | 0;
80955
80956 if (a === b) continue;
80957 if (a < b) {
80958 res = -1;
80959 } else if (a > b) {
80960 res = 1;
80961 }
80962 break;
80963 }
80964 return res;
80965 };
80966
80967 BN.prototype.gtn = function gtn (num) {
80968 return this.cmpn(num) === 1;
80969 };
80970
80971 BN.prototype.gt = function gt (num) {
80972 return this.cmp(num) === 1;
80973 };
80974
80975 BN.prototype.gten = function gten (num) {
80976 return this.cmpn(num) >= 0;
80977 };
80978
80979 BN.prototype.gte = function gte (num) {
80980 return this.cmp(num) >= 0;
80981 };
80982
80983 BN.prototype.ltn = function ltn (num) {
80984 return this.cmpn(num) === -1;
80985 };
80986
80987 BN.prototype.lt = function lt (num) {
80988 return this.cmp(num) === -1;
80989 };
80990
80991 BN.prototype.lten = function lten (num) {
80992 return this.cmpn(num) <= 0;
80993 };
80994
80995 BN.prototype.lte = function lte (num) {
80996 return this.cmp(num) <= 0;
80997 };
80998
80999 BN.prototype.eqn = function eqn (num) {
81000 return this.cmpn(num) === 0;
81001 };
81002
81003 BN.prototype.eq = function eq (num) {
81004 return this.cmp(num) === 0;
81005 };
81006
81007 //
81008 // A reduce context, could be using montgomery or something better, depending
81009 // on the `m` itself.
81010 //
81011 BN.red = function red (num) {
81012 return new Red(num);
81013 };
81014
81015 BN.prototype.toRed = function toRed (ctx) {
81016 assert(!this.red, 'Already a number in reduction context');
81017 assert(this.negative === 0, 'red works only with positives');
81018 return ctx.convertTo(this)._forceRed(ctx);
81019 };
81020
81021 BN.prototype.fromRed = function fromRed () {
81022 assert(this.red, 'fromRed works only with numbers in reduction context');
81023 return this.red.convertFrom(this);
81024 };
81025
81026 BN.prototype._forceRed = function _forceRed (ctx) {
81027 this.red = ctx;
81028 return this;
81029 };
81030
81031 BN.prototype.forceRed = function forceRed (ctx) {
81032 assert(!this.red, 'Already a number in reduction context');
81033 return this._forceRed(ctx);
81034 };
81035
81036 BN.prototype.redAdd = function redAdd (num) {
81037 assert(this.red, 'redAdd works only with red numbers');
81038 return this.red.add(this, num);
81039 };
81040
81041 BN.prototype.redIAdd = function redIAdd (num) {
81042 assert(this.red, 'redIAdd works only with red numbers');
81043 return this.red.iadd(this, num);
81044 };
81045
81046 BN.prototype.redSub = function redSub (num) {
81047 assert(this.red, 'redSub works only with red numbers');
81048 return this.red.sub(this, num);
81049 };
81050
81051 BN.prototype.redISub = function redISub (num) {
81052 assert(this.red, 'redISub works only with red numbers');
81053 return this.red.isub(this, num);
81054 };
81055
81056 BN.prototype.redShl = function redShl (num) {
81057 assert(this.red, 'redShl works only with red numbers');
81058 return this.red.shl(this, num);
81059 };
81060
81061 BN.prototype.redMul = function redMul (num) {
81062 assert(this.red, 'redMul works only with red numbers');
81063 this.red._verify2(this, num);
81064 return this.red.mul(this, num);
81065 };
81066
81067 BN.prototype.redIMul = function redIMul (num) {
81068 assert(this.red, 'redMul works only with red numbers');
81069 this.red._verify2(this, num);
81070 return this.red.imul(this, num);
81071 };
81072
81073 BN.prototype.redSqr = function redSqr () {
81074 assert(this.red, 'redSqr works only with red numbers');
81075 this.red._verify1(this);
81076 return this.red.sqr(this);
81077 };
81078
81079 BN.prototype.redISqr = function redISqr () {
81080 assert(this.red, 'redISqr works only with red numbers');
81081 this.red._verify1(this);
81082 return this.red.isqr(this);
81083 };
81084
81085 // Square root over p
81086 BN.prototype.redSqrt = function redSqrt () {
81087 assert(this.red, 'redSqrt works only with red numbers');
81088 this.red._verify1(this);
81089 return this.red.sqrt(this);
81090 };
81091
81092 BN.prototype.redInvm = function redInvm () {
81093 assert(this.red, 'redInvm works only with red numbers');
81094 this.red._verify1(this);
81095 return this.red.invm(this);
81096 };
81097
81098 // Return negative clone of `this` % `red modulo`
81099 BN.prototype.redNeg = function redNeg () {
81100 assert(this.red, 'redNeg works only with red numbers');
81101 this.red._verify1(this);
81102 return this.red.neg(this);
81103 };
81104
81105 BN.prototype.redPow = function redPow (num) {
81106 assert(this.red && !num.red, 'redPow(normalNum)');
81107 this.red._verify1(this);
81108 return this.red.pow(this, num);
81109 };
81110
81111 // Prime numbers with efficient reduction
81112 var primes = {
81113 k256: null,
81114 p224: null,
81115 p192: null,
81116 p25519: null
81117 };
81118
81119 // Pseudo-Mersenne prime
81120 function MPrime (name, p) {
81121 // P = 2 ^ N - K
81122 this.name = name;
81123 this.p = new BN(p, 16);
81124 this.n = this.p.bitLength();
81125 this.k = new BN(1).iushln(this.n).isub(this.p);
81126
81127 this.tmp = this._tmp();
81128 }
81129
81130 MPrime.prototype._tmp = function _tmp () {
81131 var tmp = new BN(null);
81132 tmp.words = new Array(Math.ceil(this.n / 13));
81133 return tmp;
81134 };
81135
81136 MPrime.prototype.ireduce = function ireduce (num) {
81137 // Assumes that `num` is less than `P^2`
81138 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
81139 var r = num;
81140 var rlen;
81141
81142 do {
81143 this.split(r, this.tmp);
81144 r = this.imulK(r);
81145 r = r.iadd(this.tmp);
81146 rlen = r.bitLength();
81147 } while (rlen > this.n);
81148
81149 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
81150 if (cmp === 0) {
81151 r.words[0] = 0;
81152 r.length = 1;
81153 } else if (cmp > 0) {
81154 r.isub(this.p);
81155 } else {
81156 r.strip();
81157 }
81158
81159 return r;
81160 };
81161
81162 MPrime.prototype.split = function split (input, out) {
81163 input.iushrn(this.n, 0, out);
81164 };
81165
81166 MPrime.prototype.imulK = function imulK (num) {
81167 return num.imul(this.k);
81168 };
81169
81170 function K256 () {
81171 MPrime.call(
81172 this,
81173 'k256',
81174 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
81175 }
81176 inherits(K256, MPrime);
81177
81178 K256.prototype.split = function split (input, output) {
81179 // 256 = 9 * 26 + 22
81180 var mask = 0x3fffff;
81181
81182 var outLen = Math.min(input.length, 9);
81183 for (var i = 0; i < outLen; i++) {
81184 output.words[i] = input.words[i];
81185 }
81186 output.length = outLen;
81187
81188 if (input.length <= 9) {
81189 input.words[0] = 0;
81190 input.length = 1;
81191 return;
81192 }
81193
81194 // Shift by 9 limbs
81195 var prev = input.words[9];
81196 output.words[output.length++] = prev & mask;
81197
81198 for (i = 10; i < input.length; i++) {
81199 var next = input.words[i] | 0;
81200 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
81201 prev = next;
81202 }
81203 prev >>>= 22;
81204 input.words[i - 10] = prev;
81205 if (prev === 0 && input.length > 10) {
81206 input.length -= 10;
81207 } else {
81208 input.length -= 9;
81209 }
81210 };
81211
81212 K256.prototype.imulK = function imulK (num) {
81213 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
81214 num.words[num.length] = 0;
81215 num.words[num.length + 1] = 0;
81216 num.length += 2;
81217
81218 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
81219 var lo = 0;
81220 for (var i = 0; i < num.length; i++) {
81221 var w = num.words[i] | 0;
81222 lo += w * 0x3d1;
81223 num.words[i] = lo & 0x3ffffff;
81224 lo = w * 0x40 + ((lo / 0x4000000) | 0);
81225 }
81226
81227 // Fast length reduction
81228 if (num.words[num.length - 1] === 0) {
81229 num.length--;
81230 if (num.words[num.length - 1] === 0) {
81231 num.length--;
81232 }
81233 }
81234 return num;
81235 };
81236
81237 function P224 () {
81238 MPrime.call(
81239 this,
81240 'p224',
81241 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
81242 }
81243 inherits(P224, MPrime);
81244
81245 function P192 () {
81246 MPrime.call(
81247 this,
81248 'p192',
81249 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
81250 }
81251 inherits(P192, MPrime);
81252
81253 function P25519 () {
81254 // 2 ^ 255 - 19
81255 MPrime.call(
81256 this,
81257 '25519',
81258 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
81259 }
81260 inherits(P25519, MPrime);
81261
81262 P25519.prototype.imulK = function imulK (num) {
81263 // K = 0x13
81264 var carry = 0;
81265 for (var i = 0; i < num.length; i++) {
81266 var hi = (num.words[i] | 0) * 0x13 + carry;
81267 var lo = hi & 0x3ffffff;
81268 hi >>>= 26;
81269
81270 num.words[i] = lo;
81271 carry = hi;
81272 }
81273 if (carry !== 0) {
81274 num.words[num.length++] = carry;
81275 }
81276 return num;
81277 };
81278
81279 // Exported mostly for testing purposes, use plain name instead
81280 BN._prime = function prime (name) {
81281 // Cached version of prime
81282 if (primes[name]) return primes[name];
81283
81284 var prime;
81285 if (name === 'k256') {
81286 prime = new K256();
81287 } else if (name === 'p224') {
81288 prime = new P224();
81289 } else if (name === 'p192') {
81290 prime = new P192();
81291 } else if (name === 'p25519') {
81292 prime = new P25519();
81293 } else {
81294 throw new Error('Unknown prime ' + name);
81295 }
81296 primes[name] = prime;
81297
81298 return prime;
81299 };
81300
81301 //
81302 // Base reduction engine
81303 //
81304 function Red (m) {
81305 if (typeof m === 'string') {
81306 var prime = BN._prime(m);
81307 this.m = prime.p;
81308 this.prime = prime;
81309 } else {
81310 assert(m.gtn(1), 'modulus must be greater than 1');
81311 this.m = m;
81312 this.prime = null;
81313 }
81314 }
81315
81316 Red.prototype._verify1 = function _verify1 (a) {
81317 assert(a.negative === 0, 'red works only with positives');
81318 assert(a.red, 'red works only with red numbers');
81319 };
81320
81321 Red.prototype._verify2 = function _verify2 (a, b) {
81322 assert((a.negative | b.negative) === 0, 'red works only with positives');
81323 assert(a.red && a.red === b.red,
81324 'red works only with red numbers');
81325 };
81326
81327 Red.prototype.imod = function imod (a) {
81328 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
81329 return a.umod(this.m)._forceRed(this);
81330 };
81331
81332 Red.prototype.neg = function neg (a) {
81333 if (a.isZero()) {
81334 return a.clone();
81335 }
81336
81337 return this.m.sub(a)._forceRed(this);
81338 };
81339
81340 Red.prototype.add = function add (a, b) {
81341 this._verify2(a, b);
81342
81343 var res = a.add(b);
81344 if (res.cmp(this.m) >= 0) {
81345 res.isub(this.m);
81346 }
81347 return res._forceRed(this);
81348 };
81349
81350 Red.prototype.iadd = function iadd (a, b) {
81351 this._verify2(a, b);
81352
81353 var res = a.iadd(b);
81354 if (res.cmp(this.m) >= 0) {
81355 res.isub(this.m);
81356 }
81357 return res;
81358 };
81359
81360 Red.prototype.sub = function sub (a, b) {
81361 this._verify2(a, b);
81362
81363 var res = a.sub(b);
81364 if (res.cmpn(0) < 0) {
81365 res.iadd(this.m);
81366 }
81367 return res._forceRed(this);
81368 };
81369
81370 Red.prototype.isub = function isub (a, b) {
81371 this._verify2(a, b);
81372
81373 var res = a.isub(b);
81374 if (res.cmpn(0) < 0) {
81375 res.iadd(this.m);
81376 }
81377 return res;
81378 };
81379
81380 Red.prototype.shl = function shl (a, num) {
81381 this._verify1(a);
81382 return this.imod(a.ushln(num));
81383 };
81384
81385 Red.prototype.imul = function imul (a, b) {
81386 this._verify2(a, b);
81387 return this.imod(a.imul(b));
81388 };
81389
81390 Red.prototype.mul = function mul (a, b) {
81391 this._verify2(a, b);
81392 return this.imod(a.mul(b));
81393 };
81394
81395 Red.prototype.isqr = function isqr (a) {
81396 return this.imul(a, a.clone());
81397 };
81398
81399 Red.prototype.sqr = function sqr (a) {
81400 return this.mul(a, a);
81401 };
81402
81403 Red.prototype.sqrt = function sqrt (a) {
81404 if (a.isZero()) return a.clone();
81405
81406 var mod3 = this.m.andln(3);
81407 assert(mod3 % 2 === 1);
81408
81409 // Fast case
81410 if (mod3 === 3) {
81411 var pow = this.m.add(new BN(1)).iushrn(2);
81412 return this.pow(a, pow);
81413 }
81414
81415 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
81416 //
81417 // Find Q and S, that Q * 2 ^ S = (P - 1)
81418 var q = this.m.subn(1);
81419 var s = 0;
81420 while (!q.isZero() && q.andln(1) === 0) {
81421 s++;
81422 q.iushrn(1);
81423 }
81424 assert(!q.isZero());
81425
81426 var one = new BN(1).toRed(this);
81427 var nOne = one.redNeg();
81428
81429 // Find quadratic non-residue
81430 // NOTE: Max is such because of generalized Riemann hypothesis.
81431 var lpow = this.m.subn(1).iushrn(1);
81432 var z = this.m.bitLength();
81433 z = new BN(2 * z * z).toRed(this);
81434
81435 while (this.pow(z, lpow).cmp(nOne) !== 0) {
81436 z.redIAdd(nOne);
81437 }
81438
81439 var c = this.pow(z, q);
81440 var r = this.pow(a, q.addn(1).iushrn(1));
81441 var t = this.pow(a, q);
81442 var m = s;
81443 while (t.cmp(one) !== 0) {
81444 var tmp = t;
81445 for (var i = 0; tmp.cmp(one) !== 0; i++) {
81446 tmp = tmp.redSqr();
81447 }
81448 assert(i < m);
81449 var b = this.pow(c, new BN(1).iushln(m - i - 1));
81450
81451 r = r.redMul(b);
81452 c = b.redSqr();
81453 t = t.redMul(c);
81454 m = i;
81455 }
81456
81457 return r;
81458 };
81459
81460 Red.prototype.invm = function invm (a) {
81461 var inv = a._invmp(this.m);
81462 if (inv.negative !== 0) {
81463 inv.negative = 0;
81464 return this.imod(inv).redNeg();
81465 } else {
81466 return this.imod(inv);
81467 }
81468 };
81469
81470 Red.prototype.pow = function pow (a, num) {
81471 if (num.isZero()) return new BN(1);
81472 if (num.cmpn(1) === 0) return a.clone();
81473
81474 var windowSize = 4;
81475 var wnd = new Array(1 << windowSize);
81476 wnd[0] = new BN(1).toRed(this);
81477 wnd[1] = a;
81478 for (var i = 2; i < wnd.length; i++) {
81479 wnd[i] = this.mul(wnd[i - 1], a);
81480 }
81481
81482 var res = wnd[0];
81483 var current = 0;
81484 var currentLen = 0;
81485 var start = num.bitLength() % 26;
81486 if (start === 0) {
81487 start = 26;
81488 }
81489
81490 for (i = num.length - 1; i >= 0; i--) {
81491 var word = num.words[i];
81492 for (var j = start - 1; j >= 0; j--) {
81493 var bit = (word >> j) & 1;
81494 if (res !== wnd[0]) {
81495 res = this.sqr(res);
81496 }
81497
81498 if (bit === 0 && current === 0) {
81499 currentLen = 0;
81500 continue;
81501 }
81502
81503 current <<= 1;
81504 current |= bit;
81505 currentLen++;
81506 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
81507
81508 res = this.mul(res, wnd[current]);
81509 currentLen = 0;
81510 current = 0;
81511 }
81512 start = 26;
81513 }
81514
81515 return res;
81516 };
81517
81518 Red.prototype.convertTo = function convertTo (num) {
81519 var r = num.umod(this.m);
81520
81521 return r === num ? r.clone() : r;
81522 };
81523
81524 Red.prototype.convertFrom = function convertFrom (num) {
81525 var res = num.clone();
81526 res.red = null;
81527 return res;
81528 };
81529
81530 //
81531 // Montgomery method engine
81532 //
81533
81534 BN.mont = function mont (num) {
81535 return new Mont(num);
81536 };
81537
81538 function Mont (m) {
81539 Red.call(this, m);
81540
81541 this.shift = this.m.bitLength();
81542 if (this.shift % 26 !== 0) {
81543 this.shift += 26 - (this.shift % 26);
81544 }
81545
81546 this.r = new BN(1).iushln(this.shift);
81547 this.r2 = this.imod(this.r.sqr());
81548 this.rinv = this.r._invmp(this.m);
81549
81550 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
81551 this.minv = this.minv.umod(this.r);
81552 this.minv = this.r.sub(this.minv);
81553 }
81554 inherits(Mont, Red);
81555
81556 Mont.prototype.convertTo = function convertTo (num) {
81557 return this.imod(num.ushln(this.shift));
81558 };
81559
81560 Mont.prototype.convertFrom = function convertFrom (num) {
81561 var r = this.imod(num.mul(this.rinv));
81562 r.red = null;
81563 return r;
81564 };
81565
81566 Mont.prototype.imul = function imul (a, b) {
81567 if (a.isZero() || b.isZero()) {
81568 a.words[0] = 0;
81569 a.length = 1;
81570 return a;
81571 }
81572
81573 var t = a.imul(b);
81574 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81575 var u = t.isub(c).iushrn(this.shift);
81576 var res = u;
81577
81578 if (u.cmp(this.m) >= 0) {
81579 res = u.isub(this.m);
81580 } else if (u.cmpn(0) < 0) {
81581 res = u.iadd(this.m);
81582 }
81583
81584 return res._forceRed(this);
81585 };
81586
81587 Mont.prototype.mul = function mul (a, b) {
81588 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
81589
81590 var t = a.mul(b);
81591 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81592 var u = t.isub(c).iushrn(this.shift);
81593 var res = u;
81594 if (u.cmp(this.m) >= 0) {
81595 res = u.isub(this.m);
81596 } else if (u.cmpn(0) < 0) {
81597 res = u.iadd(this.m);
81598 }
81599
81600 return res._forceRed(this);
81601 };
81602
81603 Mont.prototype.invm = function invm (a) {
81604 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
81605 var res = this.imod(a._invmp(this.m).mul(this.r2));
81606 return res._forceRed(this);
81607 };
81608 })(typeof module === 'undefined' || module, this);
81609
81610 },{}],34:[function(require,module,exports){
81611 var r;
81612
81613 module.exports = function rand(len) {
81614 if (!r)
81615 r = new Rand(null);
81616
81617 return r.generate(len);
81618 };
81619
81620 function Rand(rand) {
81621 this.rand = rand;
81622 }
81623 module.exports.Rand = Rand;
81624
81625 Rand.prototype.generate = function generate(len) {
81626 return this._rand(len);
81627 };
81628
81629 if (typeof self === 'object') {
81630 if (self.crypto && self.crypto.getRandomValues) {
81631 // Modern browsers
81632 Rand.prototype._rand = function _rand(n) {
81633 var arr = new Uint8Array(n);
81634 self.crypto.getRandomValues(arr);
81635 return arr;
81636 };
81637 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
81638 // IE
81639 Rand.prototype._rand = function _rand(n) {
81640 var arr = new Uint8Array(n);
81641 self.msCrypto.getRandomValues(arr);
81642 return arr;
81643 };
81644 } else {
81645 // Old junk
81646 Rand.prototype._rand = function() {
81647 throw new Error('Not implemented yet');
81648 };
81649 }
81650 } else {
81651 // Node.js or Web worker with no crypto support
81652 try {
81653 var crypto = require('crypto');
81654
81655 Rand.prototype._rand = function _rand(n) {
81656 return crypto.randomBytes(n);
81657 };
81658 } catch (e) {
81659 // Emulate crypto API using randy
81660 Rand.prototype._rand = function _rand(n) {
81661 var res = new Uint8Array(n);
81662 for (var i = 0; i < res.length; i++)
81663 res[i] = this.rand.getByte();
81664 return res;
81665 };
81666 }
81667 }
81668
81669 },{"crypto":3}],35:[function(require,module,exports){
81670 (function (Buffer){
81671 var Transform = require('stream').Transform
81672 var inherits = require('inherits')
81673 var StringDecoder = require('string_decoder').StringDecoder
81674 module.exports = CipherBase
81675 inherits(CipherBase, Transform)
81676 function CipherBase (hashMode) {
81677 Transform.call(this)
81678 this.hashMode = typeof hashMode === 'string'
81679 if (this.hashMode) {
81680 this[hashMode] = this._finalOrDigest
81681 } else {
81682 this.final = this._finalOrDigest
81683 }
81684 this._decoder = null
81685 this._encoding = null
81686 }
81687 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
81688 if (typeof data === 'string') {
81689 data = new Buffer(data, inputEnc)
81690 }
81691 var outData = this._update(data)
81692 if (this.hashMode) {
81693 return this
81694 }
81695 if (outputEnc) {
81696 outData = this._toString(outData, outputEnc)
81697 }
81698 return outData
81699 }
81700
81701 CipherBase.prototype.setAutoPadding = function () {}
81702
81703 CipherBase.prototype.getAuthTag = function () {
81704 throw new Error('trying to get auth tag in unsupported state')
81705 }
81706
81707 CipherBase.prototype.setAuthTag = function () {
81708 throw new Error('trying to set auth tag in unsupported state')
81709 }
81710
81711 CipherBase.prototype.setAAD = function () {
81712 throw new Error('trying to set aad in unsupported state')
81713 }
81714
81715 CipherBase.prototype._transform = function (data, _, next) {
81716 var err
81717 try {
81718 if (this.hashMode) {
81719 this._update(data)
81720 } else {
81721 this.push(this._update(data))
81722 }
81723 } catch (e) {
81724 err = e
81725 } finally {
81726 next(err)
81727 }
81728 }
81729 CipherBase.prototype._flush = function (done) {
81730 var err
81731 try {
81732 this.push(this._final())
81733 } catch (e) {
81734 err = e
81735 } finally {
81736 done(err)
81737 }
81738 }
81739 CipherBase.prototype._finalOrDigest = function (outputEnc) {
81740 var outData = this._final() || new Buffer('')
81741 if (outputEnc) {
81742 outData = this._toString(outData, outputEnc, true)
81743 }
81744 return outData
81745 }
81746
81747 CipherBase.prototype._toString = function (value, enc, fin) {
81748 if (!this._decoder) {
81749 this._decoder = new StringDecoder(enc)
81750 this._encoding = enc
81751 }
81752 if (this._encoding !== enc) {
81753 throw new Error('can\'t switch encodings')
81754 }
81755 var out = this._decoder.write(value)
81756 if (fin) {
81757 out += this._decoder.end()
81758 }
81759 return out
81760 }
81761
81762 }).call(this,require("buffer").Buffer)
81763 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
81764 (function (Buffer){
81765 'use strict';
81766 var inherits = require('inherits')
81767 var md5 = require('./md5')
81768 var rmd160 = require('ripemd160')
81769 var sha = require('sha.js')
81770
81771 var Base = require('cipher-base')
81772
81773 function HashNoConstructor(hash) {
81774 Base.call(this, 'digest')
81775
81776 this._hash = hash
81777 this.buffers = []
81778 }
81779
81780 inherits(HashNoConstructor, Base)
81781
81782 HashNoConstructor.prototype._update = function (data) {
81783 this.buffers.push(data)
81784 }
81785
81786 HashNoConstructor.prototype._final = function () {
81787 var buf = Buffer.concat(this.buffers)
81788 var r = this._hash(buf)
81789 this.buffers = null
81790
81791 return r
81792 }
81793
81794 function Hash(hash) {
81795 Base.call(this, 'digest')
81796
81797 this._hash = hash
81798 }
81799
81800 inherits(Hash, Base)
81801
81802 Hash.prototype._update = function (data) {
81803 this._hash.update(data)
81804 }
81805
81806 Hash.prototype._final = function () {
81807 return this._hash.digest()
81808 }
81809
81810 module.exports = function createHash (alg) {
81811 alg = alg.toLowerCase()
81812 if ('md5' === alg) return new HashNoConstructor(md5)
81813 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
81814
81815 return new Hash(sha(alg))
81816 }
81817
81818 }).call(this,require("buffer").Buffer)
81819 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
81820 (function (Buffer){
81821 'use strict';
81822 var intSize = 4;
81823 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
81824 var chrsz = 8;
81825
81826 function toArray(buf, bigEndian) {
81827 if ((buf.length % intSize) !== 0) {
81828 var len = buf.length + (intSize - (buf.length % intSize));
81829 buf = Buffer.concat([buf, zeroBuffer], len);
81830 }
81831
81832 var arr = [];
81833 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
81834 for (var i = 0; i < buf.length; i += intSize) {
81835 arr.push(fn.call(buf, i));
81836 }
81837 return arr;
81838 }
81839
81840 function toBuffer(arr, size, bigEndian) {
81841 var buf = new Buffer(size);
81842 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
81843 for (var i = 0; i < arr.length; i++) {
81844 fn.call(buf, arr[i], i * 4, true);
81845 }
81846 return buf;
81847 }
81848
81849 function hash(buf, fn, hashSize, bigEndian) {
81850 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
81851 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
81852 return toBuffer(arr, hashSize, bigEndian);
81853 }
81854 exports.hash = hash;
81855 }).call(this,require("buffer").Buffer)
81856 },{"buffer":5}],38:[function(require,module,exports){
81857 'use strict';
81858 /*
81859 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
81860 * Digest Algorithm, as defined in RFC 1321.
81861 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
81862 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
81863 * Distributed under the BSD License
81864 * See http://pajhome.org.uk/crypt/md5 for more info.
81865 */
81866
81867 var helpers = require('./helpers');
81868
81869 /*
81870 * Calculate the MD5 of an array of little-endian words, and a bit length
81871 */
81872 function core_md5(x, len)
81873 {
81874 /* append padding */
81875 x[len >> 5] |= 0x80 << ((len) % 32);
81876 x[(((len + 64) >>> 9) << 4) + 14] = len;
81877
81878 var a = 1732584193;
81879 var b = -271733879;
81880 var c = -1732584194;
81881 var d = 271733878;
81882
81883 for(var i = 0; i < x.length; i += 16)
81884 {
81885 var olda = a;
81886 var oldb = b;
81887 var oldc = c;
81888 var oldd = d;
81889
81890 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
81891 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
81892 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
81893 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
81894 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
81895 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
81896 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
81897 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
81898 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
81899 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
81900 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
81901 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
81902 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
81903 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
81904 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
81905 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
81906
81907 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
81908 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
81909 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
81910 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
81911 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
81912 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
81913 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
81914 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
81915 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
81916 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
81917 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
81918 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
81919 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
81920 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
81921 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
81922 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
81923
81924 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
81925 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
81926 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
81927 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
81928 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
81929 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
81930 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
81931 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
81932 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
81933 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
81934 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
81935 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
81936 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
81937 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
81938 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
81939 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
81940
81941 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
81942 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
81943 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
81944 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
81945 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
81946 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
81947 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
81948 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
81949 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
81950 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
81951 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
81952 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
81953 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
81954 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
81955 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
81956 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
81957
81958 a = safe_add(a, olda);
81959 b = safe_add(b, oldb);
81960 c = safe_add(c, oldc);
81961 d = safe_add(d, oldd);
81962 }
81963 return Array(a, b, c, d);
81964
81965 }
81966
81967 /*
81968 * These functions implement the four basic operations the algorithm uses.
81969 */
81970 function md5_cmn(q, a, b, x, s, t)
81971 {
81972 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
81973 }
81974 function md5_ff(a, b, c, d, x, s, t)
81975 {
81976 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
81977 }
81978 function md5_gg(a, b, c, d, x, s, t)
81979 {
81980 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
81981 }
81982 function md5_hh(a, b, c, d, x, s, t)
81983 {
81984 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
81985 }
81986 function md5_ii(a, b, c, d, x, s, t)
81987 {
81988 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
81989 }
81990
81991 /*
81992 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
81993 * to work around bugs in some JS interpreters.
81994 */
81995 function safe_add(x, y)
81996 {
81997 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
81998 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
81999 return (msw << 16) | (lsw & 0xFFFF);
82000 }
82001
82002 /*
82003 * Bitwise rotate a 32-bit number to the left.
82004 */
82005 function bit_rol(num, cnt)
82006 {
82007 return (num << cnt) | (num >>> (32 - cnt));
82008 }
82009
82010 module.exports = function md5(buf) {
82011 return helpers.hash(buf, core_md5, 16);
82012 };
82013 },{"./helpers":37}],39:[function(require,module,exports){
82014 'use strict';
82015
82016 var elliptic = exports;
82017
82018 elliptic.version = require('../package.json').version;
82019 elliptic.utils = require('./elliptic/utils');
82020 elliptic.rand = require('brorand');
82021 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
82022 elliptic.curve = require('./elliptic/curve');
82023 elliptic.curves = require('./elliptic/curves');
82024
82025 // Protocols
82026 elliptic.ec = require('./elliptic/ec');
82027 elliptic.eddsa = require('./elliptic/eddsa');
82028
82029 },{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
82030 'use strict';
82031
82032 var BN = require('bn.js');
82033 var elliptic = require('../../elliptic');
82034 var utils = elliptic.utils;
82035 var getNAF = utils.getNAF;
82036 var getJSF = utils.getJSF;
82037 var assert = utils.assert;
82038
82039 function BaseCurve(type, conf) {
82040 this.type = type;
82041 this.p = new BN(conf.p, 16);
82042
82043 // Use Montgomery, when there is no fast reduction for the prime
82044 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
82045
82046 // Useful for many curves
82047 this.zero = new BN(0).toRed(this.red);
82048 this.one = new BN(1).toRed(this.red);
82049 this.two = new BN(2).toRed(this.red);
82050
82051 // Curve configuration, optional
82052 this.n = conf.n && new BN(conf.n, 16);
82053 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
82054
82055 // Temporary arrays
82056 this._wnafT1 = new Array(4);
82057 this._wnafT2 = new Array(4);
82058 this._wnafT3 = new Array(4);
82059 this._wnafT4 = new Array(4);
82060
82061 // Generalized Greg Maxwell's trick
82062 var adjustCount = this.n && this.p.div(this.n);
82063 if (!adjustCount || adjustCount.cmpn(100) > 0) {
82064 this.redN = null;
82065 } else {
82066 this._maxwellTrick = true;
82067 this.redN = this.n.toRed(this.red);
82068 }
82069 }
82070 module.exports = BaseCurve;
82071
82072 BaseCurve.prototype.point = function point() {
82073 throw new Error('Not implemented');
82074 };
82075
82076 BaseCurve.prototype.validate = function validate() {
82077 throw new Error('Not implemented');
82078 };
82079
82080 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
82081 assert(p.precomputed);
82082 var doubles = p._getDoubles();
82083
82084 var naf = getNAF(k, 1);
82085 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
82086 I /= 3;
82087
82088 // Translate into more windowed form
82089 var repr = [];
82090 for (var j = 0; j < naf.length; j += doubles.step) {
82091 var nafW = 0;
82092 for (var k = j + doubles.step - 1; k >= j; k--)
82093 nafW = (nafW << 1) + naf[k];
82094 repr.push(nafW);
82095 }
82096
82097 var a = this.jpoint(null, null, null);
82098 var b = this.jpoint(null, null, null);
82099 for (var i = I; i > 0; i--) {
82100 for (var j = 0; j < repr.length; j++) {
82101 var nafW = repr[j];
82102 if (nafW === i)
82103 b = b.mixedAdd(doubles.points[j]);
82104 else if (nafW === -i)
82105 b = b.mixedAdd(doubles.points[j].neg());
82106 }
82107 a = a.add(b);
82108 }
82109 return a.toP();
82110 };
82111
82112 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
82113 var w = 4;
82114
82115 // Precompute window
82116 var nafPoints = p._getNAFPoints(w);
82117 w = nafPoints.wnd;
82118 var wnd = nafPoints.points;
82119
82120 // Get NAF form
82121 var naf = getNAF(k, w);
82122
82123 // Add `this`*(N+1) for every w-NAF index
82124 var acc = this.jpoint(null, null, null);
82125 for (var i = naf.length - 1; i >= 0; i--) {
82126 // Count zeroes
82127 for (var k = 0; i >= 0 && naf[i] === 0; i--)
82128 k++;
82129 if (i >= 0)
82130 k++;
82131 acc = acc.dblp(k);
82132
82133 if (i < 0)
82134 break;
82135 var z = naf[i];
82136 assert(z !== 0);
82137 if (p.type === 'affine') {
82138 // J +- P
82139 if (z > 0)
82140 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
82141 else
82142 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
82143 } else {
82144 // J +- J
82145 if (z > 0)
82146 acc = acc.add(wnd[(z - 1) >> 1]);
82147 else
82148 acc = acc.add(wnd[(-z - 1) >> 1].neg());
82149 }
82150 }
82151 return p.type === 'affine' ? acc.toP() : acc;
82152 };
82153
82154 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
82155 points,
82156 coeffs,
82157 len,
82158 jacobianResult) {
82159 var wndWidth = this._wnafT1;
82160 var wnd = this._wnafT2;
82161 var naf = this._wnafT3;
82162
82163 // Fill all arrays
82164 var max = 0;
82165 for (var i = 0; i < len; i++) {
82166 var p = points[i];
82167 var nafPoints = p._getNAFPoints(defW);
82168 wndWidth[i] = nafPoints.wnd;
82169 wnd[i] = nafPoints.points;
82170 }
82171
82172 // Comb small window NAFs
82173 for (var i = len - 1; i >= 1; i -= 2) {
82174 var a = i - 1;
82175 var b = i;
82176 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
82177 naf[a] = getNAF(coeffs[a], wndWidth[a]);
82178 naf[b] = getNAF(coeffs[b], wndWidth[b]);
82179 max = Math.max(naf[a].length, max);
82180 max = Math.max(naf[b].length, max);
82181 continue;
82182 }
82183
82184 var comb = [
82185 points[a], /* 1 */
82186 null, /* 3 */
82187 null, /* 5 */
82188 points[b] /* 7 */
82189 ];
82190
82191 // Try to avoid Projective points, if possible
82192 if (points[a].y.cmp(points[b].y) === 0) {
82193 comb[1] = points[a].add(points[b]);
82194 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82195 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
82196 comb[1] = points[a].toJ().mixedAdd(points[b]);
82197 comb[2] = points[a].add(points[b].neg());
82198 } else {
82199 comb[1] = points[a].toJ().mixedAdd(points[b]);
82200 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82201 }
82202
82203 var index = [
82204 -3, /* -1 -1 */
82205 -1, /* -1 0 */
82206 -5, /* -1 1 */
82207 -7, /* 0 -1 */
82208 0, /* 0 0 */
82209 7, /* 0 1 */
82210 5, /* 1 -1 */
82211 1, /* 1 0 */
82212 3 /* 1 1 */
82213 ];
82214
82215 var jsf = getJSF(coeffs[a], coeffs[b]);
82216 max = Math.max(jsf[0].length, max);
82217 naf[a] = new Array(max);
82218 naf[b] = new Array(max);
82219 for (var j = 0; j < max; j++) {
82220 var ja = jsf[0][j] | 0;
82221 var jb = jsf[1][j] | 0;
82222
82223 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
82224 naf[b][j] = 0;
82225 wnd[a] = comb;
82226 }
82227 }
82228
82229 var acc = this.jpoint(null, null, null);
82230 var tmp = this._wnafT4;
82231 for (var i = max; i >= 0; i--) {
82232 var k = 0;
82233
82234 while (i >= 0) {
82235 var zero = true;
82236 for (var j = 0; j < len; j++) {
82237 tmp[j] = naf[j][i] | 0;
82238 if (tmp[j] !== 0)
82239 zero = false;
82240 }
82241 if (!zero)
82242 break;
82243 k++;
82244 i--;
82245 }
82246 if (i >= 0)
82247 k++;
82248 acc = acc.dblp(k);
82249 if (i < 0)
82250 break;
82251
82252 for (var j = 0; j < len; j++) {
82253 var z = tmp[j];
82254 var p;
82255 if (z === 0)
82256 continue;
82257 else if (z > 0)
82258 p = wnd[j][(z - 1) >> 1];
82259 else if (z < 0)
82260 p = wnd[j][(-z - 1) >> 1].neg();
82261
82262 if (p.type === 'affine')
82263 acc = acc.mixedAdd(p);
82264 else
82265 acc = acc.add(p);
82266 }
82267 }
82268 // Zeroify references
82269 for (var i = 0; i < len; i++)
82270 wnd[i] = null;
82271
82272 if (jacobianResult)
82273 return acc;
82274 else
82275 return acc.toP();
82276 };
82277
82278 function BasePoint(curve, type) {
82279 this.curve = curve;
82280 this.type = type;
82281 this.precomputed = null;
82282 }
82283 BaseCurve.BasePoint = BasePoint;
82284
82285 BasePoint.prototype.eq = function eq(/*other*/) {
82286 throw new Error('Not implemented');
82287 };
82288
82289 BasePoint.prototype.validate = function validate() {
82290 return this.curve.validate(this);
82291 };
82292
82293 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82294 bytes = utils.toArray(bytes, enc);
82295
82296 var len = this.p.byteLength();
82297
82298 // uncompressed, hybrid-odd, hybrid-even
82299 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
82300 bytes.length - 1 === 2 * len) {
82301 if (bytes[0] === 0x06)
82302 assert(bytes[bytes.length - 1] % 2 === 0);
82303 else if (bytes[0] === 0x07)
82304 assert(bytes[bytes.length - 1] % 2 === 1);
82305
82306 var res = this.point(bytes.slice(1, 1 + len),
82307 bytes.slice(1 + len, 1 + 2 * len));
82308
82309 return res;
82310 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
82311 bytes.length - 1 === len) {
82312 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
82313 }
82314 throw new Error('Unknown point format');
82315 };
82316
82317 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
82318 return this.encode(enc, true);
82319 };
82320
82321 BasePoint.prototype._encode = function _encode(compact) {
82322 var len = this.curve.p.byteLength();
82323 var x = this.getX().toArray('be', len);
82324
82325 if (compact)
82326 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
82327
82328 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
82329 };
82330
82331 BasePoint.prototype.encode = function encode(enc, compact) {
82332 return utils.encode(this._encode(compact), enc);
82333 };
82334
82335 BasePoint.prototype.precompute = function precompute(power) {
82336 if (this.precomputed)
82337 return this;
82338
82339 var precomputed = {
82340 doubles: null,
82341 naf: null,
82342 beta: null
82343 };
82344 precomputed.naf = this._getNAFPoints(8);
82345 precomputed.doubles = this._getDoubles(4, power);
82346 precomputed.beta = this._getBeta();
82347 this.precomputed = precomputed;
82348
82349 return this;
82350 };
82351
82352 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
82353 if (!this.precomputed)
82354 return false;
82355
82356 var doubles = this.precomputed.doubles;
82357 if (!doubles)
82358 return false;
82359
82360 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
82361 };
82362
82363 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
82364 if (this.precomputed && this.precomputed.doubles)
82365 return this.precomputed.doubles;
82366
82367 var doubles = [ this ];
82368 var acc = this;
82369 for (var i = 0; i < power; i += step) {
82370 for (var j = 0; j < step; j++)
82371 acc = acc.dbl();
82372 doubles.push(acc);
82373 }
82374 return {
82375 step: step,
82376 points: doubles
82377 };
82378 };
82379
82380 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
82381 if (this.precomputed && this.precomputed.naf)
82382 return this.precomputed.naf;
82383
82384 var res = [ this ];
82385 var max = (1 << wnd) - 1;
82386 var dbl = max === 1 ? null : this.dbl();
82387 for (var i = 1; i < max; i++)
82388 res[i] = res[i - 1].add(dbl);
82389 return {
82390 wnd: wnd,
82391 points: res
82392 };
82393 };
82394
82395 BasePoint.prototype._getBeta = function _getBeta() {
82396 return null;
82397 };
82398
82399 BasePoint.prototype.dblp = function dblp(k) {
82400 var r = this;
82401 for (var i = 0; i < k; i++)
82402 r = r.dbl();
82403 return r;
82404 };
82405
82406 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
82407 'use strict';
82408
82409 var curve = require('../curve');
82410 var elliptic = require('../../elliptic');
82411 var BN = require('bn.js');
82412 var inherits = require('inherits');
82413 var Base = curve.base;
82414
82415 var assert = elliptic.utils.assert;
82416
82417 function EdwardsCurve(conf) {
82418 // NOTE: Important as we are creating point in Base.call()
82419 this.twisted = (conf.a | 0) !== 1;
82420 this.mOneA = this.twisted && (conf.a | 0) === -1;
82421 this.extended = this.mOneA;
82422
82423 Base.call(this, 'edwards', conf);
82424
82425 this.a = new BN(conf.a, 16).umod(this.red.m);
82426 this.a = this.a.toRed(this.red);
82427 this.c = new BN(conf.c, 16).toRed(this.red);
82428 this.c2 = this.c.redSqr();
82429 this.d = new BN(conf.d, 16).toRed(this.red);
82430 this.dd = this.d.redAdd(this.d);
82431
82432 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
82433 this.oneC = (conf.c | 0) === 1;
82434 }
82435 inherits(EdwardsCurve, Base);
82436 module.exports = EdwardsCurve;
82437
82438 EdwardsCurve.prototype._mulA = function _mulA(num) {
82439 if (this.mOneA)
82440 return num.redNeg();
82441 else
82442 return this.a.redMul(num);
82443 };
82444
82445 EdwardsCurve.prototype._mulC = function _mulC(num) {
82446 if (this.oneC)
82447 return num;
82448 else
82449 return this.c.redMul(num);
82450 };
82451
82452 // Just for compatibility with Short curve
82453 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
82454 return this.point(x, y, z, t);
82455 };
82456
82457 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
82458 x = new BN(x, 16);
82459 if (!x.red)
82460 x = x.toRed(this.red);
82461
82462 var x2 = x.redSqr();
82463 var rhs = this.c2.redSub(this.a.redMul(x2));
82464 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
82465
82466 var y2 = rhs.redMul(lhs.redInvm());
82467 var y = y2.redSqrt();
82468 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
82469 throw new Error('invalid point');
82470
82471 var isOdd = y.fromRed().isOdd();
82472 if (odd && !isOdd || !odd && isOdd)
82473 y = y.redNeg();
82474
82475 return this.point(x, y);
82476 };
82477
82478 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
82479 y = new BN(y, 16);
82480 if (!y.red)
82481 y = y.toRed(this.red);
82482
82483 // x^2 = (y^2 - 1) / (d y^2 + 1)
82484 var y2 = y.redSqr();
82485 var lhs = y2.redSub(this.one);
82486 var rhs = y2.redMul(this.d).redAdd(this.one);
82487 var x2 = lhs.redMul(rhs.redInvm());
82488
82489 if (x2.cmp(this.zero) === 0) {
82490 if (odd)
82491 throw new Error('invalid point');
82492 else
82493 return this.point(this.zero, y);
82494 }
82495
82496 var x = x2.redSqrt();
82497 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
82498 throw new Error('invalid point');
82499
82500 if (x.isOdd() !== odd)
82501 x = x.redNeg();
82502
82503 return this.point(x, y);
82504 };
82505
82506 EdwardsCurve.prototype.validate = function validate(point) {
82507 if (point.isInfinity())
82508 return true;
82509
82510 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
82511 point.normalize();
82512
82513 var x2 = point.x.redSqr();
82514 var y2 = point.y.redSqr();
82515 var lhs = x2.redMul(this.a).redAdd(y2);
82516 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
82517
82518 return lhs.cmp(rhs) === 0;
82519 };
82520
82521 function Point(curve, x, y, z, t) {
82522 Base.BasePoint.call(this, curve, 'projective');
82523 if (x === null && y === null && z === null) {
82524 this.x = this.curve.zero;
82525 this.y = this.curve.one;
82526 this.z = this.curve.one;
82527 this.t = this.curve.zero;
82528 this.zOne = true;
82529 } else {
82530 this.x = new BN(x, 16);
82531 this.y = new BN(y, 16);
82532 this.z = z ? new BN(z, 16) : this.curve.one;
82533 this.t = t && new BN(t, 16);
82534 if (!this.x.red)
82535 this.x = this.x.toRed(this.curve.red);
82536 if (!this.y.red)
82537 this.y = this.y.toRed(this.curve.red);
82538 if (!this.z.red)
82539 this.z = this.z.toRed(this.curve.red);
82540 if (this.t && !this.t.red)
82541 this.t = this.t.toRed(this.curve.red);
82542 this.zOne = this.z === this.curve.one;
82543
82544 // Use extended coordinates
82545 if (this.curve.extended && !this.t) {
82546 this.t = this.x.redMul(this.y);
82547 if (!this.zOne)
82548 this.t = this.t.redMul(this.z.redInvm());
82549 }
82550 }
82551 }
82552 inherits(Point, Base.BasePoint);
82553
82554 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82555 return Point.fromJSON(this, obj);
82556 };
82557
82558 EdwardsCurve.prototype.point = function point(x, y, z, t) {
82559 return new Point(this, x, y, z, t);
82560 };
82561
82562 Point.fromJSON = function fromJSON(curve, obj) {
82563 return new Point(curve, obj[0], obj[1], obj[2]);
82564 };
82565
82566 Point.prototype.inspect = function inspect() {
82567 if (this.isInfinity())
82568 return '<EC Point Infinity>';
82569 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
82570 ' y: ' + this.y.fromRed().toString(16, 2) +
82571 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
82572 };
82573
82574 Point.prototype.isInfinity = function isInfinity() {
82575 // XXX This code assumes that zero is always zero in red
82576 return this.x.cmpn(0) === 0 &&
82577 this.y.cmp(this.z) === 0;
82578 };
82579
82580 Point.prototype._extDbl = function _extDbl() {
82581 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82582 // #doubling-dbl-2008-hwcd
82583 // 4M + 4S
82584
82585 // A = X1^2
82586 var a = this.x.redSqr();
82587 // B = Y1^2
82588 var b = this.y.redSqr();
82589 // C = 2 * Z1^2
82590 var c = this.z.redSqr();
82591 c = c.redIAdd(c);
82592 // D = a * A
82593 var d = this.curve._mulA(a);
82594 // E = (X1 + Y1)^2 - A - B
82595 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
82596 // G = D + B
82597 var g = d.redAdd(b);
82598 // F = G - C
82599 var f = g.redSub(c);
82600 // H = D - B
82601 var h = d.redSub(b);
82602 // X3 = E * F
82603 var nx = e.redMul(f);
82604 // Y3 = G * H
82605 var ny = g.redMul(h);
82606 // T3 = E * H
82607 var nt = e.redMul(h);
82608 // Z3 = F * G
82609 var nz = f.redMul(g);
82610 return this.curve.point(nx, ny, nz, nt);
82611 };
82612
82613 Point.prototype._projDbl = function _projDbl() {
82614 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82615 // #doubling-dbl-2008-bbjlp
82616 // #doubling-dbl-2007-bl
82617 // and others
82618 // Generally 3M + 4S or 2M + 4S
82619
82620 // B = (X1 + Y1)^2
82621 var b = this.x.redAdd(this.y).redSqr();
82622 // C = X1^2
82623 var c = this.x.redSqr();
82624 // D = Y1^2
82625 var d = this.y.redSqr();
82626
82627 var nx;
82628 var ny;
82629 var nz;
82630 if (this.curve.twisted) {
82631 // E = a * C
82632 var e = this.curve._mulA(c);
82633 // F = E + D
82634 var f = e.redAdd(d);
82635 if (this.zOne) {
82636 // X3 = (B - C - D) * (F - 2)
82637 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
82638 // Y3 = F * (E - D)
82639 ny = f.redMul(e.redSub(d));
82640 // Z3 = F^2 - 2 * F
82641 nz = f.redSqr().redSub(f).redSub(f);
82642 } else {
82643 // H = Z1^2
82644 var h = this.z.redSqr();
82645 // J = F - 2 * H
82646 var j = f.redSub(h).redISub(h);
82647 // X3 = (B-C-D)*J
82648 nx = b.redSub(c).redISub(d).redMul(j);
82649 // Y3 = F * (E - D)
82650 ny = f.redMul(e.redSub(d));
82651 // Z3 = F * J
82652 nz = f.redMul(j);
82653 }
82654 } else {
82655 // E = C + D
82656 var e = c.redAdd(d);
82657 // H = (c * Z1)^2
82658 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
82659 // J = E - 2 * H
82660 var j = e.redSub(h).redSub(h);
82661 // X3 = c * (B - E) * J
82662 nx = this.curve._mulC(b.redISub(e)).redMul(j);
82663 // Y3 = c * E * (C - D)
82664 ny = this.curve._mulC(e).redMul(c.redISub(d));
82665 // Z3 = E * J
82666 nz = e.redMul(j);
82667 }
82668 return this.curve.point(nx, ny, nz);
82669 };
82670
82671 Point.prototype.dbl = function dbl() {
82672 if (this.isInfinity())
82673 return this;
82674
82675 // Double in extended coordinates
82676 if (this.curve.extended)
82677 return this._extDbl();
82678 else
82679 return this._projDbl();
82680 };
82681
82682 Point.prototype._extAdd = function _extAdd(p) {
82683 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82684 // #addition-add-2008-hwcd-3
82685 // 8M
82686
82687 // A = (Y1 - X1) * (Y2 - X2)
82688 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
82689 // B = (Y1 + X1) * (Y2 + X2)
82690 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
82691 // C = T1 * k * T2
82692 var c = this.t.redMul(this.curve.dd).redMul(p.t);
82693 // D = Z1 * 2 * Z2
82694 var d = this.z.redMul(p.z.redAdd(p.z));
82695 // E = B - A
82696 var e = b.redSub(a);
82697 // F = D - C
82698 var f = d.redSub(c);
82699 // G = D + C
82700 var g = d.redAdd(c);
82701 // H = B + A
82702 var h = b.redAdd(a);
82703 // X3 = E * F
82704 var nx = e.redMul(f);
82705 // Y3 = G * H
82706 var ny = g.redMul(h);
82707 // T3 = E * H
82708 var nt = e.redMul(h);
82709 // Z3 = F * G
82710 var nz = f.redMul(g);
82711 return this.curve.point(nx, ny, nz, nt);
82712 };
82713
82714 Point.prototype._projAdd = function _projAdd(p) {
82715 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82716 // #addition-add-2008-bbjlp
82717 // #addition-add-2007-bl
82718 // 10M + 1S
82719
82720 // A = Z1 * Z2
82721 var a = this.z.redMul(p.z);
82722 // B = A^2
82723 var b = a.redSqr();
82724 // C = X1 * X2
82725 var c = this.x.redMul(p.x);
82726 // D = Y1 * Y2
82727 var d = this.y.redMul(p.y);
82728 // E = d * C * D
82729 var e = this.curve.d.redMul(c).redMul(d);
82730 // F = B - E
82731 var f = b.redSub(e);
82732 // G = B + E
82733 var g = b.redAdd(e);
82734 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
82735 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
82736 var nx = a.redMul(f).redMul(tmp);
82737 var ny;
82738 var nz;
82739 if (this.curve.twisted) {
82740 // Y3 = A * G * (D - a * C)
82741 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
82742 // Z3 = F * G
82743 nz = f.redMul(g);
82744 } else {
82745 // Y3 = A * G * (D - C)
82746 ny = a.redMul(g).redMul(d.redSub(c));
82747 // Z3 = c * F * G
82748 nz = this.curve._mulC(f).redMul(g);
82749 }
82750 return this.curve.point(nx, ny, nz);
82751 };
82752
82753 Point.prototype.add = function add(p) {
82754 if (this.isInfinity())
82755 return p;
82756 if (p.isInfinity())
82757 return this;
82758
82759 if (this.curve.extended)
82760 return this._extAdd(p);
82761 else
82762 return this._projAdd(p);
82763 };
82764
82765 Point.prototype.mul = function mul(k) {
82766 if (this._hasDoubles(k))
82767 return this.curve._fixedNafMul(this, k);
82768 else
82769 return this.curve._wnafMul(this, k);
82770 };
82771
82772 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
82773 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
82774 };
82775
82776 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
82777 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
82778 };
82779
82780 Point.prototype.normalize = function normalize() {
82781 if (this.zOne)
82782 return this;
82783
82784 // Normalize coordinates
82785 var zi = this.z.redInvm();
82786 this.x = this.x.redMul(zi);
82787 this.y = this.y.redMul(zi);
82788 if (this.t)
82789 this.t = this.t.redMul(zi);
82790 this.z = this.curve.one;
82791 this.zOne = true;
82792 return this;
82793 };
82794
82795 Point.prototype.neg = function neg() {
82796 return this.curve.point(this.x.redNeg(),
82797 this.y,
82798 this.z,
82799 this.t && this.t.redNeg());
82800 };
82801
82802 Point.prototype.getX = function getX() {
82803 this.normalize();
82804 return this.x.fromRed();
82805 };
82806
82807 Point.prototype.getY = function getY() {
82808 this.normalize();
82809 return this.y.fromRed();
82810 };
82811
82812 Point.prototype.eq = function eq(other) {
82813 return this === other ||
82814 this.getX().cmp(other.getX()) === 0 &&
82815 this.getY().cmp(other.getY()) === 0;
82816 };
82817
82818 Point.prototype.eqXToP = function eqXToP(x) {
82819 var rx = x.toRed(this.curve.red).redMul(this.z);
82820 if (this.x.cmp(rx) === 0)
82821 return true;
82822
82823 var xc = x.clone();
82824 var t = this.curve.redN.redMul(this.z);
82825 for (;;) {
82826 xc.iadd(this.curve.n);
82827 if (xc.cmp(this.curve.p) >= 0)
82828 return false;
82829
82830 rx.redIAdd(t);
82831 if (this.x.cmp(rx) === 0)
82832 return true;
82833 }
82834 return false;
82835 };
82836
82837 // Compatibility with BaseCurve
82838 Point.prototype.toP = Point.prototype.normalize;
82839 Point.prototype.mixedAdd = Point.prototype.add;
82840
82841 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
82842 'use strict';
82843
82844 var curve = exports;
82845
82846 curve.base = require('./base');
82847 curve.short = require('./short');
82848 curve.mont = require('./mont');
82849 curve.edwards = require('./edwards');
82850
82851 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
82852 'use strict';
82853
82854 var curve = require('../curve');
82855 var BN = require('bn.js');
82856 var inherits = require('inherits');
82857 var Base = curve.base;
82858
82859 var elliptic = require('../../elliptic');
82860 var utils = elliptic.utils;
82861
82862 function MontCurve(conf) {
82863 Base.call(this, 'mont', conf);
82864
82865 this.a = new BN(conf.a, 16).toRed(this.red);
82866 this.b = new BN(conf.b, 16).toRed(this.red);
82867 this.i4 = new BN(4).toRed(this.red).redInvm();
82868 this.two = new BN(2).toRed(this.red);
82869 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
82870 }
82871 inherits(MontCurve, Base);
82872 module.exports = MontCurve;
82873
82874 MontCurve.prototype.validate = function validate(point) {
82875 var x = point.normalize().x;
82876 var x2 = x.redSqr();
82877 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
82878 var y = rhs.redSqrt();
82879
82880 return y.redSqr().cmp(rhs) === 0;
82881 };
82882
82883 function Point(curve, x, z) {
82884 Base.BasePoint.call(this, curve, 'projective');
82885 if (x === null && z === null) {
82886 this.x = this.curve.one;
82887 this.z = this.curve.zero;
82888 } else {
82889 this.x = new BN(x, 16);
82890 this.z = new BN(z, 16);
82891 if (!this.x.red)
82892 this.x = this.x.toRed(this.curve.red);
82893 if (!this.z.red)
82894 this.z = this.z.toRed(this.curve.red);
82895 }
82896 }
82897 inherits(Point, Base.BasePoint);
82898
82899 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82900 return this.point(utils.toArray(bytes, enc), 1);
82901 };
82902
82903 MontCurve.prototype.point = function point(x, z) {
82904 return new Point(this, x, z);
82905 };
82906
82907 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82908 return Point.fromJSON(this, obj);
82909 };
82910
82911 Point.prototype.precompute = function precompute() {
82912 // No-op
82913 };
82914
82915 Point.prototype._encode = function _encode() {
82916 return this.getX().toArray('be', this.curve.p.byteLength());
82917 };
82918
82919 Point.fromJSON = function fromJSON(curve, obj) {
82920 return new Point(curve, obj[0], obj[1] || curve.one);
82921 };
82922
82923 Point.prototype.inspect = function inspect() {
82924 if (this.isInfinity())
82925 return '<EC Point Infinity>';
82926 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
82927 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
82928 };
82929
82930 Point.prototype.isInfinity = function isInfinity() {
82931 // XXX This code assumes that zero is always zero in red
82932 return this.z.cmpn(0) === 0;
82933 };
82934
82935 Point.prototype.dbl = function dbl() {
82936 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
82937 // 2M + 2S + 4A
82938
82939 // A = X1 + Z1
82940 var a = this.x.redAdd(this.z);
82941 // AA = A^2
82942 var aa = a.redSqr();
82943 // B = X1 - Z1
82944 var b = this.x.redSub(this.z);
82945 // BB = B^2
82946 var bb = b.redSqr();
82947 // C = AA - BB
82948 var c = aa.redSub(bb);
82949 // X3 = AA * BB
82950 var nx = aa.redMul(bb);
82951 // Z3 = C * (BB + A24 * C)
82952 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
82953 return this.curve.point(nx, nz);
82954 };
82955
82956 Point.prototype.add = function add() {
82957 throw new Error('Not supported on Montgomery curve');
82958 };
82959
82960 Point.prototype.diffAdd = function diffAdd(p, diff) {
82961 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
82962 // 4M + 2S + 6A
82963
82964 // A = X2 + Z2
82965 var a = this.x.redAdd(this.z);
82966 // B = X2 - Z2
82967 var b = this.x.redSub(this.z);
82968 // C = X3 + Z3
82969 var c = p.x.redAdd(p.z);
82970 // D = X3 - Z3
82971 var d = p.x.redSub(p.z);
82972 // DA = D * A
82973 var da = d.redMul(a);
82974 // CB = C * B
82975 var cb = c.redMul(b);
82976 // X5 = Z1 * (DA + CB)^2
82977 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
82978 // Z5 = X1 * (DA - CB)^2
82979 var nz = diff.x.redMul(da.redISub(cb).redSqr());
82980 return this.curve.point(nx, nz);
82981 };
82982
82983 Point.prototype.mul = function mul(k) {
82984 var t = k.clone();
82985 var a = this; // (N / 2) * Q + Q
82986 var b = this.curve.point(null, null); // (N / 2) * Q
82987 var c = this; // Q
82988
82989 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
82990 bits.push(t.andln(1));
82991
82992 for (var i = bits.length - 1; i >= 0; i--) {
82993 if (bits[i] === 0) {
82994 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
82995 a = a.diffAdd(b, c);
82996 // N * Q = 2 * ((N / 2) * Q + Q))
82997 b = b.dbl();
82998 } else {
82999 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
83000 b = a.diffAdd(b, c);
83001 // N * Q + Q = 2 * ((N / 2) * Q + Q)
83002 a = a.dbl();
83003 }
83004 }
83005 return b;
83006 };
83007
83008 Point.prototype.mulAdd = function mulAdd() {
83009 throw new Error('Not supported on Montgomery curve');
83010 };
83011
83012 Point.prototype.jumlAdd = function jumlAdd() {
83013 throw new Error('Not supported on Montgomery curve');
83014 };
83015
83016 Point.prototype.eq = function eq(other) {
83017 return this.getX().cmp(other.getX()) === 0;
83018 };
83019
83020 Point.prototype.normalize = function normalize() {
83021 this.x = this.x.redMul(this.z.redInvm());
83022 this.z = this.curve.one;
83023 return this;
83024 };
83025
83026 Point.prototype.getX = function getX() {
83027 // Normalize coordinates
83028 this.normalize();
83029
83030 return this.x.fromRed();
83031 };
83032
83033 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
83034 'use strict';
83035
83036 var curve = require('../curve');
83037 var elliptic = require('../../elliptic');
83038 var BN = require('bn.js');
83039 var inherits = require('inherits');
83040 var Base = curve.base;
83041
83042 var assert = elliptic.utils.assert;
83043
83044 function ShortCurve(conf) {
83045 Base.call(this, 'short', conf);
83046
83047 this.a = new BN(conf.a, 16).toRed(this.red);
83048 this.b = new BN(conf.b, 16).toRed(this.red);
83049 this.tinv = this.two.redInvm();
83050
83051 this.zeroA = this.a.fromRed().cmpn(0) === 0;
83052 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
83053
83054 // If the curve is endomorphic, precalculate beta and lambda
83055 this.endo = this._getEndomorphism(conf);
83056 this._endoWnafT1 = new Array(4);
83057 this._endoWnafT2 = new Array(4);
83058 }
83059 inherits(ShortCurve, Base);
83060 module.exports = ShortCurve;
83061
83062 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
83063 // No efficient endomorphism
83064 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
83065 return;
83066
83067 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
83068 var beta;
83069 var lambda;
83070 if (conf.beta) {
83071 beta = new BN(conf.beta, 16).toRed(this.red);
83072 } else {
83073 var betas = this._getEndoRoots(this.p);
83074 // Choose the smallest beta
83075 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
83076 beta = beta.toRed(this.red);
83077 }
83078 if (conf.lambda) {
83079 lambda = new BN(conf.lambda, 16);
83080 } else {
83081 // Choose the lambda that is matching selected beta
83082 var lambdas = this._getEndoRoots(this.n);
83083 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
83084 lambda = lambdas[0];
83085 } else {
83086 lambda = lambdas[1];
83087 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
83088 }
83089 }
83090
83091 // Get basis vectors, used for balanced length-two representation
83092 var basis;
83093 if (conf.basis) {
83094 basis = conf.basis.map(function(vec) {
83095 return {
83096 a: new BN(vec.a, 16),
83097 b: new BN(vec.b, 16)
83098 };
83099 });
83100 } else {
83101 basis = this._getEndoBasis(lambda);
83102 }
83103
83104 return {
83105 beta: beta,
83106 lambda: lambda,
83107 basis: basis
83108 };
83109 };
83110
83111 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
83112 // Find roots of for x^2 + x + 1 in F
83113 // Root = (-1 +- Sqrt(-3)) / 2
83114 //
83115 var red = num === this.p ? this.red : BN.mont(num);
83116 var tinv = new BN(2).toRed(red).redInvm();
83117 var ntinv = tinv.redNeg();
83118
83119 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
83120
83121 var l1 = ntinv.redAdd(s).fromRed();
83122 var l2 = ntinv.redSub(s).fromRed();
83123 return [ l1, l2 ];
83124 };
83125
83126 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
83127 // aprxSqrt >= sqrt(this.n)
83128 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
83129
83130 // 3.74
83131 // Run EGCD, until r(L + 1) < aprxSqrt
83132 var u = lambda;
83133 var v = this.n.clone();
83134 var x1 = new BN(1);
83135 var y1 = new BN(0);
83136 var x2 = new BN(0);
83137 var y2 = new BN(1);
83138
83139 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
83140 var a0;
83141 var b0;
83142 // First vector
83143 var a1;
83144 var b1;
83145 // Second vector
83146 var a2;
83147 var b2;
83148
83149 var prevR;
83150 var i = 0;
83151 var r;
83152 var x;
83153 while (u.cmpn(0) !== 0) {
83154 var q = v.div(u);
83155 r = v.sub(q.mul(u));
83156 x = x2.sub(q.mul(x1));
83157 var y = y2.sub(q.mul(y1));
83158
83159 if (!a1 && r.cmp(aprxSqrt) < 0) {
83160 a0 = prevR.neg();
83161 b0 = x1;
83162 a1 = r.neg();
83163 b1 = x;
83164 } else if (a1 && ++i === 2) {
83165 break;
83166 }
83167 prevR = r;
83168
83169 v = u;
83170 u = r;
83171 x2 = x1;
83172 x1 = x;
83173 y2 = y1;
83174 y1 = y;
83175 }
83176 a2 = r.neg();
83177 b2 = x;
83178
83179 var len1 = a1.sqr().add(b1.sqr());
83180 var len2 = a2.sqr().add(b2.sqr());
83181 if (len2.cmp(len1) >= 0) {
83182 a2 = a0;
83183 b2 = b0;
83184 }
83185
83186 // Normalize signs
83187 if (a1.negative) {
83188 a1 = a1.neg();
83189 b1 = b1.neg();
83190 }
83191 if (a2.negative) {
83192 a2 = a2.neg();
83193 b2 = b2.neg();
83194 }
83195
83196 return [
83197 { a: a1, b: b1 },
83198 { a: a2, b: b2 }
83199 ];
83200 };
83201
83202 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
83203 var basis = this.endo.basis;
83204 var v1 = basis[0];
83205 var v2 = basis[1];
83206
83207 var c1 = v2.b.mul(k).divRound(this.n);
83208 var c2 = v1.b.neg().mul(k).divRound(this.n);
83209
83210 var p1 = c1.mul(v1.a);
83211 var p2 = c2.mul(v2.a);
83212 var q1 = c1.mul(v1.b);
83213 var q2 = c2.mul(v2.b);
83214
83215 // Calculate answer
83216 var k1 = k.sub(p1).sub(p2);
83217 var k2 = q1.add(q2).neg();
83218 return { k1: k1, k2: k2 };
83219 };
83220
83221 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
83222 x = new BN(x, 16);
83223 if (!x.red)
83224 x = x.toRed(this.red);
83225
83226 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
83227 var y = y2.redSqrt();
83228 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
83229 throw new Error('invalid point');
83230
83231 // XXX Is there any way to tell if the number is odd without converting it
83232 // to non-red form?
83233 var isOdd = y.fromRed().isOdd();
83234 if (odd && !isOdd || !odd && isOdd)
83235 y = y.redNeg();
83236
83237 return this.point(x, y);
83238 };
83239
83240 ShortCurve.prototype.validate = function validate(point) {
83241 if (point.inf)
83242 return true;
83243
83244 var x = point.x;
83245 var y = point.y;
83246
83247 var ax = this.a.redMul(x);
83248 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
83249 return y.redSqr().redISub(rhs).cmpn(0) === 0;
83250 };
83251
83252 ShortCurve.prototype._endoWnafMulAdd =
83253 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
83254 var npoints = this._endoWnafT1;
83255 var ncoeffs = this._endoWnafT2;
83256 for (var i = 0; i < points.length; i++) {
83257 var split = this._endoSplit(coeffs[i]);
83258 var p = points[i];
83259 var beta = p._getBeta();
83260
83261 if (split.k1.negative) {
83262 split.k1.ineg();
83263 p = p.neg(true);
83264 }
83265 if (split.k2.negative) {
83266 split.k2.ineg();
83267 beta = beta.neg(true);
83268 }
83269
83270 npoints[i * 2] = p;
83271 npoints[i * 2 + 1] = beta;
83272 ncoeffs[i * 2] = split.k1;
83273 ncoeffs[i * 2 + 1] = split.k2;
83274 }
83275 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
83276
83277 // Clean-up references to points and coefficients
83278 for (var j = 0; j < i * 2; j++) {
83279 npoints[j] = null;
83280 ncoeffs[j] = null;
83281 }
83282 return res;
83283 };
83284
83285 function Point(curve, x, y, isRed) {
83286 Base.BasePoint.call(this, curve, 'affine');
83287 if (x === null && y === null) {
83288 this.x = null;
83289 this.y = null;
83290 this.inf = true;
83291 } else {
83292 this.x = new BN(x, 16);
83293 this.y = new BN(y, 16);
83294 // Force redgomery representation when loading from JSON
83295 if (isRed) {
83296 this.x.forceRed(this.curve.red);
83297 this.y.forceRed(this.curve.red);
83298 }
83299 if (!this.x.red)
83300 this.x = this.x.toRed(this.curve.red);
83301 if (!this.y.red)
83302 this.y = this.y.toRed(this.curve.red);
83303 this.inf = false;
83304 }
83305 }
83306 inherits(Point, Base.BasePoint);
83307
83308 ShortCurve.prototype.point = function point(x, y, isRed) {
83309 return new Point(this, x, y, isRed);
83310 };
83311
83312 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
83313 return Point.fromJSON(this, obj, red);
83314 };
83315
83316 Point.prototype._getBeta = function _getBeta() {
83317 if (!this.curve.endo)
83318 return;
83319
83320 var pre = this.precomputed;
83321 if (pre && pre.beta)
83322 return pre.beta;
83323
83324 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
83325 if (pre) {
83326 var curve = this.curve;
83327 var endoMul = function(p) {
83328 return curve.point(p.x.redMul(curve.endo.beta), p.y);
83329 };
83330 pre.beta = beta;
83331 beta.precomputed = {
83332 beta: null,
83333 naf: pre.naf && {
83334 wnd: pre.naf.wnd,
83335 points: pre.naf.points.map(endoMul)
83336 },
83337 doubles: pre.doubles && {
83338 step: pre.doubles.step,
83339 points: pre.doubles.points.map(endoMul)
83340 }
83341 };
83342 }
83343 return beta;
83344 };
83345
83346 Point.prototype.toJSON = function toJSON() {
83347 if (!this.precomputed)
83348 return [ this.x, this.y ];
83349
83350 return [ this.x, this.y, this.precomputed && {
83351 doubles: this.precomputed.doubles && {
83352 step: this.precomputed.doubles.step,
83353 points: this.precomputed.doubles.points.slice(1)
83354 },
83355 naf: this.precomputed.naf && {
83356 wnd: this.precomputed.naf.wnd,
83357 points: this.precomputed.naf.points.slice(1)
83358 }
83359 } ];
83360 };
83361
83362 Point.fromJSON = function fromJSON(curve, obj, red) {
83363 if (typeof obj === 'string')
83364 obj = JSON.parse(obj);
83365 var res = curve.point(obj[0], obj[1], red);
83366 if (!obj[2])
83367 return res;
83368
83369 function obj2point(obj) {
83370 return curve.point(obj[0], obj[1], red);
83371 }
83372
83373 var pre = obj[2];
83374 res.precomputed = {
83375 beta: null,
83376 doubles: pre.doubles && {
83377 step: pre.doubles.step,
83378 points: [ res ].concat(pre.doubles.points.map(obj2point))
83379 },
83380 naf: pre.naf && {
83381 wnd: pre.naf.wnd,
83382 points: [ res ].concat(pre.naf.points.map(obj2point))
83383 }
83384 };
83385 return res;
83386 };
83387
83388 Point.prototype.inspect = function inspect() {
83389 if (this.isInfinity())
83390 return '<EC Point Infinity>';
83391 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
83392 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
83393 };
83394
83395 Point.prototype.isInfinity = function isInfinity() {
83396 return this.inf;
83397 };
83398
83399 Point.prototype.add = function add(p) {
83400 // O + P = P
83401 if (this.inf)
83402 return p;
83403
83404 // P + O = P
83405 if (p.inf)
83406 return this;
83407
83408 // P + P = 2P
83409 if (this.eq(p))
83410 return this.dbl();
83411
83412 // P + (-P) = O
83413 if (this.neg().eq(p))
83414 return this.curve.point(null, null);
83415
83416 // P + Q = O
83417 if (this.x.cmp(p.x) === 0)
83418 return this.curve.point(null, null);
83419
83420 var c = this.y.redSub(p.y);
83421 if (c.cmpn(0) !== 0)
83422 c = c.redMul(this.x.redSub(p.x).redInvm());
83423 var nx = c.redSqr().redISub(this.x).redISub(p.x);
83424 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83425 return this.curve.point(nx, ny);
83426 };
83427
83428 Point.prototype.dbl = function dbl() {
83429 if (this.inf)
83430 return this;
83431
83432 // 2P = O
83433 var ys1 = this.y.redAdd(this.y);
83434 if (ys1.cmpn(0) === 0)
83435 return this.curve.point(null, null);
83436
83437 var a = this.curve.a;
83438
83439 var x2 = this.x.redSqr();
83440 var dyinv = ys1.redInvm();
83441 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
83442
83443 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
83444 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83445 return this.curve.point(nx, ny);
83446 };
83447
83448 Point.prototype.getX = function getX() {
83449 return this.x.fromRed();
83450 };
83451
83452 Point.prototype.getY = function getY() {
83453 return this.y.fromRed();
83454 };
83455
83456 Point.prototype.mul = function mul(k) {
83457 k = new BN(k, 16);
83458
83459 if (this._hasDoubles(k))
83460 return this.curve._fixedNafMul(this, k);
83461 else if (this.curve.endo)
83462 return this.curve._endoWnafMulAdd([ this ], [ k ]);
83463 else
83464 return this.curve._wnafMul(this, k);
83465 };
83466
83467 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
83468 var points = [ this, p2 ];
83469 var coeffs = [ k1, k2 ];
83470 if (this.curve.endo)
83471 return this.curve._endoWnafMulAdd(points, coeffs);
83472 else
83473 return this.curve._wnafMulAdd(1, points, coeffs, 2);
83474 };
83475
83476 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
83477 var points = [ this, p2 ];
83478 var coeffs = [ k1, k2 ];
83479 if (this.curve.endo)
83480 return this.curve._endoWnafMulAdd(points, coeffs, true);
83481 else
83482 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
83483 };
83484
83485 Point.prototype.eq = function eq(p) {
83486 return this === p ||
83487 this.inf === p.inf &&
83488 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
83489 };
83490
83491 Point.prototype.neg = function neg(_precompute) {
83492 if (this.inf)
83493 return this;
83494
83495 var res = this.curve.point(this.x, this.y.redNeg());
83496 if (_precompute && this.precomputed) {
83497 var pre = this.precomputed;
83498 var negate = function(p) {
83499 return p.neg();
83500 };
83501 res.precomputed = {
83502 naf: pre.naf && {
83503 wnd: pre.naf.wnd,
83504 points: pre.naf.points.map(negate)
83505 },
83506 doubles: pre.doubles && {
83507 step: pre.doubles.step,
83508 points: pre.doubles.points.map(negate)
83509 }
83510 };
83511 }
83512 return res;
83513 };
83514
83515 Point.prototype.toJ = function toJ() {
83516 if (this.inf)
83517 return this.curve.jpoint(null, null, null);
83518
83519 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
83520 return res;
83521 };
83522
83523 function JPoint(curve, x, y, z) {
83524 Base.BasePoint.call(this, curve, 'jacobian');
83525 if (x === null && y === null && z === null) {
83526 this.x = this.curve.one;
83527 this.y = this.curve.one;
83528 this.z = new BN(0);
83529 } else {
83530 this.x = new BN(x, 16);
83531 this.y = new BN(y, 16);
83532 this.z = new BN(z, 16);
83533 }
83534 if (!this.x.red)
83535 this.x = this.x.toRed(this.curve.red);
83536 if (!this.y.red)
83537 this.y = this.y.toRed(this.curve.red);
83538 if (!this.z.red)
83539 this.z = this.z.toRed(this.curve.red);
83540
83541 this.zOne = this.z === this.curve.one;
83542 }
83543 inherits(JPoint, Base.BasePoint);
83544
83545 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
83546 return new JPoint(this, x, y, z);
83547 };
83548
83549 JPoint.prototype.toP = function toP() {
83550 if (this.isInfinity())
83551 return this.curve.point(null, null);
83552
83553 var zinv = this.z.redInvm();
83554 var zinv2 = zinv.redSqr();
83555 var ax = this.x.redMul(zinv2);
83556 var ay = this.y.redMul(zinv2).redMul(zinv);
83557
83558 return this.curve.point(ax, ay);
83559 };
83560
83561 JPoint.prototype.neg = function neg() {
83562 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
83563 };
83564
83565 JPoint.prototype.add = function add(p) {
83566 // O + P = P
83567 if (this.isInfinity())
83568 return p;
83569
83570 // P + O = P
83571 if (p.isInfinity())
83572 return this;
83573
83574 // 12M + 4S + 7A
83575 var pz2 = p.z.redSqr();
83576 var z2 = this.z.redSqr();
83577 var u1 = this.x.redMul(pz2);
83578 var u2 = p.x.redMul(z2);
83579 var s1 = this.y.redMul(pz2.redMul(p.z));
83580 var s2 = p.y.redMul(z2.redMul(this.z));
83581
83582 var h = u1.redSub(u2);
83583 var r = s1.redSub(s2);
83584 if (h.cmpn(0) === 0) {
83585 if (r.cmpn(0) !== 0)
83586 return this.curve.jpoint(null, null, null);
83587 else
83588 return this.dbl();
83589 }
83590
83591 var h2 = h.redSqr();
83592 var h3 = h2.redMul(h);
83593 var v = u1.redMul(h2);
83594
83595 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83596 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83597 var nz = this.z.redMul(p.z).redMul(h);
83598
83599 return this.curve.jpoint(nx, ny, nz);
83600 };
83601
83602 JPoint.prototype.mixedAdd = function mixedAdd(p) {
83603 // O + P = P
83604 if (this.isInfinity())
83605 return p.toJ();
83606
83607 // P + O = P
83608 if (p.isInfinity())
83609 return this;
83610
83611 // 8M + 3S + 7A
83612 var z2 = this.z.redSqr();
83613 var u1 = this.x;
83614 var u2 = p.x.redMul(z2);
83615 var s1 = this.y;
83616 var s2 = p.y.redMul(z2).redMul(this.z);
83617
83618 var h = u1.redSub(u2);
83619 var r = s1.redSub(s2);
83620 if (h.cmpn(0) === 0) {
83621 if (r.cmpn(0) !== 0)
83622 return this.curve.jpoint(null, null, null);
83623 else
83624 return this.dbl();
83625 }
83626
83627 var h2 = h.redSqr();
83628 var h3 = h2.redMul(h);
83629 var v = u1.redMul(h2);
83630
83631 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83632 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83633 var nz = this.z.redMul(h);
83634
83635 return this.curve.jpoint(nx, ny, nz);
83636 };
83637
83638 JPoint.prototype.dblp = function dblp(pow) {
83639 if (pow === 0)
83640 return this;
83641 if (this.isInfinity())
83642 return this;
83643 if (!pow)
83644 return this.dbl();
83645
83646 if (this.curve.zeroA || this.curve.threeA) {
83647 var r = this;
83648 for (var i = 0; i < pow; i++)
83649 r = r.dbl();
83650 return r;
83651 }
83652
83653 // 1M + 2S + 1A + N * (4S + 5M + 8A)
83654 // N = 1 => 6M + 6S + 9A
83655 var a = this.curve.a;
83656 var tinv = this.curve.tinv;
83657
83658 var jx = this.x;
83659 var jy = this.y;
83660 var jz = this.z;
83661 var jz4 = jz.redSqr().redSqr();
83662
83663 // Reuse results
83664 var jyd = jy.redAdd(jy);
83665 for (var i = 0; i < pow; i++) {
83666 var jx2 = jx.redSqr();
83667 var jyd2 = jyd.redSqr();
83668 var jyd4 = jyd2.redSqr();
83669 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83670
83671 var t1 = jx.redMul(jyd2);
83672 var nx = c.redSqr().redISub(t1.redAdd(t1));
83673 var t2 = t1.redISub(nx);
83674 var dny = c.redMul(t2);
83675 dny = dny.redIAdd(dny).redISub(jyd4);
83676 var nz = jyd.redMul(jz);
83677 if (i + 1 < pow)
83678 jz4 = jz4.redMul(jyd4);
83679
83680 jx = nx;
83681 jz = nz;
83682 jyd = dny;
83683 }
83684
83685 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
83686 };
83687
83688 JPoint.prototype.dbl = function dbl() {
83689 if (this.isInfinity())
83690 return this;
83691
83692 if (this.curve.zeroA)
83693 return this._zeroDbl();
83694 else if (this.curve.threeA)
83695 return this._threeDbl();
83696 else
83697 return this._dbl();
83698 };
83699
83700 JPoint.prototype._zeroDbl = function _zeroDbl() {
83701 var nx;
83702 var ny;
83703 var nz;
83704 // Z = 1
83705 if (this.zOne) {
83706 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83707 // #doubling-mdbl-2007-bl
83708 // 1M + 5S + 14A
83709
83710 // XX = X1^2
83711 var xx = this.x.redSqr();
83712 // YY = Y1^2
83713 var yy = this.y.redSqr();
83714 // YYYY = YY^2
83715 var yyyy = yy.redSqr();
83716 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83717 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83718 s = s.redIAdd(s);
83719 // M = 3 * XX + a; a = 0
83720 var m = xx.redAdd(xx).redIAdd(xx);
83721 // T = M ^ 2 - 2*S
83722 var t = m.redSqr().redISub(s).redISub(s);
83723
83724 // 8 * YYYY
83725 var yyyy8 = yyyy.redIAdd(yyyy);
83726 yyyy8 = yyyy8.redIAdd(yyyy8);
83727 yyyy8 = yyyy8.redIAdd(yyyy8);
83728
83729 // X3 = T
83730 nx = t;
83731 // Y3 = M * (S - T) - 8 * YYYY
83732 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83733 // Z3 = 2*Y1
83734 nz = this.y.redAdd(this.y);
83735 } else {
83736 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83737 // #doubling-dbl-2009-l
83738 // 2M + 5S + 13A
83739
83740 // A = X1^2
83741 var a = this.x.redSqr();
83742 // B = Y1^2
83743 var b = this.y.redSqr();
83744 // C = B^2
83745 var c = b.redSqr();
83746 // D = 2 * ((X1 + B)^2 - A - C)
83747 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
83748 d = d.redIAdd(d);
83749 // E = 3 * A
83750 var e = a.redAdd(a).redIAdd(a);
83751 // F = E^2
83752 var f = e.redSqr();
83753
83754 // 8 * C
83755 var c8 = c.redIAdd(c);
83756 c8 = c8.redIAdd(c8);
83757 c8 = c8.redIAdd(c8);
83758
83759 // X3 = F - 2 * D
83760 nx = f.redISub(d).redISub(d);
83761 // Y3 = E * (D - X3) - 8 * C
83762 ny = e.redMul(d.redISub(nx)).redISub(c8);
83763 // Z3 = 2 * Y1 * Z1
83764 nz = this.y.redMul(this.z);
83765 nz = nz.redIAdd(nz);
83766 }
83767
83768 return this.curve.jpoint(nx, ny, nz);
83769 };
83770
83771 JPoint.prototype._threeDbl = function _threeDbl() {
83772 var nx;
83773 var ny;
83774 var nz;
83775 // Z = 1
83776 if (this.zOne) {
83777 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
83778 // #doubling-mdbl-2007-bl
83779 // 1M + 5S + 15A
83780
83781 // XX = X1^2
83782 var xx = this.x.redSqr();
83783 // YY = Y1^2
83784 var yy = this.y.redSqr();
83785 // YYYY = YY^2
83786 var yyyy = yy.redSqr();
83787 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83788 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83789 s = s.redIAdd(s);
83790 // M = 3 * XX + a
83791 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
83792 // T = M^2 - 2 * S
83793 var t = m.redSqr().redISub(s).redISub(s);
83794 // X3 = T
83795 nx = t;
83796 // Y3 = M * (S - T) - 8 * YYYY
83797 var yyyy8 = yyyy.redIAdd(yyyy);
83798 yyyy8 = yyyy8.redIAdd(yyyy8);
83799 yyyy8 = yyyy8.redIAdd(yyyy8);
83800 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83801 // Z3 = 2 * Y1
83802 nz = this.y.redAdd(this.y);
83803 } else {
83804 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
83805 // 3M + 5S
83806
83807 // delta = Z1^2
83808 var delta = this.z.redSqr();
83809 // gamma = Y1^2
83810 var gamma = this.y.redSqr();
83811 // beta = X1 * gamma
83812 var beta = this.x.redMul(gamma);
83813 // alpha = 3 * (X1 - delta) * (X1 + delta)
83814 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
83815 alpha = alpha.redAdd(alpha).redIAdd(alpha);
83816 // X3 = alpha^2 - 8 * beta
83817 var beta4 = beta.redIAdd(beta);
83818 beta4 = beta4.redIAdd(beta4);
83819 var beta8 = beta4.redAdd(beta4);
83820 nx = alpha.redSqr().redISub(beta8);
83821 // Z3 = (Y1 + Z1)^2 - gamma - delta
83822 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
83823 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
83824 var ggamma8 = gamma.redSqr();
83825 ggamma8 = ggamma8.redIAdd(ggamma8);
83826 ggamma8 = ggamma8.redIAdd(ggamma8);
83827 ggamma8 = ggamma8.redIAdd(ggamma8);
83828 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
83829 }
83830
83831 return this.curve.jpoint(nx, ny, nz);
83832 };
83833
83834 JPoint.prototype._dbl = function _dbl() {
83835 var a = this.curve.a;
83836
83837 // 4M + 6S + 10A
83838 var jx = this.x;
83839 var jy = this.y;
83840 var jz = this.z;
83841 var jz4 = jz.redSqr().redSqr();
83842
83843 var jx2 = jx.redSqr();
83844 var jy2 = jy.redSqr();
83845
83846 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83847
83848 var jxd4 = jx.redAdd(jx);
83849 jxd4 = jxd4.redIAdd(jxd4);
83850 var t1 = jxd4.redMul(jy2);
83851 var nx = c.redSqr().redISub(t1.redAdd(t1));
83852 var t2 = t1.redISub(nx);
83853
83854 var jyd8 = jy2.redSqr();
83855 jyd8 = jyd8.redIAdd(jyd8);
83856 jyd8 = jyd8.redIAdd(jyd8);
83857 jyd8 = jyd8.redIAdd(jyd8);
83858 var ny = c.redMul(t2).redISub(jyd8);
83859 var nz = jy.redAdd(jy).redMul(jz);
83860
83861 return this.curve.jpoint(nx, ny, nz);
83862 };
83863
83864 JPoint.prototype.trpl = function trpl() {
83865 if (!this.curve.zeroA)
83866 return this.dbl().add(this);
83867
83868 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
83869 // 5M + 10S + ...
83870
83871 // XX = X1^2
83872 var xx = this.x.redSqr();
83873 // YY = Y1^2
83874 var yy = this.y.redSqr();
83875 // ZZ = Z1^2
83876 var zz = this.z.redSqr();
83877 // YYYY = YY^2
83878 var yyyy = yy.redSqr();
83879 // M = 3 * XX + a * ZZ2; a = 0
83880 var m = xx.redAdd(xx).redIAdd(xx);
83881 // MM = M^2
83882 var mm = m.redSqr();
83883 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
83884 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83885 e = e.redIAdd(e);
83886 e = e.redAdd(e).redIAdd(e);
83887 e = e.redISub(mm);
83888 // EE = E^2
83889 var ee = e.redSqr();
83890 // T = 16*YYYY
83891 var t = yyyy.redIAdd(yyyy);
83892 t = t.redIAdd(t);
83893 t = t.redIAdd(t);
83894 t = t.redIAdd(t);
83895 // U = (M + E)^2 - MM - EE - T
83896 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
83897 // X3 = 4 * (X1 * EE - 4 * YY * U)
83898 var yyu4 = yy.redMul(u);
83899 yyu4 = yyu4.redIAdd(yyu4);
83900 yyu4 = yyu4.redIAdd(yyu4);
83901 var nx = this.x.redMul(ee).redISub(yyu4);
83902 nx = nx.redIAdd(nx);
83903 nx = nx.redIAdd(nx);
83904 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
83905 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
83906 ny = ny.redIAdd(ny);
83907 ny = ny.redIAdd(ny);
83908 ny = ny.redIAdd(ny);
83909 // Z3 = (Z1 + E)^2 - ZZ - EE
83910 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
83911
83912 return this.curve.jpoint(nx, ny, nz);
83913 };
83914
83915 JPoint.prototype.mul = function mul(k, kbase) {
83916 k = new BN(k, kbase);
83917
83918 return this.curve._wnafMul(this, k);
83919 };
83920
83921 JPoint.prototype.eq = function eq(p) {
83922 if (p.type === 'affine')
83923 return this.eq(p.toJ());
83924
83925 if (this === p)
83926 return true;
83927
83928 // x1 * z2^2 == x2 * z1^2
83929 var z2 = this.z.redSqr();
83930 var pz2 = p.z.redSqr();
83931 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
83932 return false;
83933
83934 // y1 * z2^3 == y2 * z1^3
83935 var z3 = z2.redMul(this.z);
83936 var pz3 = pz2.redMul(p.z);
83937 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
83938 };
83939
83940 JPoint.prototype.eqXToP = function eqXToP(x) {
83941 var zs = this.z.redSqr();
83942 var rx = x.toRed(this.curve.red).redMul(zs);
83943 if (this.x.cmp(rx) === 0)
83944 return true;
83945
83946 var xc = x.clone();
83947 var t = this.curve.redN.redMul(zs);
83948 for (;;) {
83949 xc.iadd(this.curve.n);
83950 if (xc.cmp(this.curve.p) >= 0)
83951 return false;
83952
83953 rx.redIAdd(t);
83954 if (this.x.cmp(rx) === 0)
83955 return true;
83956 }
83957 return false;
83958 };
83959
83960 JPoint.prototype.inspect = function inspect() {
83961 if (this.isInfinity())
83962 return '<EC JPoint Infinity>';
83963 return '<EC JPoint x: ' + this.x.toString(16, 2) +
83964 ' y: ' + this.y.toString(16, 2) +
83965 ' z: ' + this.z.toString(16, 2) + '>';
83966 };
83967
83968 JPoint.prototype.isInfinity = function isInfinity() {
83969 // XXX This code assumes that zero is always zero in red
83970 return this.z.cmpn(0) === 0;
83971 };
83972
83973 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
83974 'use strict';
83975
83976 var curves = exports;
83977
83978 var hash = require('hash.js');
83979 var elliptic = require('../elliptic');
83980
83981 var assert = elliptic.utils.assert;
83982
83983 function PresetCurve(options) {
83984 if (options.type === 'short')
83985 this.curve = new elliptic.curve.short(options);
83986 else if (options.type === 'edwards')
83987 this.curve = new elliptic.curve.edwards(options);
83988 else
83989 this.curve = new elliptic.curve.mont(options);
83990 this.g = this.curve.g;
83991 this.n = this.curve.n;
83992 this.hash = options.hash;
83993
83994 assert(this.g.validate(), 'Invalid curve');
83995 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
83996 }
83997 curves.PresetCurve = PresetCurve;
83998
83999 function defineCurve(name, options) {
84000 Object.defineProperty(curves, name, {
84001 configurable: true,
84002 enumerable: true,
84003 get: function() {
84004 var curve = new PresetCurve(options);
84005 Object.defineProperty(curves, name, {
84006 configurable: true,
84007 enumerable: true,
84008 value: curve
84009 });
84010 return curve;
84011 }
84012 });
84013 }
84014
84015 defineCurve('p192', {
84016 type: 'short',
84017 prime: 'p192',
84018 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
84019 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
84020 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
84021 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
84022 hash: hash.sha256,
84023 gRed: false,
84024 g: [
84025 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
84026 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
84027 ]
84028 });
84029
84030 defineCurve('p224', {
84031 type: 'short',
84032 prime: 'p224',
84033 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
84034 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
84035 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
84036 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
84037 hash: hash.sha256,
84038 gRed: false,
84039 g: [
84040 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
84041 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
84042 ]
84043 });
84044
84045 defineCurve('p256', {
84046 type: 'short',
84047 prime: null,
84048 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
84049 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
84050 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
84051 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
84052 hash: hash.sha256,
84053 gRed: false,
84054 g: [
84055 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
84056 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
84057 ]
84058 });
84059
84060 defineCurve('p384', {
84061 type: 'short',
84062 prime: null,
84063 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84064 'fffffffe ffffffff 00000000 00000000 ffffffff',
84065 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84066 'fffffffe ffffffff 00000000 00000000 fffffffc',
84067 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
84068 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
84069 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
84070 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
84071 hash: hash.sha384,
84072 gRed: false,
84073 g: [
84074 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
84075 '5502f25d bf55296c 3a545e38 72760ab7',
84076 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
84077 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
84078 ]
84079 });
84080
84081 defineCurve('p521', {
84082 type: 'short',
84083 prime: null,
84084 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84085 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84086 'ffffffff ffffffff ffffffff ffffffff ffffffff',
84087 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84088 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84089 'ffffffff ffffffff ffffffff ffffffff fffffffc',
84090 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
84091 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
84092 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
84093 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84094 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
84095 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
84096 hash: hash.sha512,
84097 gRed: false,
84098 g: [
84099 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
84100 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
84101 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
84102 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
84103 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
84104 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
84105 ]
84106 });
84107
84108 defineCurve('curve25519', {
84109 type: 'mont',
84110 prime: 'p25519',
84111 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84112 a: '76d06',
84113 b: '1',
84114 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84115 hash: hash.sha256,
84116 gRed: false,
84117 g: [
84118 '9'
84119 ]
84120 });
84121
84122 defineCurve('ed25519', {
84123 type: 'edwards',
84124 prime: 'p25519',
84125 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84126 a: '-1',
84127 c: '1',
84128 // -121665 * (121666^(-1)) (mod P)
84129 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
84130 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84131 hash: hash.sha256,
84132 gRed: false,
84133 g: [
84134 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
84135
84136 // 4/5
84137 '6666666666666666666666666666666666666666666666666666666666666658'
84138 ]
84139 });
84140
84141 var pre;
84142 try {
84143 pre = require('./precomputed/secp256k1');
84144 } catch (e) {
84145 pre = undefined;
84146 }
84147
84148 defineCurve('secp256k1', {
84149 type: 'short',
84150 prime: 'k256',
84151 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
84152 a: '0',
84153 b: '7',
84154 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
84155 h: '1',
84156 hash: hash.sha256,
84157
84158 // Precomputed endomorphism
84159 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
84160 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
84161 basis: [
84162 {
84163 a: '3086d221a7d46bcde86c90e49284eb15',
84164 b: '-e4437ed6010e88286f547fa90abfe4c3'
84165 },
84166 {
84167 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
84168 b: '3086d221a7d46bcde86c90e49284eb15'
84169 }
84170 ],
84171
84172 gRed: false,
84173 g: [
84174 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
84175 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
84176 pre
84177 ]
84178 });
84179
84180 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
84181 'use strict';
84182
84183 var BN = require('bn.js');
84184 var elliptic = require('../../elliptic');
84185 var utils = elliptic.utils;
84186 var assert = utils.assert;
84187
84188 var KeyPair = require('./key');
84189 var Signature = require('./signature');
84190
84191 function EC(options) {
84192 if (!(this instanceof EC))
84193 return new EC(options);
84194
84195 // Shortcut `elliptic.ec(curve-name)`
84196 if (typeof options === 'string') {
84197 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
84198
84199 options = elliptic.curves[options];
84200 }
84201
84202 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
84203 if (options instanceof elliptic.curves.PresetCurve)
84204 options = { curve: options };
84205
84206 this.curve = options.curve.curve;
84207 this.n = this.curve.n;
84208 this.nh = this.n.ushrn(1);
84209 this.g = this.curve.g;
84210
84211 // Point on curve
84212 this.g = options.curve.g;
84213 this.g.precompute(options.curve.n.bitLength() + 1);
84214
84215 // Hash for function for DRBG
84216 this.hash = options.hash || options.curve.hash;
84217 }
84218 module.exports = EC;
84219
84220 EC.prototype.keyPair = function keyPair(options) {
84221 return new KeyPair(this, options);
84222 };
84223
84224 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
84225 return KeyPair.fromPrivate(this, priv, enc);
84226 };
84227
84228 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
84229 return KeyPair.fromPublic(this, pub, enc);
84230 };
84231
84232 EC.prototype.genKeyPair = function genKeyPair(options) {
84233 if (!options)
84234 options = {};
84235
84236 // Instantiate Hmac_DRBG
84237 var drbg = new elliptic.hmacDRBG({
84238 hash: this.hash,
84239 pers: options.pers,
84240 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
84241 nonce: this.n.toArray()
84242 });
84243
84244 var bytes = this.n.byteLength();
84245 var ns2 = this.n.sub(new BN(2));
84246 do {
84247 var priv = new BN(drbg.generate(bytes));
84248 if (priv.cmp(ns2) > 0)
84249 continue;
84250
84251 priv.iaddn(1);
84252 return this.keyFromPrivate(priv);
84253 } while (true);
84254 };
84255
84256 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
84257 var delta = msg.byteLength() * 8 - this.n.bitLength();
84258 if (delta > 0)
84259 msg = msg.ushrn(delta);
84260 if (!truncOnly && msg.cmp(this.n) >= 0)
84261 return msg.sub(this.n);
84262 else
84263 return msg;
84264 };
84265
84266 EC.prototype.sign = function sign(msg, key, enc, options) {
84267 if (typeof enc === 'object') {
84268 options = enc;
84269 enc = null;
84270 }
84271 if (!options)
84272 options = {};
84273
84274 key = this.keyFromPrivate(key, enc);
84275 msg = this._truncateToN(new BN(msg, 16));
84276
84277 // Zero-extend key to provide enough entropy
84278 var bytes = this.n.byteLength();
84279 var bkey = key.getPrivate().toArray('be', bytes);
84280
84281 // Zero-extend nonce to have the same byte size as N
84282 var nonce = msg.toArray('be', bytes);
84283
84284 // Instantiate Hmac_DRBG
84285 var drbg = new elliptic.hmacDRBG({
84286 hash: this.hash,
84287 entropy: bkey,
84288 nonce: nonce,
84289 pers: options.pers,
84290 persEnc: options.persEnc
84291 });
84292
84293 // Number of bytes to generate
84294 var ns1 = this.n.sub(new BN(1));
84295
84296 for (var iter = 0; true; iter++) {
84297 var k = options.k ?
84298 options.k(iter) :
84299 new BN(drbg.generate(this.n.byteLength()));
84300 k = this._truncateToN(k, true);
84301 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
84302 continue;
84303
84304 var kp = this.g.mul(k);
84305 if (kp.isInfinity())
84306 continue;
84307
84308 var kpX = kp.getX();
84309 var r = kpX.umod(this.n);
84310 if (r.cmpn(0) === 0)
84311 continue;
84312
84313 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
84314 s = s.umod(this.n);
84315 if (s.cmpn(0) === 0)
84316 continue;
84317
84318 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
84319 (kpX.cmp(r) !== 0 ? 2 : 0);
84320
84321 // Use complement of `s`, if it is > `n / 2`
84322 if (options.canonical && s.cmp(this.nh) > 0) {
84323 s = this.n.sub(s);
84324 recoveryParam ^= 1;
84325 }
84326
84327 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
84328 }
84329 };
84330
84331 EC.prototype.verify = function verify(msg, signature, key, enc) {
84332 msg = this._truncateToN(new BN(msg, 16));
84333 key = this.keyFromPublic(key, enc);
84334 signature = new Signature(signature, 'hex');
84335
84336 // Perform primitive values validation
84337 var r = signature.r;
84338 var s = signature.s;
84339 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
84340 return false;
84341 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
84342 return false;
84343
84344 // Validate signature
84345 var sinv = s.invm(this.n);
84346 var u1 = sinv.mul(msg).umod(this.n);
84347 var u2 = sinv.mul(r).umod(this.n);
84348
84349 if (!this.curve._maxwellTrick) {
84350 var p = this.g.mulAdd(u1, key.getPublic(), u2);
84351 if (p.isInfinity())
84352 return false;
84353
84354 return p.getX().umod(this.n).cmp(r) === 0;
84355 }
84356
84357 // NOTE: Greg Maxwell's trick, inspired by:
84358 // https://git.io/vad3K
84359
84360 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
84361 if (p.isInfinity())
84362 return false;
84363
84364 // Compare `p.x` of Jacobian point with `r`,
84365 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
84366 // inverse of `p.z^2`
84367 return p.eqXToP(r);
84368 };
84369
84370 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
84371 assert((3 & j) === j, 'The recovery param is more than two bits');
84372 signature = new Signature(signature, enc);
84373
84374 var n = this.n;
84375 var e = new BN(msg);
84376 var r = signature.r;
84377 var s = signature.s;
84378
84379 // A set LSB signifies that the y-coordinate is odd
84380 var isYOdd = j & 1;
84381 var isSecondKey = j >> 1;
84382 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
84383 throw new Error('Unable to find sencond key candinate');
84384
84385 // 1.1. Let x = r + jn.
84386 if (isSecondKey)
84387 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
84388 else
84389 r = this.curve.pointFromX(r, isYOdd);
84390
84391 var rInv = signature.r.invm(n);
84392 var s1 = n.sub(e).mul(rInv).umod(n);
84393 var s2 = s.mul(rInv).umod(n);
84394
84395 // 1.6.1 Compute Q = r^-1 (sR - eG)
84396 // Q = r^-1 (sR + -eG)
84397 return this.g.mulAdd(s1, r, s2);
84398 };
84399
84400 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
84401 signature = new Signature(signature, enc);
84402 if (signature.recoveryParam !== null)
84403 return signature.recoveryParam;
84404
84405 for (var i = 0; i < 4; i++) {
84406 var Qprime;
84407 try {
84408 Qprime = this.recoverPubKey(e, signature, i);
84409 } catch (e) {
84410 continue;
84411 }
84412
84413 if (Qprime.eq(Q))
84414 return i;
84415 }
84416 throw new Error('Unable to find valid recovery factor');
84417 };
84418
84419 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
84420 'use strict';
84421
84422 var BN = require('bn.js');
84423 var elliptic = require('../../elliptic');
84424 var utils = elliptic.utils;
84425 var assert = utils.assert;
84426
84427 function KeyPair(ec, options) {
84428 this.ec = ec;
84429 this.priv = null;
84430 this.pub = null;
84431
84432 // KeyPair(ec, { priv: ..., pub: ... })
84433 if (options.priv)
84434 this._importPrivate(options.priv, options.privEnc);
84435 if (options.pub)
84436 this._importPublic(options.pub, options.pubEnc);
84437 }
84438 module.exports = KeyPair;
84439
84440 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
84441 if (pub instanceof KeyPair)
84442 return pub;
84443
84444 return new KeyPair(ec, {
84445 pub: pub,
84446 pubEnc: enc
84447 });
84448 };
84449
84450 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
84451 if (priv instanceof KeyPair)
84452 return priv;
84453
84454 return new KeyPair(ec, {
84455 priv: priv,
84456 privEnc: enc
84457 });
84458 };
84459
84460 KeyPair.prototype.validate = function validate() {
84461 var pub = this.getPublic();
84462
84463 if (pub.isInfinity())
84464 return { result: false, reason: 'Invalid public key' };
84465 if (!pub.validate())
84466 return { result: false, reason: 'Public key is not a point' };
84467 if (!pub.mul(this.ec.curve.n).isInfinity())
84468 return { result: false, reason: 'Public key * N != O' };
84469
84470 return { result: true, reason: null };
84471 };
84472
84473 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
84474 // compact is optional argument
84475 if (typeof compact === 'string') {
84476 enc = compact;
84477 compact = null;
84478 }
84479
84480 if (!this.pub)
84481 this.pub = this.ec.g.mul(this.priv);
84482
84483 if (!enc)
84484 return this.pub;
84485
84486 return this.pub.encode(enc, compact);
84487 };
84488
84489 KeyPair.prototype.getPrivate = function getPrivate(enc) {
84490 if (enc === 'hex')
84491 return this.priv.toString(16, 2);
84492 else
84493 return this.priv;
84494 };
84495
84496 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
84497 this.priv = new BN(key, enc || 16);
84498
84499 // Ensure that the priv won't be bigger than n, otherwise we may fail
84500 // in fixed multiplication method
84501 this.priv = this.priv.umod(this.ec.curve.n);
84502 };
84503
84504 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
84505 if (key.x || key.y) {
84506 // Montgomery points only have an `x` coordinate.
84507 // Weierstrass/Edwards points on the other hand have both `x` and
84508 // `y` coordinates.
84509 if (this.ec.curve.type === 'mont') {
84510 assert(key.x, 'Need x coordinate');
84511 } else if (this.ec.curve.type === 'short' ||
84512 this.ec.curve.type === 'edwards') {
84513 assert(key.x && key.y, 'Need both x and y coordinate');
84514 }
84515 this.pub = this.ec.curve.point(key.x, key.y);
84516 return;
84517 }
84518 this.pub = this.ec.curve.decodePoint(key, enc);
84519 };
84520
84521 // ECDH
84522 KeyPair.prototype.derive = function derive(pub) {
84523 return pub.mul(this.priv).getX();
84524 };
84525
84526 // ECDSA
84527 KeyPair.prototype.sign = function sign(msg, enc, options) {
84528 return this.ec.sign(msg, this, enc, options);
84529 };
84530
84531 KeyPair.prototype.verify = function verify(msg, signature) {
84532 return this.ec.verify(msg, signature, this);
84533 };
84534
84535 KeyPair.prototype.inspect = function inspect() {
84536 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
84537 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
84538 };
84539
84540 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
84541 'use strict';
84542
84543 var BN = require('bn.js');
84544
84545 var elliptic = require('../../elliptic');
84546 var utils = elliptic.utils;
84547 var assert = utils.assert;
84548
84549 function Signature(options, enc) {
84550 if (options instanceof Signature)
84551 return options;
84552
84553 if (this._importDER(options, enc))
84554 return;
84555
84556 assert(options.r && options.s, 'Signature without r or s');
84557 this.r = new BN(options.r, 16);
84558 this.s = new BN(options.s, 16);
84559 if (options.recoveryParam === undefined)
84560 this.recoveryParam = null;
84561 else
84562 this.recoveryParam = options.recoveryParam;
84563 }
84564 module.exports = Signature;
84565
84566 function Position() {
84567 this.place = 0;
84568 }
84569
84570 function getLength(buf, p) {
84571 var initial = buf[p.place++];
84572 if (!(initial & 0x80)) {
84573 return initial;
84574 }
84575 var octetLen = initial & 0xf;
84576 var val = 0;
84577 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
84578 val <<= 8;
84579 val |= buf[off];
84580 }
84581 p.place = off;
84582 return val;
84583 }
84584
84585 function rmPadding(buf) {
84586 var i = 0;
84587 var len = buf.length - 1;
84588 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
84589 i++;
84590 }
84591 if (i === 0) {
84592 return buf;
84593 }
84594 return buf.slice(i);
84595 }
84596
84597 Signature.prototype._importDER = function _importDER(data, enc) {
84598 data = utils.toArray(data, enc);
84599 var p = new Position();
84600 if (data[p.place++] !== 0x30) {
84601 return false;
84602 }
84603 var len = getLength(data, p);
84604 if ((len + p.place) !== data.length) {
84605 return false;
84606 }
84607 if (data[p.place++] !== 0x02) {
84608 return false;
84609 }
84610 var rlen = getLength(data, p);
84611 var r = data.slice(p.place, rlen + p.place);
84612 p.place += rlen;
84613 if (data[p.place++] !== 0x02) {
84614 return false;
84615 }
84616 var slen = getLength(data, p);
84617 if (data.length !== slen + p.place) {
84618 return false;
84619 }
84620 var s = data.slice(p.place, slen + p.place);
84621 if (r[0] === 0 && (r[1] & 0x80)) {
84622 r = r.slice(1);
84623 }
84624 if (s[0] === 0 && (s[1] & 0x80)) {
84625 s = s.slice(1);
84626 }
84627
84628 this.r = new BN(r);
84629 this.s = new BN(s);
84630 this.recoveryParam = null;
84631
84632 return true;
84633 };
84634
84635 function constructLength(arr, len) {
84636 if (len < 0x80) {
84637 arr.push(len);
84638 return;
84639 }
84640 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
84641 arr.push(octets | 0x80);
84642 while (--octets) {
84643 arr.push((len >>> (octets << 3)) & 0xff);
84644 }
84645 arr.push(len);
84646 }
84647
84648 Signature.prototype.toDER = function toDER(enc) {
84649 var r = this.r.toArray();
84650 var s = this.s.toArray();
84651
84652 // Pad values
84653 if (r[0] & 0x80)
84654 r = [ 0 ].concat(r);
84655 // Pad values
84656 if (s[0] & 0x80)
84657 s = [ 0 ].concat(s);
84658
84659 r = rmPadding(r);
84660 s = rmPadding(s);
84661
84662 while (!s[0] && !(s[1] & 0x80)) {
84663 s = s.slice(1);
84664 }
84665 var arr = [ 0x02 ];
84666 constructLength(arr, r.length);
84667 arr = arr.concat(r);
84668 arr.push(0x02);
84669 constructLength(arr, s.length);
84670 var backHalf = arr.concat(s);
84671 var res = [ 0x30 ];
84672 constructLength(res, backHalf.length);
84673 res = res.concat(backHalf);
84674 return utils.encode(res, enc);
84675 };
84676
84677 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
84678 'use strict';
84679
84680 var hash = require('hash.js');
84681 var elliptic = require('../../elliptic');
84682 var utils = elliptic.utils;
84683 var assert = utils.assert;
84684 var parseBytes = utils.parseBytes;
84685 var KeyPair = require('./key');
84686 var Signature = require('./signature');
84687
84688 function EDDSA(curve) {
84689 assert(curve === 'ed25519', 'only tested with ed25519 so far');
84690
84691 if (!(this instanceof EDDSA))
84692 return new EDDSA(curve);
84693
84694 var curve = elliptic.curves[curve].curve;
84695 this.curve = curve;
84696 this.g = curve.g;
84697 this.g.precompute(curve.n.bitLength() + 1);
84698
84699 this.pointClass = curve.point().constructor;
84700 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
84701 this.hash = hash.sha512;
84702 }
84703
84704 module.exports = EDDSA;
84705
84706 /**
84707 * @param {Array|String} message - message bytes
84708 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
84709 * @returns {Signature} - signature
84710 */
84711 EDDSA.prototype.sign = function sign(message, secret) {
84712 message = parseBytes(message);
84713 var key = this.keyFromSecret(secret);
84714 var r = this.hashInt(key.messagePrefix(), message);
84715 var R = this.g.mul(r);
84716 var Rencoded = this.encodePoint(R);
84717 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
84718 .mul(key.priv());
84719 var S = r.add(s_).umod(this.curve.n);
84720 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
84721 };
84722
84723 /**
84724 * @param {Array} message - message bytes
84725 * @param {Array|String|Signature} sig - sig bytes
84726 * @param {Array|String|Point|KeyPair} pub - public key
84727 * @returns {Boolean} - true if public key matches sig of message
84728 */
84729 EDDSA.prototype.verify = function verify(message, sig, pub) {
84730 message = parseBytes(message);
84731 sig = this.makeSignature(sig);
84732 var key = this.keyFromPublic(pub);
84733 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
84734 var SG = this.g.mul(sig.S());
84735 var RplusAh = sig.R().add(key.pub().mul(h));
84736 return RplusAh.eq(SG);
84737 };
84738
84739 EDDSA.prototype.hashInt = function hashInt() {
84740 var hash = this.hash();
84741 for (var i = 0; i < arguments.length; i++)
84742 hash.update(arguments[i]);
84743 return utils.intFromLE(hash.digest()).umod(this.curve.n);
84744 };
84745
84746 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
84747 return KeyPair.fromPublic(this, pub);
84748 };
84749
84750 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
84751 return KeyPair.fromSecret(this, secret);
84752 };
84753
84754 EDDSA.prototype.makeSignature = function makeSignature(sig) {
84755 if (sig instanceof Signature)
84756 return sig;
84757 return new Signature(this, sig);
84758 };
84759
84760 /**
84761 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
84762 *
84763 * EDDSA defines methods for encoding and decoding points and integers. These are
84764 * helper convenience methods, that pass along to utility functions implied
84765 * parameters.
84766 *
84767 */
84768 EDDSA.prototype.encodePoint = function encodePoint(point) {
84769 var enc = point.getY().toArray('le', this.encodingLength);
84770 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
84771 return enc;
84772 };
84773
84774 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
84775 bytes = utils.parseBytes(bytes);
84776
84777 var lastIx = bytes.length - 1;
84778 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
84779 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
84780
84781 var y = utils.intFromLE(normed);
84782 return this.curve.pointFromY(y, xIsOdd);
84783 };
84784
84785 EDDSA.prototype.encodeInt = function encodeInt(num) {
84786 return num.toArray('le', this.encodingLength);
84787 };
84788
84789 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
84790 return utils.intFromLE(bytes);
84791 };
84792
84793 EDDSA.prototype.isPoint = function isPoint(val) {
84794 return val instanceof this.pointClass;
84795 };
84796
84797 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
84798 'use strict';
84799
84800 var elliptic = require('../../elliptic');
84801 var utils = elliptic.utils;
84802 var assert = utils.assert;
84803 var parseBytes = utils.parseBytes;
84804 var cachedProperty = utils.cachedProperty;
84805
84806 /**
84807 * @param {EDDSA} eddsa - instance
84808 * @param {Object} params - public/private key parameters
84809 *
84810 * @param {Array<Byte>} [params.secret] - secret seed bytes
84811 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
84812 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
84813 *
84814 */
84815 function KeyPair(eddsa, params) {
84816 this.eddsa = eddsa;
84817 this._secret = parseBytes(params.secret);
84818 if (eddsa.isPoint(params.pub))
84819 this._pub = params.pub;
84820 else
84821 this._pubBytes = parseBytes(params.pub);
84822 }
84823
84824 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
84825 if (pub instanceof KeyPair)
84826 return pub;
84827 return new KeyPair(eddsa, { pub: pub });
84828 };
84829
84830 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
84831 if (secret instanceof KeyPair)
84832 return secret;
84833 return new KeyPair(eddsa, { secret: secret });
84834 };
84835
84836 KeyPair.prototype.secret = function secret() {
84837 return this._secret;
84838 };
84839
84840 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
84841 return this.eddsa.encodePoint(this.pub());
84842 });
84843
84844 cachedProperty(KeyPair, 'pub', function pub() {
84845 if (this._pubBytes)
84846 return this.eddsa.decodePoint(this._pubBytes);
84847 return this.eddsa.g.mul(this.priv());
84848 });
84849
84850 cachedProperty(KeyPair, 'privBytes', function privBytes() {
84851 var eddsa = this.eddsa;
84852 var hash = this.hash();
84853 var lastIx = eddsa.encodingLength - 1;
84854
84855 var a = hash.slice(0, eddsa.encodingLength);
84856 a[0] &= 248;
84857 a[lastIx] &= 127;
84858 a[lastIx] |= 64;
84859
84860 return a;
84861 });
84862
84863 cachedProperty(KeyPair, 'priv', function priv() {
84864 return this.eddsa.decodeInt(this.privBytes());
84865 });
84866
84867 cachedProperty(KeyPair, 'hash', function hash() {
84868 return this.eddsa.hash().update(this.secret()).digest();
84869 });
84870
84871 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
84872 return this.hash().slice(this.eddsa.encodingLength);
84873 });
84874
84875 KeyPair.prototype.sign = function sign(message) {
84876 assert(this._secret, 'KeyPair can only verify');
84877 return this.eddsa.sign(message, this);
84878 };
84879
84880 KeyPair.prototype.verify = function verify(message, sig) {
84881 return this.eddsa.verify(message, sig, this);
84882 };
84883
84884 KeyPair.prototype.getSecret = function getSecret(enc) {
84885 assert(this._secret, 'KeyPair is public only');
84886 return utils.encode(this.secret(), enc);
84887 };
84888
84889 KeyPair.prototype.getPublic = function getPublic(enc) {
84890 return utils.encode(this.pubBytes(), enc);
84891 };
84892
84893 module.exports = KeyPair;
84894
84895 },{"../../elliptic":39}],51:[function(require,module,exports){
84896 'use strict';
84897
84898 var BN = require('bn.js');
84899 var elliptic = require('../../elliptic');
84900 var utils = elliptic.utils;
84901 var assert = utils.assert;
84902 var cachedProperty = utils.cachedProperty;
84903 var parseBytes = utils.parseBytes;
84904
84905 /**
84906 * @param {EDDSA} eddsa - eddsa instance
84907 * @param {Array<Bytes>|Object} sig -
84908 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
84909 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
84910 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
84911 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
84912 */
84913 function Signature(eddsa, sig) {
84914 this.eddsa = eddsa;
84915
84916 if (typeof sig !== 'object')
84917 sig = parseBytes(sig);
84918
84919 if (Array.isArray(sig)) {
84920 sig = {
84921 R: sig.slice(0, eddsa.encodingLength),
84922 S: sig.slice(eddsa.encodingLength)
84923 };
84924 }
84925
84926 assert(sig.R && sig.S, 'Signature without R or S');
84927
84928 if (eddsa.isPoint(sig.R))
84929 this._R = sig.R;
84930 if (sig.S instanceof BN)
84931 this._S = sig.S;
84932
84933 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
84934 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
84935 }
84936
84937 cachedProperty(Signature, 'S', function S() {
84938 return this.eddsa.decodeInt(this.Sencoded());
84939 });
84940
84941 cachedProperty(Signature, 'R', function R() {
84942 return this.eddsa.decodePoint(this.Rencoded());
84943 });
84944
84945 cachedProperty(Signature, 'Rencoded', function Rencoded() {
84946 return this.eddsa.encodePoint(this.R());
84947 });
84948
84949 cachedProperty(Signature, 'Sencoded', function Sencoded() {
84950 return this.eddsa.encodeInt(this.S());
84951 });
84952
84953 Signature.prototype.toBytes = function toBytes() {
84954 return this.Rencoded().concat(this.Sencoded());
84955 };
84956
84957 Signature.prototype.toHex = function toHex() {
84958 return utils.encode(this.toBytes(), 'hex').toUpperCase();
84959 };
84960
84961 module.exports = Signature;
84962
84963 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
84964 'use strict';
84965
84966 var hash = require('hash.js');
84967 var elliptic = require('../elliptic');
84968 var utils = elliptic.utils;
84969 var assert = utils.assert;
84970
84971 function HmacDRBG(options) {
84972 if (!(this instanceof HmacDRBG))
84973 return new HmacDRBG(options);
84974 this.hash = options.hash;
84975 this.predResist = !!options.predResist;
84976
84977 this.outLen = this.hash.outSize;
84978 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
84979
84980 this.reseed = null;
84981 this.reseedInterval = null;
84982 this.K = null;
84983 this.V = null;
84984
84985 var entropy = utils.toArray(options.entropy, options.entropyEnc);
84986 var nonce = utils.toArray(options.nonce, options.nonceEnc);
84987 var pers = utils.toArray(options.pers, options.persEnc);
84988 assert(entropy.length >= (this.minEntropy / 8),
84989 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
84990 this._init(entropy, nonce, pers);
84991 }
84992 module.exports = HmacDRBG;
84993
84994 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
84995 var seed = entropy.concat(nonce).concat(pers);
84996
84997 this.K = new Array(this.outLen / 8);
84998 this.V = new Array(this.outLen / 8);
84999 for (var i = 0; i < this.V.length; i++) {
85000 this.K[i] = 0x00;
85001 this.V[i] = 0x01;
85002 }
85003
85004 this._update(seed);
85005 this.reseed = 1;
85006 this.reseedInterval = 0x1000000000000; // 2^48
85007 };
85008
85009 HmacDRBG.prototype._hmac = function hmac() {
85010 return new hash.hmac(this.hash, this.K);
85011 };
85012
85013 HmacDRBG.prototype._update = function update(seed) {
85014 var kmac = this._hmac()
85015 .update(this.V)
85016 .update([ 0x00 ]);
85017 if (seed)
85018 kmac = kmac.update(seed);
85019 this.K = kmac.digest();
85020 this.V = this._hmac().update(this.V).digest();
85021 if (!seed)
85022 return;
85023
85024 this.K = this._hmac()
85025 .update(this.V)
85026 .update([ 0x01 ])
85027 .update(seed)
85028 .digest();
85029 this.V = this._hmac().update(this.V).digest();
85030 };
85031
85032 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
85033 // Optional entropy enc
85034 if (typeof entropyEnc !== 'string') {
85035 addEnc = add;
85036 add = entropyEnc;
85037 entropyEnc = null;
85038 }
85039
85040 entropy = utils.toBuffer(entropy, entropyEnc);
85041 add = utils.toBuffer(add, addEnc);
85042
85043 assert(entropy.length >= (this.minEntropy / 8),
85044 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
85045
85046 this._update(entropy.concat(add || []));
85047 this.reseed = 1;
85048 };
85049
85050 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
85051 if (this.reseed > this.reseedInterval)
85052 throw new Error('Reseed is required');
85053
85054 // Optional encoding
85055 if (typeof enc !== 'string') {
85056 addEnc = add;
85057 add = enc;
85058 enc = null;
85059 }
85060
85061 // Optional additional data
85062 if (add) {
85063 add = utils.toArray(add, addEnc);
85064 this._update(add);
85065 }
85066
85067 var temp = [];
85068 while (temp.length < len) {
85069 this.V = this._hmac().update(this.V).digest();
85070 temp = temp.concat(this.V);
85071 }
85072
85073 var res = temp.slice(0, len);
85074 this._update(add);
85075 this.reseed++;
85076 return utils.encode(res, enc);
85077 };
85078
85079 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
85080 module.exports = {
85081 doubles: {
85082 step: 4,
85083 points: [
85084 [
85085 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
85086 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
85087 ],
85088 [
85089 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
85090 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
85091 ],
85092 [
85093 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
85094 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
85095 ],
85096 [
85097 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
85098 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
85099 ],
85100 [
85101 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
85102 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
85103 ],
85104 [
85105 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
85106 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
85107 ],
85108 [
85109 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
85110 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
85111 ],
85112 [
85113 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
85114 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
85115 ],
85116 [
85117 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
85118 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
85119 ],
85120 [
85121 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
85122 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
85123 ],
85124 [
85125 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
85126 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
85127 ],
85128 [
85129 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
85130 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
85131 ],
85132 [
85133 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
85134 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
85135 ],
85136 [
85137 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
85138 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
85139 ],
85140 [
85141 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
85142 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
85143 ],
85144 [
85145 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
85146 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
85147 ],
85148 [
85149 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
85150 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
85151 ],
85152 [
85153 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
85154 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
85155 ],
85156 [
85157 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
85158 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
85159 ],
85160 [
85161 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
85162 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
85163 ],
85164 [
85165 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
85166 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
85167 ],
85168 [
85169 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
85170 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
85171 ],
85172 [
85173 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
85174 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
85175 ],
85176 [
85177 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
85178 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
85179 ],
85180 [
85181 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
85182 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
85183 ],
85184 [
85185 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
85186 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
85187 ],
85188 [
85189 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
85190 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
85191 ],
85192 [
85193 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
85194 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
85195 ],
85196 [
85197 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
85198 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
85199 ],
85200 [
85201 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
85202 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
85203 ],
85204 [
85205 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
85206 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
85207 ],
85208 [
85209 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
85210 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
85211 ],
85212 [
85213 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
85214 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
85215 ],
85216 [
85217 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
85218 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
85219 ],
85220 [
85221 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
85222 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
85223 ],
85224 [
85225 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
85226 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
85227 ],
85228 [
85229 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
85230 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
85231 ],
85232 [
85233 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
85234 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
85235 ],
85236 [
85237 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
85238 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
85239 ],
85240 [
85241 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
85242 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
85243 ],
85244 [
85245 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
85246 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
85247 ],
85248 [
85249 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
85250 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
85251 ],
85252 [
85253 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
85254 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
85255 ],
85256 [
85257 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
85258 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
85259 ],
85260 [
85261 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
85262 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
85263 ],
85264 [
85265 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
85266 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
85267 ],
85268 [
85269 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
85270 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
85271 ],
85272 [
85273 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
85274 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
85275 ],
85276 [
85277 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
85278 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
85279 ],
85280 [
85281 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
85282 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
85283 ],
85284 [
85285 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
85286 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
85287 ],
85288 [
85289 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
85290 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
85291 ],
85292 [
85293 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
85294 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
85295 ],
85296 [
85297 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
85298 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
85299 ],
85300 [
85301 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
85302 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
85303 ],
85304 [
85305 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
85306 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
85307 ],
85308 [
85309 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
85310 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
85311 ],
85312 [
85313 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
85314 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
85315 ],
85316 [
85317 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
85318 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
85319 ],
85320 [
85321 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
85322 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
85323 ],
85324 [
85325 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
85326 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
85327 ],
85328 [
85329 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
85330 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
85331 ],
85332 [
85333 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
85334 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
85335 ],
85336 [
85337 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
85338 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
85339 ],
85340 [
85341 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
85342 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
85343 ]
85344 ]
85345 },
85346 naf: {
85347 wnd: 7,
85348 points: [
85349 [
85350 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
85351 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
85352 ],
85353 [
85354 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
85355 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
85356 ],
85357 [
85358 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
85359 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
85360 ],
85361 [
85362 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
85363 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
85364 ],
85365 [
85366 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
85367 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
85368 ],
85369 [
85370 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
85371 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
85372 ],
85373 [
85374 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
85375 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
85376 ],
85377 [
85378 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
85379 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
85380 ],
85381 [
85382 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
85383 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
85384 ],
85385 [
85386 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
85387 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
85388 ],
85389 [
85390 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
85391 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
85392 ],
85393 [
85394 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
85395 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
85396 ],
85397 [
85398 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
85399 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
85400 ],
85401 [
85402 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
85403 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
85404 ],
85405 [
85406 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
85407 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
85408 ],
85409 [
85410 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
85411 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
85412 ],
85413 [
85414 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
85415 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
85416 ],
85417 [
85418 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
85419 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
85420 ],
85421 [
85422 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
85423 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
85424 ],
85425 [
85426 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
85427 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
85428 ],
85429 [
85430 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
85431 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
85432 ],
85433 [
85434 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
85435 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
85436 ],
85437 [
85438 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
85439 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
85440 ],
85441 [
85442 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
85443 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
85444 ],
85445 [
85446 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
85447 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
85448 ],
85449 [
85450 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
85451 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
85452 ],
85453 [
85454 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
85455 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
85456 ],
85457 [
85458 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
85459 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
85460 ],
85461 [
85462 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
85463 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
85464 ],
85465 [
85466 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
85467 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
85468 ],
85469 [
85470 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
85471 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
85472 ],
85473 [
85474 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
85475 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
85476 ],
85477 [
85478 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
85479 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
85480 ],
85481 [
85482 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
85483 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
85484 ],
85485 [
85486 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
85487 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
85488 ],
85489 [
85490 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
85491 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
85492 ],
85493 [
85494 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
85495 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
85496 ],
85497 [
85498 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
85499 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
85500 ],
85501 [
85502 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
85503 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
85504 ],
85505 [
85506 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
85507 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
85508 ],
85509 [
85510 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
85511 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
85512 ],
85513 [
85514 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
85515 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
85516 ],
85517 [
85518 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
85519 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
85520 ],
85521 [
85522 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
85523 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
85524 ],
85525 [
85526 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
85527 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
85528 ],
85529 [
85530 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
85531 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
85532 ],
85533 [
85534 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
85535 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
85536 ],
85537 [
85538 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
85539 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
85540 ],
85541 [
85542 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
85543 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
85544 ],
85545 [
85546 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
85547 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
85548 ],
85549 [
85550 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
85551 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
85552 ],
85553 [
85554 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
85555 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
85556 ],
85557 [
85558 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
85559 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
85560 ],
85561 [
85562 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
85563 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
85564 ],
85565 [
85566 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
85567 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
85568 ],
85569 [
85570 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
85571 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
85572 ],
85573 [
85574 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
85575 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
85576 ],
85577 [
85578 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
85579 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
85580 ],
85581 [
85582 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
85583 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
85584 ],
85585 [
85586 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
85587 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
85588 ],
85589 [
85590 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
85591 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
85592 ],
85593 [
85594 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
85595 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
85596 ],
85597 [
85598 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
85599 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
85600 ],
85601 [
85602 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
85603 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
85604 ],
85605 [
85606 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
85607 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
85608 ],
85609 [
85610 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
85611 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
85612 ],
85613 [
85614 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
85615 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
85616 ],
85617 [
85618 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
85619 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
85620 ],
85621 [
85622 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
85623 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
85624 ],
85625 [
85626 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
85627 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
85628 ],
85629 [
85630 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
85631 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
85632 ],
85633 [
85634 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
85635 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
85636 ],
85637 [
85638 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
85639 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
85640 ],
85641 [
85642 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
85643 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
85644 ],
85645 [
85646 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
85647 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
85648 ],
85649 [
85650 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
85651 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
85652 ],
85653 [
85654 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
85655 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
85656 ],
85657 [
85658 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
85659 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
85660 ],
85661 [
85662 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
85663 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
85664 ],
85665 [
85666 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
85667 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
85668 ],
85669 [
85670 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
85671 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
85672 ],
85673 [
85674 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
85675 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
85676 ],
85677 [
85678 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
85679 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
85680 ],
85681 [
85682 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
85683 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
85684 ],
85685 [
85686 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
85687 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
85688 ],
85689 [
85690 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
85691 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
85692 ],
85693 [
85694 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
85695 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
85696 ],
85697 [
85698 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
85699 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
85700 ],
85701 [
85702 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
85703 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
85704 ],
85705 [
85706 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
85707 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
85708 ],
85709 [
85710 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
85711 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
85712 ],
85713 [
85714 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
85715 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
85716 ],
85717 [
85718 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
85719 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
85720 ],
85721 [
85722 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
85723 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
85724 ],
85725 [
85726 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
85727 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
85728 ],
85729 [
85730 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
85731 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
85732 ],
85733 [
85734 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
85735 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
85736 ],
85737 [
85738 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
85739 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
85740 ],
85741 [
85742 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
85743 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
85744 ],
85745 [
85746 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
85747 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
85748 ],
85749 [
85750 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
85751 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
85752 ],
85753 [
85754 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
85755 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
85756 ],
85757 [
85758 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
85759 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
85760 ],
85761 [
85762 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
85763 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
85764 ],
85765 [
85766 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
85767 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
85768 ],
85769 [
85770 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
85771 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
85772 ],
85773 [
85774 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
85775 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
85776 ],
85777 [
85778 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
85779 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
85780 ],
85781 [
85782 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
85783 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
85784 ],
85785 [
85786 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
85787 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
85788 ],
85789 [
85790 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
85791 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
85792 ],
85793 [
85794 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
85795 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
85796 ],
85797 [
85798 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
85799 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
85800 ],
85801 [
85802 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
85803 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
85804 ],
85805 [
85806 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
85807 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
85808 ],
85809 [
85810 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
85811 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
85812 ],
85813 [
85814 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
85815 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
85816 ],
85817 [
85818 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
85819 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
85820 ],
85821 [
85822 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
85823 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
85824 ],
85825 [
85826 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
85827 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
85828 ],
85829 [
85830 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
85831 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
85832 ],
85833 [
85834 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
85835 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
85836 ],
85837 [
85838 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
85839 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
85840 ],
85841 [
85842 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
85843 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
85844 ],
85845 [
85846 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
85847 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
85848 ],
85849 [
85850 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
85851 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
85852 ],
85853 [
85854 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
85855 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
85856 ]
85857 ]
85858 }
85859 };
85860
85861 },{}],54:[function(require,module,exports){
85862 'use strict';
85863
85864 var utils = exports;
85865 var BN = require('bn.js');
85866
85867 utils.assert = function assert(val, msg) {
85868 if (!val)
85869 throw new Error(msg || 'Assertion failed');
85870 };
85871
85872 function toArray(msg, enc) {
85873 if (Array.isArray(msg))
85874 return msg.slice();
85875 if (!msg)
85876 return [];
85877 var res = [];
85878 if (typeof msg !== 'string') {
85879 for (var i = 0; i < msg.length; i++)
85880 res[i] = msg[i] | 0;
85881 return res;
85882 }
85883 if (!enc) {
85884 for (var i = 0; i < msg.length; i++) {
85885 var c = msg.charCodeAt(i);
85886 var hi = c >> 8;
85887 var lo = c & 0xff;
85888 if (hi)
85889 res.push(hi, lo);
85890 else
85891 res.push(lo);
85892 }
85893 } else if (enc === 'hex') {
85894 msg = msg.replace(/[^a-z0-9]+/ig, '');
85895 if (msg.length % 2 !== 0)
85896 msg = '0' + msg;
85897 for (var i = 0; i < msg.length; i += 2)
85898 res.push(parseInt(msg[i] + msg[i + 1], 16));
85899 }
85900 return res;
85901 }
85902 utils.toArray = toArray;
85903
85904 function zero2(word) {
85905 if (word.length === 1)
85906 return '0' + word;
85907 else
85908 return word;
85909 }
85910 utils.zero2 = zero2;
85911
85912 function toHex(msg) {
85913 var res = '';
85914 for (var i = 0; i < msg.length; i++)
85915 res += zero2(msg[i].toString(16));
85916 return res;
85917 }
85918 utils.toHex = toHex;
85919
85920 utils.encode = function encode(arr, enc) {
85921 if (enc === 'hex')
85922 return toHex(arr);
85923 else
85924 return arr;
85925 };
85926
85927 // Represent num in a w-NAF form
85928 function getNAF(num, w) {
85929 var naf = [];
85930 var ws = 1 << (w + 1);
85931 var k = num.clone();
85932 while (k.cmpn(1) >= 0) {
85933 var z;
85934 if (k.isOdd()) {
85935 var mod = k.andln(ws - 1);
85936 if (mod > (ws >> 1) - 1)
85937 z = (ws >> 1) - mod;
85938 else
85939 z = mod;
85940 k.isubn(z);
85941 } else {
85942 z = 0;
85943 }
85944 naf.push(z);
85945
85946 // Optimization, shift by word if possible
85947 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
85948 for (var i = 1; i < shift; i++)
85949 naf.push(0);
85950 k.iushrn(shift);
85951 }
85952
85953 return naf;
85954 }
85955 utils.getNAF = getNAF;
85956
85957 // Represent k1, k2 in a Joint Sparse Form
85958 function getJSF(k1, k2) {
85959 var jsf = [
85960 [],
85961 []
85962 ];
85963
85964 k1 = k1.clone();
85965 k2 = k2.clone();
85966 var d1 = 0;
85967 var d2 = 0;
85968 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
85969
85970 // First phase
85971 var m14 = (k1.andln(3) + d1) & 3;
85972 var m24 = (k2.andln(3) + d2) & 3;
85973 if (m14 === 3)
85974 m14 = -1;
85975 if (m24 === 3)
85976 m24 = -1;
85977 var u1;
85978 if ((m14 & 1) === 0) {
85979 u1 = 0;
85980 } else {
85981 var m8 = (k1.andln(7) + d1) & 7;
85982 if ((m8 === 3 || m8 === 5) && m24 === 2)
85983 u1 = -m14;
85984 else
85985 u1 = m14;
85986 }
85987 jsf[0].push(u1);
85988
85989 var u2;
85990 if ((m24 & 1) === 0) {
85991 u2 = 0;
85992 } else {
85993 var m8 = (k2.andln(7) + d2) & 7;
85994 if ((m8 === 3 || m8 === 5) && m14 === 2)
85995 u2 = -m24;
85996 else
85997 u2 = m24;
85998 }
85999 jsf[1].push(u2);
86000
86001 // Second phase
86002 if (2 * d1 === u1 + 1)
86003 d1 = 1 - d1;
86004 if (2 * d2 === u2 + 1)
86005 d2 = 1 - d2;
86006 k1.iushrn(1);
86007 k2.iushrn(1);
86008 }
86009
86010 return jsf;
86011 }
86012 utils.getJSF = getJSF;
86013
86014 function cachedProperty(obj, name, computer) {
86015 var key = '_' + name;
86016 obj.prototype[name] = function cachedProperty() {
86017 return this[key] !== undefined ? this[key] :
86018 this[key] = computer.call(this);
86019 };
86020 }
86021 utils.cachedProperty = cachedProperty;
86022
86023 function parseBytes(bytes) {
86024 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
86025 bytes;
86026 }
86027 utils.parseBytes = parseBytes;
86028
86029 function intFromLE(bytes) {
86030 return new BN(bytes, 'hex', 'le');
86031 }
86032 utils.intFromLE = intFromLE;
86033
86034
86035 },{"bn.js":33}],55:[function(require,module,exports){
86036 module.exports={
86037 "_args": [
86038 [
86039 {
86040 "raw": "elliptic@^6.2.3",
86041 "scope": null,
86042 "escapedName": "elliptic",
86043 "name": "elliptic",
86044 "rawSpec": "^6.2.3",
86045 "spec": ">=6.2.3 <7.0.0",
86046 "type": "range"
86047 },
86048 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
86049 ]
86050 ],
86051 "_from": "elliptic@>=6.2.3 <7.0.0",
86052 "_id": "elliptic@6.3.3",
86053 "_inCache": true,
86054 "_location": "/elliptic",
86055 "_nodeVersion": "7.0.0",
86056 "_npmOperationalInternal": {
86057 "host": "packages-18-east.internal.npmjs.com",
86058 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
86059 },
86060 "_npmUser": {
86061 "name": "indutny",
86062 "email": "fedor@indutny.com"
86063 },
86064 "_npmVersion": "3.10.8",
86065 "_phantomChildren": {},
86066 "_requested": {
86067 "raw": "elliptic@^6.2.3",
86068 "scope": null,
86069 "escapedName": "elliptic",
86070 "name": "elliptic",
86071 "rawSpec": "^6.2.3",
86072 "spec": ">=6.2.3 <7.0.0",
86073 "type": "range"
86074 },
86075 "_requiredBy": [
86076 "/browserify-sign",
86077 "/create-ecdh",
86078 "/secp256k1"
86079 ],
86080 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
86081 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86082 "_shrinkwrap": null,
86083 "_spec": "elliptic@^6.2.3",
86084 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
86085 "author": {
86086 "name": "Fedor Indutny",
86087 "email": "fedor@indutny.com"
86088 },
86089 "bugs": {
86090 "url": "https://github.com/indutny/elliptic/issues"
86091 },
86092 "dependencies": {
86093 "bn.js": "^4.4.0",
86094 "brorand": "^1.0.1",
86095 "hash.js": "^1.0.0",
86096 "inherits": "^2.0.1"
86097 },
86098 "description": "EC cryptography",
86099 "devDependencies": {
86100 "brfs": "^1.4.3",
86101 "coveralls": "^2.11.3",
86102 "grunt": "^0.4.5",
86103 "grunt-browserify": "^5.0.0",
86104 "grunt-cli": "^1.2.0",
86105 "grunt-contrib-connect": "^1.0.0",
86106 "grunt-contrib-copy": "^1.0.0",
86107 "grunt-contrib-uglify": "^1.0.1",
86108 "grunt-mocha-istanbul": "^3.0.1",
86109 "grunt-saucelabs": "^8.6.2",
86110 "istanbul": "^0.4.2",
86111 "jscs": "^2.9.0",
86112 "jshint": "^2.6.0",
86113 "mocha": "^2.1.0"
86114 },
86115 "directories": {},
86116 "dist": {
86117 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86118 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
86119 },
86120 "files": [
86121 "lib"
86122 ],
86123 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
86124 "homepage": "https://github.com/indutny/elliptic",
86125 "keywords": [
86126 "EC",
86127 "Elliptic",
86128 "curve",
86129 "Cryptography"
86130 ],
86131 "license": "MIT",
86132 "main": "lib/elliptic.js",
86133 "maintainers": [
86134 {
86135 "name": "indutny",
86136 "email": "fedor@indutny.com"
86137 }
86138 ],
86139 "name": "elliptic",
86140 "optionalDependencies": {},
86141 "readme": "ERROR: No README data found!",
86142 "repository": {
86143 "type": "git",
86144 "url": "git+ssh://git@github.com/indutny/elliptic.git"
86145 },
86146 "scripts": {
86147 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86148 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86149 "lint": "npm run jscs && npm run jshint",
86150 "test": "npm run lint && npm run unit",
86151 "unit": "istanbul test _mocha --reporter=spec test/index.js",
86152 "version": "grunt dist && git add dist/"
86153 },
86154 "version": "6.3.3"
86155 }
86156
86157 },{}],56:[function(require,module,exports){
86158 (function (Buffer){
86159 'use strict';
86160
86161 var isHexPrefixed = require('is-hex-prefixed');
86162 var stripHexPrefix = require('strip-hex-prefix');
86163
86164 /**
86165 * Pads a `String` to have an even length
86166 * @param {String} value
86167 * @return {String} output
86168 */
86169 function padToEven(value) {
86170 var a = value; // eslint-disable-line
86171
86172 if (typeof a !== 'string') {
86173 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
86174 }
86175
86176 if (a.length % 2) {
86177 a = '0' + a;
86178 }
86179
86180 return a;
86181 }
86182
86183 /**
86184 * Converts a `Number` into a hex `String`
86185 * @param {Number} i
86186 * @return {String}
86187 */
86188 function intToHex(i) {
86189 var hex = i.toString(16); // eslint-disable-line
86190
86191 return '0x' + padToEven(hex);
86192 }
86193
86194 /**
86195 * Converts an `Number` to a `Buffer`
86196 * @param {Number} i
86197 * @return {Buffer}
86198 */
86199 function intToBuffer(i) {
86200 var hex = intToHex(i);
86201
86202 return new Buffer(hex.slice(2), 'hex');
86203 }
86204
86205 /**
86206 * Get the binary size of a string
86207 * @param {String} str
86208 * @return {Number}
86209 */
86210 function getBinarySize(str) {
86211 if (typeof str !== 'string') {
86212 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
86213 }
86214
86215 return Buffer.byteLength(str, 'utf8');
86216 }
86217
86218 /**
86219 * Returns TRUE if the first specified array contains all elements
86220 * from the second one. FALSE otherwise.
86221 *
86222 * @param {array} superset
86223 * @param {array} subset
86224 *
86225 * @returns {boolean}
86226 */
86227 function arrayContainsArray(superset, subset, some) {
86228 if (Array.isArray(superset) !== true) {
86229 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
86230 }
86231 if (Array.isArray(subset) !== true) {
86232 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
86233 }
86234
86235 return subset[Boolean(some) && 'some' || 'every'](function (value) {
86236 return superset.indexOf(value) >= 0;
86237 });
86238 }
86239
86240 /**
86241 * Should be called to get utf8 from it's hex representation
86242 *
86243 * @method toUtf8
86244 * @param {String} string in hex
86245 * @returns {String} ascii string representation of hex value
86246 */
86247 function toUtf8(hex) {
86248 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
86249
86250 return bufferValue.toString('utf8');
86251 }
86252
86253 /**
86254 * Should be called to get ascii from it's hex representation
86255 *
86256 * @method toAscii
86257 * @param {String} string in hex
86258 * @returns {String} ascii string representation of hex value
86259 */
86260 function toAscii(hex) {
86261 var str = ''; // eslint-disable-line
86262 var i = 0,
86263 l = hex.length; // eslint-disable-line
86264
86265 if (hex.substring(0, 2) === '0x') {
86266 i = 2;
86267 }
86268
86269 for (; i < l; i += 2) {
86270 var code = parseInt(hex.substr(i, 2), 16);
86271 str += String.fromCharCode(code);
86272 }
86273
86274 return str;
86275 }
86276
86277 /**
86278 * Should be called to get hex representation (prefixed by 0x) of utf8 string
86279 *
86280 * @method fromUtf8
86281 * @param {String} string
86282 * @param {Number} optional padding
86283 * @returns {String} hex representation of input string
86284 */
86285 function fromUtf8(stringValue) {
86286 var str = new Buffer(stringValue, 'utf8');
86287
86288 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
86289 }
86290
86291 /**
86292 * Should be called to get hex representation (prefixed by 0x) of ascii string
86293 *
86294 * @method fromAscii
86295 * @param {String} string
86296 * @param {Number} optional padding
86297 * @returns {String} hex representation of input string
86298 */
86299 function fromAscii(stringValue) {
86300 var hex = ''; // eslint-disable-line
86301 for (var i = 0; i < stringValue.length; i++) {
86302 // eslint-disable-line
86303 var code = stringValue.charCodeAt(i);
86304 var n = code.toString(16);
86305 hex += n.length < 2 ? '0' + n : n;
86306 }
86307
86308 return '0x' + hex;
86309 }
86310
86311 /**
86312 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
86313 *
86314 * @method getKeys get specific key from inner object array of objects
86315 * @param {String} params
86316 * @param {String} key
86317 * @param {Boolean} allowEmpty
86318 * @returns {Array} output just a simple array of output keys
86319 */
86320 function getKeys(params, key, allowEmpty) {
86321 if (!Array.isArray(params)) {
86322 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
86323 }
86324 if (typeof key !== 'string') {
86325 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
86326 }
86327
86328 var result = []; // eslint-disable-line
86329
86330 for (var i = 0; i < params.length; i++) {
86331 // eslint-disable-line
86332 var value = params[i][key]; // eslint-disable-line
86333 if (allowEmpty && !value) {
86334 value = '';
86335 } else if (typeof value !== 'string') {
86336 throw new Error('invalid abi');
86337 }
86338 result.push(value);
86339 }
86340
86341 return result;
86342 }
86343
86344 /**
86345 * Is the string a hex string.
86346 *
86347 * @method check if string is hex string of specific length
86348 * @param {String} value
86349 * @param {Number} length
86350 * @returns {Boolean} output the string is a hex string
86351 */
86352 function isHexString(value, length) {
86353 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
86354 return false;
86355 }
86356
86357 if (length && value.length !== 2 + 2 * length) {
86358 return false;
86359 }
86360
86361 return true;
86362 }
86363
86364 module.exports = {
86365 arrayContainsArray: arrayContainsArray,
86366 intToBuffer: intToBuffer,
86367 getBinarySize: getBinarySize,
86368 isHexPrefixed: isHexPrefixed,
86369 stripHexPrefix: stripHexPrefix,
86370 padToEven: padToEven,
86371 intToHex: intToHex,
86372 fromAscii: fromAscii,
86373 fromUtf8: fromUtf8,
86374 toAscii: toAscii,
86375 toUtf8: toUtf8,
86376 getKeys: getKeys,
86377 isHexString: isHexString
86378 };
86379 }).call(this,require("buffer").Buffer)
86380 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
86381 var hash = exports;
86382
86383 hash.utils = require('./hash/utils');
86384 hash.common = require('./hash/common');
86385 hash.sha = require('./hash/sha');
86386 hash.ripemd = require('./hash/ripemd');
86387 hash.hmac = require('./hash/hmac');
86388
86389 // Proxy hash functions to the main object
86390 hash.sha1 = hash.sha.sha1;
86391 hash.sha256 = hash.sha.sha256;
86392 hash.sha224 = hash.sha.sha224;
86393 hash.sha384 = hash.sha.sha384;
86394 hash.sha512 = hash.sha.sha512;
86395 hash.ripemd160 = hash.ripemd.ripemd160;
86396
86397 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
86398 var hash = require('../hash');
86399 var utils = hash.utils;
86400 var assert = utils.assert;
86401
86402 function BlockHash() {
86403 this.pending = null;
86404 this.pendingTotal = 0;
86405 this.blockSize = this.constructor.blockSize;
86406 this.outSize = this.constructor.outSize;
86407 this.hmacStrength = this.constructor.hmacStrength;
86408 this.padLength = this.constructor.padLength / 8;
86409 this.endian = 'big';
86410
86411 this._delta8 = this.blockSize / 8;
86412 this._delta32 = this.blockSize / 32;
86413 }
86414 exports.BlockHash = BlockHash;
86415
86416 BlockHash.prototype.update = function update(msg, enc) {
86417 // Convert message to array, pad it, and join into 32bit blocks
86418 msg = utils.toArray(msg, enc);
86419 if (!this.pending)
86420 this.pending = msg;
86421 else
86422 this.pending = this.pending.concat(msg);
86423 this.pendingTotal += msg.length;
86424
86425 // Enough data, try updating
86426 if (this.pending.length >= this._delta8) {
86427 msg = this.pending;
86428
86429 // Process pending data in blocks
86430 var r = msg.length % this._delta8;
86431 this.pending = msg.slice(msg.length - r, msg.length);
86432 if (this.pending.length === 0)
86433 this.pending = null;
86434
86435 msg = utils.join32(msg, 0, msg.length - r, this.endian);
86436 for (var i = 0; i < msg.length; i += this._delta32)
86437 this._update(msg, i, i + this._delta32);
86438 }
86439
86440 return this;
86441 };
86442
86443 BlockHash.prototype.digest = function digest(enc) {
86444 this.update(this._pad());
86445 assert(this.pending === null);
86446
86447 return this._digest(enc);
86448 };
86449
86450 BlockHash.prototype._pad = function pad() {
86451 var len = this.pendingTotal;
86452 var bytes = this._delta8;
86453 var k = bytes - ((len + this.padLength) % bytes);
86454 var res = new Array(k + this.padLength);
86455 res[0] = 0x80;
86456 for (var i = 1; i < k; i++)
86457 res[i] = 0;
86458
86459 // Append length
86460 len <<= 3;
86461 if (this.endian === 'big') {
86462 for (var t = 8; t < this.padLength; t++)
86463 res[i++] = 0;
86464
86465 res[i++] = 0;
86466 res[i++] = 0;
86467 res[i++] = 0;
86468 res[i++] = 0;
86469 res[i++] = (len >>> 24) & 0xff;
86470 res[i++] = (len >>> 16) & 0xff;
86471 res[i++] = (len >>> 8) & 0xff;
86472 res[i++] = len & 0xff;
86473 } else {
86474 res[i++] = len & 0xff;
86475 res[i++] = (len >>> 8) & 0xff;
86476 res[i++] = (len >>> 16) & 0xff;
86477 res[i++] = (len >>> 24) & 0xff;
86478 res[i++] = 0;
86479 res[i++] = 0;
86480 res[i++] = 0;
86481 res[i++] = 0;
86482
86483 for (var t = 8; t < this.padLength; t++)
86484 res[i++] = 0;
86485 }
86486
86487 return res;
86488 };
86489
86490 },{"../hash":57}],59:[function(require,module,exports){
86491 var hmac = exports;
86492
86493 var hash = require('../hash');
86494 var utils = hash.utils;
86495 var assert = utils.assert;
86496
86497 function Hmac(hash, key, enc) {
86498 if (!(this instanceof Hmac))
86499 return new Hmac(hash, key, enc);
86500 this.Hash = hash;
86501 this.blockSize = hash.blockSize / 8;
86502 this.outSize = hash.outSize / 8;
86503 this.inner = null;
86504 this.outer = null;
86505
86506 this._init(utils.toArray(key, enc));
86507 }
86508 module.exports = Hmac;
86509
86510 Hmac.prototype._init = function init(key) {
86511 // Shorten key, if needed
86512 if (key.length > this.blockSize)
86513 key = new this.Hash().update(key).digest();
86514 assert(key.length <= this.blockSize);
86515
86516 // Add padding to key
86517 for (var i = key.length; i < this.blockSize; i++)
86518 key.push(0);
86519
86520 for (var i = 0; i < key.length; i++)
86521 key[i] ^= 0x36;
86522 this.inner = new this.Hash().update(key);
86523
86524 // 0x36 ^ 0x5c = 0x6a
86525 for (var i = 0; i < key.length; i++)
86526 key[i] ^= 0x6a;
86527 this.outer = new this.Hash().update(key);
86528 };
86529
86530 Hmac.prototype.update = function update(msg, enc) {
86531 this.inner.update(msg, enc);
86532 return this;
86533 };
86534
86535 Hmac.prototype.digest = function digest(enc) {
86536 this.outer.update(this.inner.digest());
86537 return this.outer.digest(enc);
86538 };
86539
86540 },{"../hash":57}],60:[function(require,module,exports){
86541 var hash = require('../hash');
86542 var utils = hash.utils;
86543
86544 var rotl32 = utils.rotl32;
86545 var sum32 = utils.sum32;
86546 var sum32_3 = utils.sum32_3;
86547 var sum32_4 = utils.sum32_4;
86548 var BlockHash = hash.common.BlockHash;
86549
86550 function RIPEMD160() {
86551 if (!(this instanceof RIPEMD160))
86552 return new RIPEMD160();
86553
86554 BlockHash.call(this);
86555
86556 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
86557 this.endian = 'little';
86558 }
86559 utils.inherits(RIPEMD160, BlockHash);
86560 exports.ripemd160 = RIPEMD160;
86561
86562 RIPEMD160.blockSize = 512;
86563 RIPEMD160.outSize = 160;
86564 RIPEMD160.hmacStrength = 192;
86565 RIPEMD160.padLength = 64;
86566
86567 RIPEMD160.prototype._update = function update(msg, start) {
86568 var A = this.h[0];
86569 var B = this.h[1];
86570 var C = this.h[2];
86571 var D = this.h[3];
86572 var E = this.h[4];
86573 var Ah = A;
86574 var Bh = B;
86575 var Ch = C;
86576 var Dh = D;
86577 var Eh = E;
86578 for (var j = 0; j < 80; j++) {
86579 var T = sum32(
86580 rotl32(
86581 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
86582 s[j]),
86583 E);
86584 A = E;
86585 E = D;
86586 D = rotl32(C, 10);
86587 C = B;
86588 B = T;
86589 T = sum32(
86590 rotl32(
86591 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
86592 sh[j]),
86593 Eh);
86594 Ah = Eh;
86595 Eh = Dh;
86596 Dh = rotl32(Ch, 10);
86597 Ch = Bh;
86598 Bh = T;
86599 }
86600 T = sum32_3(this.h[1], C, Dh);
86601 this.h[1] = sum32_3(this.h[2], D, Eh);
86602 this.h[2] = sum32_3(this.h[3], E, Ah);
86603 this.h[3] = sum32_3(this.h[4], A, Bh);
86604 this.h[4] = sum32_3(this.h[0], B, Ch);
86605 this.h[0] = T;
86606 };
86607
86608 RIPEMD160.prototype._digest = function digest(enc) {
86609 if (enc === 'hex')
86610 return utils.toHex32(this.h, 'little');
86611 else
86612 return utils.split32(this.h, 'little');
86613 };
86614
86615 function f(j, x, y, z) {
86616 if (j <= 15)
86617 return x ^ y ^ z;
86618 else if (j <= 31)
86619 return (x & y) | ((~x) & z);
86620 else if (j <= 47)
86621 return (x | (~y)) ^ z;
86622 else if (j <= 63)
86623 return (x & z) | (y & (~z));
86624 else
86625 return x ^ (y | (~z));
86626 }
86627
86628 function K(j) {
86629 if (j <= 15)
86630 return 0x00000000;
86631 else if (j <= 31)
86632 return 0x5a827999;
86633 else if (j <= 47)
86634 return 0x6ed9eba1;
86635 else if (j <= 63)
86636 return 0x8f1bbcdc;
86637 else
86638 return 0xa953fd4e;
86639 }
86640
86641 function Kh(j) {
86642 if (j <= 15)
86643 return 0x50a28be6;
86644 else if (j <= 31)
86645 return 0x5c4dd124;
86646 else if (j <= 47)
86647 return 0x6d703ef3;
86648 else if (j <= 63)
86649 return 0x7a6d76e9;
86650 else
86651 return 0x00000000;
86652 }
86653
86654 var r = [
86655 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
86656 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
86657 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
86658 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
86659 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
86660 ];
86661
86662 var rh = [
86663 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
86664 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
86665 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
86666 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
86667 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
86668 ];
86669
86670 var s = [
86671 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
86672 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
86673 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
86674 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
86675 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
86676 ];
86677
86678 var sh = [
86679 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
86680 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
86681 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
86682 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
86683 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
86684 ];
86685
86686 },{"../hash":57}],61:[function(require,module,exports){
86687 var hash = require('../hash');
86688 var utils = hash.utils;
86689 var assert = utils.assert;
86690
86691 var rotr32 = utils.rotr32;
86692 var rotl32 = utils.rotl32;
86693 var sum32 = utils.sum32;
86694 var sum32_4 = utils.sum32_4;
86695 var sum32_5 = utils.sum32_5;
86696 var rotr64_hi = utils.rotr64_hi;
86697 var rotr64_lo = utils.rotr64_lo;
86698 var shr64_hi = utils.shr64_hi;
86699 var shr64_lo = utils.shr64_lo;
86700 var sum64 = utils.sum64;
86701 var sum64_hi = utils.sum64_hi;
86702 var sum64_lo = utils.sum64_lo;
86703 var sum64_4_hi = utils.sum64_4_hi;
86704 var sum64_4_lo = utils.sum64_4_lo;
86705 var sum64_5_hi = utils.sum64_5_hi;
86706 var sum64_5_lo = utils.sum64_5_lo;
86707 var BlockHash = hash.common.BlockHash;
86708
86709 var sha256_K = [
86710 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
86711 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
86712 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
86713 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
86714 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
86715 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
86716 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
86717 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
86718 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
86719 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
86720 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
86721 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
86722 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
86723 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
86724 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
86725 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
86726 ];
86727
86728 var sha512_K = [
86729 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
86730 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
86731 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
86732 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
86733 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
86734 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
86735 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
86736 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
86737 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
86738 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
86739 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
86740 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
86741 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
86742 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
86743 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
86744 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
86745 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
86746 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
86747 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
86748 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
86749 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
86750 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
86751 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
86752 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
86753 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
86754 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
86755 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
86756 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
86757 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
86758 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
86759 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
86760 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
86761 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
86762 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
86763 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
86764 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
86765 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
86766 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
86767 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
86768 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
86769 ];
86770
86771 var sha1_K = [
86772 0x5A827999, 0x6ED9EBA1,
86773 0x8F1BBCDC, 0xCA62C1D6
86774 ];
86775
86776 function SHA256() {
86777 if (!(this instanceof SHA256))
86778 return new SHA256();
86779
86780 BlockHash.call(this);
86781 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
86782 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
86783 this.k = sha256_K;
86784 this.W = new Array(64);
86785 }
86786 utils.inherits(SHA256, BlockHash);
86787 exports.sha256 = SHA256;
86788
86789 SHA256.blockSize = 512;
86790 SHA256.outSize = 256;
86791 SHA256.hmacStrength = 192;
86792 SHA256.padLength = 64;
86793
86794 SHA256.prototype._update = function _update(msg, start) {
86795 var W = this.W;
86796
86797 for (var i = 0; i < 16; i++)
86798 W[i] = msg[start + i];
86799 for (; i < W.length; i++)
86800 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
86801
86802 var a = this.h[0];
86803 var b = this.h[1];
86804 var c = this.h[2];
86805 var d = this.h[3];
86806 var e = this.h[4];
86807 var f = this.h[5];
86808 var g = this.h[6];
86809 var h = this.h[7];
86810
86811 assert(this.k.length === W.length);
86812 for (var i = 0; i < W.length; i++) {
86813 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
86814 var T2 = sum32(s0_256(a), maj32(a, b, c));
86815 h = g;
86816 g = f;
86817 f = e;
86818 e = sum32(d, T1);
86819 d = c;
86820 c = b;
86821 b = a;
86822 a = sum32(T1, T2);
86823 }
86824
86825 this.h[0] = sum32(this.h[0], a);
86826 this.h[1] = sum32(this.h[1], b);
86827 this.h[2] = sum32(this.h[2], c);
86828 this.h[3] = sum32(this.h[3], d);
86829 this.h[4] = sum32(this.h[4], e);
86830 this.h[5] = sum32(this.h[5], f);
86831 this.h[6] = sum32(this.h[6], g);
86832 this.h[7] = sum32(this.h[7], h);
86833 };
86834
86835 SHA256.prototype._digest = function digest(enc) {
86836 if (enc === 'hex')
86837 return utils.toHex32(this.h, 'big');
86838 else
86839 return utils.split32(this.h, 'big');
86840 };
86841
86842 function SHA224() {
86843 if (!(this instanceof SHA224))
86844 return new SHA224();
86845
86846 SHA256.call(this);
86847 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
86848 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
86849 }
86850 utils.inherits(SHA224, SHA256);
86851 exports.sha224 = SHA224;
86852
86853 SHA224.blockSize = 512;
86854 SHA224.outSize = 224;
86855 SHA224.hmacStrength = 192;
86856 SHA224.padLength = 64;
86857
86858 SHA224.prototype._digest = function digest(enc) {
86859 // Just truncate output
86860 if (enc === 'hex')
86861 return utils.toHex32(this.h.slice(0, 7), 'big');
86862 else
86863 return utils.split32(this.h.slice(0, 7), 'big');
86864 };
86865
86866 function SHA512() {
86867 if (!(this instanceof SHA512))
86868 return new SHA512();
86869
86870 BlockHash.call(this);
86871 this.h = [ 0x6a09e667, 0xf3bcc908,
86872 0xbb67ae85, 0x84caa73b,
86873 0x3c6ef372, 0xfe94f82b,
86874 0xa54ff53a, 0x5f1d36f1,
86875 0x510e527f, 0xade682d1,
86876 0x9b05688c, 0x2b3e6c1f,
86877 0x1f83d9ab, 0xfb41bd6b,
86878 0x5be0cd19, 0x137e2179 ];
86879 this.k = sha512_K;
86880 this.W = new Array(160);
86881 }
86882 utils.inherits(SHA512, BlockHash);
86883 exports.sha512 = SHA512;
86884
86885 SHA512.blockSize = 1024;
86886 SHA512.outSize = 512;
86887 SHA512.hmacStrength = 192;
86888 SHA512.padLength = 128;
86889
86890 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
86891 var W = this.W;
86892
86893 // 32 x 32bit words
86894 for (var i = 0; i < 32; i++)
86895 W[i] = msg[start + i];
86896 for (; i < W.length; i += 2) {
86897 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
86898 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
86899 var c1_hi = W[i - 14]; // i - 7
86900 var c1_lo = W[i - 13];
86901 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
86902 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
86903 var c3_hi = W[i - 32]; // i - 16
86904 var c3_lo = W[i - 31];
86905
86906 W[i] = sum64_4_hi(c0_hi, c0_lo,
86907 c1_hi, c1_lo,
86908 c2_hi, c2_lo,
86909 c3_hi, c3_lo);
86910 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
86911 c1_hi, c1_lo,
86912 c2_hi, c2_lo,
86913 c3_hi, c3_lo);
86914 }
86915 };
86916
86917 SHA512.prototype._update = function _update(msg, start) {
86918 this._prepareBlock(msg, start);
86919
86920 var W = this.W;
86921
86922 var ah = this.h[0];
86923 var al = this.h[1];
86924 var bh = this.h[2];
86925 var bl = this.h[3];
86926 var ch = this.h[4];
86927 var cl = this.h[5];
86928 var dh = this.h[6];
86929 var dl = this.h[7];
86930 var eh = this.h[8];
86931 var el = this.h[9];
86932 var fh = this.h[10];
86933 var fl = this.h[11];
86934 var gh = this.h[12];
86935 var gl = this.h[13];
86936 var hh = this.h[14];
86937 var hl = this.h[15];
86938
86939 assert(this.k.length === W.length);
86940 for (var i = 0; i < W.length; i += 2) {
86941 var c0_hi = hh;
86942 var c0_lo = hl;
86943 var c1_hi = s1_512_hi(eh, el);
86944 var c1_lo = s1_512_lo(eh, el);
86945 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
86946 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
86947 var c3_hi = this.k[i];
86948 var c3_lo = this.k[i + 1];
86949 var c4_hi = W[i];
86950 var c4_lo = W[i + 1];
86951
86952 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
86953 c1_hi, c1_lo,
86954 c2_hi, c2_lo,
86955 c3_hi, c3_lo,
86956 c4_hi, c4_lo);
86957 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
86958 c1_hi, c1_lo,
86959 c2_hi, c2_lo,
86960 c3_hi, c3_lo,
86961 c4_hi, c4_lo);
86962
86963 var c0_hi = s0_512_hi(ah, al);
86964 var c0_lo = s0_512_lo(ah, al);
86965 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
86966 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
86967
86968 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
86969 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
86970
86971 hh = gh;
86972 hl = gl;
86973
86974 gh = fh;
86975 gl = fl;
86976
86977 fh = eh;
86978 fl = el;
86979
86980 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
86981 el = sum64_lo(dl, dl, T1_hi, T1_lo);
86982
86983 dh = ch;
86984 dl = cl;
86985
86986 ch = bh;
86987 cl = bl;
86988
86989 bh = ah;
86990 bl = al;
86991
86992 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
86993 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
86994 }
86995
86996 sum64(this.h, 0, ah, al);
86997 sum64(this.h, 2, bh, bl);
86998 sum64(this.h, 4, ch, cl);
86999 sum64(this.h, 6, dh, dl);
87000 sum64(this.h, 8, eh, el);
87001 sum64(this.h, 10, fh, fl);
87002 sum64(this.h, 12, gh, gl);
87003 sum64(this.h, 14, hh, hl);
87004 };
87005
87006 SHA512.prototype._digest = function digest(enc) {
87007 if (enc === 'hex')
87008 return utils.toHex32(this.h, 'big');
87009 else
87010 return utils.split32(this.h, 'big');
87011 };
87012
87013 function SHA384() {
87014 if (!(this instanceof SHA384))
87015 return new SHA384();
87016
87017 SHA512.call(this);
87018 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
87019 0x629a292a, 0x367cd507,
87020 0x9159015a, 0x3070dd17,
87021 0x152fecd8, 0xf70e5939,
87022 0x67332667, 0xffc00b31,
87023 0x8eb44a87, 0x68581511,
87024 0xdb0c2e0d, 0x64f98fa7,
87025 0x47b5481d, 0xbefa4fa4 ];
87026 }
87027 utils.inherits(SHA384, SHA512);
87028 exports.sha384 = SHA384;
87029
87030 SHA384.blockSize = 1024;
87031 SHA384.outSize = 384;
87032 SHA384.hmacStrength = 192;
87033 SHA384.padLength = 128;
87034
87035 SHA384.prototype._digest = function digest(enc) {
87036 if (enc === 'hex')
87037 return utils.toHex32(this.h.slice(0, 12), 'big');
87038 else
87039 return utils.split32(this.h.slice(0, 12), 'big');
87040 };
87041
87042 function SHA1() {
87043 if (!(this instanceof SHA1))
87044 return new SHA1();
87045
87046 BlockHash.call(this);
87047 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
87048 0x10325476, 0xc3d2e1f0 ];
87049 this.W = new Array(80);
87050 }
87051
87052 utils.inherits(SHA1, BlockHash);
87053 exports.sha1 = SHA1;
87054
87055 SHA1.blockSize = 512;
87056 SHA1.outSize = 160;
87057 SHA1.hmacStrength = 80;
87058 SHA1.padLength = 64;
87059
87060 SHA1.prototype._update = function _update(msg, start) {
87061 var W = this.W;
87062
87063 for (var i = 0; i < 16; i++)
87064 W[i] = msg[start + i];
87065
87066 for(; i < W.length; i++)
87067 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
87068
87069 var a = this.h[0];
87070 var b = this.h[1];
87071 var c = this.h[2];
87072 var d = this.h[3];
87073 var e = this.h[4];
87074
87075 for (var i = 0; i < W.length; i++) {
87076 var s = ~~(i / 20);
87077 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
87078 e = d;
87079 d = c;
87080 c = rotl32(b, 30);
87081 b = a;
87082 a = t;
87083 }
87084
87085 this.h[0] = sum32(this.h[0], a);
87086 this.h[1] = sum32(this.h[1], b);
87087 this.h[2] = sum32(this.h[2], c);
87088 this.h[3] = sum32(this.h[3], d);
87089 this.h[4] = sum32(this.h[4], e);
87090 };
87091
87092 SHA1.prototype._digest = function digest(enc) {
87093 if (enc === 'hex')
87094 return utils.toHex32(this.h, 'big');
87095 else
87096 return utils.split32(this.h, 'big');
87097 };
87098
87099 function ch32(x, y, z) {
87100 return (x & y) ^ ((~x) & z);
87101 }
87102
87103 function maj32(x, y, z) {
87104 return (x & y) ^ (x & z) ^ (y & z);
87105 }
87106
87107 function p32(x, y, z) {
87108 return x ^ y ^ z;
87109 }
87110
87111 function s0_256(x) {
87112 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
87113 }
87114
87115 function s1_256(x) {
87116 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
87117 }
87118
87119 function g0_256(x) {
87120 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
87121 }
87122
87123 function g1_256(x) {
87124 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
87125 }
87126
87127 function ft_1(s, x, y, z) {
87128 if (s === 0)
87129 return ch32(x, y, z);
87130 if (s === 1 || s === 3)
87131 return p32(x, y, z);
87132 if (s === 2)
87133 return maj32(x, y, z);
87134 }
87135
87136 function ch64_hi(xh, xl, yh, yl, zh, zl) {
87137 var r = (xh & yh) ^ ((~xh) & zh);
87138 if (r < 0)
87139 r += 0x100000000;
87140 return r;
87141 }
87142
87143 function ch64_lo(xh, xl, yh, yl, zh, zl) {
87144 var r = (xl & yl) ^ ((~xl) & zl);
87145 if (r < 0)
87146 r += 0x100000000;
87147 return r;
87148 }
87149
87150 function maj64_hi(xh, xl, yh, yl, zh, zl) {
87151 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
87152 if (r < 0)
87153 r += 0x100000000;
87154 return r;
87155 }
87156
87157 function maj64_lo(xh, xl, yh, yl, zh, zl) {
87158 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
87159 if (r < 0)
87160 r += 0x100000000;
87161 return r;
87162 }
87163
87164 function s0_512_hi(xh, xl) {
87165 var c0_hi = rotr64_hi(xh, xl, 28);
87166 var c1_hi = rotr64_hi(xl, xh, 2); // 34
87167 var c2_hi = rotr64_hi(xl, xh, 7); // 39
87168
87169 var r = c0_hi ^ c1_hi ^ c2_hi;
87170 if (r < 0)
87171 r += 0x100000000;
87172 return r;
87173 }
87174
87175 function s0_512_lo(xh, xl) {
87176 var c0_lo = rotr64_lo(xh, xl, 28);
87177 var c1_lo = rotr64_lo(xl, xh, 2); // 34
87178 var c2_lo = rotr64_lo(xl, xh, 7); // 39
87179
87180 var r = c0_lo ^ c1_lo ^ c2_lo;
87181 if (r < 0)
87182 r += 0x100000000;
87183 return r;
87184 }
87185
87186 function s1_512_hi(xh, xl) {
87187 var c0_hi = rotr64_hi(xh, xl, 14);
87188 var c1_hi = rotr64_hi(xh, xl, 18);
87189 var c2_hi = rotr64_hi(xl, xh, 9); // 41
87190
87191 var r = c0_hi ^ c1_hi ^ c2_hi;
87192 if (r < 0)
87193 r += 0x100000000;
87194 return r;
87195 }
87196
87197 function s1_512_lo(xh, xl) {
87198 var c0_lo = rotr64_lo(xh, xl, 14);
87199 var c1_lo = rotr64_lo(xh, xl, 18);
87200 var c2_lo = rotr64_lo(xl, xh, 9); // 41
87201
87202 var r = c0_lo ^ c1_lo ^ c2_lo;
87203 if (r < 0)
87204 r += 0x100000000;
87205 return r;
87206 }
87207
87208 function g0_512_hi(xh, xl) {
87209 var c0_hi = rotr64_hi(xh, xl, 1);
87210 var c1_hi = rotr64_hi(xh, xl, 8);
87211 var c2_hi = shr64_hi(xh, xl, 7);
87212
87213 var r = c0_hi ^ c1_hi ^ c2_hi;
87214 if (r < 0)
87215 r += 0x100000000;
87216 return r;
87217 }
87218
87219 function g0_512_lo(xh, xl) {
87220 var c0_lo = rotr64_lo(xh, xl, 1);
87221 var c1_lo = rotr64_lo(xh, xl, 8);
87222 var c2_lo = shr64_lo(xh, xl, 7);
87223
87224 var r = c0_lo ^ c1_lo ^ c2_lo;
87225 if (r < 0)
87226 r += 0x100000000;
87227 return r;
87228 }
87229
87230 function g1_512_hi(xh, xl) {
87231 var c0_hi = rotr64_hi(xh, xl, 19);
87232 var c1_hi = rotr64_hi(xl, xh, 29); // 61
87233 var c2_hi = shr64_hi(xh, xl, 6);
87234
87235 var r = c0_hi ^ c1_hi ^ c2_hi;
87236 if (r < 0)
87237 r += 0x100000000;
87238 return r;
87239 }
87240
87241 function g1_512_lo(xh, xl) {
87242 var c0_lo = rotr64_lo(xh, xl, 19);
87243 var c1_lo = rotr64_lo(xl, xh, 29); // 61
87244 var c2_lo = shr64_lo(xh, xl, 6);
87245
87246 var r = c0_lo ^ c1_lo ^ c2_lo;
87247 if (r < 0)
87248 r += 0x100000000;
87249 return r;
87250 }
87251
87252 },{"../hash":57}],62:[function(require,module,exports){
87253 var utils = exports;
87254 var inherits = require('inherits');
87255
87256 function toArray(msg, enc) {
87257 if (Array.isArray(msg))
87258 return msg.slice();
87259 if (!msg)
87260 return [];
87261 var res = [];
87262 if (typeof msg === 'string') {
87263 if (!enc) {
87264 for (var i = 0; i < msg.length; i++) {
87265 var c = msg.charCodeAt(i);
87266 var hi = c >> 8;
87267 var lo = c & 0xff;
87268 if (hi)
87269 res.push(hi, lo);
87270 else
87271 res.push(lo);
87272 }
87273 } else if (enc === 'hex') {
87274 msg = msg.replace(/[^a-z0-9]+/ig, '');
87275 if (msg.length % 2 !== 0)
87276 msg = '0' + msg;
87277 for (var i = 0; i < msg.length; i += 2)
87278 res.push(parseInt(msg[i] + msg[i + 1], 16));
87279 }
87280 } else {
87281 for (var i = 0; i < msg.length; i++)
87282 res[i] = msg[i] | 0;
87283 }
87284 return res;
87285 }
87286 utils.toArray = toArray;
87287
87288 function toHex(msg) {
87289 var res = '';
87290 for (var i = 0; i < msg.length; i++)
87291 res += zero2(msg[i].toString(16));
87292 return res;
87293 }
87294 utils.toHex = toHex;
87295
87296 function htonl(w) {
87297 var res = (w >>> 24) |
87298 ((w >>> 8) & 0xff00) |
87299 ((w << 8) & 0xff0000) |
87300 ((w & 0xff) << 24);
87301 return res >>> 0;
87302 }
87303 utils.htonl = htonl;
87304
87305 function toHex32(msg, endian) {
87306 var res = '';
87307 for (var i = 0; i < msg.length; i++) {
87308 var w = msg[i];
87309 if (endian === 'little')
87310 w = htonl(w);
87311 res += zero8(w.toString(16));
87312 }
87313 return res;
87314 }
87315 utils.toHex32 = toHex32;
87316
87317 function zero2(word) {
87318 if (word.length === 1)
87319 return '0' + word;
87320 else
87321 return word;
87322 }
87323 utils.zero2 = zero2;
87324
87325 function zero8(word) {
87326 if (word.length === 7)
87327 return '0' + word;
87328 else if (word.length === 6)
87329 return '00' + word;
87330 else if (word.length === 5)
87331 return '000' + word;
87332 else if (word.length === 4)
87333 return '0000' + word;
87334 else if (word.length === 3)
87335 return '00000' + word;
87336 else if (word.length === 2)
87337 return '000000' + word;
87338 else if (word.length === 1)
87339 return '0000000' + word;
87340 else
87341 return word;
87342 }
87343 utils.zero8 = zero8;
87344
87345 function join32(msg, start, end, endian) {
87346 var len = end - start;
87347 assert(len % 4 === 0);
87348 var res = new Array(len / 4);
87349 for (var i = 0, k = start; i < res.length; i++, k += 4) {
87350 var w;
87351 if (endian === 'big')
87352 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
87353 else
87354 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
87355 res[i] = w >>> 0;
87356 }
87357 return res;
87358 }
87359 utils.join32 = join32;
87360
87361 function split32(msg, endian) {
87362 var res = new Array(msg.length * 4);
87363 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
87364 var m = msg[i];
87365 if (endian === 'big') {
87366 res[k] = m >>> 24;
87367 res[k + 1] = (m >>> 16) & 0xff;
87368 res[k + 2] = (m >>> 8) & 0xff;
87369 res[k + 3] = m & 0xff;
87370 } else {
87371 res[k + 3] = m >>> 24;
87372 res[k + 2] = (m >>> 16) & 0xff;
87373 res[k + 1] = (m >>> 8) & 0xff;
87374 res[k] = m & 0xff;
87375 }
87376 }
87377 return res;
87378 }
87379 utils.split32 = split32;
87380
87381 function rotr32(w, b) {
87382 return (w >>> b) | (w << (32 - b));
87383 }
87384 utils.rotr32 = rotr32;
87385
87386 function rotl32(w, b) {
87387 return (w << b) | (w >>> (32 - b));
87388 }
87389 utils.rotl32 = rotl32;
87390
87391 function sum32(a, b) {
87392 return (a + b) >>> 0;
87393 }
87394 utils.sum32 = sum32;
87395
87396 function sum32_3(a, b, c) {
87397 return (a + b + c) >>> 0;
87398 }
87399 utils.sum32_3 = sum32_3;
87400
87401 function sum32_4(a, b, c, d) {
87402 return (a + b + c + d) >>> 0;
87403 }
87404 utils.sum32_4 = sum32_4;
87405
87406 function sum32_5(a, b, c, d, e) {
87407 return (a + b + c + d + e) >>> 0;
87408 }
87409 utils.sum32_5 = sum32_5;
87410
87411 function assert(cond, msg) {
87412 if (!cond)
87413 throw new Error(msg || 'Assertion failed');
87414 }
87415 utils.assert = assert;
87416
87417 utils.inherits = inherits;
87418
87419 function sum64(buf, pos, ah, al) {
87420 var bh = buf[pos];
87421 var bl = buf[pos + 1];
87422
87423 var lo = (al + bl) >>> 0;
87424 var hi = (lo < al ? 1 : 0) + ah + bh;
87425 buf[pos] = hi >>> 0;
87426 buf[pos + 1] = lo;
87427 }
87428 exports.sum64 = sum64;
87429
87430 function sum64_hi(ah, al, bh, bl) {
87431 var lo = (al + bl) >>> 0;
87432 var hi = (lo < al ? 1 : 0) + ah + bh;
87433 return hi >>> 0;
87434 };
87435 exports.sum64_hi = sum64_hi;
87436
87437 function sum64_lo(ah, al, bh, bl) {
87438 var lo = al + bl;
87439 return lo >>> 0;
87440 };
87441 exports.sum64_lo = sum64_lo;
87442
87443 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
87444 var carry = 0;
87445 var lo = al;
87446 lo = (lo + bl) >>> 0;
87447 carry += lo < al ? 1 : 0;
87448 lo = (lo + cl) >>> 0;
87449 carry += lo < cl ? 1 : 0;
87450 lo = (lo + dl) >>> 0;
87451 carry += lo < dl ? 1 : 0;
87452
87453 var hi = ah + bh + ch + dh + carry;
87454 return hi >>> 0;
87455 };
87456 exports.sum64_4_hi = sum64_4_hi;
87457
87458 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
87459 var lo = al + bl + cl + dl;
87460 return lo >>> 0;
87461 };
87462 exports.sum64_4_lo = sum64_4_lo;
87463
87464 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87465 var carry = 0;
87466 var lo = al;
87467 lo = (lo + bl) >>> 0;
87468 carry += lo < al ? 1 : 0;
87469 lo = (lo + cl) >>> 0;
87470 carry += lo < cl ? 1 : 0;
87471 lo = (lo + dl) >>> 0;
87472 carry += lo < dl ? 1 : 0;
87473 lo = (lo + el) >>> 0;
87474 carry += lo < el ? 1 : 0;
87475
87476 var hi = ah + bh + ch + dh + eh + carry;
87477 return hi >>> 0;
87478 };
87479 exports.sum64_5_hi = sum64_5_hi;
87480
87481 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87482 var lo = al + bl + cl + dl + el;
87483
87484 return lo >>> 0;
87485 };
87486 exports.sum64_5_lo = sum64_5_lo;
87487
87488 function rotr64_hi(ah, al, num) {
87489 var r = (al << (32 - num)) | (ah >>> num);
87490 return r >>> 0;
87491 };
87492 exports.rotr64_hi = rotr64_hi;
87493
87494 function rotr64_lo(ah, al, num) {
87495 var r = (ah << (32 - num)) | (al >>> num);
87496 return r >>> 0;
87497 };
87498 exports.rotr64_lo = rotr64_lo;
87499
87500 function shr64_hi(ah, al, num) {
87501 return ah >>> num;
87502 };
87503 exports.shr64_hi = shr64_hi;
87504
87505 function shr64_lo(ah, al, num) {
87506 var r = (ah << (32 - num)) | (al >>> num);
87507 return r >>> 0;
87508 };
87509 exports.shr64_lo = shr64_lo;
87510
87511 },{"inherits":63}],63:[function(require,module,exports){
87512 arguments[4][9][0].apply(exports,arguments)
87513 },{"dup":9}],64:[function(require,module,exports){
87514 /**
87515 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
87516 * @param {String} str the string input value
87517 * @return {Boolean} a boolean if it is or is not hex prefixed
87518 * @throws if the str input is not a string
87519 */
87520 module.exports = function isHexPrefixed(str) {
87521 if (typeof str !== 'string') {
87522 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
87523 }
87524
87525 return str.slice(0, 2) === '0x';
87526 }
87527
87528 },{}],65:[function(require,module,exports){
87529 'use strict'
87530 module.exports = require('./lib/api')(require('./lib/keccak'))
87531
87532 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
87533 'use strict'
87534 var createKeccak = require('./keccak')
87535 var createShake = require('./shake')
87536
87537 module.exports = function (KeccakState) {
87538 var Keccak = createKeccak(KeccakState)
87539 var Shake = createShake(KeccakState)
87540
87541 return function (algorithm, options) {
87542 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
87543 switch (hash) {
87544 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
87545 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
87546 case 'keccak384': return new Keccak(832, 768, null, 384, options)
87547 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
87548
87549 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
87550 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
87551 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
87552 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
87553
87554 case 'shake128': return new Shake(1344, 256, 0x1f, options)
87555 case 'shake256': return new Shake(1088, 512, 0x1f, options)
87556
87557 default: throw new Error('Invald algorithm: ' + algorithm)
87558 }
87559 }
87560 }
87561
87562 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
87563 (function (Buffer){
87564 'use strict'
87565 var Transform = require('stream').Transform
87566 var inherits = require('inherits')
87567
87568 module.exports = function (KeccakState) {
87569 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
87570 Transform.call(this, options)
87571
87572 this._rate = rate
87573 this._capacity = capacity
87574 this._delimitedSuffix = delimitedSuffix
87575 this._hashBitLength = hashBitLength
87576 this._options = options
87577
87578 this._state = new KeccakState()
87579 this._state.initialize(rate, capacity)
87580 this._finalized = false
87581 }
87582
87583 inherits(Keccak, Transform)
87584
87585 Keccak.prototype._transform = function (chunk, encoding, callback) {
87586 var error = null
87587 try {
87588 this.update(chunk, encoding)
87589 } catch (err) {
87590 error = err
87591 }
87592
87593 callback(error)
87594 }
87595
87596 Keccak.prototype._flush = function (callback) {
87597 var error = null
87598 try {
87599 this.push(this.digest())
87600 } catch (err) {
87601 error = err
87602 }
87603
87604 callback(error)
87605 }
87606
87607 Keccak.prototype.update = function (data, encoding) {
87608 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87609 if (this._finalized) throw new Error('Digest already called')
87610 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87611
87612 this._state.absorb(data)
87613
87614 return this
87615 }
87616
87617 Keccak.prototype.digest = function (encoding) {
87618 if (this._finalized) throw new Error('Digest already called')
87619 this._finalized = true
87620
87621 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
87622 var digest = this._state.squeeze(this._hashBitLength / 8)
87623 if (encoding !== undefined) digest = digest.toString(encoding)
87624
87625 this._resetState()
87626
87627 return digest
87628 }
87629
87630 // remove result from memory
87631 Keccak.prototype._resetState = function () {
87632 this._state.initialize(this._rate, this._capacity)
87633 return this
87634 }
87635
87636 // because sometimes we need hash right now and little later
87637 Keccak.prototype._clone = function () {
87638 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
87639 this._state.copy(clone._state)
87640 clone._finalized = this._finalized
87641
87642 return clone
87643 }
87644
87645 return Keccak
87646 }
87647
87648 }).call(this,require("buffer").Buffer)
87649 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
87650 (function (Buffer){
87651 'use strict'
87652 var Transform = require('stream').Transform
87653 var inherits = require('inherits')
87654
87655 module.exports = function (KeccakState) {
87656 function Shake (rate, capacity, delimitedSuffix, options) {
87657 Transform.call(this, options)
87658
87659 this._rate = rate
87660 this._capacity = capacity
87661 this._delimitedSuffix = delimitedSuffix
87662 this._options = options
87663
87664 this._state = new KeccakState()
87665 this._state.initialize(rate, capacity)
87666 this._finalized = false
87667 }
87668
87669 inherits(Shake, Transform)
87670
87671 Shake.prototype._transform = function (chunk, encoding, callback) {
87672 var error = null
87673 try {
87674 this.update(chunk, encoding)
87675 } catch (err) {
87676 error = err
87677 }
87678
87679 callback(error)
87680 }
87681
87682 Shake.prototype._flush = function () {}
87683
87684 Shake.prototype._read = function (size) {
87685 this.push(this.squeeze(size))
87686 }
87687
87688 Shake.prototype.update = function (data, encoding) {
87689 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87690 if (this._finalized) throw new Error('Squeeze already called')
87691 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87692
87693 this._state.absorb(data)
87694
87695 return this
87696 }
87697
87698 Shake.prototype.squeeze = function (dataByteLength, encoding) {
87699 if (!this._finalized) {
87700 this._finalized = true
87701 this._state.absorbLastFewBits(this._delimitedSuffix)
87702 }
87703
87704 var data = this._state.squeeze(dataByteLength)
87705 if (encoding !== undefined) data = data.toString(encoding)
87706
87707 return data
87708 }
87709
87710 Shake.prototype._resetState = function () {
87711 this._state.initialize(this._rate, this._capacity)
87712 return this
87713 }
87714
87715 Shake.prototype._clone = function () {
87716 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
87717 this._state.copy(clone._state)
87718 clone._finalized = this._finalized
87719
87720 return clone
87721 }
87722
87723 return Shake
87724 }
87725
87726 }).call(this,require("buffer").Buffer)
87727 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
87728 'use strict'
87729 var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
87730
87731 exports.p1600 = function (s) {
87732 for (var round = 0; round < 24; ++round) {
87733 // theta
87734 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
87735 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
87736 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
87737 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
87738 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
87739 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
87740 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
87741 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
87742 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
87743 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
87744
87745 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
87746 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
87747 var t1slo0 = s[0] ^ lo
87748 var t1shi0 = s[1] ^ hi
87749 var t1slo5 = s[10] ^ lo
87750 var t1shi5 = s[11] ^ hi
87751 var t1slo10 = s[20] ^ lo
87752 var t1shi10 = s[21] ^ hi
87753 var t1slo15 = s[30] ^ lo
87754 var t1shi15 = s[31] ^ hi
87755 var t1slo20 = s[40] ^ lo
87756 var t1shi20 = s[41] ^ hi
87757 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
87758 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
87759 var t1slo1 = s[2] ^ lo
87760 var t1shi1 = s[3] ^ hi
87761 var t1slo6 = s[12] ^ lo
87762 var t1shi6 = s[13] ^ hi
87763 var t1slo11 = s[22] ^ lo
87764 var t1shi11 = s[23] ^ hi
87765 var t1slo16 = s[32] ^ lo
87766 var t1shi16 = s[33] ^ hi
87767 var t1slo21 = s[42] ^ lo
87768 var t1shi21 = s[43] ^ hi
87769 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
87770 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
87771 var t1slo2 = s[4] ^ lo
87772 var t1shi2 = s[5] ^ hi
87773 var t1slo7 = s[14] ^ lo
87774 var t1shi7 = s[15] ^ hi
87775 var t1slo12 = s[24] ^ lo
87776 var t1shi12 = s[25] ^ hi
87777 var t1slo17 = s[34] ^ lo
87778 var t1shi17 = s[35] ^ hi
87779 var t1slo22 = s[44] ^ lo
87780 var t1shi22 = s[45] ^ hi
87781 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
87782 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
87783 var t1slo3 = s[6] ^ lo
87784 var t1shi3 = s[7] ^ hi
87785 var t1slo8 = s[16] ^ lo
87786 var t1shi8 = s[17] ^ hi
87787 var t1slo13 = s[26] ^ lo
87788 var t1shi13 = s[27] ^ hi
87789 var t1slo18 = s[36] ^ lo
87790 var t1shi18 = s[37] ^ hi
87791 var t1slo23 = s[46] ^ lo
87792 var t1shi23 = s[47] ^ hi
87793 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
87794 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
87795 var t1slo4 = s[8] ^ lo
87796 var t1shi4 = s[9] ^ hi
87797 var t1slo9 = s[18] ^ lo
87798 var t1shi9 = s[19] ^ hi
87799 var t1slo14 = s[28] ^ lo
87800 var t1shi14 = s[29] ^ hi
87801 var t1slo19 = s[38] ^ lo
87802 var t1shi19 = s[39] ^ hi
87803 var t1slo24 = s[48] ^ lo
87804 var t1shi24 = s[49] ^ hi
87805
87806 // rho & pi
87807 var t2slo0 = t1slo0
87808 var t2shi0 = t1shi0
87809 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
87810 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
87811 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
87812 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
87813 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
87814 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
87815 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
87816 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
87817 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
87818 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
87819 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
87820 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
87821 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
87822 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
87823 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
87824 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
87825 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
87826 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
87827 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
87828 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
87829 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
87830 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
87831 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
87832 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
87833 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
87834 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
87835 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
87836 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
87837 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
87838 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
87839 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
87840 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
87841 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
87842 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
87843 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
87844 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
87845 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
87846 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
87847 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
87848 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
87849 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
87850 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
87851 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
87852 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
87853 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
87854 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
87855 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
87856 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
87857
87858 // chi
87859 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
87860 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
87861 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
87862 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
87863 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
87864 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
87865 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
87866 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
87867 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
87868 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
87869 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
87870 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
87871 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
87872 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
87873 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
87874 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
87875 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
87876 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
87877 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
87878 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
87879 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
87880 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
87881 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
87882 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
87883 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
87884 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
87885 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
87886 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
87887 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
87888 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
87889 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
87890 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
87891 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
87892 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
87893 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
87894 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
87895 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
87896 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
87897 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
87898 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
87899 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
87900 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
87901 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
87902 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
87903 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
87904 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
87905 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
87906 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
87907 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
87908 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
87909
87910 // iota
87911 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
87912 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
87913 }
87914 }
87915
87916 },{}],70:[function(require,module,exports){
87917 (function (Buffer){
87918 'use strict'
87919 var keccakState = require('./keccak-state-unroll')
87920
87921 function Keccak () {
87922 // much faster than `new Array(50)`
87923 this.state = [
87924 0, 0, 0, 0, 0,
87925 0, 0, 0, 0, 0,
87926 0, 0, 0, 0, 0,
87927 0, 0, 0, 0, 0,
87928 0, 0, 0, 0, 0
87929 ]
87930
87931 this.blockSize = null
87932 this.count = 0
87933 this.squeezing = false
87934 }
87935
87936 Keccak.prototype.initialize = function (rate, capacity) {
87937 for (var i = 0; i < 50; ++i) this.state[i] = 0
87938 this.blockSize = rate / 8
87939 this.count = 0
87940 this.squeezing = false
87941 }
87942
87943 Keccak.prototype.absorb = function (data) {
87944 for (var i = 0; i < data.length; ++i) {
87945 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
87946 this.count += 1
87947 if (this.count === this.blockSize) {
87948 keccakState.p1600(this.state)
87949 this.count = 0
87950 }
87951 }
87952 }
87953
87954 Keccak.prototype.absorbLastFewBits = function (bits) {
87955 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
87956 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
87957 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
87958 keccakState.p1600(this.state)
87959 this.count = 0
87960 this.squeezing = true
87961 }
87962
87963 Keccak.prototype.squeeze = function (length) {
87964 if (!this.squeezing) this.absorbLastFewBits(0x01)
87965
87966 var output = Buffer.allocUnsafe(length)
87967 for (var i = 0; i < length; ++i) {
87968 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
87969 this.count += 1
87970 if (this.count === this.blockSize) {
87971 keccakState.p1600(this.state)
87972 this.count = 0
87973 }
87974 }
87975
87976 return output
87977 }
87978
87979 Keccak.prototype.copy = function (dest) {
87980 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
87981 dest.blockSize = this.blockSize
87982 dest.count = this.count
87983 dest.squeezing = this.squeezing
87984 }
87985
87986 module.exports = Keccak
87987
87988 }).call(this,require("buffer").Buffer)
87989 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
87990 (function (Buffer){
87991 /*
87992 CryptoJS v3.1.2
87993 code.google.com/p/crypto-js
87994 (c) 2009-2013 by Jeff Mott. All rights reserved.
87995 code.google.com/p/crypto-js/wiki/License
87996 */
87997 /** @preserve
87998 (c) 2012 by Cédric Mesnil. All rights reserved.
87999
88000 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
88001
88002 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
88003 - 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.
88004
88005 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.
88006 */
88007
88008 // constants table
88009 var zl = [
88010 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
88011 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
88012 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
88013 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
88014 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
88015 ]
88016
88017 var zr = [
88018 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
88019 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
88020 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
88021 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
88022 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
88023 ]
88024
88025 var sl = [
88026 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
88027 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
88028 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
88029 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
88030 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
88031 ]
88032
88033 var sr = [
88034 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
88035 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
88036 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
88037 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
88038 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
88039 ]
88040
88041 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
88042 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
88043
88044 function bytesToWords (bytes) {
88045 var words = []
88046 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
88047 words[b >>> 5] |= bytes[i] << (24 - b % 32)
88048 }
88049 return words
88050 }
88051
88052 function wordsToBytes (words) {
88053 var bytes = []
88054 for (var b = 0; b < words.length * 32; b += 8) {
88055 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
88056 }
88057 return bytes
88058 }
88059
88060 function processBlock (H, M, offset) {
88061 // swap endian
88062 for (var i = 0; i < 16; i++) {
88063 var offset_i = offset + i
88064 var M_offset_i = M[offset_i]
88065
88066 // Swap
88067 M[offset_i] = (
88068 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
88069 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
88070 )
88071 }
88072
88073 // Working variables
88074 var al, bl, cl, dl, el
88075 var ar, br, cr, dr, er
88076
88077 ar = al = H[0]
88078 br = bl = H[1]
88079 cr = cl = H[2]
88080 dr = dl = H[3]
88081 er = el = H[4]
88082
88083 // computation
88084 var t
88085 for (i = 0; i < 80; i += 1) {
88086 t = (al + M[offset + zl[i]]) | 0
88087 if (i < 16) {
88088 t += f1(bl, cl, dl) + hl[0]
88089 } else if (i < 32) {
88090 t += f2(bl, cl, dl) + hl[1]
88091 } else if (i < 48) {
88092 t += f3(bl, cl, dl) + hl[2]
88093 } else if (i < 64) {
88094 t += f4(bl, cl, dl) + hl[3]
88095 } else {// if (i<80) {
88096 t += f5(bl, cl, dl) + hl[4]
88097 }
88098 t = t | 0
88099 t = rotl(t, sl[i])
88100 t = (t + el) | 0
88101 al = el
88102 el = dl
88103 dl = rotl(cl, 10)
88104 cl = bl
88105 bl = t
88106
88107 t = (ar + M[offset + zr[i]]) | 0
88108 if (i < 16) {
88109 t += f5(br, cr, dr) + hr[0]
88110 } else if (i < 32) {
88111 t += f4(br, cr, dr) + hr[1]
88112 } else if (i < 48) {
88113 t += f3(br, cr, dr) + hr[2]
88114 } else if (i < 64) {
88115 t += f2(br, cr, dr) + hr[3]
88116 } else {// if (i<80) {
88117 t += f1(br, cr, dr) + hr[4]
88118 }
88119
88120 t = t | 0
88121 t = rotl(t, sr[i])
88122 t = (t + er) | 0
88123 ar = er
88124 er = dr
88125 dr = rotl(cr, 10)
88126 cr = br
88127 br = t
88128 }
88129
88130 // intermediate hash value
88131 t = (H[1] + cl + dr) | 0
88132 H[1] = (H[2] + dl + er) | 0
88133 H[2] = (H[3] + el + ar) | 0
88134 H[3] = (H[4] + al + br) | 0
88135 H[4] = (H[0] + bl + cr) | 0
88136 H[0] = t
88137 }
88138
88139 function f1 (x, y, z) {
88140 return ((x) ^ (y) ^ (z))
88141 }
88142
88143 function f2 (x, y, z) {
88144 return (((x) & (y)) | ((~x) & (z)))
88145 }
88146
88147 function f3 (x, y, z) {
88148 return (((x) | (~(y))) ^ (z))
88149 }
88150
88151 function f4 (x, y, z) {
88152 return (((x) & (z)) | ((y) & (~(z))))
88153 }
88154
88155 function f5 (x, y, z) {
88156 return ((x) ^ ((y) | (~(z))))
88157 }
88158
88159 function rotl (x, n) {
88160 return (x << n) | (x >>> (32 - n))
88161 }
88162
88163 function ripemd160 (message) {
88164 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
88165
88166 if (typeof message === 'string') {
88167 message = new Buffer(message, 'utf8')
88168 }
88169
88170 var m = bytesToWords(message)
88171
88172 var nBitsLeft = message.length * 8
88173 var nBitsTotal = message.length * 8
88174
88175 // Add padding
88176 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
88177 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
88178 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
88179 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
88180 )
88181
88182 for (var i = 0; i < m.length; i += 16) {
88183 processBlock(H, m, i)
88184 }
88185
88186 // swap endian
88187 for (i = 0; i < 5; i++) {
88188 // shortcut
88189 var H_i = H[i]
88190
88191 // Swap
88192 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
88193 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
88194 }
88195
88196 var digestbytes = wordsToBytes(H)
88197 return new Buffer(digestbytes)
88198 }
88199
88200 module.exports = ripemd160
88201
88202 }).call(this,require("buffer").Buffer)
88203 },{"buffer":5}],72:[function(require,module,exports){
88204 (function (Buffer){
88205 const assert = require('assert')
88206 /**
88207 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
88208 * This function takes in a data, convert it to buffer if not, and a length for recursion
88209 *
88210 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88211 * @returns {Buffer} - returns buffer of encoded data
88212 **/
88213 exports.encode = function (input) {
88214 if (input instanceof Array) {
88215 var output = []
88216 for (var i = 0; i < input.length; i++) {
88217 output.push(exports.encode(input[i]))
88218 }
88219 var buf = Buffer.concat(output)
88220 return Buffer.concat([encodeLength(buf.length, 192), buf])
88221 } else {
88222 input = toBuffer(input)
88223 if (input.length === 1 && input[0] < 128) {
88224 return input
88225 } else {
88226 return Buffer.concat([encodeLength(input.length, 128), input])
88227 }
88228 }
88229 }
88230
88231 function safeParseInt (v, base) {
88232 if (v.slice(0, 2) === '00') {
88233 throw (new Error('invalid RLP: extra zeros'))
88234 }
88235
88236 return parseInt(v, base)
88237 }
88238
88239 function encodeLength (len, offset) {
88240 if (len < 56) {
88241 return new Buffer([len + offset])
88242 } else {
88243 var hexLength = intToHex(len)
88244 var lLength = hexLength.length / 2
88245 var firstByte = intToHex(offset + 55 + lLength)
88246 return new Buffer(firstByte + hexLength, 'hex')
88247 }
88248 }
88249
88250 /**
88251 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
88252 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88253 * @returns {Array} - returns decode Array of Buffers containg the original message
88254 **/
88255 exports.decode = function (input, stream) {
88256 if (!input || input.length === 0) {
88257 return new Buffer([])
88258 }
88259
88260 input = toBuffer(input)
88261 var decoded = _decode(input)
88262
88263 if (stream) {
88264 return decoded
88265 }
88266
88267 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
88268 return decoded.data
88269 }
88270
88271 exports.getLength = function (input) {
88272 if (!input || input.length === 0) {
88273 return new Buffer([])
88274 }
88275
88276 input = toBuffer(input)
88277 var firstByte = input[0]
88278 if (firstByte <= 0x7f) {
88279 return input.length
88280 } else if (firstByte <= 0xb7) {
88281 return firstByte - 0x7f
88282 } else if (firstByte <= 0xbf) {
88283 return firstByte - 0xb6
88284 } else if (firstByte <= 0xf7) {
88285 // a list between 0-55 bytes long
88286 return firstByte - 0xbf
88287 } else {
88288 // a list over 55 bytes long
88289 var llength = firstByte - 0xf6
88290 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88291 return llength + length
88292 }
88293 }
88294
88295 function _decode (input) {
88296 var length, llength, data, innerRemainder, d
88297 var decoded = []
88298 var firstByte = input[0]
88299
88300 if (firstByte <= 0x7f) {
88301 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
88302 return {
88303 data: input.slice(0, 1),
88304 remainder: input.slice(1)
88305 }
88306 } else if (firstByte <= 0xb7) {
88307 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
88308 // The range of the first byte is [0x80, 0xb7]
88309 length = firstByte - 0x7f
88310
88311 // set 0x80 null to 0
88312 if (firstByte === 0x80) {
88313 data = new Buffer([])
88314 } else {
88315 data = input.slice(1, length)
88316 }
88317
88318 if (length === 2 && data[0] < 0x80) {
88319 throw new Error('invalid rlp encoding: byte must be less 0x80')
88320 }
88321
88322 return {
88323 data: data,
88324 remainder: input.slice(length)
88325 }
88326 } else if (firstByte <= 0xbf) {
88327 llength = firstByte - 0xb6
88328 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88329 data = input.slice(llength, length + llength)
88330 if (data.length < length) {
88331 throw (new Error('invalid RLP'))
88332 }
88333
88334 return {
88335 data: data,
88336 remainder: input.slice(length + llength)
88337 }
88338 } else if (firstByte <= 0xf7) {
88339 // a list between 0-55 bytes long
88340 length = firstByte - 0xbf
88341 innerRemainder = input.slice(1, length)
88342 while (innerRemainder.length) {
88343 d = _decode(innerRemainder)
88344 decoded.push(d.data)
88345 innerRemainder = d.remainder
88346 }
88347
88348 return {
88349 data: decoded,
88350 remainder: input.slice(length)
88351 }
88352 } else {
88353 // a list over 55 bytes long
88354 llength = firstByte - 0xf6
88355 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88356 var totalLength = llength + length
88357 if (totalLength > input.length) {
88358 throw new Error('invalid rlp: total length is larger than the data')
88359 }
88360
88361 innerRemainder = input.slice(llength, totalLength)
88362 if (innerRemainder.length === 0) {
88363 throw new Error('invalid rlp, List has a invalid length')
88364 }
88365
88366 while (innerRemainder.length) {
88367 d = _decode(innerRemainder)
88368 decoded.push(d.data)
88369 innerRemainder = d.remainder
88370 }
88371 return {
88372 data: decoded,
88373 remainder: input.slice(totalLength)
88374 }
88375 }
88376 }
88377
88378 function isHexPrefixed (str) {
88379 return str.slice(0, 2) === '0x'
88380 }
88381
88382 // Removes 0x from a given String
88383 function stripHexPrefix (str) {
88384 if (typeof str !== 'string') {
88385 return str
88386 }
88387 return isHexPrefixed(str) ? str.slice(2) : str
88388 }
88389
88390 function intToHex (i) {
88391 var hex = i.toString(16)
88392 if (hex.length % 2) {
88393 hex = '0' + hex
88394 }
88395
88396 return hex
88397 }
88398
88399 function padToEven (a) {
88400 if (a.length % 2) a = '0' + a
88401 return a
88402 }
88403
88404 function intToBuffer (i) {
88405 var hex = intToHex(i)
88406 return new Buffer(hex, 'hex')
88407 }
88408
88409 function toBuffer (v) {
88410 if (!Buffer.isBuffer(v)) {
88411 if (typeof v === 'string') {
88412 if (isHexPrefixed(v)) {
88413 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
88414 } else {
88415 v = new Buffer(v)
88416 }
88417 } else if (typeof v === 'number') {
88418 if (!v) {
88419 v = new Buffer([])
88420 } else {
88421 v = intToBuffer(v)
88422 }
88423 } else if (v === null || v === undefined) {
88424 v = new Buffer([])
88425 } else if (v.toArray) {
88426 // converts a BN to a Buffer
88427 v = new Buffer(v.toArray())
88428 } else {
88429 throw new Error('invalid type')
88430 }
88431 }
88432 return v
88433 }
88434
88435 }).call(this,require("buffer").Buffer)
88436 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
88437 'use strict'
88438 module.exports = require('./lib')(require('./lib/elliptic'))
88439
88440 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
88441 (function (Buffer){
88442 'use strict'
88443 var toString = Object.prototype.toString
88444
88445 // TypeError
88446 exports.isArray = function (value, message) {
88447 if (!Array.isArray(value)) throw TypeError(message)
88448 }
88449
88450 exports.isBoolean = function (value, message) {
88451 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
88452 }
88453
88454 exports.isBuffer = function (value, message) {
88455 if (!Buffer.isBuffer(value)) throw TypeError(message)
88456 }
88457
88458 exports.isFunction = function (value, message) {
88459 if (toString.call(value) !== '[object Function]') throw TypeError(message)
88460 }
88461
88462 exports.isNumber = function (value, message) {
88463 if (toString.call(value) !== '[object Number]') throw TypeError(message)
88464 }
88465
88466 exports.isObject = function (value, message) {
88467 if (toString.call(value) !== '[object Object]') throw TypeError(message)
88468 }
88469
88470 // RangeError
88471 exports.isBufferLength = function (buffer, length, message) {
88472 if (buffer.length !== length) throw RangeError(message)
88473 }
88474
88475 exports.isBufferLength2 = function (buffer, length1, length2, message) {
88476 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
88477 }
88478
88479 exports.isLengthGTZero = function (value, message) {
88480 if (value.length === 0) throw RangeError(message)
88481 }
88482
88483 exports.isNumberInInterval = function (number, x, y, message) {
88484 if (number <= x || number >= y) throw RangeError(message)
88485 }
88486
88487 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
88488 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
88489 (function (Buffer){
88490 'use strict'
88491 var bip66 = require('bip66')
88492
88493 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
88494 // begin
88495 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
88496 // private key
88497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88499 // middle
88500 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88501 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88502 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88503 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88504 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88505 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88506 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88507 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88508 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
88509 // public key
88510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88511 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88512 0x00
88513 ])
88514
88515 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
88516 // begin
88517 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
88518 // private key
88519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88521 // middle
88522 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88523 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88524 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88525 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88526 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88527 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88528 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
88529 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
88530 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88531 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88532 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
88533 // public key
88534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88535 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88538 0x00
88539 ])
88540
88541 var ZERO_BUFFER_32 = new Buffer([
88542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88543 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
88544 ])
88545
88546 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
88547 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
88548 privateKey.copy(result, compressed ? 8 : 9)
88549 publicKey.copy(result, compressed ? 181 : 214)
88550 return result
88551 }
88552
88553 exports.privateKeyImport = function (privateKey) {
88554 var length = privateKey.length
88555
88556 // sequence header
88557 var index = 0
88558 if (length < index + 1 || privateKey[index] !== 0x30) return
88559 index += 1
88560
88561 // sequence length constructor
88562 if (length < index + 1 || !(privateKey[index] & 0x80)) return
88563
88564 var lenb = privateKey[index] & 0x7f
88565 index += 1
88566 if (lenb < 1 || lenb > 2) return
88567 if (length < index + lenb) return
88568
88569 // sequence length
88570 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
88571 index += lenb
88572 if (length < index + len) return
88573
88574 // sequence element 0: version number (=1)
88575 if (length < index + 3 ||
88576 privateKey[index] !== 0x02 ||
88577 privateKey[index + 1] !== 0x01 ||
88578 privateKey[index + 2] !== 0x01) {
88579 return
88580 }
88581 index += 3
88582
88583 // sequence element 1: octet string, up to 32 bytes
88584 if (length < index + 2 ||
88585 privateKey[index] !== 0x04 ||
88586 privateKey[index + 1] > 0x20 ||
88587 length < index + 2 + privateKey[index + 1]) {
88588 return
88589 }
88590
88591 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
88592 }
88593
88594 exports.signatureExport = function (sigObj) {
88595 var r = Buffer.concat([new Buffer([0]), sigObj.r])
88596 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
88597
88598 var s = Buffer.concat([new Buffer([0]), sigObj.s])
88599 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
88600
88601 return bip66.encode(r.slice(posR), s.slice(posS))
88602 }
88603
88604 exports.signatureImport = function (sig) {
88605 var r = new Buffer(ZERO_BUFFER_32)
88606 var s = new Buffer(ZERO_BUFFER_32)
88607
88608 try {
88609 var sigObj = bip66.decode(sig)
88610 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
88611 if (sigObj.r.length > 32) throw new Error('R length is too long')
88612 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
88613 if (sigObj.s.length > 32) throw new Error('S length is too long')
88614 } catch (err) {
88615 return
88616 }
88617
88618 sigObj.r.copy(r, 32 - sigObj.r.length)
88619 sigObj.s.copy(s, 32 - sigObj.s.length)
88620
88621 return { r: r, s: s }
88622 }
88623
88624 exports.signatureImportLax = function (sig) {
88625 var r = new Buffer(ZERO_BUFFER_32)
88626 var s = new Buffer(ZERO_BUFFER_32)
88627
88628 var length = sig.length
88629 var index = 0
88630
88631 // sequence tag byte
88632 if (sig[index++] !== 0x30) return
88633
88634 // sequence length byte
88635 var lenbyte = sig[index++]
88636 if (lenbyte & 0x80) {
88637 index += lenbyte - 0x80
88638 if (index > length) return
88639 }
88640
88641 // sequence tag byte for r
88642 if (sig[index++] !== 0x02) return
88643
88644 // length for r
88645 var rlen = sig[index++]
88646 if (rlen & 0x80) {
88647 lenbyte = rlen - 0x80
88648 if (index + lenbyte > length) return
88649 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88650 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
88651 }
88652 if (rlen > length - index) return
88653 var rindex = index
88654 index += rlen
88655
88656 // sequence tag byte for s
88657 if (sig[index++] !== 0x02) return
88658
88659 // length for s
88660 var slen = sig[index++]
88661 if (slen & 0x80) {
88662 lenbyte = slen - 0x80
88663 if (index + lenbyte > length) return
88664 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88665 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
88666 }
88667 if (slen > length - index) return
88668 var sindex = index
88669 index += slen
88670
88671 // ignore leading zeros in r
88672 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
88673 // copy r value
88674 if (rlen > 32) return
88675 var rvalue = sig.slice(rindex, rindex + rlen)
88676 rvalue.copy(r, 32 - rvalue.length)
88677
88678 // ignore leading zeros in s
88679 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
88680 // copy s value
88681 if (slen > 32) return
88682 var svalue = sig.slice(sindex, sindex + slen)
88683 svalue.copy(s, 32 - svalue.length)
88684
88685 return { r: r, s: s }
88686 }
88687
88688 }).call(this,require("buffer").Buffer)
88689 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
88690 (function (Buffer){
88691 'use strict'
88692 var createHash = require('create-hash')
88693 var BN = require('bn.js')
88694 var EC = require('elliptic').ec
88695
88696 var messages = require('../messages.json')
88697
88698 var ec = new EC('secp256k1')
88699 var ecparams = ec.curve
88700
88701 function loadCompressedPublicKey (first, xBuffer) {
88702 var x = new BN(xBuffer)
88703
88704 // overflow
88705 if (x.cmp(ecparams.p) >= 0) return null
88706 x = x.toRed(ecparams.red)
88707
88708 // compute corresponding Y
88709 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
88710 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
88711
88712 return ec.keyPair({ pub: { x: x, y: y } })
88713 }
88714
88715 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
88716 var x = new BN(xBuffer)
88717 var y = new BN(yBuffer)
88718
88719 // overflow
88720 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
88721
88722 x = x.toRed(ecparams.red)
88723 y = y.toRed(ecparams.red)
88724
88725 // is odd flag
88726 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
88727
88728 // x*x*x + b = y*y
88729 var x3 = x.redSqr().redIMul(x)
88730 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
88731
88732 return ec.keyPair({ pub: { x: x, y: y } })
88733 }
88734
88735 function loadPublicKey (publicKey) {
88736 var first = publicKey[0]
88737 switch (first) {
88738 case 0x02:
88739 case 0x03:
88740 if (publicKey.length !== 33) return null
88741 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
88742 case 0x04:
88743 case 0x06:
88744 case 0x07:
88745 if (publicKey.length !== 65) return null
88746 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
88747 default:
88748 return null
88749 }
88750 }
88751
88752 exports.privateKeyVerify = function (privateKey) {
88753 var bn = new BN(privateKey)
88754 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
88755 }
88756
88757 exports.privateKeyExport = function (privateKey, compressed) {
88758 var d = new BN(privateKey)
88759 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
88760
88761 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88762 }
88763
88764 exports.privateKeyTweakAdd = function (privateKey, tweak) {
88765 var bn = new BN(tweak)
88766 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88767
88768 bn.iadd(new BN(privateKey))
88769 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
88770 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88771
88772 return bn.toArrayLike(Buffer, 'be', 32)
88773 }
88774
88775 exports.privateKeyTweakMul = function (privateKey, tweak) {
88776 var bn = new BN(tweak)
88777 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
88778
88779 bn.imul(new BN(privateKey))
88780 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
88781
88782 return bn.toArrayLike(Buffer, 'be', 32)
88783 }
88784
88785 exports.publicKeyCreate = function (privateKey, compressed) {
88786 var d = new BN(privateKey)
88787 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
88788
88789 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88790 }
88791
88792 exports.publicKeyConvert = function (publicKey, compressed) {
88793 var pair = loadPublicKey(publicKey)
88794 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88795
88796 return new Buffer(pair.getPublic(compressed, true))
88797 }
88798
88799 exports.publicKeyVerify = function (publicKey) {
88800 return loadPublicKey(publicKey) !== null
88801 }
88802
88803 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
88804 var pair = loadPublicKey(publicKey)
88805 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88806
88807 tweak = new BN(tweak)
88808 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
88809
88810 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
88811 }
88812
88813 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
88814 var pair = loadPublicKey(publicKey)
88815 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88816
88817 tweak = new BN(tweak)
88818 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
88819
88820 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
88821 }
88822
88823 exports.publicKeyCombine = function (publicKeys, compressed) {
88824 var pairs = new Array(publicKeys.length)
88825 for (var i = 0; i < publicKeys.length; ++i) {
88826 pairs[i] = loadPublicKey(publicKeys[i])
88827 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88828 }
88829
88830 var point = pairs[0].pub
88831 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
88832 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
88833
88834 return new Buffer(point.encode(true, compressed))
88835 }
88836
88837 exports.signatureNormalize = function (signature) {
88838 var r = new BN(signature.slice(0, 32))
88839 var s = new BN(signature.slice(32, 64))
88840 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88841
88842 var result = new Buffer(signature)
88843 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
88844
88845 return result
88846 }
88847
88848 exports.signatureExport = function (signature) {
88849 var r = signature.slice(0, 32)
88850 var s = signature.slice(32, 64)
88851 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88852
88853 return { r: r, s: s }
88854 }
88855
88856 exports.signatureImport = function (sigObj) {
88857 var r = new BN(sigObj.r)
88858 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
88859
88860 var s = new BN(sigObj.s)
88861 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
88862
88863 return Buffer.concat([
88864 r.toArrayLike(Buffer, 'be', 32),
88865 s.toArrayLike(Buffer, 'be', 32)
88866 ])
88867 }
88868
88869 exports.sign = function (message, privateKey, noncefn, data) {
88870 if (typeof noncefn === 'function') {
88871 var getNonce = noncefn
88872 noncefn = function (counter) {
88873 var nonce = getNonce(message, privateKey, null, data, counter)
88874 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
88875
88876 return new BN(nonce)
88877 }
88878 }
88879
88880 var d = new BN(privateKey)
88881 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
88882
88883 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
88884 return {
88885 signature: Buffer.concat([
88886 result.r.toArrayLike(Buffer, 'be', 32),
88887 result.s.toArrayLike(Buffer, 'be', 32)
88888 ]),
88889 recovery: result.recoveryParam
88890 }
88891 }
88892
88893 exports.verify = function (message, signature, publicKey) {
88894 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88895
88896 var sigr = new BN(sigObj.r)
88897 var sigs = new BN(sigObj.s)
88898 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88899 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
88900
88901 var pair = loadPublicKey(publicKey)
88902 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88903
88904 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
88905 }
88906
88907 exports.recover = function (message, signature, recovery, compressed) {
88908 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88909
88910 var sigr = new BN(sigObj.r)
88911 var sigs = new BN(sigObj.s)
88912 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88913
88914 try {
88915 if (sigr.isZero() || sigs.isZero()) throw new Error()
88916
88917 var point = ec.recoverPubKey(message, sigObj, recovery)
88918 return new Buffer(point.encode(true, compressed))
88919 } catch (err) {
88920 throw new Error(messages.ECDSA_RECOVER_FAIL)
88921 }
88922 }
88923
88924 exports.ecdh = function (publicKey, privateKey) {
88925 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
88926 return createHash('sha256').update(shared).digest()
88927 }
88928
88929 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
88930 var pair = loadPublicKey(publicKey)
88931 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88932
88933 var scalar = new BN(privateKey)
88934 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
88935
88936 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
88937 }
88938
88939 }).call(this,require("buffer").Buffer)
88940 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
88941 'use strict'
88942 var assert = require('./assert')
88943 var der = require('./der')
88944 var messages = require('./messages.json')
88945
88946 function initCompressedValue (value, defaultValue) {
88947 if (value === undefined) return defaultValue
88948
88949 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
88950 return value
88951 }
88952
88953 module.exports = function (secp256k1) {
88954 return {
88955 privateKeyVerify: function (privateKey) {
88956 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88957 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
88958 },
88959
88960 privateKeyExport: function (privateKey, compressed) {
88961 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88962 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88963
88964 compressed = initCompressedValue(compressed, true)
88965 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
88966
88967 return der.privateKeyExport(privateKey, publicKey, compressed)
88968 },
88969
88970 privateKeyImport: function (privateKey) {
88971 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88972
88973 privateKey = der.privateKeyImport(privateKey)
88974 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
88975
88976 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
88977 },
88978
88979 privateKeyTweakAdd: function (privateKey, tweak) {
88980 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88981 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88982
88983 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88984 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88985
88986 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
88987 },
88988
88989 privateKeyTweakMul: function (privateKey, tweak) {
88990 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
88991 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
88992
88993 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
88994 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
88995
88996 return secp256k1.privateKeyTweakMul(privateKey, tweak)
88997 },
88998
88999 publicKeyCreate: function (privateKey, compressed) {
89000 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89001 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89002
89003 compressed = initCompressedValue(compressed, true)
89004
89005 return secp256k1.publicKeyCreate(privateKey, compressed)
89006 },
89007
89008 publicKeyConvert: function (publicKey, compressed) {
89009 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89010 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89011
89012 compressed = initCompressedValue(compressed, true)
89013
89014 return secp256k1.publicKeyConvert(publicKey, compressed)
89015 },
89016
89017 publicKeyVerify: function (publicKey) {
89018 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89019 return secp256k1.publicKeyVerify(publicKey)
89020 },
89021
89022 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
89023 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89024 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89025
89026 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89027 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89028
89029 compressed = initCompressedValue(compressed, true)
89030
89031 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
89032 },
89033
89034 publicKeyTweakMul: function (publicKey, tweak, compressed) {
89035 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89036 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89037
89038 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89039 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89040
89041 compressed = initCompressedValue(compressed, true)
89042
89043 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
89044 },
89045
89046 publicKeyCombine: function (publicKeys, compressed) {
89047 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
89048 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
89049 for (var i = 0; i < publicKeys.length; ++i) {
89050 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
89051 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89052 }
89053
89054 compressed = initCompressedValue(compressed, true)
89055
89056 return secp256k1.publicKeyCombine(publicKeys, compressed)
89057 },
89058
89059 signatureNormalize: function (signature) {
89060 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89061 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89062
89063 return secp256k1.signatureNormalize(signature)
89064 },
89065
89066 signatureExport: function (signature) {
89067 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89068 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89069
89070 var sigObj = secp256k1.signatureExport(signature)
89071 return der.signatureExport(sigObj)
89072 },
89073
89074 signatureImport: function (sig) {
89075 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89076 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89077
89078 var sigObj = der.signatureImport(sig)
89079 if (sigObj) return secp256k1.signatureImport(sigObj)
89080
89081 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89082 },
89083
89084 signatureImportLax: function (sig) {
89085 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89086 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89087
89088 var sigObj = der.signatureImportLax(sig)
89089 if (sigObj) return secp256k1.signatureImport(sigObj)
89090
89091 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89092 },
89093
89094 sign: function (message, privateKey, options) {
89095 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89096 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89097
89098 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89099 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89100
89101 var data = null
89102 var noncefn = null
89103 if (options !== undefined) {
89104 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
89105
89106 if (options.data !== undefined) {
89107 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
89108 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
89109 data = options.data
89110 }
89111
89112 if (options.noncefn !== undefined) {
89113 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
89114 noncefn = options.noncefn
89115 }
89116 }
89117
89118 return secp256k1.sign(message, privateKey, noncefn, data)
89119 },
89120
89121 verify: function (message, signature, publicKey) {
89122 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89123 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89124
89125 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89126 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89127
89128 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89129 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89130
89131 return secp256k1.verify(message, signature, publicKey)
89132 },
89133
89134 recover: function (message, signature, recovery, compressed) {
89135 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89136 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89137
89138 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89139 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89140
89141 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
89142 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
89143
89144 compressed = initCompressedValue(compressed, true)
89145
89146 return secp256k1.recover(message, signature, recovery, compressed)
89147 },
89148
89149 ecdh: function (publicKey, privateKey) {
89150 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89151 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89152
89153 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89154 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89155
89156 return secp256k1.ecdh(publicKey, privateKey)
89157 },
89158
89159 ecdhUnsafe: function (publicKey, privateKey, compressed) {
89160 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89161 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89162
89163 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89164 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89165
89166 compressed = initCompressedValue(compressed, true)
89167
89168 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
89169 }
89170 }
89171 }
89172
89173 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
89174 module.exports={
89175 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
89176 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
89177 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
89178 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
89179 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89180 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
89181 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
89182 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
89183 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
89184 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
89185 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
89186 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
89187 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
89188 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
89189 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89190 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
89191 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
89192 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
89193 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
89194 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
89195 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
89196 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
89197 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
89198 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
89199 "MSG32_TYPE_INVALID": "message should be a Buffer",
89200 "MSG32_LENGTH_INVALID": "message length is invalid",
89201 "OPTIONS_TYPE_INVALID": "options should be an Object",
89202 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
89203 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
89204 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
89205 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
89206 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
89207 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
89208 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
89209 }
89210
89211 },{}],79:[function(require,module,exports){
89212 (function (Buffer){
89213 // prototype class for hash functions
89214 function Hash (blockSize, finalSize) {
89215 this._block = new Buffer(blockSize)
89216 this._finalSize = finalSize
89217 this._blockSize = blockSize
89218 this._len = 0
89219 this._s = 0
89220 }
89221
89222 Hash.prototype.update = function (data, enc) {
89223 if (typeof data === 'string') {
89224 enc = enc || 'utf8'
89225 data = new Buffer(data, enc)
89226 }
89227
89228 var l = this._len += data.length
89229 var s = this._s || 0
89230 var f = 0
89231 var buffer = this._block
89232
89233 while (s < l) {
89234 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
89235 var ch = (t - f)
89236
89237 for (var i = 0; i < ch; i++) {
89238 buffer[(s % this._blockSize) + i] = data[i + f]
89239 }
89240
89241 s += ch
89242 f += ch
89243
89244 if ((s % this._blockSize) === 0) {
89245 this._update(buffer)
89246 }
89247 }
89248 this._s = s
89249
89250 return this
89251 }
89252
89253 Hash.prototype.digest = function (enc) {
89254 // Suppose the length of the message M, in bits, is l
89255 var l = this._len * 8
89256
89257 // Append the bit 1 to the end of the message
89258 this._block[this._len % this._blockSize] = 0x80
89259
89260 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
89261 this._block.fill(0, this._len % this._blockSize + 1)
89262
89263 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
89264 this._update(this._block)
89265 this._block.fill(0)
89266 }
89267
89268 // to this append the block which is equal to the number l written in binary
89269 // TODO: handle case where l is > Math.pow(2, 29)
89270 this._block.writeInt32BE(l, this._blockSize - 4)
89271
89272 var hash = this._update(this._block) || this._hash()
89273
89274 return enc ? hash.toString(enc) : hash
89275 }
89276
89277 Hash.prototype._update = function () {
89278 throw new Error('_update must be implemented by subclass')
89279 }
89280
89281 module.exports = Hash
89282
89283 }).call(this,require("buffer").Buffer)
89284 },{"buffer":5}],80:[function(require,module,exports){
89285 var exports = module.exports = function SHA (algorithm) {
89286 algorithm = algorithm.toLowerCase()
89287
89288 var Algorithm = exports[algorithm]
89289 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
89290
89291 return new Algorithm()
89292 }
89293
89294 exports.sha = require('./sha')
89295 exports.sha1 = require('./sha1')
89296 exports.sha224 = require('./sha224')
89297 exports.sha256 = require('./sha256')
89298 exports.sha384 = require('./sha384')
89299 exports.sha512 = require('./sha512')
89300
89301 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
89302 (function (Buffer){
89303 /*
89304 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
89305 * in FIPS PUB 180-1
89306 * This source code is derived from sha1.js of the same repository.
89307 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
89308 * operation was added.
89309 */
89310
89311 var inherits = require('inherits')
89312 var Hash = require('./hash')
89313
89314 var K = [
89315 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89316 ]
89317
89318 var W = new Array(80)
89319
89320 function Sha () {
89321 this.init()
89322 this._w = W
89323
89324 Hash.call(this, 64, 56)
89325 }
89326
89327 inherits(Sha, Hash)
89328
89329 Sha.prototype.init = function () {
89330 this._a = 0x67452301
89331 this._b = 0xefcdab89
89332 this._c = 0x98badcfe
89333 this._d = 0x10325476
89334 this._e = 0xc3d2e1f0
89335
89336 return this
89337 }
89338
89339 function rotl5 (num) {
89340 return (num << 5) | (num >>> 27)
89341 }
89342
89343 function rotl30 (num) {
89344 return (num << 30) | (num >>> 2)
89345 }
89346
89347 function ft (s, b, c, d) {
89348 if (s === 0) return (b & c) | ((~b) & d)
89349 if (s === 2) return (b & c) | (b & d) | (c & d)
89350 return b ^ c ^ d
89351 }
89352
89353 Sha.prototype._update = function (M) {
89354 var W = this._w
89355
89356 var a = this._a | 0
89357 var b = this._b | 0
89358 var c = this._c | 0
89359 var d = this._d | 0
89360 var e = this._e | 0
89361
89362 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89363 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
89364
89365 for (var j = 0; j < 80; ++j) {
89366 var s = ~~(j / 20)
89367 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89368
89369 e = d
89370 d = c
89371 c = rotl30(b)
89372 b = a
89373 a = t
89374 }
89375
89376 this._a = (a + this._a) | 0
89377 this._b = (b + this._b) | 0
89378 this._c = (c + this._c) | 0
89379 this._d = (d + this._d) | 0
89380 this._e = (e + this._e) | 0
89381 }
89382
89383 Sha.prototype._hash = function () {
89384 var H = new Buffer(20)
89385
89386 H.writeInt32BE(this._a | 0, 0)
89387 H.writeInt32BE(this._b | 0, 4)
89388 H.writeInt32BE(this._c | 0, 8)
89389 H.writeInt32BE(this._d | 0, 12)
89390 H.writeInt32BE(this._e | 0, 16)
89391
89392 return H
89393 }
89394
89395 module.exports = Sha
89396
89397 }).call(this,require("buffer").Buffer)
89398 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
89399 (function (Buffer){
89400 /*
89401 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
89402 * in FIPS PUB 180-1
89403 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
89404 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89405 * Distributed under the BSD License
89406 * See http://pajhome.org.uk/crypt/md5 for details.
89407 */
89408
89409 var inherits = require('inherits')
89410 var Hash = require('./hash')
89411
89412 var K = [
89413 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89414 ]
89415
89416 var W = new Array(80)
89417
89418 function Sha1 () {
89419 this.init()
89420 this._w = W
89421
89422 Hash.call(this, 64, 56)
89423 }
89424
89425 inherits(Sha1, Hash)
89426
89427 Sha1.prototype.init = function () {
89428 this._a = 0x67452301
89429 this._b = 0xefcdab89
89430 this._c = 0x98badcfe
89431 this._d = 0x10325476
89432 this._e = 0xc3d2e1f0
89433
89434 return this
89435 }
89436
89437 function rotl1 (num) {
89438 return (num << 1) | (num >>> 31)
89439 }
89440
89441 function rotl5 (num) {
89442 return (num << 5) | (num >>> 27)
89443 }
89444
89445 function rotl30 (num) {
89446 return (num << 30) | (num >>> 2)
89447 }
89448
89449 function ft (s, b, c, d) {
89450 if (s === 0) return (b & c) | ((~b) & d)
89451 if (s === 2) return (b & c) | (b & d) | (c & d)
89452 return b ^ c ^ d
89453 }
89454
89455 Sha1.prototype._update = function (M) {
89456 var W = this._w
89457
89458 var a = this._a | 0
89459 var b = this._b | 0
89460 var c = this._c | 0
89461 var d = this._d | 0
89462 var e = this._e | 0
89463
89464 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89465 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
89466
89467 for (var j = 0; j < 80; ++j) {
89468 var s = ~~(j / 20)
89469 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89470
89471 e = d
89472 d = c
89473 c = rotl30(b)
89474 b = a
89475 a = t
89476 }
89477
89478 this._a = (a + this._a) | 0
89479 this._b = (b + this._b) | 0
89480 this._c = (c + this._c) | 0
89481 this._d = (d + this._d) | 0
89482 this._e = (e + this._e) | 0
89483 }
89484
89485 Sha1.prototype._hash = function () {
89486 var H = new Buffer(20)
89487
89488 H.writeInt32BE(this._a | 0, 0)
89489 H.writeInt32BE(this._b | 0, 4)
89490 H.writeInt32BE(this._c | 0, 8)
89491 H.writeInt32BE(this._d | 0, 12)
89492 H.writeInt32BE(this._e | 0, 16)
89493
89494 return H
89495 }
89496
89497 module.exports = Sha1
89498
89499 }).call(this,require("buffer").Buffer)
89500 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
89501 (function (Buffer){
89502 /**
89503 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89504 * in FIPS 180-2
89505 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89506 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89507 *
89508 */
89509
89510 var inherits = require('inherits')
89511 var Sha256 = require('./sha256')
89512 var Hash = require('./hash')
89513
89514 var W = new Array(64)
89515
89516 function Sha224 () {
89517 this.init()
89518
89519 this._w = W // new Array(64)
89520
89521 Hash.call(this, 64, 56)
89522 }
89523
89524 inherits(Sha224, Sha256)
89525
89526 Sha224.prototype.init = function () {
89527 this._a = 0xc1059ed8
89528 this._b = 0x367cd507
89529 this._c = 0x3070dd17
89530 this._d = 0xf70e5939
89531 this._e = 0xffc00b31
89532 this._f = 0x68581511
89533 this._g = 0x64f98fa7
89534 this._h = 0xbefa4fa4
89535
89536 return this
89537 }
89538
89539 Sha224.prototype._hash = function () {
89540 var H = new Buffer(28)
89541
89542 H.writeInt32BE(this._a, 0)
89543 H.writeInt32BE(this._b, 4)
89544 H.writeInt32BE(this._c, 8)
89545 H.writeInt32BE(this._d, 12)
89546 H.writeInt32BE(this._e, 16)
89547 H.writeInt32BE(this._f, 20)
89548 H.writeInt32BE(this._g, 24)
89549
89550 return H
89551 }
89552
89553 module.exports = Sha224
89554
89555 }).call(this,require("buffer").Buffer)
89556 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
89557 (function (Buffer){
89558 /**
89559 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89560 * in FIPS 180-2
89561 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89562 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89563 *
89564 */
89565
89566 var inherits = require('inherits')
89567 var Hash = require('./hash')
89568
89569 var K = [
89570 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
89571 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
89572 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
89573 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
89574 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
89575 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
89576 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
89577 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
89578 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
89579 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
89580 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
89581 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
89582 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
89583 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
89584 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
89585 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
89586 ]
89587
89588 var W = new Array(64)
89589
89590 function Sha256 () {
89591 this.init()
89592
89593 this._w = W // new Array(64)
89594
89595 Hash.call(this, 64, 56)
89596 }
89597
89598 inherits(Sha256, Hash)
89599
89600 Sha256.prototype.init = function () {
89601 this._a = 0x6a09e667
89602 this._b = 0xbb67ae85
89603 this._c = 0x3c6ef372
89604 this._d = 0xa54ff53a
89605 this._e = 0x510e527f
89606 this._f = 0x9b05688c
89607 this._g = 0x1f83d9ab
89608 this._h = 0x5be0cd19
89609
89610 return this
89611 }
89612
89613 function ch (x, y, z) {
89614 return z ^ (x & (y ^ z))
89615 }
89616
89617 function maj (x, y, z) {
89618 return (x & y) | (z & (x | y))
89619 }
89620
89621 function sigma0 (x) {
89622 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
89623 }
89624
89625 function sigma1 (x) {
89626 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
89627 }
89628
89629 function gamma0 (x) {
89630 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
89631 }
89632
89633 function gamma1 (x) {
89634 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
89635 }
89636
89637 Sha256.prototype._update = function (M) {
89638 var W = this._w
89639
89640 var a = this._a | 0
89641 var b = this._b | 0
89642 var c = this._c | 0
89643 var d = this._d | 0
89644 var e = this._e | 0
89645 var f = this._f | 0
89646 var g = this._g | 0
89647 var h = this._h | 0
89648
89649 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89650 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
89651
89652 for (var j = 0; j < 64; ++j) {
89653 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
89654 var T2 = (sigma0(a) + maj(a, b, c)) | 0
89655
89656 h = g
89657 g = f
89658 f = e
89659 e = (d + T1) | 0
89660 d = c
89661 c = b
89662 b = a
89663 a = (T1 + T2) | 0
89664 }
89665
89666 this._a = (a + this._a) | 0
89667 this._b = (b + this._b) | 0
89668 this._c = (c + this._c) | 0
89669 this._d = (d + this._d) | 0
89670 this._e = (e + this._e) | 0
89671 this._f = (f + this._f) | 0
89672 this._g = (g + this._g) | 0
89673 this._h = (h + this._h) | 0
89674 }
89675
89676 Sha256.prototype._hash = function () {
89677 var H = new Buffer(32)
89678
89679 H.writeInt32BE(this._a, 0)
89680 H.writeInt32BE(this._b, 4)
89681 H.writeInt32BE(this._c, 8)
89682 H.writeInt32BE(this._d, 12)
89683 H.writeInt32BE(this._e, 16)
89684 H.writeInt32BE(this._f, 20)
89685 H.writeInt32BE(this._g, 24)
89686 H.writeInt32BE(this._h, 28)
89687
89688 return H
89689 }
89690
89691 module.exports = Sha256
89692
89693 }).call(this,require("buffer").Buffer)
89694 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
89695 (function (Buffer){
89696 var inherits = require('inherits')
89697 var SHA512 = require('./sha512')
89698 var Hash = require('./hash')
89699
89700 var W = new Array(160)
89701
89702 function Sha384 () {
89703 this.init()
89704 this._w = W
89705
89706 Hash.call(this, 128, 112)
89707 }
89708
89709 inherits(Sha384, SHA512)
89710
89711 Sha384.prototype.init = function () {
89712 this._ah = 0xcbbb9d5d
89713 this._bh = 0x629a292a
89714 this._ch = 0x9159015a
89715 this._dh = 0x152fecd8
89716 this._eh = 0x67332667
89717 this._fh = 0x8eb44a87
89718 this._gh = 0xdb0c2e0d
89719 this._hh = 0x47b5481d
89720
89721 this._al = 0xc1059ed8
89722 this._bl = 0x367cd507
89723 this._cl = 0x3070dd17
89724 this._dl = 0xf70e5939
89725 this._el = 0xffc00b31
89726 this._fl = 0x68581511
89727 this._gl = 0x64f98fa7
89728 this._hl = 0xbefa4fa4
89729
89730 return this
89731 }
89732
89733 Sha384.prototype._hash = function () {
89734 var H = new Buffer(48)
89735
89736 function writeInt64BE (h, l, offset) {
89737 H.writeInt32BE(h, offset)
89738 H.writeInt32BE(l, offset + 4)
89739 }
89740
89741 writeInt64BE(this._ah, this._al, 0)
89742 writeInt64BE(this._bh, this._bl, 8)
89743 writeInt64BE(this._ch, this._cl, 16)
89744 writeInt64BE(this._dh, this._dl, 24)
89745 writeInt64BE(this._eh, this._el, 32)
89746 writeInt64BE(this._fh, this._fl, 40)
89747
89748 return H
89749 }
89750
89751 module.exports = Sha384
89752
89753 }).call(this,require("buffer").Buffer)
89754 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
89755 (function (Buffer){
89756 var inherits = require('inherits')
89757 var Hash = require('./hash')
89758
89759 var K = [
89760 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
89761 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
89762 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
89763 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
89764 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
89765 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
89766 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
89767 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
89768 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
89769 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
89770 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
89771 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
89772 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
89773 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
89774 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
89775 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
89776 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
89777 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
89778 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
89779 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
89780 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
89781 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
89782 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
89783 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
89784 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
89785 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
89786 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
89787 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
89788 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
89789 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
89790 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
89791 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
89792 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
89793 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
89794 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
89795 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
89796 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
89797 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
89798 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
89799 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
89800 ]
89801
89802 var W = new Array(160)
89803
89804 function Sha512 () {
89805 this.init()
89806 this._w = W
89807
89808 Hash.call(this, 128, 112)
89809 }
89810
89811 inherits(Sha512, Hash)
89812
89813 Sha512.prototype.init = function () {
89814 this._ah = 0x6a09e667
89815 this._bh = 0xbb67ae85
89816 this._ch = 0x3c6ef372
89817 this._dh = 0xa54ff53a
89818 this._eh = 0x510e527f
89819 this._fh = 0x9b05688c
89820 this._gh = 0x1f83d9ab
89821 this._hh = 0x5be0cd19
89822
89823 this._al = 0xf3bcc908
89824 this._bl = 0x84caa73b
89825 this._cl = 0xfe94f82b
89826 this._dl = 0x5f1d36f1
89827 this._el = 0xade682d1
89828 this._fl = 0x2b3e6c1f
89829 this._gl = 0xfb41bd6b
89830 this._hl = 0x137e2179
89831
89832 return this
89833 }
89834
89835 function Ch (x, y, z) {
89836 return z ^ (x & (y ^ z))
89837 }
89838
89839 function maj (x, y, z) {
89840 return (x & y) | (z & (x | y))
89841 }
89842
89843 function sigma0 (x, xl) {
89844 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
89845 }
89846
89847 function sigma1 (x, xl) {
89848 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
89849 }
89850
89851 function Gamma0 (x, xl) {
89852 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
89853 }
89854
89855 function Gamma0l (x, xl) {
89856 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
89857 }
89858
89859 function Gamma1 (x, xl) {
89860 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
89861 }
89862
89863 function Gamma1l (x, xl) {
89864 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
89865 }
89866
89867 function getCarry (a, b) {
89868 return (a >>> 0) < (b >>> 0) ? 1 : 0
89869 }
89870
89871 Sha512.prototype._update = function (M) {
89872 var W = this._w
89873
89874 var ah = this._ah | 0
89875 var bh = this._bh | 0
89876 var ch = this._ch | 0
89877 var dh = this._dh | 0
89878 var eh = this._eh | 0
89879 var fh = this._fh | 0
89880 var gh = this._gh | 0
89881 var hh = this._hh | 0
89882
89883 var al = this._al | 0
89884 var bl = this._bl | 0
89885 var cl = this._cl | 0
89886 var dl = this._dl | 0
89887 var el = this._el | 0
89888 var fl = this._fl | 0
89889 var gl = this._gl | 0
89890 var hl = this._hl | 0
89891
89892 for (var i = 0; i < 32; i += 2) {
89893 W[i] = M.readInt32BE(i * 4)
89894 W[i + 1] = M.readInt32BE(i * 4 + 4)
89895 }
89896 for (; i < 160; i += 2) {
89897 var xh = W[i - 15 * 2]
89898 var xl = W[i - 15 * 2 + 1]
89899 var gamma0 = Gamma0(xh, xl)
89900 var gamma0l = Gamma0l(xl, xh)
89901
89902 xh = W[i - 2 * 2]
89903 xl = W[i - 2 * 2 + 1]
89904 var gamma1 = Gamma1(xh, xl)
89905 var gamma1l = Gamma1l(xl, xh)
89906
89907 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
89908 var Wi7h = W[i - 7 * 2]
89909 var Wi7l = W[i - 7 * 2 + 1]
89910
89911 var Wi16h = W[i - 16 * 2]
89912 var Wi16l = W[i - 16 * 2 + 1]
89913
89914 var Wil = (gamma0l + Wi7l) | 0
89915 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
89916 Wil = (Wil + gamma1l) | 0
89917 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
89918 Wil = (Wil + Wi16l) | 0
89919 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
89920
89921 W[i] = Wih
89922 W[i + 1] = Wil
89923 }
89924
89925 for (var j = 0; j < 160; j += 2) {
89926 Wih = W[j]
89927 Wil = W[j + 1]
89928
89929 var majh = maj(ah, bh, ch)
89930 var majl = maj(al, bl, cl)
89931
89932 var sigma0h = sigma0(ah, al)
89933 var sigma0l = sigma0(al, ah)
89934 var sigma1h = sigma1(eh, el)
89935 var sigma1l = sigma1(el, eh)
89936
89937 // t1 = h + sigma1 + ch + K[j] + W[j]
89938 var Kih = K[j]
89939 var Kil = K[j + 1]
89940
89941 var chh = Ch(eh, fh, gh)
89942 var chl = Ch(el, fl, gl)
89943
89944 var t1l = (hl + sigma1l) | 0
89945 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
89946 t1l = (t1l + chl) | 0
89947 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
89948 t1l = (t1l + Kil) | 0
89949 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
89950 t1l = (t1l + Wil) | 0
89951 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
89952
89953 // t2 = sigma0 + maj
89954 var t2l = (sigma0l + majl) | 0
89955 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
89956
89957 hh = gh
89958 hl = gl
89959 gh = fh
89960 gl = fl
89961 fh = eh
89962 fl = el
89963 el = (dl + t1l) | 0
89964 eh = (dh + t1h + getCarry(el, dl)) | 0
89965 dh = ch
89966 dl = cl
89967 ch = bh
89968 cl = bl
89969 bh = ah
89970 bl = al
89971 al = (t1l + t2l) | 0
89972 ah = (t1h + t2h + getCarry(al, t1l)) | 0
89973 }
89974
89975 this._al = (this._al + al) | 0
89976 this._bl = (this._bl + bl) | 0
89977 this._cl = (this._cl + cl) | 0
89978 this._dl = (this._dl + dl) | 0
89979 this._el = (this._el + el) | 0
89980 this._fl = (this._fl + fl) | 0
89981 this._gl = (this._gl + gl) | 0
89982 this._hl = (this._hl + hl) | 0
89983
89984 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
89985 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
89986 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
89987 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
89988 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
89989 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
89990 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
89991 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
89992 }
89993
89994 Sha512.prototype._hash = function () {
89995 var H = new Buffer(64)
89996
89997 function writeInt64BE (h, l, offset) {
89998 H.writeInt32BE(h, offset)
89999 H.writeInt32BE(l, offset + 4)
90000 }
90001
90002 writeInt64BE(this._ah, this._al, 0)
90003 writeInt64BE(this._bh, this._bl, 8)
90004 writeInt64BE(this._ch, this._cl, 16)
90005 writeInt64BE(this._dh, this._dl, 24)
90006 writeInt64BE(this._eh, this._el, 32)
90007 writeInt64BE(this._fh, this._fl, 40)
90008 writeInt64BE(this._gh, this._gl, 48)
90009 writeInt64BE(this._hh, this._hl, 56)
90010
90011 return H
90012 }
90013
90014 module.exports = Sha512
90015
90016 }).call(this,require("buffer").Buffer)
90017 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
90018 var isHexPrefixed = require('is-hex-prefixed');
90019
90020 /**
90021 * Removes '0x' from a given `String` is present
90022 * @param {String} str the string value
90023 * @return {String|Optional} a string by pass if necessary
90024 */
90025 module.exports = function stripHexPrefix(str) {
90026 if (typeof str !== 'string') {
90027 return str;
90028 }
90029
90030 return isHexPrefixed(str) ? str.slice(2) : str;
90031 }
90032
90033 },{"is-hex-prefixed":64}]},{},[31])(31)
90034 });</script>
90035 <script>function convertRippleAdrr(address) {
90036 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
90037 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
90038 )
90039 }
90040
90041 function convertRipplePriv(priv) {
90042 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
90043 }
90044
90045 </script>
90046 <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.bchaddr = 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){
90047 // base-x encoding
90048 // Forked from https://github.com/cryptocoinjs/bs58
90049 // Originally written by Mike Hearn for BitcoinJ
90050 // Copyright (c) 2011 Google Inc
90051 // Ported to JavaScript by Stefan Thomas
90052 // Merged Buffer refactorings from base58-native by Stephen Pair
90053 // Copyright (c) 2013 BitPay Inc
90054
90055 var Buffer = require('safe-buffer').Buffer
90056
90057 module.exports = function base (ALPHABET) {
90058 var ALPHABET_MAP = {}
90059 var BASE = ALPHABET.length
90060 var LEADER = ALPHABET.charAt(0)
90061
90062 // pre-compute lookup table
90063 for (var z = 0; z < ALPHABET.length; z++) {
90064 var x = ALPHABET.charAt(z)
90065
90066 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
90067 ALPHABET_MAP[x] = z
90068 }
90069
90070 function encode (source) {
90071 if (source.length === 0) return ''
90072
90073 var digits = [0]
90074 for (var i = 0; i < source.length; ++i) {
90075 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
90076 carry += digits[j] << 8
90077 digits[j] = carry % BASE
90078 carry = (carry / BASE) | 0
90079 }
90080
90081 while (carry > 0) {
90082 digits.push(carry % BASE)
90083 carry = (carry / BASE) | 0
90084 }
90085 }
90086
90087 var string = ''
90088
90089 // deal with leading zeros
90090 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
90091 // convert digits to a string
90092 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
90093
90094 return string
90095 }
90096
90097 function decodeUnsafe (string) {
90098 if (typeof string !== 'string') throw new TypeError('Expected String')
90099 if (string.length === 0) return Buffer.allocUnsafe(0)
90100
90101 var bytes = [0]
90102 for (var i = 0; i < string.length; i++) {
90103 var value = ALPHABET_MAP[string[i]]
90104 if (value === undefined) return
90105
90106 for (var j = 0, carry = value; j < bytes.length; ++j) {
90107 carry += bytes[j] * BASE
90108 bytes[j] = carry & 0xff
90109 carry >>= 8
90110 }
90111
90112 while (carry > 0) {
90113 bytes.push(carry & 0xff)
90114 carry >>= 8
90115 }
90116 }
90117
90118 // deal with leading zeros
90119 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
90120 bytes.push(0)
90121 }
90122
90123 return Buffer.from(bytes.reverse())
90124 }
90125
90126 function decode (string) {
90127 var buffer = decodeUnsafe(string)
90128 if (buffer) return buffer
90129
90130 throw new Error('Non-base' + BASE + ' character')
90131 }
90132
90133 return {
90134 encode: encode,
90135 decodeUnsafe: decodeUnsafe,
90136 decode: decode
90137 }
90138 }
90139
90140 },{"safe-buffer":40}],2:[function(require,module,exports){
90141 'use strict'
90142
90143 exports.byteLength = byteLength
90144 exports.toByteArray = toByteArray
90145 exports.fromByteArray = fromByteArray
90146
90147 var lookup = []
90148 var revLookup = []
90149 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
90150
90151 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
90152 for (var i = 0, len = code.length; i < len; ++i) {
90153 lookup[i] = code[i]
90154 revLookup[code.charCodeAt(i)] = i
90155 }
90156
90157 revLookup['-'.charCodeAt(0)] = 62
90158 revLookup['_'.charCodeAt(0)] = 63
90159
90160 function placeHoldersCount (b64) {
90161 var len = b64.length
90162 if (len % 4 > 0) {
90163 throw new Error('Invalid string. Length must be a multiple of 4')
90164 }
90165
90166 // the number of equal signs (place holders)
90167 // if there are two placeholders, than the two characters before it
90168 // represent one byte
90169 // if there is only one, then the three characters before it represent 2 bytes
90170 // this is just a cheap hack to not do indexOf twice
90171 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
90172 }
90173
90174 function byteLength (b64) {
90175 // base64 is 4/3 + up to two characters of the original data
90176 return (b64.length * 3 / 4) - placeHoldersCount(b64)
90177 }
90178
90179 function toByteArray (b64) {
90180 var i, l, tmp, placeHolders, arr
90181 var len = b64.length
90182 placeHolders = placeHoldersCount(b64)
90183
90184 arr = new Arr((len * 3 / 4) - placeHolders)
90185
90186 // if there are placeholders, only get up to the last complete 4 chars
90187 l = placeHolders > 0 ? len - 4 : len
90188
90189 var L = 0
90190
90191 for (i = 0; i < l; i += 4) {
90192 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
90193 arr[L++] = (tmp >> 16) & 0xFF
90194 arr[L++] = (tmp >> 8) & 0xFF
90195 arr[L++] = tmp & 0xFF
90196 }
90197
90198 if (placeHolders === 2) {
90199 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
90200 arr[L++] = tmp & 0xFF
90201 } else if (placeHolders === 1) {
90202 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
90203 arr[L++] = (tmp >> 8) & 0xFF
90204 arr[L++] = tmp & 0xFF
90205 }
90206
90207 return arr
90208 }
90209
90210 function tripletToBase64 (num) {
90211 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
90212 }
90213
90214 function encodeChunk (uint8, start, end) {
90215 var tmp
90216 var output = []
90217 for (var i = start; i < end; i += 3) {
90218 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
90219 output.push(tripletToBase64(tmp))
90220 }
90221 return output.join('')
90222 }
90223
90224 function fromByteArray (uint8) {
90225 var tmp
90226 var len = uint8.length
90227 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
90228 var output = ''
90229 var parts = []
90230 var maxChunkLength = 16383 // must be multiple of 3
90231
90232 // go through the array every three bytes, we'll deal with trailing stuff later
90233 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
90234 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
90235 }
90236
90237 // pad the end with zeros, but make sure to not forget the extra bytes
90238 if (extraBytes === 1) {
90239 tmp = uint8[len - 1]
90240 output += lookup[tmp >> 2]
90241 output += lookup[(tmp << 4) & 0x3F]
90242 output += '=='
90243 } else if (extraBytes === 2) {
90244 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
90245 output += lookup[tmp >> 10]
90246 output += lookup[(tmp >> 4) & 0x3F]
90247 output += lookup[(tmp << 2) & 0x3F]
90248 output += '='
90249 }
90250
90251 parts.push(output)
90252
90253 return parts.join('')
90254 }
90255
90256 },{}],3:[function(require,module,exports){
90257 var bigInt = (function (undefined) {
90258 "use strict";
90259
90260 var BASE = 1e7,
90261 LOG_BASE = 7,
90262 MAX_INT = 9007199254740992,
90263 MAX_INT_ARR = smallToArray(MAX_INT),
90264 LOG_MAX_INT = Math.log(MAX_INT);
90265
90266 function Integer(v, radix) {
90267 if (typeof v === "undefined") return Integer[0];
90268 if (typeof radix !== "undefined") return +radix === 10 ? parseValue(v) : parseBase(v, radix);
90269 return parseValue(v);
90270 }
90271
90272 function BigInteger(value, sign) {
90273 this.value = value;
90274 this.sign = sign;
90275 this.isSmall = false;
90276 }
90277 BigInteger.prototype = Object.create(Integer.prototype);
90278
90279 function SmallInteger(value) {
90280 this.value = value;
90281 this.sign = value < 0;
90282 this.isSmall = true;
90283 }
90284 SmallInteger.prototype = Object.create(Integer.prototype);
90285
90286 function isPrecise(n) {
90287 return -MAX_INT < n && n < MAX_INT;
90288 }
90289
90290 function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes
90291 if (n < 1e7)
90292 return [n];
90293 if (n < 1e14)
90294 return [n % 1e7, Math.floor(n / 1e7)];
90295 return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];
90296 }
90297
90298 function arrayToSmall(arr) { // If BASE changes this function may need to change
90299 trim(arr);
90300 var length = arr.length;
90301 if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {
90302 switch (length) {
90303 case 0: return 0;
90304 case 1: return arr[0];
90305 case 2: return arr[0] + arr[1] * BASE;
90306 default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;
90307 }
90308 }
90309 return arr;
90310 }
90311
90312 function trim(v) {
90313 var i = v.length;
90314 while (v[--i] === 0);
90315 v.length = i + 1;
90316 }
90317
90318 function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger
90319 var x = new Array(length);
90320 var i = -1;
90321 while (++i < length) {
90322 x[i] = 0;
90323 }
90324 return x;
90325 }
90326
90327 function truncate(n) {
90328 if (n > 0) return Math.floor(n);
90329 return Math.ceil(n);
90330 }
90331
90332 function add(a, b) { // assumes a and b are arrays with a.length >= b.length
90333 var l_a = a.length,
90334 l_b = b.length,
90335 r = new Array(l_a),
90336 carry = 0,
90337 base = BASE,
90338 sum, i;
90339 for (i = 0; i < l_b; i++) {
90340 sum = a[i] + b[i] + carry;
90341 carry = sum >= base ? 1 : 0;
90342 r[i] = sum - carry * base;
90343 }
90344 while (i < l_a) {
90345 sum = a[i] + carry;
90346 carry = sum === base ? 1 : 0;
90347 r[i++] = sum - carry * base;
90348 }
90349 if (carry > 0) r.push(carry);
90350 return r;
90351 }
90352
90353 function addAny(a, b) {
90354 if (a.length >= b.length) return add(a, b);
90355 return add(b, a);
90356 }
90357
90358 function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT
90359 var l = a.length,
90360 r = new Array(l),
90361 base = BASE,
90362 sum, i;
90363 for (i = 0; i < l; i++) {
90364 sum = a[i] - base + carry;
90365 carry = Math.floor(sum / base);
90366 r[i] = sum - carry * base;
90367 carry += 1;
90368 }
90369 while (carry > 0) {
90370 r[i++] = carry % base;
90371 carry = Math.floor(carry / base);
90372 }
90373 return r;
90374 }
90375
90376 BigInteger.prototype.add = function (v) {
90377 var n = parseValue(v);
90378 if (this.sign !== n.sign) {
90379 return this.subtract(n.negate());
90380 }
90381 var a = this.value, b = n.value;
90382 if (n.isSmall) {
90383 return new BigInteger(addSmall(a, Math.abs(b)), this.sign);
90384 }
90385 return new BigInteger(addAny(a, b), this.sign);
90386 };
90387 BigInteger.prototype.plus = BigInteger.prototype.add;
90388
90389 SmallInteger.prototype.add = function (v) {
90390 var n = parseValue(v);
90391 var a = this.value;
90392 if (a < 0 !== n.sign) {
90393 return this.subtract(n.negate());
90394 }
90395 var b = n.value;
90396 if (n.isSmall) {
90397 if (isPrecise(a + b)) return new SmallInteger(a + b);
90398 b = smallToArray(Math.abs(b));
90399 }
90400 return new BigInteger(addSmall(b, Math.abs(a)), a < 0);
90401 };
90402 SmallInteger.prototype.plus = SmallInteger.prototype.add;
90403
90404 function subtract(a, b) { // assumes a and b are arrays with a >= b
90405 var a_l = a.length,
90406 b_l = b.length,
90407 r = new Array(a_l),
90408 borrow = 0,
90409 base = BASE,
90410 i, difference;
90411 for (i = 0; i < b_l; i++) {
90412 difference = a[i] - borrow - b[i];
90413 if (difference < 0) {
90414 difference += base;
90415 borrow = 1;
90416 } else borrow = 0;
90417 r[i] = difference;
90418 }
90419 for (i = b_l; i < a_l; i++) {
90420 difference = a[i] - borrow;
90421 if (difference < 0) difference += base;
90422 else {
90423 r[i++] = difference;
90424 break;
90425 }
90426 r[i] = difference;
90427 }
90428 for (; i < a_l; i++) {
90429 r[i] = a[i];
90430 }
90431 trim(r);
90432 return r;
90433 }
90434
90435 function subtractAny(a, b, sign) {
90436 var value;
90437 if (compareAbs(a, b) >= 0) {
90438 value = subtract(a,b);
90439 } else {
90440 value = subtract(b, a);
90441 sign = !sign;
90442 }
90443 value = arrayToSmall(value);
90444 if (typeof value === "number") {
90445 if (sign) value = -value;
90446 return new SmallInteger(value);
90447 }
90448 return new BigInteger(value, sign);
90449 }
90450
90451 function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT
90452 var l = a.length,
90453 r = new Array(l),
90454 carry = -b,
90455 base = BASE,
90456 i, difference;
90457 for (i = 0; i < l; i++) {
90458 difference = a[i] + carry;
90459 carry = Math.floor(difference / base);
90460 difference %= base;
90461 r[i] = difference < 0 ? difference + base : difference;
90462 }
90463 r = arrayToSmall(r);
90464 if (typeof r === "number") {
90465 if (sign) r = -r;
90466 return new SmallInteger(r);
90467 } return new BigInteger(r, sign);
90468 }
90469
90470 BigInteger.prototype.subtract = function (v) {
90471 var n = parseValue(v);
90472 if (this.sign !== n.sign) {
90473 return this.add(n.negate());
90474 }
90475 var a = this.value, b = n.value;
90476 if (n.isSmall)
90477 return subtractSmall(a, Math.abs(b), this.sign);
90478 return subtractAny(a, b, this.sign);
90479 };
90480 BigInteger.prototype.minus = BigInteger.prototype.subtract;
90481
90482 SmallInteger.prototype.subtract = function (v) {
90483 var n = parseValue(v);
90484 var a = this.value;
90485 if (a < 0 !== n.sign) {
90486 return this.add(n.negate());
90487 }
90488 var b = n.value;
90489 if (n.isSmall) {
90490 return new SmallInteger(a - b);
90491 }
90492 return subtractSmall(b, Math.abs(a), a >= 0);
90493 };
90494 SmallInteger.prototype.minus = SmallInteger.prototype.subtract;
90495
90496 BigInteger.prototype.negate = function () {
90497 return new BigInteger(this.value, !this.sign);
90498 };
90499 SmallInteger.prototype.negate = function () {
90500 var sign = this.sign;
90501 var small = new SmallInteger(-this.value);
90502 small.sign = !sign;
90503 return small;
90504 };
90505
90506 BigInteger.prototype.abs = function () {
90507 return new BigInteger(this.value, false);
90508 };
90509 SmallInteger.prototype.abs = function () {
90510 return new SmallInteger(Math.abs(this.value));
90511 };
90512
90513 function multiplyLong(a, b) {
90514 var a_l = a.length,
90515 b_l = b.length,
90516 l = a_l + b_l,
90517 r = createArray(l),
90518 base = BASE,
90519 product, carry, i, a_i, b_j;
90520 for (i = 0; i < a_l; ++i) {
90521 a_i = a[i];
90522 for (var j = 0; j < b_l; ++j) {
90523 b_j = b[j];
90524 product = a_i * b_j + r[i + j];
90525 carry = Math.floor(product / base);
90526 r[i + j] = product - carry * base;
90527 r[i + j + 1] += carry;
90528 }
90529 }
90530 trim(r);
90531 return r;
90532 }
90533
90534 function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE
90535 var l = a.length,
90536 r = new Array(l),
90537 base = BASE,
90538 carry = 0,
90539 product, i;
90540 for (i = 0; i < l; i++) {
90541 product = a[i] * b + carry;
90542 carry = Math.floor(product / base);
90543 r[i] = product - carry * base;
90544 }
90545 while (carry > 0) {
90546 r[i++] = carry % base;
90547 carry = Math.floor(carry / base);
90548 }
90549 return r;
90550 }
90551
90552 function shiftLeft(x, n) {
90553 var r = [];
90554 while (n-- > 0) r.push(0);
90555 return r.concat(x);
90556 }
90557
90558 function multiplyKaratsuba(x, y) {
90559 var n = Math.max(x.length, y.length);
90560
90561 if (n <= 30) return multiplyLong(x, y);
90562 n = Math.ceil(n / 2);
90563
90564 var b = x.slice(n),
90565 a = x.slice(0, n),
90566 d = y.slice(n),
90567 c = y.slice(0, n);
90568
90569 var ac = multiplyKaratsuba(a, c),
90570 bd = multiplyKaratsuba(b, d),
90571 abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));
90572
90573 var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));
90574 trim(product);
90575 return product;
90576 }
90577
90578 // The following function is derived from a surface fit of a graph plotting the performance difference
90579 // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.
90580 function useKaratsuba(l1, l2) {
90581 return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;
90582 }
90583
90584 BigInteger.prototype.multiply = function (v) {
90585 var n = parseValue(v),
90586 a = this.value, b = n.value,
90587 sign = this.sign !== n.sign,
90588 abs;
90589 if (n.isSmall) {
90590 if (b === 0) return Integer[0];
90591 if (b === 1) return this;
90592 if (b === -1) return this.negate();
90593 abs = Math.abs(b);
90594 if (abs < BASE) {
90595 return new BigInteger(multiplySmall(a, abs), sign);
90596 }
90597 b = smallToArray(abs);
90598 }
90599 if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes
90600 return new BigInteger(multiplyKaratsuba(a, b), sign);
90601 return new BigInteger(multiplyLong(a, b), sign);
90602 };
90603
90604 BigInteger.prototype.times = BigInteger.prototype.multiply;
90605
90606 function multiplySmallAndArray(a, b, sign) { // a >= 0
90607 if (a < BASE) {
90608 return new BigInteger(multiplySmall(b, a), sign);
90609 }
90610 return new BigInteger(multiplyLong(b, smallToArray(a)), sign);
90611 }
90612 SmallInteger.prototype._multiplyBySmall = function (a) {
90613 if (isPrecise(a.value * this.value)) {
90614 return new SmallInteger(a.value * this.value);
90615 }
90616 return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);
90617 };
90618 BigInteger.prototype._multiplyBySmall = function (a) {
90619 if (a.value === 0) return Integer[0];
90620 if (a.value === 1) return this;
90621 if (a.value === -1) return this.negate();
90622 return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);
90623 };
90624 SmallInteger.prototype.multiply = function (v) {
90625 return parseValue(v)._multiplyBySmall(this);
90626 };
90627 SmallInteger.prototype.times = SmallInteger.prototype.multiply;
90628
90629 function square(a) {
90630 var l = a.length,
90631 r = createArray(l + l),
90632 base = BASE,
90633 product, carry, i, a_i, a_j;
90634 for (i = 0; i < l; i++) {
90635 a_i = a[i];
90636 for (var j = 0; j < l; j++) {
90637 a_j = a[j];
90638 product = a_i * a_j + r[i + j];
90639 carry = Math.floor(product / base);
90640 r[i + j] = product - carry * base;
90641 r[i + j + 1] += carry;
90642 }
90643 }
90644 trim(r);
90645 return r;
90646 }
90647
90648 BigInteger.prototype.square = function () {
90649 return new BigInteger(square(this.value), false);
90650 };
90651
90652 SmallInteger.prototype.square = function () {
90653 var value = this.value * this.value;
90654 if (isPrecise(value)) return new SmallInteger(value);
90655 return new BigInteger(square(smallToArray(Math.abs(this.value))), false);
90656 };
90657
90658 function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.
90659 var a_l = a.length,
90660 b_l = b.length,
90661 base = BASE,
90662 result = createArray(b.length),
90663 divisorMostSignificantDigit = b[b_l - 1],
90664 // normalization
90665 lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),
90666 remainder = multiplySmall(a, lambda),
90667 divisor = multiplySmall(b, lambda),
90668 quotientDigit, shift, carry, borrow, i, l, q;
90669 if (remainder.length <= a_l) remainder.push(0);
90670 divisor.push(0);
90671 divisorMostSignificantDigit = divisor[b_l - 1];
90672 for (shift = a_l - b_l; shift >= 0; shift--) {
90673 quotientDigit = base - 1;
90674 if (remainder[shift + b_l] !== divisorMostSignificantDigit) {
90675 quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);
90676 }
90677 // quotientDigit <= base - 1
90678 carry = 0;
90679 borrow = 0;
90680 l = divisor.length;
90681 for (i = 0; i < l; i++) {
90682 carry += quotientDigit * divisor[i];
90683 q = Math.floor(carry / base);
90684 borrow += remainder[shift + i] - (carry - q * base);
90685 carry = q;
90686 if (borrow < 0) {
90687 remainder[shift + i] = borrow + base;
90688 borrow = -1;
90689 } else {
90690 remainder[shift + i] = borrow;
90691 borrow = 0;
90692 }
90693 }
90694 while (borrow !== 0) {
90695 quotientDigit -= 1;
90696 carry = 0;
90697 for (i = 0; i < l; i++) {
90698 carry += remainder[shift + i] - base + divisor[i];
90699 if (carry < 0) {
90700 remainder[shift + i] = carry + base;
90701 carry = 0;
90702 } else {
90703 remainder[shift + i] = carry;
90704 carry = 1;
90705 }
90706 }
90707 borrow += carry;
90708 }
90709 result[shift] = quotientDigit;
90710 }
90711 // denormalization
90712 remainder = divModSmall(remainder, lambda)[0];
90713 return [arrayToSmall(result), arrayToSmall(remainder)];
90714 }
90715
90716 function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/
90717 // Performs faster than divMod1 on larger input sizes.
90718 var a_l = a.length,
90719 b_l = b.length,
90720 result = [],
90721 part = [],
90722 base = BASE,
90723 guess, xlen, highx, highy, check;
90724 while (a_l) {
90725 part.unshift(a[--a_l]);
90726 trim(part);
90727 if (compareAbs(part, b) < 0) {
90728 result.push(0);
90729 continue;
90730 }
90731 xlen = part.length;
90732 highx = part[xlen - 1] * base + part[xlen - 2];
90733 highy = b[b_l - 1] * base + b[b_l - 2];
90734 if (xlen > b_l) {
90735 highx = (highx + 1) * base;
90736 }
90737 guess = Math.ceil(highx / highy);
90738 do {
90739 check = multiplySmall(b, guess);
90740 if (compareAbs(check, part) <= 0) break;
90741 guess--;
90742 } while (guess);
90743 result.push(guess);
90744 part = subtract(part, check);
90745 }
90746 result.reverse();
90747 return [arrayToSmall(result), arrayToSmall(part)];
90748 }
90749
90750 function divModSmall(value, lambda) {
90751 var length = value.length,
90752 quotient = createArray(length),
90753 base = BASE,
90754 i, q, remainder, divisor;
90755 remainder = 0;
90756 for (i = length - 1; i >= 0; --i) {
90757 divisor = remainder * base + value[i];
90758 q = truncate(divisor / lambda);
90759 remainder = divisor - q * lambda;
90760 quotient[i] = q | 0;
90761 }
90762 return [quotient, remainder | 0];
90763 }
90764
90765 function divModAny(self, v) {
90766 var value, n = parseValue(v);
90767 var a = self.value, b = n.value;
90768 var quotient;
90769 if (b === 0) throw new Error("Cannot divide by zero");
90770 if (self.isSmall) {
90771 if (n.isSmall) {
90772 return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];
90773 }
90774 return [Integer[0], self];
90775 }
90776 if (n.isSmall) {
90777 if (b === 1) return [self, Integer[0]];
90778 if (b == -1) return [self.negate(), Integer[0]];
90779 var abs = Math.abs(b);
90780 if (abs < BASE) {
90781 value = divModSmall(a, abs);
90782 quotient = arrayToSmall(value[0]);
90783 var remainder = value[1];
90784 if (self.sign) remainder = -remainder;
90785 if (typeof quotient === "number") {
90786 if (self.sign !== n.sign) quotient = -quotient;
90787 return [new SmallInteger(quotient), new SmallInteger(remainder)];
90788 }
90789 return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];
90790 }
90791 b = smallToArray(abs);
90792 }
90793 var comparison = compareAbs(a, b);
90794 if (comparison === -1) return [Integer[0], self];
90795 if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];
90796
90797 // divMod1 is faster on smaller input sizes
90798 if (a.length + b.length <= 200)
90799 value = divMod1(a, b);
90800 else value = divMod2(a, b);
90801
90802 quotient = value[0];
90803 var qSign = self.sign !== n.sign,
90804 mod = value[1],
90805 mSign = self.sign;
90806 if (typeof quotient === "number") {
90807 if (qSign) quotient = -quotient;
90808 quotient = new SmallInteger(quotient);
90809 } else quotient = new BigInteger(quotient, qSign);
90810 if (typeof mod === "number") {
90811 if (mSign) mod = -mod;
90812 mod = new SmallInteger(mod);
90813 } else mod = new BigInteger(mod, mSign);
90814 return [quotient, mod];
90815 }
90816
90817 BigInteger.prototype.divmod = function (v) {
90818 var result = divModAny(this, v);
90819 return {
90820 quotient: result[0],
90821 remainder: result[1]
90822 };
90823 };
90824 SmallInteger.prototype.divmod = BigInteger.prototype.divmod;
90825
90826 BigInteger.prototype.divide = function (v) {
90827 return divModAny(this, v)[0];
90828 };
90829 SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;
90830
90831 BigInteger.prototype.mod = function (v) {
90832 return divModAny(this, v)[1];
90833 };
90834 SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
90835
90836 BigInteger.prototype.pow = function (v) {
90837 var n = parseValue(v),
90838 a = this.value,
90839 b = n.value,
90840 value, x, y;
90841 if (b === 0) return Integer[1];
90842 if (a === 0) return Integer[0];
90843 if (a === 1) return Integer[1];
90844 if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];
90845 if (n.sign) {
90846 return Integer[0];
90847 }
90848 if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large.");
90849 if (this.isSmall) {
90850 if (isPrecise(value = Math.pow(a, b)))
90851 return new SmallInteger(truncate(value));
90852 }
90853 x = this;
90854 y = Integer[1];
90855 while (true) {
90856 if (b & 1 === 1) {
90857 y = y.times(x);
90858 --b;
90859 }
90860 if (b === 0) break;
90861 b /= 2;
90862 x = x.square();
90863 }
90864 return y;
90865 };
90866 SmallInteger.prototype.pow = BigInteger.prototype.pow;
90867
90868 BigInteger.prototype.modPow = function (exp, mod) {
90869 exp = parseValue(exp);
90870 mod = parseValue(mod);
90871 if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0");
90872 var r = Integer[1],
90873 base = this.mod(mod);
90874 while (exp.isPositive()) {
90875 if (base.isZero()) return Integer[0];
90876 if (exp.isOdd()) r = r.multiply(base).mod(mod);
90877 exp = exp.divide(2);
90878 base = base.square().mod(mod);
90879 }
90880 return r;
90881 };
90882 SmallInteger.prototype.modPow = BigInteger.prototype.modPow;
90883
90884 function compareAbs(a, b) {
90885 if (a.length !== b.length) {
90886 return a.length > b.length ? 1 : -1;
90887 }
90888 for (var i = a.length - 1; i >= 0; i--) {
90889 if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;
90890 }
90891 return 0;
90892 }
90893
90894 BigInteger.prototype.compareAbs = function (v) {
90895 var n = parseValue(v),
90896 a = this.value,
90897 b = n.value;
90898 if (n.isSmall) return 1;
90899 return compareAbs(a, b);
90900 };
90901 SmallInteger.prototype.compareAbs = function (v) {
90902 var n = parseValue(v),
90903 a = Math.abs(this.value),
90904 b = n.value;
90905 if (n.isSmall) {
90906 b = Math.abs(b);
90907 return a === b ? 0 : a > b ? 1 : -1;
90908 }
90909 return -1;
90910 };
90911
90912 BigInteger.prototype.compare = function (v) {
90913 // See discussion about comparison with Infinity:
90914 // https://github.com/peterolson/BigInteger.js/issues/61
90915 if (v === Infinity) {
90916 return -1;
90917 }
90918 if (v === -Infinity) {
90919 return 1;
90920 }
90921
90922 var n = parseValue(v),
90923 a = this.value,
90924 b = n.value;
90925 if (this.sign !== n.sign) {
90926 return n.sign ? 1 : -1;
90927 }
90928 if (n.isSmall) {
90929 return this.sign ? -1 : 1;
90930 }
90931 return compareAbs(a, b) * (this.sign ? -1 : 1);
90932 };
90933 BigInteger.prototype.compareTo = BigInteger.prototype.compare;
90934
90935 SmallInteger.prototype.compare = function (v) {
90936 if (v === Infinity) {
90937 return -1;
90938 }
90939 if (v === -Infinity) {
90940 return 1;
90941 }
90942
90943 var n = parseValue(v),
90944 a = this.value,
90945 b = n.value;
90946 if (n.isSmall) {
90947 return a == b ? 0 : a > b ? 1 : -1;
90948 }
90949 if (a < 0 !== n.sign) {
90950 return a < 0 ? -1 : 1;
90951 }
90952 return a < 0 ? 1 : -1;
90953 };
90954 SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;
90955
90956 BigInteger.prototype.equals = function (v) {
90957 return this.compare(v) === 0;
90958 };
90959 SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;
90960
90961 BigInteger.prototype.notEquals = function (v) {
90962 return this.compare(v) !== 0;
90963 };
90964 SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;
90965
90966 BigInteger.prototype.greater = function (v) {
90967 return this.compare(v) > 0;
90968 };
90969 SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;
90970
90971 BigInteger.prototype.lesser = function (v) {
90972 return this.compare(v) < 0;
90973 };
90974 SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;
90975
90976 BigInteger.prototype.greaterOrEquals = function (v) {
90977 return this.compare(v) >= 0;
90978 };
90979 SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;
90980
90981 BigInteger.prototype.lesserOrEquals = function (v) {
90982 return this.compare(v) <= 0;
90983 };
90984 SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;
90985
90986 BigInteger.prototype.isEven = function () {
90987 return (this.value[0] & 1) === 0;
90988 };
90989 SmallInteger.prototype.isEven = function () {
90990 return (this.value & 1) === 0;
90991 };
90992
90993 BigInteger.prototype.isOdd = function () {
90994 return (this.value[0] & 1) === 1;
90995 };
90996 SmallInteger.prototype.isOdd = function () {
90997 return (this.value & 1) === 1;
90998 };
90999
91000 BigInteger.prototype.isPositive = function () {
91001 return !this.sign;
91002 };
91003 SmallInteger.prototype.isPositive = function () {
91004 return this.value > 0;
91005 };
91006
91007 BigInteger.prototype.isNegative = function () {
91008 return this.sign;
91009 };
91010 SmallInteger.prototype.isNegative = function () {
91011 return this.value < 0;
91012 };
91013
91014 BigInteger.prototype.isUnit = function () {
91015 return false;
91016 };
91017 SmallInteger.prototype.isUnit = function () {
91018 return Math.abs(this.value) === 1;
91019 };
91020
91021 BigInteger.prototype.isZero = function () {
91022 return false;
91023 };
91024 SmallInteger.prototype.isZero = function () {
91025 return this.value === 0;
91026 };
91027 BigInteger.prototype.isDivisibleBy = function (v) {
91028 var n = parseValue(v);
91029 var value = n.value;
91030 if (value === 0) return false;
91031 if (value === 1) return true;
91032 if (value === 2) return this.isEven();
91033 return this.mod(n).equals(Integer[0]);
91034 };
91035 SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;
91036
91037 function isBasicPrime(v) {
91038 var n = v.abs();
91039 if (n.isUnit()) return false;
91040 if (n.equals(2) || n.equals(3) || n.equals(5)) return true;
91041 if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;
91042 if (n.lesser(25)) return true;
91043 // we don't know if it's prime: let the other functions figure it out
91044 }
91045
91046 BigInteger.prototype.isPrime = function () {
91047 var isPrime = isBasicPrime(this);
91048 if (isPrime !== undefined) return isPrime;
91049 var n = this.abs(),
91050 nPrev = n.prev();
91051 var a = [2, 3, 5, 7, 11, 13, 17, 19],
91052 b = nPrev,
91053 d, t, i, x;
91054 while (b.isEven()) b = b.divide(2);
91055 for (i = 0; i < a.length; i++) {
91056 x = bigInt(a[i]).modPow(b, n);
91057 if (x.equals(Integer[1]) || x.equals(nPrev)) continue;
91058 for (t = true, d = b; t && d.lesser(nPrev) ; d = d.multiply(2)) {
91059 x = x.square().mod(n);
91060 if (x.equals(nPrev)) t = false;
91061 }
91062 if (t) return false;
91063 }
91064 return true;
91065 };
91066 SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;
91067
91068 BigInteger.prototype.isProbablePrime = function (iterations) {
91069 var isPrime = isBasicPrime(this);
91070 if (isPrime !== undefined) return isPrime;
91071 var n = this.abs();
91072 var t = iterations === undefined ? 5 : iterations;
91073 // use the Fermat primality test
91074 for (var i = 0; i < t; i++) {
91075 var a = bigInt.randBetween(2, n.minus(2));
91076 if (!a.modPow(n.prev(), n).isUnit()) return false; // definitely composite
91077 }
91078 return true; // large chance of being prime
91079 };
91080 SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;
91081
91082 BigInteger.prototype.modInv = function (n) {
91083 var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;
91084 while (!newR.equals(bigInt.zero)) {
91085 q = r.divide(newR);
91086 lastT = t;
91087 lastR = r;
91088 t = newT;
91089 r = newR;
91090 newT = lastT.subtract(q.multiply(newT));
91091 newR = lastR.subtract(q.multiply(newR));
91092 }
91093 if (!r.equals(1)) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime");
91094 if (t.compare(0) === -1) {
91095 t = t.add(n);
91096 }
91097 if (this.isNegative()) {
91098 return t.negate();
91099 }
91100 return t;
91101 };
91102
91103 SmallInteger.prototype.modInv = BigInteger.prototype.modInv;
91104
91105 BigInteger.prototype.next = function () {
91106 var value = this.value;
91107 if (this.sign) {
91108 return subtractSmall(value, 1, this.sign);
91109 }
91110 return new BigInteger(addSmall(value, 1), this.sign);
91111 };
91112 SmallInteger.prototype.next = function () {
91113 var value = this.value;
91114 if (value + 1 < MAX_INT) return new SmallInteger(value + 1);
91115 return new BigInteger(MAX_INT_ARR, false);
91116 };
91117
91118 BigInteger.prototype.prev = function () {
91119 var value = this.value;
91120 if (this.sign) {
91121 return new BigInteger(addSmall(value, 1), true);
91122 }
91123 return subtractSmall(value, 1, this.sign);
91124 };
91125 SmallInteger.prototype.prev = function () {
91126 var value = this.value;
91127 if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);
91128 return new BigInteger(MAX_INT_ARR, true);
91129 };
91130
91131 var powersOfTwo = [1];
91132 while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);
91133 var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];
91134
91135 function shift_isSmall(n) {
91136 return ((typeof n === "number" || typeof n === "string") && +Math.abs(n) <= BASE) ||
91137 (n instanceof BigInteger && n.value.length <= 1);
91138 }
91139
91140 BigInteger.prototype.shiftLeft = function (n) {
91141 if (!shift_isSmall(n)) {
91142 throw new Error(String(n) + " is too large for shifting.");
91143 }
91144 n = +n;
91145 if (n < 0) return this.shiftRight(-n);
91146 var result = this;
91147 while (n >= powers2Length) {
91148 result = result.multiply(highestPower2);
91149 n -= powers2Length - 1;
91150 }
91151 return result.multiply(powersOfTwo[n]);
91152 };
91153 SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;
91154
91155 BigInteger.prototype.shiftRight = function (n) {
91156 var remQuo;
91157 if (!shift_isSmall(n)) {
91158 throw new Error(String(n) + " is too large for shifting.");
91159 }
91160 n = +n;
91161 if (n < 0) return this.shiftLeft(-n);
91162 var result = this;
91163 while (n >= powers2Length) {
91164 if (result.isZero()) return result;
91165 remQuo = divModAny(result, highestPower2);
91166 result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
91167 n -= powers2Length - 1;
91168 }
91169 remQuo = divModAny(result, powersOfTwo[n]);
91170 return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
91171 };
91172 SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
91173
91174 function bitwise(x, y, fn) {
91175 y = parseValue(y);
91176 var xSign = x.isNegative(), ySign = y.isNegative();
91177 var xRem = xSign ? x.not() : x,
91178 yRem = ySign ? y.not() : y;
91179 var xDigit = 0, yDigit = 0;
91180 var xDivMod = null, yDivMod = null;
91181 var result = [];
91182 while (!xRem.isZero() || !yRem.isZero()) {
91183 xDivMod = divModAny(xRem, highestPower2);
91184 xDigit = xDivMod[1].toJSNumber();
91185 if (xSign) {
91186 xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers
91187 }
91188
91189 yDivMod = divModAny(yRem, highestPower2);
91190 yDigit = yDivMod[1].toJSNumber();
91191 if (ySign) {
91192 yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers
91193 }
91194
91195 xRem = xDivMod[0];
91196 yRem = yDivMod[0];
91197 result.push(fn(xDigit, yDigit));
91198 }
91199 var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);
91200 for (var i = result.length - 1; i >= 0; i -= 1) {
91201 sum = sum.multiply(highestPower2).add(bigInt(result[i]));
91202 }
91203 return sum;
91204 }
91205
91206 BigInteger.prototype.not = function () {
91207 return this.negate().prev();
91208 };
91209 SmallInteger.prototype.not = BigInteger.prototype.not;
91210
91211 BigInteger.prototype.and = function (n) {
91212 return bitwise(this, n, function (a, b) { return a & b; });
91213 };
91214 SmallInteger.prototype.and = BigInteger.prototype.and;
91215
91216 BigInteger.prototype.or = function (n) {
91217 return bitwise(this, n, function (a, b) { return a | b; });
91218 };
91219 SmallInteger.prototype.or = BigInteger.prototype.or;
91220
91221 BigInteger.prototype.xor = function (n) {
91222 return bitwise(this, n, function (a, b) { return a ^ b; });
91223 };
91224 SmallInteger.prototype.xor = BigInteger.prototype.xor;
91225
91226 var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
91227 function roughLOB(n) { // get lowestOneBit (rough)
91228 // SmallInteger: return Min(lowestOneBit(n), 1 << 30)
91229 // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]
91230 var v = n.value, x = typeof v === "number" ? v | LOBMASK_I : v[0] + v[1] * BASE | LOBMASK_BI;
91231 return x & -x;
91232 }
91233
91234 function max(a, b) {
91235 a = parseValue(a);
91236 b = parseValue(b);
91237 return a.greater(b) ? a : b;
91238 }
91239 function min(a, b) {
91240 a = parseValue(a);
91241 b = parseValue(b);
91242 return a.lesser(b) ? a : b;
91243 }
91244 function gcd(a, b) {
91245 a = parseValue(a).abs();
91246 b = parseValue(b).abs();
91247 if (a.equals(b)) return a;
91248 if (a.isZero()) return b;
91249 if (b.isZero()) return a;
91250 var c = Integer[1], d, t;
91251 while (a.isEven() && b.isEven()) {
91252 d = Math.min(roughLOB(a), roughLOB(b));
91253 a = a.divide(d);
91254 b = b.divide(d);
91255 c = c.multiply(d);
91256 }
91257 while (a.isEven()) {
91258 a = a.divide(roughLOB(a));
91259 }
91260 do {
91261 while (b.isEven()) {
91262 b = b.divide(roughLOB(b));
91263 }
91264 if (a.greater(b)) {
91265 t = b; b = a; a = t;
91266 }
91267 b = b.subtract(a);
91268 } while (!b.isZero());
91269 return c.isUnit() ? a : a.multiply(c);
91270 }
91271 function lcm(a, b) {
91272 a = parseValue(a).abs();
91273 b = parseValue(b).abs();
91274 return a.divide(gcd(a, b)).multiply(b);
91275 }
91276 function randBetween(a, b) {
91277 a = parseValue(a);
91278 b = parseValue(b);
91279 var low = min(a, b), high = max(a, b);
91280 var range = high.subtract(low).add(1);
91281 if (range.isSmall) return low.add(Math.floor(Math.random() * range));
91282 var length = range.value.length - 1;
91283 var result = [], restricted = true;
91284 for (var i = length; i >= 0; i--) {
91285 var top = restricted ? range.value[i] : BASE;
91286 var digit = truncate(Math.random() * top);
91287 result.unshift(digit);
91288 if (digit < top) restricted = false;
91289 }
91290 result = arrayToSmall(result);
91291 return low.add(typeof result === "number" ? new SmallInteger(result) : new BigInteger(result, false));
91292 }
91293 var parseBase = function (text, base) {
91294 var length = text.length;
91295 var i;
91296 var absBase = Math.abs(base);
91297 for(var i = 0; i < length; i++) {
91298 var c = text[i].toLowerCase();
91299 if(c === "-") continue;
91300 if(/[a-z0-9]/.test(c)) {
91301 if(/[0-9]/.test(c) && +c >= absBase) {
91302 if(c === "1" && absBase === 1) continue;
91303 throw new Error(c + " is not a valid digit in base " + base + ".");
91304 } else if(c.charCodeAt(0) - 87 >= absBase) {
91305 throw new Error(c + " is not a valid digit in base " + base + ".");
91306 }
91307 }
91308 }
91309 if (2 <= base && base <= 36) {
91310 if (length <= LOG_MAX_INT / Math.log(base)) {
91311 var result = parseInt(text, base);
91312 if(isNaN(result)) {
91313 throw new Error(c + " is not a valid digit in base " + base + ".");
91314 }
91315 return new SmallInteger(parseInt(text, base));
91316 }
91317 }
91318 base = parseValue(base);
91319 var digits = [];
91320 var isNegative = text[0] === "-";
91321 for (i = isNegative ? 1 : 0; i < text.length; i++) {
91322 var c = text[i].toLowerCase(),
91323 charCode = c.charCodeAt(0);
91324 if (48 <= charCode && charCode <= 57) digits.push(parseValue(c));
91325 else if (97 <= charCode && charCode <= 122) digits.push(parseValue(c.charCodeAt(0) - 87));
91326 else if (c === "<") {
91327 var start = i;
91328 do { i++; } while (text[i] !== ">");
91329 digits.push(parseValue(text.slice(start + 1, i)));
91330 }
91331 else throw new Error(c + " is not a valid character");
91332 }
91333 return parseBaseFromArray(digits, base, isNegative);
91334 };
91335
91336 function parseBaseFromArray(digits, base, isNegative) {
91337 var val = Integer[0], pow = Integer[1], i;
91338 for (i = digits.length - 1; i >= 0; i--) {
91339 val = val.add(digits[i].times(pow));
91340 pow = pow.times(base);
91341 }
91342 return isNegative ? val.negate() : val;
91343 }
91344
91345 function stringify(digit) {
91346 var v = digit.value;
91347 if (typeof v === "number") v = [v];
91348 if (v.length === 1 && v[0] <= 35) {
91349 return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(v[0]);
91350 }
91351 return "<" + v + ">";
91352 }
91353 function toBase(n, base) {
91354 base = bigInt(base);
91355 if (base.isZero()) {
91356 if (n.isZero()) return "0";
91357 throw new Error("Cannot convert nonzero numbers to base 0.");
91358 }
91359 if (base.equals(-1)) {
91360 if (n.isZero()) return "0";
91361 if (n.isNegative()) return new Array(1 - n).join("10");
91362 return "1" + new Array(+n).join("01");
91363 }
91364 var minusSign = "";
91365 if (n.isNegative() && base.isPositive()) {
91366 minusSign = "-";
91367 n = n.abs();
91368 }
91369 if (base.equals(1)) {
91370 if (n.isZero()) return "0";
91371 return minusSign + new Array(+n + 1).join(1);
91372 }
91373 var out = [];
91374 var left = n, divmod;
91375 while (left.isNegative() || left.compareAbs(base) >= 0) {
91376 divmod = left.divmod(base);
91377 left = divmod.quotient;
91378 var digit = divmod.remainder;
91379 if (digit.isNegative()) {
91380 digit = base.minus(digit).abs();
91381 left = left.next();
91382 }
91383 out.push(stringify(digit));
91384 }
91385 out.push(stringify(left));
91386 return minusSign + out.reverse().join("");
91387 }
91388
91389 BigInteger.prototype.toString = function (radix) {
91390 if (radix === undefined) radix = 10;
91391 if (radix !== 10) return toBase(this, radix);
91392 var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit;
91393 while (--l >= 0) {
91394 digit = String(v[l]);
91395 str += zeros.slice(digit.length) + digit;
91396 }
91397 var sign = this.sign ? "-" : "";
91398 return sign + str;
91399 };
91400
91401 SmallInteger.prototype.toString = function (radix) {
91402 if (radix === undefined) radix = 10;
91403 if (radix != 10) return toBase(this, radix);
91404 return String(this.value);
91405 };
91406 BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function() { return this.toString(); }
91407
91408 BigInteger.prototype.valueOf = function () {
91409 return +this.toString();
91410 };
91411 BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;
91412
91413 SmallInteger.prototype.valueOf = function () {
91414 return this.value;
91415 };
91416 SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;
91417
91418 function parseStringValue(v) {
91419 if (isPrecise(+v)) {
91420 var x = +v;
91421 if (x === truncate(x))
91422 return new SmallInteger(x);
91423 throw "Invalid integer: " + v;
91424 }
91425 var sign = v[0] === "-";
91426 if (sign) v = v.slice(1);
91427 var split = v.split(/e/i);
91428 if (split.length > 2) throw new Error("Invalid integer: " + split.join("e"));
91429 if (split.length === 2) {
91430 var exp = split[1];
91431 if (exp[0] === "+") exp = exp.slice(1);
91432 exp = +exp;
91433 if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent.");
91434 var text = split[0];
91435 var decimalPlace = text.indexOf(".");
91436 if (decimalPlace >= 0) {
91437 exp -= text.length - decimalPlace - 1;
91438 text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);
91439 }
91440 if (exp < 0) throw new Error("Cannot include negative exponent part for integers");
91441 text += (new Array(exp + 1)).join("0");
91442 v = text;
91443 }
91444 var isValid = /^([0-9][0-9]*)$/.test(v);
91445 if (!isValid) throw new Error("Invalid integer: " + v);
91446 var r = [], max = v.length, l = LOG_BASE, min = max - l;
91447 while (max > 0) {
91448 r.push(+v.slice(min, max));
91449 min -= l;
91450 if (min < 0) min = 0;
91451 max -= l;
91452 }
91453 trim(r);
91454 return new BigInteger(r, sign);
91455 }
91456
91457 function parseNumberValue(v) {
91458 if (isPrecise(v)) {
91459 if (v !== truncate(v)) throw new Error(v + " is not an integer.");
91460 return new SmallInteger(v);
91461 }
91462 return parseStringValue(v.toString());
91463 }
91464
91465 function parseValue(v) {
91466 if (typeof v === "number") {
91467 return parseNumberValue(v);
91468 }
91469 if (typeof v === "string") {
91470 return parseStringValue(v);
91471 }
91472 return v;
91473 }
91474 // Pre-define numbers in range [-999,999]
91475 for (var i = 0; i < 1000; i++) {
91476 Integer[i] = new SmallInteger(i);
91477 if (i > 0) Integer[-i] = new SmallInteger(-i);
91478 }
91479 // Backwards compatibility
91480 Integer.one = Integer[1];
91481 Integer.zero = Integer[0];
91482 Integer.minusOne = Integer[-1];
91483 Integer.max = max;
91484 Integer.min = min;
91485 Integer.gcd = gcd;
91486 Integer.lcm = lcm;
91487 Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger; };
91488 Integer.randBetween = randBetween;
91489
91490 Integer.fromArray = function (digits, base, isNegative) {
91491 return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);
91492 };
91493
91494 return Integer;
91495 })();
91496
91497 // Node.js check
91498 if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
91499 module.exports = bigInt;
91500 }
91501
91502 //amd check
91503 if ( typeof define === "function" && define.amd ) {
91504 define( "big-integer", [], function() {
91505 return bigInt;
91506 });
91507 }
91508
91509 },{}],4:[function(require,module,exports){
91510
91511 },{}],5:[function(require,module,exports){
91512 var basex = require('base-x')
91513 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
91514
91515 module.exports = basex(ALPHABET)
91516
91517 },{"base-x":1}],6:[function(require,module,exports){
91518 'use strict'
91519
91520 var base58 = require('bs58')
91521 var Buffer = require('safe-buffer').Buffer
91522
91523 module.exports = function (checksumFn) {
91524 // Encode a buffer as a base58-check encoded string
91525 function encode (payload) {
91526 var checksum = checksumFn(payload)
91527
91528 return base58.encode(Buffer.concat([
91529 payload,
91530 checksum
91531 ], payload.length + 4))
91532 }
91533
91534 function decodeRaw (buffer) {
91535 var payload = buffer.slice(0, -4)
91536 var checksum = buffer.slice(-4)
91537 var newChecksum = checksumFn(payload)
91538
91539 if (checksum[0] ^ newChecksum[0] |
91540 checksum[1] ^ newChecksum[1] |
91541 checksum[2] ^ newChecksum[2] |
91542 checksum[3] ^ newChecksum[3]) return
91543
91544 return payload
91545 }
91546
91547 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
91548 function decodeUnsafe (string) {
91549 var buffer = base58.decodeUnsafe(string)
91550 if (!buffer) return
91551
91552 return decodeRaw(buffer)
91553 }
91554
91555 function decode (string) {
91556 var buffer = base58.decode(string)
91557 var payload = decodeRaw(buffer, checksumFn)
91558 if (!payload) throw new Error('Invalid checksum')
91559 return payload
91560 }
91561
91562 return {
91563 encode: encode,
91564 decode: decode,
91565 decodeUnsafe: decodeUnsafe
91566 }
91567 }
91568
91569 },{"bs58":5,"safe-buffer":40}],7:[function(require,module,exports){
91570 'use strict'
91571
91572 var createHash = require('create-hash')
91573 var bs58checkBase = require('./base')
91574
91575 // SHA256(SHA256(buffer))
91576 function sha256x2 (buffer) {
91577 var tmp = createHash('sha256').update(buffer).digest()
91578 return createHash('sha256').update(tmp).digest()
91579 }
91580
91581 module.exports = bs58checkBase(sha256x2)
91582
91583 },{"./base":6,"create-hash":15}],8:[function(require,module,exports){
91584 /*!
91585 * The buffer module from node.js, for the browser.
91586 *
91587 * @author Feross Aboukhadijeh <https://feross.org>
91588 * @license MIT
91589 */
91590 /* eslint-disable no-proto */
91591
91592 'use strict'
91593
91594 var base64 = require('base64-js')
91595 var ieee754 = require('ieee754')
91596
91597 exports.Buffer = Buffer
91598 exports.SlowBuffer = SlowBuffer
91599 exports.INSPECT_MAX_BYTES = 50
91600
91601 var K_MAX_LENGTH = 0x7fffffff
91602 exports.kMaxLength = K_MAX_LENGTH
91603
91604 /**
91605 * If `Buffer.TYPED_ARRAY_SUPPORT`:
91606 * === true Use Uint8Array implementation (fastest)
91607 * === false Print warning and recommend using `buffer` v4.x which has an Object
91608 * implementation (most compatible, even IE6)
91609 *
91610 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
91611 * Opera 11.6+, iOS 4.2+.
91612 *
91613 * We report that the browser does not support typed arrays if the are not subclassable
91614 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
91615 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
91616 * for __proto__ and has a buggy typed array implementation.
91617 */
91618 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
91619
91620 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
91621 typeof console.error === 'function') {
91622 console.error(
91623 'This browser lacks typed array (Uint8Array) support which is required by ' +
91624 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
91625 )
91626 }
91627
91628 function typedArraySupport () {
91629 // Can typed array instances can be augmented?
91630 try {
91631 var arr = new Uint8Array(1)
91632 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
91633 return arr.foo() === 42
91634 } catch (e) {
91635 return false
91636 }
91637 }
91638
91639 function createBuffer (length) {
91640 if (length > K_MAX_LENGTH) {
91641 throw new RangeError('Invalid typed array length')
91642 }
91643 // Return an augmented `Uint8Array` instance
91644 var buf = new Uint8Array(length)
91645 buf.__proto__ = Buffer.prototype
91646 return buf
91647 }
91648
91649 /**
91650 * The Buffer constructor returns instances of `Uint8Array` that have their
91651 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
91652 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
91653 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
91654 * returns a single octet.
91655 *
91656 * The `Uint8Array` prototype remains unmodified.
91657 */
91658
91659 function Buffer (arg, encodingOrOffset, length) {
91660 // Common case.
91661 if (typeof arg === 'number') {
91662 if (typeof encodingOrOffset === 'string') {
91663 throw new Error(
91664 'If encoding is specified then the first argument must be a string'
91665 )
91666 }
91667 return allocUnsafe(arg)
91668 }
91669 return from(arg, encodingOrOffset, length)
91670 }
91671
91672 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
91673 if (typeof Symbol !== 'undefined' && Symbol.species &&
91674 Buffer[Symbol.species] === Buffer) {
91675 Object.defineProperty(Buffer, Symbol.species, {
91676 value: null,
91677 configurable: true,
91678 enumerable: false,
91679 writable: false
91680 })
91681 }
91682
91683 Buffer.poolSize = 8192 // not used by this implementation
91684
91685 function from (value, encodingOrOffset, length) {
91686 if (typeof value === 'number') {
91687 throw new TypeError('"value" argument must not be a number')
91688 }
91689
91690 if (isArrayBuffer(value)) {
91691 return fromArrayBuffer(value, encodingOrOffset, length)
91692 }
91693
91694 if (typeof value === 'string') {
91695 return fromString(value, encodingOrOffset)
91696 }
91697
91698 return fromObject(value)
91699 }
91700
91701 /**
91702 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
91703 * if value is a number.
91704 * Buffer.from(str[, encoding])
91705 * Buffer.from(array)
91706 * Buffer.from(buffer)
91707 * Buffer.from(arrayBuffer[, byteOffset[, length]])
91708 **/
91709 Buffer.from = function (value, encodingOrOffset, length) {
91710 return from(value, encodingOrOffset, length)
91711 }
91712
91713 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
91714 // https://github.com/feross/buffer/pull/148
91715 Buffer.prototype.__proto__ = Uint8Array.prototype
91716 Buffer.__proto__ = Uint8Array
91717
91718 function assertSize (size) {
91719 if (typeof size !== 'number') {
91720 throw new TypeError('"size" argument must be a number')
91721 } else if (size < 0) {
91722 throw new RangeError('"size" argument must not be negative')
91723 }
91724 }
91725
91726 function alloc (size, fill, encoding) {
91727 assertSize(size)
91728 if (size <= 0) {
91729 return createBuffer(size)
91730 }
91731 if (fill !== undefined) {
91732 // Only pay attention to encoding if it's a string. This
91733 // prevents accidentally sending in a number that would
91734 // be interpretted as a start offset.
91735 return typeof encoding === 'string'
91736 ? createBuffer(size).fill(fill, encoding)
91737 : createBuffer(size).fill(fill)
91738 }
91739 return createBuffer(size)
91740 }
91741
91742 /**
91743 * Creates a new filled Buffer instance.
91744 * alloc(size[, fill[, encoding]])
91745 **/
91746 Buffer.alloc = function (size, fill, encoding) {
91747 return alloc(size, fill, encoding)
91748 }
91749
91750 function allocUnsafe (size) {
91751 assertSize(size)
91752 return createBuffer(size < 0 ? 0 : checked(size) | 0)
91753 }
91754
91755 /**
91756 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
91757 * */
91758 Buffer.allocUnsafe = function (size) {
91759 return allocUnsafe(size)
91760 }
91761 /**
91762 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
91763 */
91764 Buffer.allocUnsafeSlow = function (size) {
91765 return allocUnsafe(size)
91766 }
91767
91768 function fromString (string, encoding) {
91769 if (typeof encoding !== 'string' || encoding === '') {
91770 encoding = 'utf8'
91771 }
91772
91773 if (!Buffer.isEncoding(encoding)) {
91774 throw new TypeError('"encoding" must be a valid string encoding')
91775 }
91776
91777 var length = byteLength(string, encoding) | 0
91778 var buf = createBuffer(length)
91779
91780 var actual = buf.write(string, encoding)
91781
91782 if (actual !== length) {
91783 // Writing a hex string, for example, that contains invalid characters will
91784 // cause everything after the first invalid character to be ignored. (e.g.
91785 // 'abxxcd' will be treated as 'ab')
91786 buf = buf.slice(0, actual)
91787 }
91788
91789 return buf
91790 }
91791
91792 function fromArrayLike (array) {
91793 var length = array.length < 0 ? 0 : checked(array.length) | 0
91794 var buf = createBuffer(length)
91795 for (var i = 0; i < length; i += 1) {
91796 buf[i] = array[i] & 255
91797 }
91798 return buf
91799 }
91800
91801 function fromArrayBuffer (array, byteOffset, length) {
91802 if (byteOffset < 0 || array.byteLength < byteOffset) {
91803 throw new RangeError('\'offset\' is out of bounds')
91804 }
91805
91806 if (array.byteLength < byteOffset + (length || 0)) {
91807 throw new RangeError('\'length\' is out of bounds')
91808 }
91809
91810 var buf
91811 if (byteOffset === undefined && length === undefined) {
91812 buf = new Uint8Array(array)
91813 } else if (length === undefined) {
91814 buf = new Uint8Array(array, byteOffset)
91815 } else {
91816 buf = new Uint8Array(array, byteOffset, length)
91817 }
91818
91819 // Return an augmented `Uint8Array` instance
91820 buf.__proto__ = Buffer.prototype
91821 return buf
91822 }
91823
91824 function fromObject (obj) {
91825 if (Buffer.isBuffer(obj)) {
91826 var len = checked(obj.length) | 0
91827 var buf = createBuffer(len)
91828
91829 if (buf.length === 0) {
91830 return buf
91831 }
91832
91833 obj.copy(buf, 0, 0, len)
91834 return buf
91835 }
91836
91837 if (obj) {
91838 if (isArrayBufferView(obj) || 'length' in obj) {
91839 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
91840 return createBuffer(0)
91841 }
91842 return fromArrayLike(obj)
91843 }
91844
91845 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
91846 return fromArrayLike(obj.data)
91847 }
91848 }
91849
91850 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
91851 }
91852
91853 function checked (length) {
91854 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
91855 // length is NaN (which is otherwise coerced to zero.)
91856 if (length >= K_MAX_LENGTH) {
91857 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
91858 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
91859 }
91860 return length | 0
91861 }
91862
91863 function SlowBuffer (length) {
91864 if (+length != length) { // eslint-disable-line eqeqeq
91865 length = 0
91866 }
91867 return Buffer.alloc(+length)
91868 }
91869
91870 Buffer.isBuffer = function isBuffer (b) {
91871 return b != null && b._isBuffer === true
91872 }
91873
91874 Buffer.compare = function compare (a, b) {
91875 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
91876 throw new TypeError('Arguments must be Buffers')
91877 }
91878
91879 if (a === b) return 0
91880
91881 var x = a.length
91882 var y = b.length
91883
91884 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
91885 if (a[i] !== b[i]) {
91886 x = a[i]
91887 y = b[i]
91888 break
91889 }
91890 }
91891
91892 if (x < y) return -1
91893 if (y < x) return 1
91894 return 0
91895 }
91896
91897 Buffer.isEncoding = function isEncoding (encoding) {
91898 switch (String(encoding).toLowerCase()) {
91899 case 'hex':
91900 case 'utf8':
91901 case 'utf-8':
91902 case 'ascii':
91903 case 'latin1':
91904 case 'binary':
91905 case 'base64':
91906 case 'ucs2':
91907 case 'ucs-2':
91908 case 'utf16le':
91909 case 'utf-16le':
91910 return true
91911 default:
91912 return false
91913 }
91914 }
91915
91916 Buffer.concat = function concat (list, length) {
91917 if (!Array.isArray(list)) {
91918 throw new TypeError('"list" argument must be an Array of Buffers')
91919 }
91920
91921 if (list.length === 0) {
91922 return Buffer.alloc(0)
91923 }
91924
91925 var i
91926 if (length === undefined) {
91927 length = 0
91928 for (i = 0; i < list.length; ++i) {
91929 length += list[i].length
91930 }
91931 }
91932
91933 var buffer = Buffer.allocUnsafe(length)
91934 var pos = 0
91935 for (i = 0; i < list.length; ++i) {
91936 var buf = list[i]
91937 if (!Buffer.isBuffer(buf)) {
91938 throw new TypeError('"list" argument must be an Array of Buffers')
91939 }
91940 buf.copy(buffer, pos)
91941 pos += buf.length
91942 }
91943 return buffer
91944 }
91945
91946 function byteLength (string, encoding) {
91947 if (Buffer.isBuffer(string)) {
91948 return string.length
91949 }
91950 if (isArrayBufferView(string) || isArrayBuffer(string)) {
91951 return string.byteLength
91952 }
91953 if (typeof string !== 'string') {
91954 string = '' + string
91955 }
91956
91957 var len = string.length
91958 if (len === 0) return 0
91959
91960 // Use a for loop to avoid recursion
91961 var loweredCase = false
91962 for (;;) {
91963 switch (encoding) {
91964 case 'ascii':
91965 case 'latin1':
91966 case 'binary':
91967 return len
91968 case 'utf8':
91969 case 'utf-8':
91970 case undefined:
91971 return utf8ToBytes(string).length
91972 case 'ucs2':
91973 case 'ucs-2':
91974 case 'utf16le':
91975 case 'utf-16le':
91976 return len * 2
91977 case 'hex':
91978 return len >>> 1
91979 case 'base64':
91980 return base64ToBytes(string).length
91981 default:
91982 if (loweredCase) return utf8ToBytes(string).length // assume utf8
91983 encoding = ('' + encoding).toLowerCase()
91984 loweredCase = true
91985 }
91986 }
91987 }
91988 Buffer.byteLength = byteLength
91989
91990 function slowToString (encoding, start, end) {
91991 var loweredCase = false
91992
91993 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
91994 // property of a typed array.
91995
91996 // This behaves neither like String nor Uint8Array in that we set start/end
91997 // to their upper/lower bounds if the value passed is out of range.
91998 // undefined is handled specially as per ECMA-262 6th Edition,
91999 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
92000 if (start === undefined || start < 0) {
92001 start = 0
92002 }
92003 // Return early if start > this.length. Done here to prevent potential uint32
92004 // coercion fail below.
92005 if (start > this.length) {
92006 return ''
92007 }
92008
92009 if (end === undefined || end > this.length) {
92010 end = this.length
92011 }
92012
92013 if (end <= 0) {
92014 return ''
92015 }
92016
92017 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
92018 end >>>= 0
92019 start >>>= 0
92020
92021 if (end <= start) {
92022 return ''
92023 }
92024
92025 if (!encoding) encoding = 'utf8'
92026
92027 while (true) {
92028 switch (encoding) {
92029 case 'hex':
92030 return hexSlice(this, start, end)
92031
92032 case 'utf8':
92033 case 'utf-8':
92034 return utf8Slice(this, start, end)
92035
92036 case 'ascii':
92037 return asciiSlice(this, start, end)
92038
92039 case 'latin1':
92040 case 'binary':
92041 return latin1Slice(this, start, end)
92042
92043 case 'base64':
92044 return base64Slice(this, start, end)
92045
92046 case 'ucs2':
92047 case 'ucs-2':
92048 case 'utf16le':
92049 case 'utf-16le':
92050 return utf16leSlice(this, start, end)
92051
92052 default:
92053 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
92054 encoding = (encoding + '').toLowerCase()
92055 loweredCase = true
92056 }
92057 }
92058 }
92059
92060 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
92061 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
92062 // reliably in a browserify context because there could be multiple different
92063 // copies of the 'buffer' package in use. This method works even for Buffer
92064 // instances that were created from another copy of the `buffer` package.
92065 // See: https://github.com/feross/buffer/issues/154
92066 Buffer.prototype._isBuffer = true
92067
92068 function swap (b, n, m) {
92069 var i = b[n]
92070 b[n] = b[m]
92071 b[m] = i
92072 }
92073
92074 Buffer.prototype.swap16 = function swap16 () {
92075 var len = this.length
92076 if (len % 2 !== 0) {
92077 throw new RangeError('Buffer size must be a multiple of 16-bits')
92078 }
92079 for (var i = 0; i < len; i += 2) {
92080 swap(this, i, i + 1)
92081 }
92082 return this
92083 }
92084
92085 Buffer.prototype.swap32 = function swap32 () {
92086 var len = this.length
92087 if (len % 4 !== 0) {
92088 throw new RangeError('Buffer size must be a multiple of 32-bits')
92089 }
92090 for (var i = 0; i < len; i += 4) {
92091 swap(this, i, i + 3)
92092 swap(this, i + 1, i + 2)
92093 }
92094 return this
92095 }
92096
92097 Buffer.prototype.swap64 = function swap64 () {
92098 var len = this.length
92099 if (len % 8 !== 0) {
92100 throw new RangeError('Buffer size must be a multiple of 64-bits')
92101 }
92102 for (var i = 0; i < len; i += 8) {
92103 swap(this, i, i + 7)
92104 swap(this, i + 1, i + 6)
92105 swap(this, i + 2, i + 5)
92106 swap(this, i + 3, i + 4)
92107 }
92108 return this
92109 }
92110
92111 Buffer.prototype.toString = function toString () {
92112 var length = this.length
92113 if (length === 0) return ''
92114 if (arguments.length === 0) return utf8Slice(this, 0, length)
92115 return slowToString.apply(this, arguments)
92116 }
92117
92118 Buffer.prototype.equals = function equals (b) {
92119 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
92120 if (this === b) return true
92121 return Buffer.compare(this, b) === 0
92122 }
92123
92124 Buffer.prototype.inspect = function inspect () {
92125 var str = ''
92126 var max = exports.INSPECT_MAX_BYTES
92127 if (this.length > 0) {
92128 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
92129 if (this.length > max) str += ' ... '
92130 }
92131 return '<Buffer ' + str + '>'
92132 }
92133
92134 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
92135 if (!Buffer.isBuffer(target)) {
92136 throw new TypeError('Argument must be a Buffer')
92137 }
92138
92139 if (start === undefined) {
92140 start = 0
92141 }
92142 if (end === undefined) {
92143 end = target ? target.length : 0
92144 }
92145 if (thisStart === undefined) {
92146 thisStart = 0
92147 }
92148 if (thisEnd === undefined) {
92149 thisEnd = this.length
92150 }
92151
92152 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
92153 throw new RangeError('out of range index')
92154 }
92155
92156 if (thisStart >= thisEnd && start >= end) {
92157 return 0
92158 }
92159 if (thisStart >= thisEnd) {
92160 return -1
92161 }
92162 if (start >= end) {
92163 return 1
92164 }
92165
92166 start >>>= 0
92167 end >>>= 0
92168 thisStart >>>= 0
92169 thisEnd >>>= 0
92170
92171 if (this === target) return 0
92172
92173 var x = thisEnd - thisStart
92174 var y = end - start
92175 var len = Math.min(x, y)
92176
92177 var thisCopy = this.slice(thisStart, thisEnd)
92178 var targetCopy = target.slice(start, end)
92179
92180 for (var i = 0; i < len; ++i) {
92181 if (thisCopy[i] !== targetCopy[i]) {
92182 x = thisCopy[i]
92183 y = targetCopy[i]
92184 break
92185 }
92186 }
92187
92188 if (x < y) return -1
92189 if (y < x) return 1
92190 return 0
92191 }
92192
92193 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
92194 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
92195 //
92196 // Arguments:
92197 // - buffer - a Buffer to search
92198 // - val - a string, Buffer, or number
92199 // - byteOffset - an index into `buffer`; will be clamped to an int32
92200 // - encoding - an optional encoding, relevant is val is a string
92201 // - dir - true for indexOf, false for lastIndexOf
92202 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
92203 // Empty buffer means no match
92204 if (buffer.length === 0) return -1
92205
92206 // Normalize byteOffset
92207 if (typeof byteOffset === 'string') {
92208 encoding = byteOffset
92209 byteOffset = 0
92210 } else if (byteOffset > 0x7fffffff) {
92211 byteOffset = 0x7fffffff
92212 } else if (byteOffset < -0x80000000) {
92213 byteOffset = -0x80000000
92214 }
92215 byteOffset = +byteOffset // Coerce to Number.
92216 if (numberIsNaN(byteOffset)) {
92217 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
92218 byteOffset = dir ? 0 : (buffer.length - 1)
92219 }
92220
92221 // Normalize byteOffset: negative offsets start from the end of the buffer
92222 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
92223 if (byteOffset >= buffer.length) {
92224 if (dir) return -1
92225 else byteOffset = buffer.length - 1
92226 } else if (byteOffset < 0) {
92227 if (dir) byteOffset = 0
92228 else return -1
92229 }
92230
92231 // Normalize val
92232 if (typeof val === 'string') {
92233 val = Buffer.from(val, encoding)
92234 }
92235
92236 // Finally, search either indexOf (if dir is true) or lastIndexOf
92237 if (Buffer.isBuffer(val)) {
92238 // Special case: looking for empty string/buffer always fails
92239 if (val.length === 0) {
92240 return -1
92241 }
92242 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
92243 } else if (typeof val === 'number') {
92244 val = val & 0xFF // Search for a byte value [0-255]
92245 if (typeof Uint8Array.prototype.indexOf === 'function') {
92246 if (dir) {
92247 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
92248 } else {
92249 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
92250 }
92251 }
92252 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
92253 }
92254
92255 throw new TypeError('val must be string, number or Buffer')
92256 }
92257
92258 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
92259 var indexSize = 1
92260 var arrLength = arr.length
92261 var valLength = val.length
92262
92263 if (encoding !== undefined) {
92264 encoding = String(encoding).toLowerCase()
92265 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
92266 encoding === 'utf16le' || encoding === 'utf-16le') {
92267 if (arr.length < 2 || val.length < 2) {
92268 return -1
92269 }
92270 indexSize = 2
92271 arrLength /= 2
92272 valLength /= 2
92273 byteOffset /= 2
92274 }
92275 }
92276
92277 function read (buf, i) {
92278 if (indexSize === 1) {
92279 return buf[i]
92280 } else {
92281 return buf.readUInt16BE(i * indexSize)
92282 }
92283 }
92284
92285 var i
92286 if (dir) {
92287 var foundIndex = -1
92288 for (i = byteOffset; i < arrLength; i++) {
92289 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
92290 if (foundIndex === -1) foundIndex = i
92291 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
92292 } else {
92293 if (foundIndex !== -1) i -= i - foundIndex
92294 foundIndex = -1
92295 }
92296 }
92297 } else {
92298 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
92299 for (i = byteOffset; i >= 0; i--) {
92300 var found = true
92301 for (var j = 0; j < valLength; j++) {
92302 if (read(arr, i + j) !== read(val, j)) {
92303 found = false
92304 break
92305 }
92306 }
92307 if (found) return i
92308 }
92309 }
92310
92311 return -1
92312 }
92313
92314 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
92315 return this.indexOf(val, byteOffset, encoding) !== -1
92316 }
92317
92318 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
92319 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
92320 }
92321
92322 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
92323 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
92324 }
92325
92326 function hexWrite (buf, string, offset, length) {
92327 offset = Number(offset) || 0
92328 var remaining = buf.length - offset
92329 if (!length) {
92330 length = remaining
92331 } else {
92332 length = Number(length)
92333 if (length > remaining) {
92334 length = remaining
92335 }
92336 }
92337
92338 // must be an even number of digits
92339 var strLen = string.length
92340 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
92341
92342 if (length > strLen / 2) {
92343 length = strLen / 2
92344 }
92345 for (var i = 0; i < length; ++i) {
92346 var parsed = parseInt(string.substr(i * 2, 2), 16)
92347 if (numberIsNaN(parsed)) return i
92348 buf[offset + i] = parsed
92349 }
92350 return i
92351 }
92352
92353 function utf8Write (buf, string, offset, length) {
92354 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
92355 }
92356
92357 function asciiWrite (buf, string, offset, length) {
92358 return blitBuffer(asciiToBytes(string), buf, offset, length)
92359 }
92360
92361 function latin1Write (buf, string, offset, length) {
92362 return asciiWrite(buf, string, offset, length)
92363 }
92364
92365 function base64Write (buf, string, offset, length) {
92366 return blitBuffer(base64ToBytes(string), buf, offset, length)
92367 }
92368
92369 function ucs2Write (buf, string, offset, length) {
92370 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
92371 }
92372
92373 Buffer.prototype.write = function write (string, offset, length, encoding) {
92374 // Buffer#write(string)
92375 if (offset === undefined) {
92376 encoding = 'utf8'
92377 length = this.length
92378 offset = 0
92379 // Buffer#write(string, encoding)
92380 } else if (length === undefined && typeof offset === 'string') {
92381 encoding = offset
92382 length = this.length
92383 offset = 0
92384 // Buffer#write(string, offset[, length][, encoding])
92385 } else if (isFinite(offset)) {
92386 offset = offset >>> 0
92387 if (isFinite(length)) {
92388 length = length >>> 0
92389 if (encoding === undefined) encoding = 'utf8'
92390 } else {
92391 encoding = length
92392 length = undefined
92393 }
92394 } else {
92395 throw new Error(
92396 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
92397 )
92398 }
92399
92400 var remaining = this.length - offset
92401 if (length === undefined || length > remaining) length = remaining
92402
92403 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
92404 throw new RangeError('Attempt to write outside buffer bounds')
92405 }
92406
92407 if (!encoding) encoding = 'utf8'
92408
92409 var loweredCase = false
92410 for (;;) {
92411 switch (encoding) {
92412 case 'hex':
92413 return hexWrite(this, string, offset, length)
92414
92415 case 'utf8':
92416 case 'utf-8':
92417 return utf8Write(this, string, offset, length)
92418
92419 case 'ascii':
92420 return asciiWrite(this, string, offset, length)
92421
92422 case 'latin1':
92423 case 'binary':
92424 return latin1Write(this, string, offset, length)
92425
92426 case 'base64':
92427 // Warning: maxLength not taken into account in base64Write
92428 return base64Write(this, string, offset, length)
92429
92430 case 'ucs2':
92431 case 'ucs-2':
92432 case 'utf16le':
92433 case 'utf-16le':
92434 return ucs2Write(this, string, offset, length)
92435
92436 default:
92437 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
92438 encoding = ('' + encoding).toLowerCase()
92439 loweredCase = true
92440 }
92441 }
92442 }
92443
92444 Buffer.prototype.toJSON = function toJSON () {
92445 return {
92446 type: 'Buffer',
92447 data: Array.prototype.slice.call(this._arr || this, 0)
92448 }
92449 }
92450
92451 function base64Slice (buf, start, end) {
92452 if (start === 0 && end === buf.length) {
92453 return base64.fromByteArray(buf)
92454 } else {
92455 return base64.fromByteArray(buf.slice(start, end))
92456 }
92457 }
92458
92459 function utf8Slice (buf, start, end) {
92460 end = Math.min(buf.length, end)
92461 var res = []
92462
92463 var i = start
92464 while (i < end) {
92465 var firstByte = buf[i]
92466 var codePoint = null
92467 var bytesPerSequence = (firstByte > 0xEF) ? 4
92468 : (firstByte > 0xDF) ? 3
92469 : (firstByte > 0xBF) ? 2
92470 : 1
92471
92472 if (i + bytesPerSequence <= end) {
92473 var secondByte, thirdByte, fourthByte, tempCodePoint
92474
92475 switch (bytesPerSequence) {
92476 case 1:
92477 if (firstByte < 0x80) {
92478 codePoint = firstByte
92479 }
92480 break
92481 case 2:
92482 secondByte = buf[i + 1]
92483 if ((secondByte & 0xC0) === 0x80) {
92484 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
92485 if (tempCodePoint > 0x7F) {
92486 codePoint = tempCodePoint
92487 }
92488 }
92489 break
92490 case 3:
92491 secondByte = buf[i + 1]
92492 thirdByte = buf[i + 2]
92493 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
92494 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
92495 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
92496 codePoint = tempCodePoint
92497 }
92498 }
92499 break
92500 case 4:
92501 secondByte = buf[i + 1]
92502 thirdByte = buf[i + 2]
92503 fourthByte = buf[i + 3]
92504 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
92505 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
92506 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
92507 codePoint = tempCodePoint
92508 }
92509 }
92510 }
92511 }
92512
92513 if (codePoint === null) {
92514 // we did not generate a valid codePoint so insert a
92515 // replacement char (U+FFFD) and advance only 1 byte
92516 codePoint = 0xFFFD
92517 bytesPerSequence = 1
92518 } else if (codePoint > 0xFFFF) {
92519 // encode to utf16 (surrogate pair dance)
92520 codePoint -= 0x10000
92521 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
92522 codePoint = 0xDC00 | codePoint & 0x3FF
92523 }
92524
92525 res.push(codePoint)
92526 i += bytesPerSequence
92527 }
92528
92529 return decodeCodePointsArray(res)
92530 }
92531
92532 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
92533 // the lowest limit is Chrome, with 0x10000 args.
92534 // We go 1 magnitude less, for safety
92535 var MAX_ARGUMENTS_LENGTH = 0x1000
92536
92537 function decodeCodePointsArray (codePoints) {
92538 var len = codePoints.length
92539 if (len <= MAX_ARGUMENTS_LENGTH) {
92540 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
92541 }
92542
92543 // Decode in chunks to avoid "call stack size exceeded".
92544 var res = ''
92545 var i = 0
92546 while (i < len) {
92547 res += String.fromCharCode.apply(
92548 String,
92549 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
92550 )
92551 }
92552 return res
92553 }
92554
92555 function asciiSlice (buf, start, end) {
92556 var ret = ''
92557 end = Math.min(buf.length, end)
92558
92559 for (var i = start; i < end; ++i) {
92560 ret += String.fromCharCode(buf[i] & 0x7F)
92561 }
92562 return ret
92563 }
92564
92565 function latin1Slice (buf, start, end) {
92566 var ret = ''
92567 end = Math.min(buf.length, end)
92568
92569 for (var i = start; i < end; ++i) {
92570 ret += String.fromCharCode(buf[i])
92571 }
92572 return ret
92573 }
92574
92575 function hexSlice (buf, start, end) {
92576 var len = buf.length
92577
92578 if (!start || start < 0) start = 0
92579 if (!end || end < 0 || end > len) end = len
92580
92581 var out = ''
92582 for (var i = start; i < end; ++i) {
92583 out += toHex(buf[i])
92584 }
92585 return out
92586 }
92587
92588 function utf16leSlice (buf, start, end) {
92589 var bytes = buf.slice(start, end)
92590 var res = ''
92591 for (var i = 0; i < bytes.length; i += 2) {
92592 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
92593 }
92594 return res
92595 }
92596
92597 Buffer.prototype.slice = function slice (start, end) {
92598 var len = this.length
92599 start = ~~start
92600 end = end === undefined ? len : ~~end
92601
92602 if (start < 0) {
92603 start += len
92604 if (start < 0) start = 0
92605 } else if (start > len) {
92606 start = len
92607 }
92608
92609 if (end < 0) {
92610 end += len
92611 if (end < 0) end = 0
92612 } else if (end > len) {
92613 end = len
92614 }
92615
92616 if (end < start) end = start
92617
92618 var newBuf = this.subarray(start, end)
92619 // Return an augmented `Uint8Array` instance
92620 newBuf.__proto__ = Buffer.prototype
92621 return newBuf
92622 }
92623
92624 /*
92625 * Need to make sure that buffer isn't trying to write out of bounds.
92626 */
92627 function checkOffset (offset, ext, length) {
92628 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
92629 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
92630 }
92631
92632 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
92633 offset = offset >>> 0
92634 byteLength = byteLength >>> 0
92635 if (!noAssert) checkOffset(offset, byteLength, this.length)
92636
92637 var val = this[offset]
92638 var mul = 1
92639 var i = 0
92640 while (++i < byteLength && (mul *= 0x100)) {
92641 val += this[offset + i] * mul
92642 }
92643
92644 return val
92645 }
92646
92647 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
92648 offset = offset >>> 0
92649 byteLength = byteLength >>> 0
92650 if (!noAssert) {
92651 checkOffset(offset, byteLength, this.length)
92652 }
92653
92654 var val = this[offset + --byteLength]
92655 var mul = 1
92656 while (byteLength > 0 && (mul *= 0x100)) {
92657 val += this[offset + --byteLength] * mul
92658 }
92659
92660 return val
92661 }
92662
92663 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
92664 offset = offset >>> 0
92665 if (!noAssert) checkOffset(offset, 1, this.length)
92666 return this[offset]
92667 }
92668
92669 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
92670 offset = offset >>> 0
92671 if (!noAssert) checkOffset(offset, 2, this.length)
92672 return this[offset] | (this[offset + 1] << 8)
92673 }
92674
92675 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
92676 offset = offset >>> 0
92677 if (!noAssert) checkOffset(offset, 2, this.length)
92678 return (this[offset] << 8) | this[offset + 1]
92679 }
92680
92681 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
92682 offset = offset >>> 0
92683 if (!noAssert) checkOffset(offset, 4, this.length)
92684
92685 return ((this[offset]) |
92686 (this[offset + 1] << 8) |
92687 (this[offset + 2] << 16)) +
92688 (this[offset + 3] * 0x1000000)
92689 }
92690
92691 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
92692 offset = offset >>> 0
92693 if (!noAssert) checkOffset(offset, 4, this.length)
92694
92695 return (this[offset] * 0x1000000) +
92696 ((this[offset + 1] << 16) |
92697 (this[offset + 2] << 8) |
92698 this[offset + 3])
92699 }
92700
92701 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
92702 offset = offset >>> 0
92703 byteLength = byteLength >>> 0
92704 if (!noAssert) checkOffset(offset, byteLength, this.length)
92705
92706 var val = this[offset]
92707 var mul = 1
92708 var i = 0
92709 while (++i < byteLength && (mul *= 0x100)) {
92710 val += this[offset + i] * mul
92711 }
92712 mul *= 0x80
92713
92714 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
92715
92716 return val
92717 }
92718
92719 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
92720 offset = offset >>> 0
92721 byteLength = byteLength >>> 0
92722 if (!noAssert) checkOffset(offset, byteLength, this.length)
92723
92724 var i = byteLength
92725 var mul = 1
92726 var val = this[offset + --i]
92727 while (i > 0 && (mul *= 0x100)) {
92728 val += this[offset + --i] * mul
92729 }
92730 mul *= 0x80
92731
92732 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
92733
92734 return val
92735 }
92736
92737 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
92738 offset = offset >>> 0
92739 if (!noAssert) checkOffset(offset, 1, this.length)
92740 if (!(this[offset] & 0x80)) return (this[offset])
92741 return ((0xff - this[offset] + 1) * -1)
92742 }
92743
92744 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
92745 offset = offset >>> 0
92746 if (!noAssert) checkOffset(offset, 2, this.length)
92747 var val = this[offset] | (this[offset + 1] << 8)
92748 return (val & 0x8000) ? val | 0xFFFF0000 : val
92749 }
92750
92751 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
92752 offset = offset >>> 0
92753 if (!noAssert) checkOffset(offset, 2, this.length)
92754 var val = this[offset + 1] | (this[offset] << 8)
92755 return (val & 0x8000) ? val | 0xFFFF0000 : val
92756 }
92757
92758 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
92759 offset = offset >>> 0
92760 if (!noAssert) checkOffset(offset, 4, this.length)
92761
92762 return (this[offset]) |
92763 (this[offset + 1] << 8) |
92764 (this[offset + 2] << 16) |
92765 (this[offset + 3] << 24)
92766 }
92767
92768 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
92769 offset = offset >>> 0
92770 if (!noAssert) checkOffset(offset, 4, this.length)
92771
92772 return (this[offset] << 24) |
92773 (this[offset + 1] << 16) |
92774 (this[offset + 2] << 8) |
92775 (this[offset + 3])
92776 }
92777
92778 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
92779 offset = offset >>> 0
92780 if (!noAssert) checkOffset(offset, 4, this.length)
92781 return ieee754.read(this, offset, true, 23, 4)
92782 }
92783
92784 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
92785 offset = offset >>> 0
92786 if (!noAssert) checkOffset(offset, 4, this.length)
92787 return ieee754.read(this, offset, false, 23, 4)
92788 }
92789
92790 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
92791 offset = offset >>> 0
92792 if (!noAssert) checkOffset(offset, 8, this.length)
92793 return ieee754.read(this, offset, true, 52, 8)
92794 }
92795
92796 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
92797 offset = offset >>> 0
92798 if (!noAssert) checkOffset(offset, 8, this.length)
92799 return ieee754.read(this, offset, false, 52, 8)
92800 }
92801
92802 function checkInt (buf, value, offset, ext, max, min) {
92803 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
92804 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
92805 if (offset + ext > buf.length) throw new RangeError('Index out of range')
92806 }
92807
92808 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
92809 value = +value
92810 offset = offset >>> 0
92811 byteLength = byteLength >>> 0
92812 if (!noAssert) {
92813 var maxBytes = Math.pow(2, 8 * byteLength) - 1
92814 checkInt(this, value, offset, byteLength, maxBytes, 0)
92815 }
92816
92817 var mul = 1
92818 var i = 0
92819 this[offset] = value & 0xFF
92820 while (++i < byteLength && (mul *= 0x100)) {
92821 this[offset + i] = (value / mul) & 0xFF
92822 }
92823
92824 return offset + byteLength
92825 }
92826
92827 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
92828 value = +value
92829 offset = offset >>> 0
92830 byteLength = byteLength >>> 0
92831 if (!noAssert) {
92832 var maxBytes = Math.pow(2, 8 * byteLength) - 1
92833 checkInt(this, value, offset, byteLength, maxBytes, 0)
92834 }
92835
92836 var i = byteLength - 1
92837 var mul = 1
92838 this[offset + i] = value & 0xFF
92839 while (--i >= 0 && (mul *= 0x100)) {
92840 this[offset + i] = (value / mul) & 0xFF
92841 }
92842
92843 return offset + byteLength
92844 }
92845
92846 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
92847 value = +value
92848 offset = offset >>> 0
92849 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
92850 this[offset] = (value & 0xff)
92851 return offset + 1
92852 }
92853
92854 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
92855 value = +value
92856 offset = offset >>> 0
92857 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
92858 this[offset] = (value & 0xff)
92859 this[offset + 1] = (value >>> 8)
92860 return offset + 2
92861 }
92862
92863 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
92864 value = +value
92865 offset = offset >>> 0
92866 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
92867 this[offset] = (value >>> 8)
92868 this[offset + 1] = (value & 0xff)
92869 return offset + 2
92870 }
92871
92872 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
92873 value = +value
92874 offset = offset >>> 0
92875 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
92876 this[offset + 3] = (value >>> 24)
92877 this[offset + 2] = (value >>> 16)
92878 this[offset + 1] = (value >>> 8)
92879 this[offset] = (value & 0xff)
92880 return offset + 4
92881 }
92882
92883 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
92884 value = +value
92885 offset = offset >>> 0
92886 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
92887 this[offset] = (value >>> 24)
92888 this[offset + 1] = (value >>> 16)
92889 this[offset + 2] = (value >>> 8)
92890 this[offset + 3] = (value & 0xff)
92891 return offset + 4
92892 }
92893
92894 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
92895 value = +value
92896 offset = offset >>> 0
92897 if (!noAssert) {
92898 var limit = Math.pow(2, (8 * byteLength) - 1)
92899
92900 checkInt(this, value, offset, byteLength, limit - 1, -limit)
92901 }
92902
92903 var i = 0
92904 var mul = 1
92905 var sub = 0
92906 this[offset] = value & 0xFF
92907 while (++i < byteLength && (mul *= 0x100)) {
92908 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
92909 sub = 1
92910 }
92911 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
92912 }
92913
92914 return offset + byteLength
92915 }
92916
92917 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
92918 value = +value
92919 offset = offset >>> 0
92920 if (!noAssert) {
92921 var limit = Math.pow(2, (8 * byteLength) - 1)
92922
92923 checkInt(this, value, offset, byteLength, limit - 1, -limit)
92924 }
92925
92926 var i = byteLength - 1
92927 var mul = 1
92928 var sub = 0
92929 this[offset + i] = value & 0xFF
92930 while (--i >= 0 && (mul *= 0x100)) {
92931 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
92932 sub = 1
92933 }
92934 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
92935 }
92936
92937 return offset + byteLength
92938 }
92939
92940 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
92941 value = +value
92942 offset = offset >>> 0
92943 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
92944 if (value < 0) value = 0xff + value + 1
92945 this[offset] = (value & 0xff)
92946 return offset + 1
92947 }
92948
92949 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
92950 value = +value
92951 offset = offset >>> 0
92952 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
92953 this[offset] = (value & 0xff)
92954 this[offset + 1] = (value >>> 8)
92955 return offset + 2
92956 }
92957
92958 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
92959 value = +value
92960 offset = offset >>> 0
92961 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
92962 this[offset] = (value >>> 8)
92963 this[offset + 1] = (value & 0xff)
92964 return offset + 2
92965 }
92966
92967 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
92968 value = +value
92969 offset = offset >>> 0
92970 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
92971 this[offset] = (value & 0xff)
92972 this[offset + 1] = (value >>> 8)
92973 this[offset + 2] = (value >>> 16)
92974 this[offset + 3] = (value >>> 24)
92975 return offset + 4
92976 }
92977
92978 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
92979 value = +value
92980 offset = offset >>> 0
92981 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
92982 if (value < 0) value = 0xffffffff + value + 1
92983 this[offset] = (value >>> 24)
92984 this[offset + 1] = (value >>> 16)
92985 this[offset + 2] = (value >>> 8)
92986 this[offset + 3] = (value & 0xff)
92987 return offset + 4
92988 }
92989
92990 function checkIEEE754 (buf, value, offset, ext, max, min) {
92991 if (offset + ext > buf.length) throw new RangeError('Index out of range')
92992 if (offset < 0) throw new RangeError('Index out of range')
92993 }
92994
92995 function writeFloat (buf, value, offset, littleEndian, noAssert) {
92996 value = +value
92997 offset = offset >>> 0
92998 if (!noAssert) {
92999 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
93000 }
93001 ieee754.write(buf, value, offset, littleEndian, 23, 4)
93002 return offset + 4
93003 }
93004
93005 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
93006 return writeFloat(this, value, offset, true, noAssert)
93007 }
93008
93009 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
93010 return writeFloat(this, value, offset, false, noAssert)
93011 }
93012
93013 function writeDouble (buf, value, offset, littleEndian, noAssert) {
93014 value = +value
93015 offset = offset >>> 0
93016 if (!noAssert) {
93017 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
93018 }
93019 ieee754.write(buf, value, offset, littleEndian, 52, 8)
93020 return offset + 8
93021 }
93022
93023 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
93024 return writeDouble(this, value, offset, true, noAssert)
93025 }
93026
93027 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
93028 return writeDouble(this, value, offset, false, noAssert)
93029 }
93030
93031 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
93032 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
93033 if (!start) start = 0
93034 if (!end && end !== 0) end = this.length
93035 if (targetStart >= target.length) targetStart = target.length
93036 if (!targetStart) targetStart = 0
93037 if (end > 0 && end < start) end = start
93038
93039 // Copy 0 bytes; we're done
93040 if (end === start) return 0
93041 if (target.length === 0 || this.length === 0) return 0
93042
93043 // Fatal error conditions
93044 if (targetStart < 0) {
93045 throw new RangeError('targetStart out of bounds')
93046 }
93047 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
93048 if (end < 0) throw new RangeError('sourceEnd out of bounds')
93049
93050 // Are we oob?
93051 if (end > this.length) end = this.length
93052 if (target.length - targetStart < end - start) {
93053 end = target.length - targetStart + start
93054 }
93055
93056 var len = end - start
93057 var i
93058
93059 if (this === target && start < targetStart && targetStart < end) {
93060 // descending copy from end
93061 for (i = len - 1; i >= 0; --i) {
93062 target[i + targetStart] = this[i + start]
93063 }
93064 } else if (len < 1000) {
93065 // ascending copy from start
93066 for (i = 0; i < len; ++i) {
93067 target[i + targetStart] = this[i + start]
93068 }
93069 } else {
93070 Uint8Array.prototype.set.call(
93071 target,
93072 this.subarray(start, start + len),
93073 targetStart
93074 )
93075 }
93076
93077 return len
93078 }
93079
93080 // Usage:
93081 // buffer.fill(number[, offset[, end]])
93082 // buffer.fill(buffer[, offset[, end]])
93083 // buffer.fill(string[, offset[, end]][, encoding])
93084 Buffer.prototype.fill = function fill (val, start, end, encoding) {
93085 // Handle string cases:
93086 if (typeof val === 'string') {
93087 if (typeof start === 'string') {
93088 encoding = start
93089 start = 0
93090 end = this.length
93091 } else if (typeof end === 'string') {
93092 encoding = end
93093 end = this.length
93094 }
93095 if (val.length === 1) {
93096 var code = val.charCodeAt(0)
93097 if (code < 256) {
93098 val = code
93099 }
93100 }
93101 if (encoding !== undefined && typeof encoding !== 'string') {
93102 throw new TypeError('encoding must be a string')
93103 }
93104 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
93105 throw new TypeError('Unknown encoding: ' + encoding)
93106 }
93107 } else if (typeof val === 'number') {
93108 val = val & 255
93109 }
93110
93111 // Invalid ranges are not set to a default, so can range check early.
93112 if (start < 0 || this.length < start || this.length < end) {
93113 throw new RangeError('Out of range index')
93114 }
93115
93116 if (end <= start) {
93117 return this
93118 }
93119
93120 start = start >>> 0
93121 end = end === undefined ? this.length : end >>> 0
93122
93123 if (!val) val = 0
93124
93125 var i
93126 if (typeof val === 'number') {
93127 for (i = start; i < end; ++i) {
93128 this[i] = val
93129 }
93130 } else {
93131 var bytes = Buffer.isBuffer(val)
93132 ? val
93133 : new Buffer(val, encoding)
93134 var len = bytes.length
93135 for (i = 0; i < end - start; ++i) {
93136 this[i + start] = bytes[i % len]
93137 }
93138 }
93139
93140 return this
93141 }
93142
93143 // HELPER FUNCTIONS
93144 // ================
93145
93146 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
93147
93148 function base64clean (str) {
93149 // Node strips out invalid characters like \n and \t from the string, base64-js does not
93150 str = str.trim().replace(INVALID_BASE64_RE, '')
93151 // Node converts strings with length < 2 to ''
93152 if (str.length < 2) return ''
93153 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
93154 while (str.length % 4 !== 0) {
93155 str = str + '='
93156 }
93157 return str
93158 }
93159
93160 function toHex (n) {
93161 if (n < 16) return '0' + n.toString(16)
93162 return n.toString(16)
93163 }
93164
93165 function utf8ToBytes (string, units) {
93166 units = units || Infinity
93167 var codePoint
93168 var length = string.length
93169 var leadSurrogate = null
93170 var bytes = []
93171
93172 for (var i = 0; i < length; ++i) {
93173 codePoint = string.charCodeAt(i)
93174
93175 // is surrogate component
93176 if (codePoint > 0xD7FF && codePoint < 0xE000) {
93177 // last char was a lead
93178 if (!leadSurrogate) {
93179 // no lead yet
93180 if (codePoint > 0xDBFF) {
93181 // unexpected trail
93182 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93183 continue
93184 } else if (i + 1 === length) {
93185 // unpaired lead
93186 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93187 continue
93188 }
93189
93190 // valid lead
93191 leadSurrogate = codePoint
93192
93193 continue
93194 }
93195
93196 // 2 leads in a row
93197 if (codePoint < 0xDC00) {
93198 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93199 leadSurrogate = codePoint
93200 continue
93201 }
93202
93203 // valid surrogate pair
93204 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
93205 } else if (leadSurrogate) {
93206 // valid bmp char, but last char was a lead
93207 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93208 }
93209
93210 leadSurrogate = null
93211
93212 // encode utf8
93213 if (codePoint < 0x80) {
93214 if ((units -= 1) < 0) break
93215 bytes.push(codePoint)
93216 } else if (codePoint < 0x800) {
93217 if ((units -= 2) < 0) break
93218 bytes.push(
93219 codePoint >> 0x6 | 0xC0,
93220 codePoint & 0x3F | 0x80
93221 )
93222 } else if (codePoint < 0x10000) {
93223 if ((units -= 3) < 0) break
93224 bytes.push(
93225 codePoint >> 0xC | 0xE0,
93226 codePoint >> 0x6 & 0x3F | 0x80,
93227 codePoint & 0x3F | 0x80
93228 )
93229 } else if (codePoint < 0x110000) {
93230 if ((units -= 4) < 0) break
93231 bytes.push(
93232 codePoint >> 0x12 | 0xF0,
93233 codePoint >> 0xC & 0x3F | 0x80,
93234 codePoint >> 0x6 & 0x3F | 0x80,
93235 codePoint & 0x3F | 0x80
93236 )
93237 } else {
93238 throw new Error('Invalid code point')
93239 }
93240 }
93241
93242 return bytes
93243 }
93244
93245 function asciiToBytes (str) {
93246 var byteArray = []
93247 for (var i = 0; i < str.length; ++i) {
93248 // Node's code seems to be doing this and not & 0x7F..
93249 byteArray.push(str.charCodeAt(i) & 0xFF)
93250 }
93251 return byteArray
93252 }
93253
93254 function utf16leToBytes (str, units) {
93255 var c, hi, lo
93256 var byteArray = []
93257 for (var i = 0; i < str.length; ++i) {
93258 if ((units -= 2) < 0) break
93259
93260 c = str.charCodeAt(i)
93261 hi = c >> 8
93262 lo = c % 256
93263 byteArray.push(lo)
93264 byteArray.push(hi)
93265 }
93266
93267 return byteArray
93268 }
93269
93270 function base64ToBytes (str) {
93271 return base64.toByteArray(base64clean(str))
93272 }
93273
93274 function blitBuffer (src, dst, offset, length) {
93275 for (var i = 0; i < length; ++i) {
93276 if ((i + offset >= dst.length) || (i >= src.length)) break
93277 dst[i + offset] = src[i]
93278 }
93279 return i
93280 }
93281
93282 // ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check
93283 // but they should be treated as valid. See: https://github.com/feross/buffer/issues/166
93284 function isArrayBuffer (obj) {
93285 return obj instanceof ArrayBuffer ||
93286 (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&
93287 typeof obj.byteLength === 'number')
93288 }
93289
93290 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
93291 function isArrayBufferView (obj) {
93292 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
93293 }
93294
93295 function numberIsNaN (obj) {
93296 return obj !== obj // eslint-disable-line no-self-compare
93297 }
93298
93299 },{"base64-js":2,"ieee754":20}],9:[function(require,module,exports){
93300 /**
93301 * @license
93302 * https://github.com/bitcoincashjs/cashaddr
93303 * Copyright (c) 2017-2018 Emilio Almansi
93304 * Distributed under the MIT software license, see the accompanying
93305 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93306 */
93307
93308 'use strict';
93309
93310 var validate = require('./validation').validate;
93311
93312 /**
93313 * Base32 encoding and decoding.
93314 *
93315 * @module base32
93316 */
93317
93318 /**
93319 * Charset containing the 32 symbols used in the base32 encoding.
93320 * @private
93321 */
93322 var CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';
93323
93324 /**
93325 * Inverted index mapping each symbol into its index within the charset.
93326 * @private
93327 */
93328 var CHARSET_INVERSE_INDEX = {
93329 'q': 0, 'p': 1, 'z': 2, 'r': 3, 'y': 4, '9': 5, 'x': 6, '8': 7,
93330 'g': 8, 'f': 9, '2': 10, 't': 11, 'v': 12, 'd': 13, 'w': 14, '0': 15,
93331 's': 16, '3': 17, 'j': 18, 'n': 19, '5': 20, '4': 21, 'k': 22, 'h': 23,
93332 'c': 24, 'e': 25, '6': 26, 'm': 27, 'u': 28, 'a': 29, '7': 30, 'l': 31,
93333 };
93334
93335 /**
93336 * Encodes the given array of 5-bit integers as a base32-encoded string.
93337 *
93338 * @static
93339 * @param {Uint8Array} data Array of integers between 0 and 31 inclusive.
93340 * @returns {string}
93341 * @throws {ValidationError}
93342 */
93343 function encode(data) {
93344 validate(data instanceof Uint8Array, 'Invalid data: ' + data + '.');
93345 var base32 = '';
93346 for (var i = 0; i < data.length; ++i) {
93347 var value = data[i];
93348 validate(0 <= value && value < 32, 'Invalid value: ' + value + '.');
93349 base32 += CHARSET[value];
93350 }
93351 return base32;
93352 }
93353
93354 /**
93355 * Decodes the given base32-encoded string into an array of 5-bit integers.
93356 *
93357 * @static
93358 * @param {string} string
93359 * @returns {Uint8Array}
93360 * @throws {ValidationError}
93361 */
93362 function decode(string) {
93363 validate(typeof string === 'string', 'Invalid base32-encoded string: ' + string + '.');
93364 var data = new Uint8Array(string.length);
93365 for (var i = 0; i < string.length; ++i) {
93366 var value = string[i];
93367 validate(value in CHARSET_INVERSE_INDEX, 'Invalid value: ' + value + '.');
93368 data[i] = CHARSET_INVERSE_INDEX[value];
93369 }
93370 return data;
93371 }
93372
93373 module.exports = {
93374 encode: encode,
93375 decode: decode,
93376 };
93377
93378 },{"./validation":12}],10:[function(require,module,exports){
93379 /**
93380 * @license
93381 * https://github.com/bitcoincashjs/cashaddr
93382 * Copyright (c) 2017-2018 Emilio Almansi
93383 * Distributed under the MIT software license, see the accompanying
93384 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93385 */
93386
93387 'use strict';
93388
93389 var base32 = require('./base32');
93390 var bigInt = require('big-integer');
93391 var convertBits = require('./convertBits');
93392 var validation = require('./validation');
93393 var validate = validation.validate;
93394
93395 /**
93396 * Encoding and decoding of the new Cash Address format for Bitcoin Cash. <br />
93397 * Compliant with the original cashaddr specification:
93398 * {@link https://github.com/Bitcoin-UAHF/spec/blob/master/cashaddr.md}
93399 * @module cashaddr
93400 */
93401
93402 /**
93403 * Encodes a hash from a given type into a Bitcoin Cash address with the given prefix.
93404 *
93405 * @static
93406 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93407 * @param {string} type Type of address to generate. Either 'P2PKH' or 'P2SH'.
93408 * @param {Uint8Array} hash Hash to encode represented as an array of 8-bit integers.
93409 * @returns {string}
93410 * @throws {ValidationError}
93411 */
93412 function encode(prefix, type, hash) {
93413 validate(typeof prefix === 'string' && isValidPrefix(prefix), 'Invalid prefix: ' + prefix + '.');
93414 validate(typeof type === 'string', 'Invalid type: ' + type + '.');
93415 validate(hash instanceof Uint8Array, 'Invalid hash: ' + hash + '.');
93416 var prefixData = concat(prefixToUint5Array(prefix), new Uint8Array(1));
93417 var versionByte = getTypeBits(type) + getHashSizeBits(hash);
93418 var payloadData = toUint5Array(concat(Uint8Array.of(versionByte), hash));
93419 var checksumData = concat(concat(prefixData, payloadData), new Uint8Array(8));
93420 var payload = concat(payloadData, checksumToUint5Array(polymod(checksumData)));
93421 return prefix + ':' + base32.encode(payload);
93422 }
93423
93424 /**
93425 * Decodes the given address into its constituting prefix, type and hash. See [#encode()]{@link encode}.
93426 *
93427 * @static
93428 * @param {string} address Address to decode. E.g.: 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'.
93429 * @returns {object}
93430 * @throws {ValidationError}
93431 */
93432 function decode(address) {
93433 validate(typeof address === 'string' && hasSingleCase(address), 'Invalid address: ' + address + '.');
93434 var pieces = address.toLowerCase().split(':');
93435 validate(pieces.length === 2, 'Missing prefix: ' + address + '.');
93436 var prefix = pieces[0];
93437 var payload = base32.decode(pieces[1]);
93438 validate(validChecksum(prefix, payload), 'Invalid checksum: ' + address + '.');
93439 var payloadData = fromUint5Array(payload.slice(0, -8));
93440 var versionByte = payloadData[0];
93441 var hash = payloadData.slice(1);
93442 validate(getHashSize(versionByte) === hash.length * 8, 'Invalid hash size: ' + address + '.');
93443 var type = getType(versionByte);
93444 return {
93445 prefix: prefix,
93446 type: type,
93447 hash: hash,
93448 };
93449 }
93450
93451 /**
93452 * Error thrown when encoding or decoding fail due to invalid input.
93453 *
93454 * @constructor ValidationError
93455 * @param {string} message Error description.
93456 */
93457 var ValidationError = validation.ValidationError;
93458
93459 /**
93460 * Valid address prefixes.
93461 *
93462 * @private
93463 */
93464 var VALID_PREFIXES = ['bitcoincash', 'bchtest', 'bchreg'];
93465
93466 /**
93467 * Checks whether a string is a valid prefix; ie., it has a single letter case
93468 * and is one of 'bitcoincash', 'bchtest', or 'bchreg'.
93469 *
93470 * @private
93471 * @param {string} prefix
93472 * @returns {boolean}
93473 */
93474 function isValidPrefix(prefix) {
93475 return hasSingleCase(prefix) && VALID_PREFIXES.indexOf(prefix.toLowerCase()) !== -1;
93476 }
93477
93478 /**
93479 * Derives an array from the given prefix to be used in the computation
93480 * of the address' checksum.
93481 *
93482 * @private
93483 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93484 * @returns {Uint8Array}
93485 */
93486 function prefixToUint5Array(prefix) {
93487 var result = new Uint8Array(prefix.length);
93488 for (var i = 0; i < prefix.length; ++i) {
93489 result[i] = prefix[i].charCodeAt(0) & 31;
93490 }
93491 return result;
93492 }
93493
93494 /**
93495 * Returns an array representation of the given checksum to be encoded
93496 * within the address' payload.
93497 *
93498 * @private
93499 * @param {BigInteger} checksum Computed checksum.
93500 * @returns {Uint8Array}
93501 */
93502 function checksumToUint5Array(checksum) {
93503 var result = new Uint8Array(8);
93504 for (var i = 0; i < 8; ++i) {
93505 result[7 - i] = checksum.and(31).toJSNumber();
93506 checksum = checksum.shiftRight(5);
93507 }
93508 return result;
93509 }
93510
93511 /**
93512 * Returns the bit representation of the given type within the version
93513 * byte.
93514 *
93515 * @private
93516 * @param {string} type Address type. Either 'P2PKH' or 'P2SH'.
93517 * @returns {number}
93518 * @throws {ValidationError}
93519 */
93520 function getTypeBits(type) {
93521 switch (type) {
93522 case 'P2PKH':
93523 return 0;
93524 case 'P2SH':
93525 return 8;
93526 default:
93527 throw new ValidationError('Invalid type: ' + type + '.');
93528 }
93529 }
93530
93531 /**
93532 * Retrieves the address type from its bit representation within the
93533 * version byte.
93534 *
93535 * @private
93536 * @param {number} versionByte
93537 * @returns {string}
93538 * @throws {ValidationError}
93539 */
93540 function getType(versionByte) {
93541 switch (versionByte & 120) {
93542 case 0:
93543 return 'P2PKH';
93544 case 8:
93545 return 'P2SH';
93546 default:
93547 throw new ValidationError('Invalid address type in version byte: ' + versionByte + '.');
93548 }
93549 }
93550
93551 /**
93552 * Returns the bit representation of the length in bits of the given
93553 * hash within the version byte.
93554 *
93555 * @private
93556 * @param {Uint8Array} hash Hash to encode represented as an array of 8-bit integers.
93557 * @returns {number}
93558 * @throws {ValidationError}
93559 */
93560 function getHashSizeBits(hash) {
93561 switch (hash.length * 8) {
93562 case 160:
93563 return 0;
93564 case 192:
93565 return 1;
93566 case 224:
93567 return 2;
93568 case 256:
93569 return 3;
93570 case 320:
93571 return 4;
93572 case 384:
93573 return 5;
93574 case 448:
93575 return 6;
93576 case 512:
93577 return 7;
93578 default:
93579 throw new ValidationError('Invalid hash size: ' + hash.length + '.');
93580 }
93581 }
93582
93583 /**
93584 * Retrieves the the length in bits of the encoded hash from its bit
93585 * representation within the version byte.
93586 *
93587 * @private
93588 * @param {number} versionByte
93589 * @returns {number}
93590 */
93591 function getHashSize(versionByte) {
93592 switch (versionByte & 7) {
93593 case 0:
93594 return 160;
93595 case 1:
93596 return 192;
93597 case 2:
93598 return 224;
93599 case 3:
93600 return 256;
93601 case 4:
93602 return 320;
93603 case 5:
93604 return 384;
93605 case 6:
93606 return 448;
93607 case 7:
93608 return 512;
93609 }
93610 }
93611
93612 /**
93613 * Converts an array of 8-bit integers into an array of 5-bit integers,
93614 * right-padding with zeroes if necessary.
93615 *
93616 * @private
93617 * @param {Uint8Array} data
93618 * @returns {Uint8Array}
93619 */
93620 function toUint5Array(data) {
93621 return convertBits(data, 8, 5);
93622 }
93623
93624 /**
93625 * Converts an array of 5-bit integers back into an array of 8-bit integers,
93626 * removing extra zeroes left from padding if necessary.
93627 * Throws a {@link ValidationError} if input is not a zero-padded array of 8-bit integers.
93628 *
93629 * @private
93630 * @param {Uint8Array} data
93631 * @returns {Uint8Array}
93632 * @throws {ValidationError}
93633 */
93634 function fromUint5Array(data) {
93635 return convertBits(data, 5, 8, true);
93636 }
93637
93638 /**
93639 * Returns the concatenation a and b.
93640 *
93641 * @private
93642 * @param {Uint8Array} a
93643 * @param {Uint8Array} b
93644 * @returns {Uint8Array}
93645 * @throws {ValidationError}
93646 */
93647 function concat(a, b) {
93648 var ab = new Uint8Array(a.length + b.length);
93649 ab.set(a);
93650 ab.set(b, a.length);
93651 return ab;
93652 }
93653
93654 /**
93655 * Computes a checksum from the given input data as specified for the CashAddr
93656 * format: https://github.com/Bitcoin-UAHF/spec/blob/master/cashaddr.md.
93657 *
93658 * @private
93659 * @param {Uint8Array} data Array of 5-bit integers over which the checksum is to be computed.
93660 * @returns {BigInteger}
93661 */
93662 function polymod(data) {
93663 var GENERATOR = [0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8, 0x1e4f43e470];
93664 var checksum = bigInt(1);
93665 for (var i = 0; i < data.length; ++i) {
93666 var value = data[i];
93667 var topBits = checksum.shiftRight(35);
93668 checksum = checksum.and(0x07ffffffff).shiftLeft(5).xor(value);
93669 for (var j = 0; j < GENERATOR.length; ++j) {
93670 if (topBits.shiftRight(j).and(1).equals(1)) {
93671 checksum = checksum.xor(GENERATOR[j]);
93672 }
93673 }
93674 }
93675 return checksum.xor(1);
93676 }
93677
93678 /**
93679 * Verify that the payload has not been corrupted by checking that the
93680 * checksum is valid.
93681 *
93682 * @private
93683 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93684 * @param {Uint8Array} payload Array of 5-bit integers containing the address' payload.
93685 * @returns {boolean}
93686 */
93687 function validChecksum(prefix, payload) {
93688 var prefixData = concat(prefixToUint5Array(prefix), new Uint8Array(1));
93689 var checksumData = concat(prefixData, payload);
93690 return polymod(checksumData).equals(0);
93691 }
93692
93693 /**
93694 * Returns true if, and only if, the given string contains either uppercase
93695 * or lowercase letters, but not both.
93696 *
93697 * @private
93698 * @param {string} string Input string.
93699 * @returns {boolean}
93700 */
93701 function hasSingleCase(string) {
93702 return string === string.toLowerCase() || string === string.toUpperCase();
93703 }
93704
93705 module.exports = {
93706 encode: encode,
93707 decode: decode,
93708 ValidationError: ValidationError,
93709 };
93710
93711 },{"./base32":9,"./convertBits":11,"./validation":12,"big-integer":3}],11:[function(require,module,exports){
93712 // Copyright (c) 2017-2018 Emilio Almansi
93713 // Copyright (c) 2017 Pieter Wuille
93714 //
93715 // Permission is hereby granted, free of charge, to any person obtaining a copy
93716 // of this software and associated documentation files (the "Software"), to deal
93717 // in the Software without restriction, including without limitation the rights
93718 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
93719 // copies of the Software, and to permit persons to whom the Software is
93720 // furnished to do so, subject to the following conditions:
93721 //
93722 // The above copyright notice and this permission notice shall be included in
93723 // all copies or substantial portions of the Software.
93724 //
93725 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
93726 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
93727 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
93728 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
93729 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
93730 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
93731 // THE SOFTWARE.
93732
93733 'use strict';
93734
93735 var validate = require('./validation').validate;
93736
93737 /**
93738 * Converts an array of integers made up of 'from' bits into an
93739 * array of integers made up of 'to' bits. The output array is
93740 * zero-padded if necessary, unless strict mode is true.
93741 * Throws a {@link ValidationError} if input is invalid.
93742 * Original by Pieter Wuille: https://github.com/sipa/bech32.
93743 *
93744 * @param {Uint8Array} data Array of integers made up of 'from' bits.
93745 * @param {number} from Length in bits of elements in the input array.
93746 * @param {number} to Length in bits of elements in the output array.
93747 * @param {bool} strictMode Require the conversion to be completed without padding.
93748 * @returns {Uint8Array}
93749 */
93750 module.exports = function(data, from, to, strictMode) {
93751 var length = strictMode
93752 ? Math.floor(data.length * from / to)
93753 : Math.ceil(data.length * from / to);
93754 var mask = (1 << to) - 1;
93755 var result = new Uint8Array(length);
93756 var index = 0;
93757 var accumulator = 0;
93758 var bits = 0;
93759 for (var i = 0; i < data.length; ++i) {
93760 var value = data[i];
93761 validate(0 <= value && (value >> from) === 0, 'Invalid value: ' + value + '.');
93762 accumulator = (accumulator << from) | value;
93763 bits += from;
93764 while (bits >= to) {
93765 bits -= to;
93766 result[index] = (accumulator >> bits) & mask;
93767 ++index;
93768 }
93769 }
93770 if (!strictMode) {
93771 if (bits > 0) {
93772 result[index] = (accumulator << (to - bits)) & mask;
93773 ++index;
93774 }
93775 } else {
93776 validate(
93777 bits < from && ((accumulator << (to - bits)) & mask) === 0,
93778 'Input cannot be converted to ' + to + ' bits without padding, but strict mode was used.'
93779 );
93780 }
93781 return result;
93782 };
93783
93784 },{"./validation":12}],12:[function(require,module,exports){
93785 /**
93786 * @license
93787 * https://github.com/bitcoincashjs/cashaddr
93788 * Copyright (c) 2017-2018 Emilio Almansi
93789 * Distributed under the MIT software license, see the accompanying
93790 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93791 */
93792
93793 'use strict';
93794
93795 /**
93796 * Validation utility.
93797 *
93798 * @module validation
93799 */
93800
93801 /**
93802 * Error thrown when encoding or decoding fail due to invalid input.
93803 *
93804 * @constructor ValidationError
93805 * @param {string} message Error description.
93806 */
93807 function ValidationError(message) {
93808 var error = new Error();
93809 this.name = error.name = 'ValidationError';
93810 this.message = error.message = message;
93811 this.stack = error.stack;
93812 }
93813
93814 ValidationError.prototype = Object.create(Error.prototype);
93815
93816 /**
93817 * Validates a given condition, throwing a {@link ValidationError} if
93818 * the given condition does not hold.
93819 *
93820 * @static
93821 * @param {boolean} condition Condition to validate.
93822 * @param {string} message Error message in case the condition does not hold.
93823 */
93824 function validate(condition, message) {
93825 if (!condition) {
93826 throw new ValidationError(message);
93827 }
93828 }
93829
93830 module.exports = {
93831 ValidationError: ValidationError,
93832 validate: validate,
93833 };
93834
93835 },{}],13:[function(require,module,exports){
93836 var Buffer = require('safe-buffer').Buffer
93837 var Transform = require('stream').Transform
93838 var StringDecoder = require('string_decoder').StringDecoder
93839 var inherits = require('inherits')
93840
93841 function CipherBase (hashMode) {
93842 Transform.call(this)
93843 this.hashMode = typeof hashMode === 'string'
93844 if (this.hashMode) {
93845 this[hashMode] = this._finalOrDigest
93846 } else {
93847 this.final = this._finalOrDigest
93848 }
93849 if (this._final) {
93850 this.__final = this._final
93851 this._final = null
93852 }
93853 this._decoder = null
93854 this._encoding = null
93855 }
93856 inherits(CipherBase, Transform)
93857
93858 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
93859 if (typeof data === 'string') {
93860 data = Buffer.from(data, inputEnc)
93861 }
93862
93863 var outData = this._update(data)
93864 if (this.hashMode) return this
93865
93866 if (outputEnc) {
93867 outData = this._toString(outData, outputEnc)
93868 }
93869
93870 return outData
93871 }
93872
93873 CipherBase.prototype.setAutoPadding = function () {}
93874 CipherBase.prototype.getAuthTag = function () {
93875 throw new Error('trying to get auth tag in unsupported state')
93876 }
93877
93878 CipherBase.prototype.setAuthTag = function () {
93879 throw new Error('trying to set auth tag in unsupported state')
93880 }
93881
93882 CipherBase.prototype.setAAD = function () {
93883 throw new Error('trying to set aad in unsupported state')
93884 }
93885
93886 CipherBase.prototype._transform = function (data, _, next) {
93887 var err
93888 try {
93889 if (this.hashMode) {
93890 this._update(data)
93891 } else {
93892 this.push(this._update(data))
93893 }
93894 } catch (e) {
93895 err = e
93896 } finally {
93897 next(err)
93898 }
93899 }
93900 CipherBase.prototype._flush = function (done) {
93901 var err
93902 try {
93903 this.push(this.__final())
93904 } catch (e) {
93905 err = e
93906 }
93907
93908 done(err)
93909 }
93910 CipherBase.prototype._finalOrDigest = function (outputEnc) {
93911 var outData = this.__final() || Buffer.alloc(0)
93912 if (outputEnc) {
93913 outData = this._toString(outData, outputEnc, true)
93914 }
93915 return outData
93916 }
93917
93918 CipherBase.prototype._toString = function (value, enc, fin) {
93919 if (!this._decoder) {
93920 this._decoder = new StringDecoder(enc)
93921 this._encoding = enc
93922 }
93923
93924 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
93925
93926 var out = this._decoder.write(value)
93927 if (fin) {
93928 out += this._decoder.end()
93929 }
93930
93931 return out
93932 }
93933
93934 module.exports = CipherBase
93935
93936 },{"inherits":21,"safe-buffer":40,"stream":49,"string_decoder":50}],14:[function(require,module,exports){
93937 (function (Buffer){
93938 // Copyright Joyent, Inc. and other Node contributors.
93939 //
93940 // Permission is hereby granted, free of charge, to any person obtaining a
93941 // copy of this software and associated documentation files (the
93942 // "Software"), to deal in the Software without restriction, including
93943 // without limitation the rights to use, copy, modify, merge, publish,
93944 // distribute, sublicense, and/or sell copies of the Software, and to permit
93945 // persons to whom the Software is furnished to do so, subject to the
93946 // following conditions:
93947 //
93948 // The above copyright notice and this permission notice shall be included
93949 // in all copies or substantial portions of the Software.
93950 //
93951 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
93952 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
93953 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
93954 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
93955 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
93956 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
93957 // USE OR OTHER DEALINGS IN THE SOFTWARE.
93958
93959 // NOTE: These type checking functions intentionally don't use `instanceof`
93960 // because it is fragile and can be easily faked with `Object.create()`.
93961
93962 function isArray(arg) {
93963 if (Array.isArray) {
93964 return Array.isArray(arg);
93965 }
93966 return objectToString(arg) === '[object Array]';
93967 }
93968 exports.isArray = isArray;
93969
93970 function isBoolean(arg) {
93971 return typeof arg === 'boolean';
93972 }
93973 exports.isBoolean = isBoolean;
93974
93975 function isNull(arg) {
93976 return arg === null;
93977 }
93978 exports.isNull = isNull;
93979
93980 function isNullOrUndefined(arg) {
93981 return arg == null;
93982 }
93983 exports.isNullOrUndefined = isNullOrUndefined;
93984
93985 function isNumber(arg) {
93986 return typeof arg === 'number';
93987 }
93988 exports.isNumber = isNumber;
93989
93990 function isString(arg) {
93991 return typeof arg === 'string';
93992 }
93993 exports.isString = isString;
93994
93995 function isSymbol(arg) {
93996 return typeof arg === 'symbol';
93997 }
93998 exports.isSymbol = isSymbol;
93999
94000 function isUndefined(arg) {
94001 return arg === void 0;
94002 }
94003 exports.isUndefined = isUndefined;
94004
94005 function isRegExp(re) {
94006 return objectToString(re) === '[object RegExp]';
94007 }
94008 exports.isRegExp = isRegExp;
94009
94010 function isObject(arg) {
94011 return typeof arg === 'object' && arg !== null;
94012 }
94013 exports.isObject = isObject;
94014
94015 function isDate(d) {
94016 return objectToString(d) === '[object Date]';
94017 }
94018 exports.isDate = isDate;
94019
94020 function isError(e) {
94021 return (objectToString(e) === '[object Error]' || e instanceof Error);
94022 }
94023 exports.isError = isError;
94024
94025 function isFunction(arg) {
94026 return typeof arg === 'function';
94027 }
94028 exports.isFunction = isFunction;
94029
94030 function isPrimitive(arg) {
94031 return arg === null ||
94032 typeof arg === 'boolean' ||
94033 typeof arg === 'number' ||
94034 typeof arg === 'string' ||
94035 typeof arg === 'symbol' || // ES6 symbol
94036 typeof arg === 'undefined';
94037 }
94038 exports.isPrimitive = isPrimitive;
94039
94040 exports.isBuffer = Buffer.isBuffer;
94041
94042 function objectToString(o) {
94043 return Object.prototype.toString.call(o);
94044 }
94045
94046 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
94047 },{"../../is-buffer/index.js":22}],15:[function(require,module,exports){
94048 (function (Buffer){
94049 'use strict'
94050 var inherits = require('inherits')
94051 var md5 = require('./md5')
94052 var RIPEMD160 = require('ripemd160')
94053 var sha = require('sha.js')
94054
94055 var Base = require('cipher-base')
94056
94057 function HashNoConstructor (hash) {
94058 Base.call(this, 'digest')
94059
94060 this._hash = hash
94061 this.buffers = []
94062 }
94063
94064 inherits(HashNoConstructor, Base)
94065
94066 HashNoConstructor.prototype._update = function (data) {
94067 this.buffers.push(data)
94068 }
94069
94070 HashNoConstructor.prototype._final = function () {
94071 var buf = Buffer.concat(this.buffers)
94072 var r = this._hash(buf)
94073 this.buffers = null
94074
94075 return r
94076 }
94077
94078 function Hash (hash) {
94079 Base.call(this, 'digest')
94080
94081 this._hash = hash
94082 }
94083
94084 inherits(Hash, Base)
94085
94086 Hash.prototype._update = function (data) {
94087 this._hash.update(data)
94088 }
94089
94090 Hash.prototype._final = function () {
94091 return this._hash.digest()
94092 }
94093
94094 module.exports = function createHash (alg) {
94095 alg = alg.toLowerCase()
94096 if (alg === 'md5') return new HashNoConstructor(md5)
94097 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
94098
94099 return new Hash(sha(alg))
94100 }
94101
94102 }).call(this,require("buffer").Buffer)
94103 },{"./md5":17,"buffer":8,"cipher-base":13,"inherits":21,"ripemd160":39,"sha.js":42}],16:[function(require,module,exports){
94104 (function (Buffer){
94105 'use strict'
94106 var intSize = 4
94107 var zeroBuffer = new Buffer(intSize)
94108 zeroBuffer.fill(0)
94109
94110 var charSize = 8
94111 var hashSize = 16
94112
94113 function toArray (buf) {
94114 if ((buf.length % intSize) !== 0) {
94115 var len = buf.length + (intSize - (buf.length % intSize))
94116 buf = Buffer.concat([buf, zeroBuffer], len)
94117 }
94118
94119 var arr = new Array(buf.length >>> 2)
94120 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
94121 arr[j] = buf.readInt32LE(i)
94122 }
94123
94124 return arr
94125 }
94126
94127 module.exports = function hash (buf, fn) {
94128 var arr = fn(toArray(buf), buf.length * charSize)
94129 buf = new Buffer(hashSize)
94130 for (var i = 0; i < arr.length; i++) {
94131 buf.writeInt32LE(arr[i], i << 2, true)
94132 }
94133 return buf
94134 }
94135
94136 }).call(this,require("buffer").Buffer)
94137 },{"buffer":8}],17:[function(require,module,exports){
94138 'use strict'
94139 /*
94140 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
94141 * Digest Algorithm, as defined in RFC 1321.
94142 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
94143 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
94144 * Distributed under the BSD License
94145 * See http://pajhome.org.uk/crypt/md5 for more info.
94146 */
94147
94148 var makeHash = require('./make-hash')
94149
94150 /*
94151 * Calculate the MD5 of an array of little-endian words, and a bit length
94152 */
94153 function core_md5 (x, len) {
94154 /* append padding */
94155 x[len >> 5] |= 0x80 << ((len) % 32)
94156 x[(((len + 64) >>> 9) << 4) + 14] = len
94157
94158 var a = 1732584193
94159 var b = -271733879
94160 var c = -1732584194
94161 var d = 271733878
94162
94163 for (var i = 0; i < x.length; i += 16) {
94164 var olda = a
94165 var oldb = b
94166 var oldc = c
94167 var oldd = d
94168
94169 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
94170 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
94171 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
94172 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
94173 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
94174 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
94175 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
94176 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
94177 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
94178 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
94179 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
94180 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
94181 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
94182 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
94183 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
94184 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
94185
94186 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
94187 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
94188 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
94189 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
94190 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
94191 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
94192 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
94193 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
94194 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
94195 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
94196 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
94197 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
94198 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
94199 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
94200 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
94201 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
94202
94203 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
94204 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
94205 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
94206 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
94207 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
94208 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
94209 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
94210 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
94211 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
94212 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
94213 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
94214 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
94215 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
94216 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
94217 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
94218 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
94219
94220 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
94221 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
94222 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
94223 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
94224 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
94225 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
94226 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
94227 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
94228 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
94229 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
94230 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
94231 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
94232 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
94233 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
94234 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
94235 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
94236
94237 a = safe_add(a, olda)
94238 b = safe_add(b, oldb)
94239 c = safe_add(c, oldc)
94240 d = safe_add(d, oldd)
94241 }
94242
94243 return [a, b, c, d]
94244 }
94245
94246 /*
94247 * These functions implement the four basic operations the algorithm uses.
94248 */
94249 function md5_cmn (q, a, b, x, s, t) {
94250 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
94251 }
94252
94253 function md5_ff (a, b, c, d, x, s, t) {
94254 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
94255 }
94256
94257 function md5_gg (a, b, c, d, x, s, t) {
94258 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
94259 }
94260
94261 function md5_hh (a, b, c, d, x, s, t) {
94262 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
94263 }
94264
94265 function md5_ii (a, b, c, d, x, s, t) {
94266 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
94267 }
94268
94269 /*
94270 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
94271 * to work around bugs in some JS interpreters.
94272 */
94273 function safe_add (x, y) {
94274 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
94275 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
94276 return (msw << 16) | (lsw & 0xFFFF)
94277 }
94278
94279 /*
94280 * Bitwise rotate a 32-bit number to the left.
94281 */
94282 function bit_rol (num, cnt) {
94283 return (num << cnt) | (num >>> (32 - cnt))
94284 }
94285
94286 module.exports = function md5 (buf) {
94287 return makeHash(buf, core_md5)
94288 }
94289
94290 },{"./make-hash":16}],18:[function(require,module,exports){
94291 // Copyright Joyent, Inc. and other Node contributors.
94292 //
94293 // Permission is hereby granted, free of charge, to any person obtaining a
94294 // copy of this software and associated documentation files (the
94295 // "Software"), to deal in the Software without restriction, including
94296 // without limitation the rights to use, copy, modify, merge, publish,
94297 // distribute, sublicense, and/or sell copies of the Software, and to permit
94298 // persons to whom the Software is furnished to do so, subject to the
94299 // following conditions:
94300 //
94301 // The above copyright notice and this permission notice shall be included
94302 // in all copies or substantial portions of the Software.
94303 //
94304 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
94305 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
94306 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
94307 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
94308 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
94309 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
94310 // USE OR OTHER DEALINGS IN THE SOFTWARE.
94311
94312 function EventEmitter() {
94313 this._events = this._events || {};
94314 this._maxListeners = this._maxListeners || undefined;
94315 }
94316 module.exports = EventEmitter;
94317
94318 // Backwards-compat with node 0.10.x
94319 EventEmitter.EventEmitter = EventEmitter;
94320
94321 EventEmitter.prototype._events = undefined;
94322 EventEmitter.prototype._maxListeners = undefined;
94323
94324 // By default EventEmitters will print a warning if more than 10 listeners are
94325 // added to it. This is a useful default which helps finding memory leaks.
94326 EventEmitter.defaultMaxListeners = 10;
94327
94328 // Obviously not all Emitters should be limited to 10. This function allows
94329 // that to be increased. Set to zero for unlimited.
94330 EventEmitter.prototype.setMaxListeners = function(n) {
94331 if (!isNumber(n) || n < 0 || isNaN(n))
94332 throw TypeError('n must be a positive number');
94333 this._maxListeners = n;
94334 return this;
94335 };
94336
94337 EventEmitter.prototype.emit = function(type) {
94338 var er, handler, len, args, i, listeners;
94339
94340 if (!this._events)
94341 this._events = {};
94342
94343 // If there is no 'error' event listener then throw.
94344 if (type === 'error') {
94345 if (!this._events.error ||
94346 (isObject(this._events.error) && !this._events.error.length)) {
94347 er = arguments[1];
94348 if (er instanceof Error) {
94349 throw er; // Unhandled 'error' event
94350 } else {
94351 // At least give some kind of context to the user
94352 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
94353 err.context = er;
94354 throw err;
94355 }
94356 }
94357 }
94358
94359 handler = this._events[type];
94360
94361 if (isUndefined(handler))
94362 return false;
94363
94364 if (isFunction(handler)) {
94365 switch (arguments.length) {
94366 // fast cases
94367 case 1:
94368 handler.call(this);
94369 break;
94370 case 2:
94371 handler.call(this, arguments[1]);
94372 break;
94373 case 3:
94374 handler.call(this, arguments[1], arguments[2]);
94375 break;
94376 // slower
94377 default:
94378 args = Array.prototype.slice.call(arguments, 1);
94379 handler.apply(this, args);
94380 }
94381 } else if (isObject(handler)) {
94382 args = Array.prototype.slice.call(arguments, 1);
94383 listeners = handler.slice();
94384 len = listeners.length;
94385 for (i = 0; i < len; i++)
94386 listeners[i].apply(this, args);
94387 }
94388
94389 return true;
94390 };
94391
94392 EventEmitter.prototype.addListener = function(type, listener) {
94393 var m;
94394
94395 if (!isFunction(listener))
94396 throw TypeError('listener must be a function');
94397
94398 if (!this._events)
94399 this._events = {};
94400
94401 // To avoid recursion in the case that type === "newListener"! Before
94402 // adding it to the listeners, first emit "newListener".
94403 if (this._events.newListener)
94404 this.emit('newListener', type,
94405 isFunction(listener.listener) ?
94406 listener.listener : listener);
94407
94408 if (!this._events[type])
94409 // Optimize the case of one listener. Don't need the extra array object.
94410 this._events[type] = listener;
94411 else if (isObject(this._events[type]))
94412 // If we've already got an array, just append.
94413 this._events[type].push(listener);
94414 else
94415 // Adding the second element, need to change to array.
94416 this._events[type] = [this._events[type], listener];
94417
94418 // Check for listener leak
94419 if (isObject(this._events[type]) && !this._events[type].warned) {
94420 if (!isUndefined(this._maxListeners)) {
94421 m = this._maxListeners;
94422 } else {
94423 m = EventEmitter.defaultMaxListeners;
94424 }
94425
94426 if (m && m > 0 && this._events[type].length > m) {
94427 this._events[type].warned = true;
94428 console.error('(node) warning: possible EventEmitter memory ' +
94429 'leak detected. %d listeners added. ' +
94430 'Use emitter.setMaxListeners() to increase limit.',
94431 this._events[type].length);
94432 if (typeof console.trace === 'function') {
94433 // not supported in IE 10
94434 console.trace();
94435 }
94436 }
94437 }
94438
94439 return this;
94440 };
94441
94442 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
94443
94444 EventEmitter.prototype.once = function(type, listener) {
94445 if (!isFunction(listener))
94446 throw TypeError('listener must be a function');
94447
94448 var fired = false;
94449
94450 function g() {
94451 this.removeListener(type, g);
94452
94453 if (!fired) {
94454 fired = true;
94455 listener.apply(this, arguments);
94456 }
94457 }
94458
94459 g.listener = listener;
94460 this.on(type, g);
94461
94462 return this;
94463 };
94464
94465 // emits a 'removeListener' event iff the listener was removed
94466 EventEmitter.prototype.removeListener = function(type, listener) {
94467 var list, position, length, i;
94468
94469 if (!isFunction(listener))
94470 throw TypeError('listener must be a function');
94471
94472 if (!this._events || !this._events[type])
94473 return this;
94474
94475 list = this._events[type];
94476 length = list.length;
94477 position = -1;
94478
94479 if (list === listener ||
94480 (isFunction(list.listener) && list.listener === listener)) {
94481 delete this._events[type];
94482 if (this._events.removeListener)
94483 this.emit('removeListener', type, listener);
94484
94485 } else if (isObject(list)) {
94486 for (i = length; i-- > 0;) {
94487 if (list[i] === listener ||
94488 (list[i].listener && list[i].listener === listener)) {
94489 position = i;
94490 break;
94491 }
94492 }
94493
94494 if (position < 0)
94495 return this;
94496
94497 if (list.length === 1) {
94498 list.length = 0;
94499 delete this._events[type];
94500 } else {
94501 list.splice(position, 1);
94502 }
94503
94504 if (this._events.removeListener)
94505 this.emit('removeListener', type, listener);
94506 }
94507
94508 return this;
94509 };
94510
94511 EventEmitter.prototype.removeAllListeners = function(type) {
94512 var key, listeners;
94513
94514 if (!this._events)
94515 return this;
94516
94517 // not listening for removeListener, no need to emit
94518 if (!this._events.removeListener) {
94519 if (arguments.length === 0)
94520 this._events = {};
94521 else if (this._events[type])
94522 delete this._events[type];
94523 return this;
94524 }
94525
94526 // emit removeListener for all listeners on all events
94527 if (arguments.length === 0) {
94528 for (key in this._events) {
94529 if (key === 'removeListener') continue;
94530 this.removeAllListeners(key);
94531 }
94532 this.removeAllListeners('removeListener');
94533 this._events = {};
94534 return this;
94535 }
94536
94537 listeners = this._events[type];
94538
94539 if (isFunction(listeners)) {
94540 this.removeListener(type, listeners);
94541 } else if (listeners) {
94542 // LIFO order
94543 while (listeners.length)
94544 this.removeListener(type, listeners[listeners.length - 1]);
94545 }
94546 delete this._events[type];
94547
94548 return this;
94549 };
94550
94551 EventEmitter.prototype.listeners = function(type) {
94552 var ret;
94553 if (!this._events || !this._events[type])
94554 ret = [];
94555 else if (isFunction(this._events[type]))
94556 ret = [this._events[type]];
94557 else
94558 ret = this._events[type].slice();
94559 return ret;
94560 };
94561
94562 EventEmitter.prototype.listenerCount = function(type) {
94563 if (this._events) {
94564 var evlistener = this._events[type];
94565
94566 if (isFunction(evlistener))
94567 return 1;
94568 else if (evlistener)
94569 return evlistener.length;
94570 }
94571 return 0;
94572 };
94573
94574 EventEmitter.listenerCount = function(emitter, type) {
94575 return emitter.listenerCount(type);
94576 };
94577
94578 function isFunction(arg) {
94579 return typeof arg === 'function';
94580 }
94581
94582 function isNumber(arg) {
94583 return typeof arg === 'number';
94584 }
94585
94586 function isObject(arg) {
94587 return typeof arg === 'object' && arg !== null;
94588 }
94589
94590 function isUndefined(arg) {
94591 return arg === void 0;
94592 }
94593
94594 },{}],19:[function(require,module,exports){
94595 (function (Buffer){
94596 'use strict'
94597 var Transform = require('stream').Transform
94598 var inherits = require('inherits')
94599
94600 function HashBase (blockSize) {
94601 Transform.call(this)
94602
94603 this._block = new Buffer(blockSize)
94604 this._blockSize = blockSize
94605 this._blockOffset = 0
94606 this._length = [0, 0, 0, 0]
94607
94608 this._finalized = false
94609 }
94610
94611 inherits(HashBase, Transform)
94612
94613 HashBase.prototype._transform = function (chunk, encoding, callback) {
94614 var error = null
94615 try {
94616 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
94617 this.update(chunk)
94618 } catch (err) {
94619 error = err
94620 }
94621
94622 callback(error)
94623 }
94624
94625 HashBase.prototype._flush = function (callback) {
94626 var error = null
94627 try {
94628 this.push(this._digest())
94629 } catch (err) {
94630 error = err
94631 }
94632
94633 callback(error)
94634 }
94635
94636 HashBase.prototype.update = function (data, encoding) {
94637 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
94638 if (this._finalized) throw new Error('Digest already called')
94639 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
94640
94641 // consume data
94642 var block = this._block
94643 var offset = 0
94644 while (this._blockOffset + data.length - offset >= this._blockSize) {
94645 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
94646 this._update()
94647 this._blockOffset = 0
94648 }
94649 while (offset < data.length) block[this._blockOffset++] = data[offset++]
94650
94651 // update length
94652 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
94653 this._length[j] += carry
94654 carry = (this._length[j] / 0x0100000000) | 0
94655 if (carry > 0) this._length[j] -= 0x0100000000 * carry
94656 }
94657
94658 return this
94659 }
94660
94661 HashBase.prototype._update = function (data) {
94662 throw new Error('_update is not implemented')
94663 }
94664
94665 HashBase.prototype.digest = function (encoding) {
94666 if (this._finalized) throw new Error('Digest already called')
94667 this._finalized = true
94668
94669 var digest = this._digest()
94670 if (encoding !== undefined) digest = digest.toString(encoding)
94671 return digest
94672 }
94673
94674 HashBase.prototype._digest = function () {
94675 throw new Error('_digest is not implemented')
94676 }
94677
94678 module.exports = HashBase
94679
94680 }).call(this,require("buffer").Buffer)
94681 },{"buffer":8,"inherits":21,"stream":49}],20:[function(require,module,exports){
94682 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
94683 var e, m
94684 var eLen = nBytes * 8 - mLen - 1
94685 var eMax = (1 << eLen) - 1
94686 var eBias = eMax >> 1
94687 var nBits = -7
94688 var i = isLE ? (nBytes - 1) : 0
94689 var d = isLE ? -1 : 1
94690 var s = buffer[offset + i]
94691
94692 i += d
94693
94694 e = s & ((1 << (-nBits)) - 1)
94695 s >>= (-nBits)
94696 nBits += eLen
94697 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
94698
94699 m = e & ((1 << (-nBits)) - 1)
94700 e >>= (-nBits)
94701 nBits += mLen
94702 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
94703
94704 if (e === 0) {
94705 e = 1 - eBias
94706 } else if (e === eMax) {
94707 return m ? NaN : ((s ? -1 : 1) * Infinity)
94708 } else {
94709 m = m + Math.pow(2, mLen)
94710 e = e - eBias
94711 }
94712 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
94713 }
94714
94715 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
94716 var e, m, c
94717 var eLen = nBytes * 8 - mLen - 1
94718 var eMax = (1 << eLen) - 1
94719 var eBias = eMax >> 1
94720 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
94721 var i = isLE ? 0 : (nBytes - 1)
94722 var d = isLE ? 1 : -1
94723 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
94724
94725 value = Math.abs(value)
94726
94727 if (isNaN(value) || value === Infinity) {
94728 m = isNaN(value) ? 1 : 0
94729 e = eMax
94730 } else {
94731 e = Math.floor(Math.log(value) / Math.LN2)
94732 if (value * (c = Math.pow(2, -e)) < 1) {
94733 e--
94734 c *= 2
94735 }
94736 if (e + eBias >= 1) {
94737 value += rt / c
94738 } else {
94739 value += rt * Math.pow(2, 1 - eBias)
94740 }
94741 if (value * c >= 2) {
94742 e++
94743 c /= 2
94744 }
94745
94746 if (e + eBias >= eMax) {
94747 m = 0
94748 e = eMax
94749 } else if (e + eBias >= 1) {
94750 m = (value * c - 1) * Math.pow(2, mLen)
94751 e = e + eBias
94752 } else {
94753 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
94754 e = 0
94755 }
94756 }
94757
94758 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
94759
94760 e = (e << mLen) | m
94761 eLen += mLen
94762 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
94763
94764 buffer[offset + i - d] |= s * 128
94765 }
94766
94767 },{}],21:[function(require,module,exports){
94768 if (typeof Object.create === 'function') {
94769 // implementation from standard node.js 'util' module
94770 module.exports = function inherits(ctor, superCtor) {
94771 ctor.super_ = superCtor
94772 ctor.prototype = Object.create(superCtor.prototype, {
94773 constructor: {
94774 value: ctor,
94775 enumerable: false,
94776 writable: true,
94777 configurable: true
94778 }
94779 });
94780 };
94781 } else {
94782 // old school shim for old browsers
94783 module.exports = function inherits(ctor, superCtor) {
94784 ctor.super_ = superCtor
94785 var TempCtor = function () {}
94786 TempCtor.prototype = superCtor.prototype
94787 ctor.prototype = new TempCtor()
94788 ctor.prototype.constructor = ctor
94789 }
94790 }
94791
94792 },{}],22:[function(require,module,exports){
94793 /*!
94794 * Determine if an object is a Buffer
94795 *
94796 * @author Feross Aboukhadijeh <https://feross.org>
94797 * @license MIT
94798 */
94799
94800 // The _isBuffer check is for Safari 5-7 support, because it's missing
94801 // Object.prototype.constructor. Remove this eventually
94802 module.exports = function (obj) {
94803 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
94804 }
94805
94806 function isBuffer (obj) {
94807 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
94808 }
94809
94810 // For Node v0.10 support. Remove this eventually.
94811 function isSlowBuffer (obj) {
94812 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
94813 }
94814
94815 },{}],23:[function(require,module,exports){
94816 var toString = {}.toString;
94817
94818 module.exports = Array.isArray || function (arr) {
94819 return toString.call(arr) == '[object Array]';
94820 };
94821
94822 },{}],24:[function(require,module,exports){
94823 (function (process){
94824 'use strict';
94825
94826 if (!process.version ||
94827 process.version.indexOf('v0.') === 0 ||
94828 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
94829 module.exports = nextTick;
94830 } else {
94831 module.exports = process.nextTick;
94832 }
94833
94834 function nextTick(fn, arg1, arg2, arg3) {
94835 if (typeof fn !== 'function') {
94836 throw new TypeError('"callback" argument must be a function');
94837 }
94838 var len = arguments.length;
94839 var args, i;
94840 switch (len) {
94841 case 0:
94842 case 1:
94843 return process.nextTick(fn);
94844 case 2:
94845 return process.nextTick(function afterTickOne() {
94846 fn.call(null, arg1);
94847 });
94848 case 3:
94849 return process.nextTick(function afterTickTwo() {
94850 fn.call(null, arg1, arg2);
94851 });
94852 case 4:
94853 return process.nextTick(function afterTickThree() {
94854 fn.call(null, arg1, arg2, arg3);
94855 });
94856 default:
94857 args = new Array(len - 1);
94858 i = 0;
94859 while (i < args.length) {
94860 args[i++] = arguments[i];
94861 }
94862 return process.nextTick(function afterTick() {
94863 fn.apply(null, args);
94864 });
94865 }
94866 }
94867
94868 }).call(this,require('_process'))
94869 },{"_process":25}],25:[function(require,module,exports){
94870 // shim for using process in browser
94871 var process = module.exports = {};
94872
94873 // cached from whatever global is present so that test runners that stub it
94874 // don't break things. But we need to wrap it in a try catch in case it is
94875 // wrapped in strict mode code which doesn't define any globals. It's inside a
94876 // function because try/catches deoptimize in certain engines.
94877
94878 var cachedSetTimeout;
94879 var cachedClearTimeout;
94880
94881 function defaultSetTimout() {
94882 throw new Error('setTimeout has not been defined');
94883 }
94884 function defaultClearTimeout () {
94885 throw new Error('clearTimeout has not been defined');
94886 }
94887 (function () {
94888 try {
94889 if (typeof setTimeout === 'function') {
94890 cachedSetTimeout = setTimeout;
94891 } else {
94892 cachedSetTimeout = defaultSetTimout;
94893 }
94894 } catch (e) {
94895 cachedSetTimeout = defaultSetTimout;
94896 }
94897 try {
94898 if (typeof clearTimeout === 'function') {
94899 cachedClearTimeout = clearTimeout;
94900 } else {
94901 cachedClearTimeout = defaultClearTimeout;
94902 }
94903 } catch (e) {
94904 cachedClearTimeout = defaultClearTimeout;
94905 }
94906 } ())
94907 function runTimeout(fun) {
94908 if (cachedSetTimeout === setTimeout) {
94909 //normal enviroments in sane situations
94910 return setTimeout(fun, 0);
94911 }
94912 // if setTimeout wasn't available but was latter defined
94913 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
94914 cachedSetTimeout = setTimeout;
94915 return setTimeout(fun, 0);
94916 }
94917 try {
94918 // when when somebody has screwed with setTimeout but no I.E. maddness
94919 return cachedSetTimeout(fun, 0);
94920 } catch(e){
94921 try {
94922 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
94923 return cachedSetTimeout.call(null, fun, 0);
94924 } catch(e){
94925 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
94926 return cachedSetTimeout.call(this, fun, 0);
94927 }
94928 }
94929
94930
94931 }
94932 function runClearTimeout(marker) {
94933 if (cachedClearTimeout === clearTimeout) {
94934 //normal enviroments in sane situations
94935 return clearTimeout(marker);
94936 }
94937 // if clearTimeout wasn't available but was latter defined
94938 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
94939 cachedClearTimeout = clearTimeout;
94940 return clearTimeout(marker);
94941 }
94942 try {
94943 // when when somebody has screwed with setTimeout but no I.E. maddness
94944 return cachedClearTimeout(marker);
94945 } catch (e){
94946 try {
94947 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
94948 return cachedClearTimeout.call(null, marker);
94949 } catch (e){
94950 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
94951 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
94952 return cachedClearTimeout.call(this, marker);
94953 }
94954 }
94955
94956
94957
94958 }
94959 var queue = [];
94960 var draining = false;
94961 var currentQueue;
94962 var queueIndex = -1;
94963
94964 function cleanUpNextTick() {
94965 if (!draining || !currentQueue) {
94966 return;
94967 }
94968 draining = false;
94969 if (currentQueue.length) {
94970 queue = currentQueue.concat(queue);
94971 } else {
94972 queueIndex = -1;
94973 }
94974 if (queue.length) {
94975 drainQueue();
94976 }
94977 }
94978
94979 function drainQueue() {
94980 if (draining) {
94981 return;
94982 }
94983 var timeout = runTimeout(cleanUpNextTick);
94984 draining = true;
94985
94986 var len = queue.length;
94987 while(len) {
94988 currentQueue = queue;
94989 queue = [];
94990 while (++queueIndex < len) {
94991 if (currentQueue) {
94992 currentQueue[queueIndex].run();
94993 }
94994 }
94995 queueIndex = -1;
94996 len = queue.length;
94997 }
94998 currentQueue = null;
94999 draining = false;
95000 runClearTimeout(timeout);
95001 }
95002
95003 process.nextTick = function (fun) {
95004 var args = new Array(arguments.length - 1);
95005 if (arguments.length > 1) {
95006 for (var i = 1; i < arguments.length; i++) {
95007 args[i - 1] = arguments[i];
95008 }
95009 }
95010 queue.push(new Item(fun, args));
95011 if (queue.length === 1 && !draining) {
95012 runTimeout(drainQueue);
95013 }
95014 };
95015
95016 // v8 likes predictible objects
95017 function Item(fun, array) {
95018 this.fun = fun;
95019 this.array = array;
95020 }
95021 Item.prototype.run = function () {
95022 this.fun.apply(null, this.array);
95023 };
95024 process.title = 'browser';
95025 process.browser = true;
95026 process.env = {};
95027 process.argv = [];
95028 process.version = ''; // empty string to avoid regexp issues
95029 process.versions = {};
95030
95031 function noop() {}
95032
95033 process.on = noop;
95034 process.addListener = noop;
95035 process.once = noop;
95036 process.off = noop;
95037 process.removeListener = noop;
95038 process.removeAllListeners = noop;
95039 process.emit = noop;
95040 process.prependListener = noop;
95041 process.prependOnceListener = noop;
95042
95043 process.listeners = function (name) { return [] }
95044
95045 process.binding = function (name) {
95046 throw new Error('process.binding is not supported');
95047 };
95048
95049 process.cwd = function () { return '/' };
95050 process.chdir = function (dir) {
95051 throw new Error('process.chdir is not supported');
95052 };
95053 process.umask = function() { return 0; };
95054
95055 },{}],26:[function(require,module,exports){
95056 module.exports = require('./lib/_stream_duplex.js');
95057
95058 },{"./lib/_stream_duplex.js":27}],27:[function(require,module,exports){
95059 // Copyright Joyent, Inc. and other Node contributors.
95060 //
95061 // Permission is hereby granted, free of charge, to any person obtaining a
95062 // copy of this software and associated documentation files (the
95063 // "Software"), to deal in the Software without restriction, including
95064 // without limitation the rights to use, copy, modify, merge, publish,
95065 // distribute, sublicense, and/or sell copies of the Software, and to permit
95066 // persons to whom the Software is furnished to do so, subject to the
95067 // following conditions:
95068 //
95069 // The above copyright notice and this permission notice shall be included
95070 // in all copies or substantial portions of the Software.
95071 //
95072 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95073 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95074 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95075 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95076 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95077 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95078 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95079
95080 // a duplex stream is just a stream that is both readable and writable.
95081 // Since JS doesn't have multiple prototypal inheritance, this class
95082 // prototypally inherits from Readable, and then parasitically from
95083 // Writable.
95084
95085 'use strict';
95086
95087 /*<replacement>*/
95088
95089 var processNextTick = require('process-nextick-args');
95090 /*</replacement>*/
95091
95092 /*<replacement>*/
95093 var objectKeys = Object.keys || function (obj) {
95094 var keys = [];
95095 for (var key in obj) {
95096 keys.push(key);
95097 }return keys;
95098 };
95099 /*</replacement>*/
95100
95101 module.exports = Duplex;
95102
95103 /*<replacement>*/
95104 var util = require('core-util-is');
95105 util.inherits = require('inherits');
95106 /*</replacement>*/
95107
95108 var Readable = require('./_stream_readable');
95109 var Writable = require('./_stream_writable');
95110
95111 util.inherits(Duplex, Readable);
95112
95113 var keys = objectKeys(Writable.prototype);
95114 for (var v = 0; v < keys.length; v++) {
95115 var method = keys[v];
95116 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
95117 }
95118
95119 function Duplex(options) {
95120 if (!(this instanceof Duplex)) return new Duplex(options);
95121
95122 Readable.call(this, options);
95123 Writable.call(this, options);
95124
95125 if (options && options.readable === false) this.readable = false;
95126
95127 if (options && options.writable === false) this.writable = false;
95128
95129 this.allowHalfOpen = true;
95130 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
95131
95132 this.once('end', onend);
95133 }
95134
95135 // the no-half-open enforcer
95136 function onend() {
95137 // if we allow half-open state, or if the writable side ended,
95138 // then we're ok.
95139 if (this.allowHalfOpen || this._writableState.ended) return;
95140
95141 // no more data can be written.
95142 // But allow more writes to happen in this tick.
95143 processNextTick(onEndNT, this);
95144 }
95145
95146 function onEndNT(self) {
95147 self.end();
95148 }
95149
95150 Object.defineProperty(Duplex.prototype, 'destroyed', {
95151 get: function () {
95152 if (this._readableState === undefined || this._writableState === undefined) {
95153 return false;
95154 }
95155 return this._readableState.destroyed && this._writableState.destroyed;
95156 },
95157 set: function (value) {
95158 // we ignore the value if the stream
95159 // has not been initialized yet
95160 if (this._readableState === undefined || this._writableState === undefined) {
95161 return;
95162 }
95163
95164 // backward compatibility, the user is explicitly
95165 // managing destroyed
95166 this._readableState.destroyed = value;
95167 this._writableState.destroyed = value;
95168 }
95169 });
95170
95171 Duplex.prototype._destroy = function (err, cb) {
95172 this.push(null);
95173 this.end();
95174
95175 processNextTick(cb, err);
95176 };
95177
95178 function forEach(xs, f) {
95179 for (var i = 0, l = xs.length; i < l; i++) {
95180 f(xs[i], i);
95181 }
95182 }
95183 },{"./_stream_readable":29,"./_stream_writable":31,"core-util-is":14,"inherits":21,"process-nextick-args":24}],28:[function(require,module,exports){
95184 // Copyright Joyent, Inc. and other Node contributors.
95185 //
95186 // Permission is hereby granted, free of charge, to any person obtaining a
95187 // copy of this software and associated documentation files (the
95188 // "Software"), to deal in the Software without restriction, including
95189 // without limitation the rights to use, copy, modify, merge, publish,
95190 // distribute, sublicense, and/or sell copies of the Software, and to permit
95191 // persons to whom the Software is furnished to do so, subject to the
95192 // following conditions:
95193 //
95194 // The above copyright notice and this permission notice shall be included
95195 // in all copies or substantial portions of the Software.
95196 //
95197 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95198 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95199 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95200 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95201 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95202 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95203 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95204
95205 // a passthrough stream.
95206 // basically just the most minimal sort of Transform stream.
95207 // Every written chunk gets output as-is.
95208
95209 'use strict';
95210
95211 module.exports = PassThrough;
95212
95213 var Transform = require('./_stream_transform');
95214
95215 /*<replacement>*/
95216 var util = require('core-util-is');
95217 util.inherits = require('inherits');
95218 /*</replacement>*/
95219
95220 util.inherits(PassThrough, Transform);
95221
95222 function PassThrough(options) {
95223 if (!(this instanceof PassThrough)) return new PassThrough(options);
95224
95225 Transform.call(this, options);
95226 }
95227
95228 PassThrough.prototype._transform = function (chunk, encoding, cb) {
95229 cb(null, chunk);
95230 };
95231 },{"./_stream_transform":30,"core-util-is":14,"inherits":21}],29:[function(require,module,exports){
95232 (function (process,global){
95233 // Copyright Joyent, Inc. and other Node contributors.
95234 //
95235 // Permission is hereby granted, free of charge, to any person obtaining a
95236 // copy of this software and associated documentation files (the
95237 // "Software"), to deal in the Software without restriction, including
95238 // without limitation the rights to use, copy, modify, merge, publish,
95239 // distribute, sublicense, and/or sell copies of the Software, and to permit
95240 // persons to whom the Software is furnished to do so, subject to the
95241 // following conditions:
95242 //
95243 // The above copyright notice and this permission notice shall be included
95244 // in all copies or substantial portions of the Software.
95245 //
95246 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95247 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95248 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95249 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95250 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95251 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95252 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95253
95254 'use strict';
95255
95256 /*<replacement>*/
95257
95258 var processNextTick = require('process-nextick-args');
95259 /*</replacement>*/
95260
95261 module.exports = Readable;
95262
95263 /*<replacement>*/
95264 var isArray = require('isarray');
95265 /*</replacement>*/
95266
95267 /*<replacement>*/
95268 var Duplex;
95269 /*</replacement>*/
95270
95271 Readable.ReadableState = ReadableState;
95272
95273 /*<replacement>*/
95274 var EE = require('events').EventEmitter;
95275
95276 var EElistenerCount = function (emitter, type) {
95277 return emitter.listeners(type).length;
95278 };
95279 /*</replacement>*/
95280
95281 /*<replacement>*/
95282 var Stream = require('./internal/streams/stream');
95283 /*</replacement>*/
95284
95285 // TODO(bmeurer): Change this back to const once hole checks are
95286 // properly optimized away early in Ignition+TurboFan.
95287 /*<replacement>*/
95288 var Buffer = require('safe-buffer').Buffer;
95289 var OurUint8Array = global.Uint8Array || function () {};
95290 function _uint8ArrayToBuffer(chunk) {
95291 return Buffer.from(chunk);
95292 }
95293 function _isUint8Array(obj) {
95294 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
95295 }
95296 /*</replacement>*/
95297
95298 /*<replacement>*/
95299 var util = require('core-util-is');
95300 util.inherits = require('inherits');
95301 /*</replacement>*/
95302
95303 /*<replacement>*/
95304 var debugUtil = require('util');
95305 var debug = void 0;
95306 if (debugUtil && debugUtil.debuglog) {
95307 debug = debugUtil.debuglog('stream');
95308 } else {
95309 debug = function () {};
95310 }
95311 /*</replacement>*/
95312
95313 var BufferList = require('./internal/streams/BufferList');
95314 var destroyImpl = require('./internal/streams/destroy');
95315 var StringDecoder;
95316
95317 util.inherits(Readable, Stream);
95318
95319 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
95320
95321 function prependListener(emitter, event, fn) {
95322 // Sadly this is not cacheable as some libraries bundle their own
95323 // event emitter implementation with them.
95324 if (typeof emitter.prependListener === 'function') {
95325 return emitter.prependListener(event, fn);
95326 } else {
95327 // This is a hack to make sure that our error handler is attached before any
95328 // userland ones. NEVER DO THIS. This is here only because this code needs
95329 // to continue to work with older versions of Node.js that do not include
95330 // the prependListener() method. The goal is to eventually remove this hack.
95331 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
95332 }
95333 }
95334
95335 function ReadableState(options, stream) {
95336 Duplex = Duplex || require('./_stream_duplex');
95337
95338 options = options || {};
95339
95340 // object stream flag. Used to make read(n) ignore n and to
95341 // make all the buffer merging and length checks go away
95342 this.objectMode = !!options.objectMode;
95343
95344 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
95345
95346 // the point at which it stops calling _read() to fill the buffer
95347 // Note: 0 is a valid value, means "don't call _read preemptively ever"
95348 var hwm = options.highWaterMark;
95349 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
95350 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
95351
95352 // cast to ints.
95353 this.highWaterMark = Math.floor(this.highWaterMark);
95354
95355 // A linked list is used to store data chunks instead of an array because the
95356 // linked list can remove elements from the beginning faster than
95357 // array.shift()
95358 this.buffer = new BufferList();
95359 this.length = 0;
95360 this.pipes = null;
95361 this.pipesCount = 0;
95362 this.flowing = null;
95363 this.ended = false;
95364 this.endEmitted = false;
95365 this.reading = false;
95366
95367 // a flag to be able to tell if the event 'readable'/'data' is emitted
95368 // immediately, or on a later tick. We set this to true at first, because
95369 // any actions that shouldn't happen until "later" should generally also
95370 // not happen before the first read call.
95371 this.sync = true;
95372
95373 // whenever we return null, then we set a flag to say
95374 // that we're awaiting a 'readable' event emission.
95375 this.needReadable = false;
95376 this.emittedReadable = false;
95377 this.readableListening = false;
95378 this.resumeScheduled = false;
95379
95380 // has it been destroyed
95381 this.destroyed = false;
95382
95383 // Crypto is kind of old and crusty. Historically, its default string
95384 // encoding is 'binary' so we have to make this configurable.
95385 // Everything else in the universe uses 'utf8', though.
95386 this.defaultEncoding = options.defaultEncoding || 'utf8';
95387
95388 // the number of writers that are awaiting a drain event in .pipe()s
95389 this.awaitDrain = 0;
95390
95391 // if true, a maybeReadMore has been scheduled
95392 this.readingMore = false;
95393
95394 this.decoder = null;
95395 this.encoding = null;
95396 if (options.encoding) {
95397 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
95398 this.decoder = new StringDecoder(options.encoding);
95399 this.encoding = options.encoding;
95400 }
95401 }
95402
95403 function Readable(options) {
95404 Duplex = Duplex || require('./_stream_duplex');
95405
95406 if (!(this instanceof Readable)) return new Readable(options);
95407
95408 this._readableState = new ReadableState(options, this);
95409
95410 // legacy
95411 this.readable = true;
95412
95413 if (options) {
95414 if (typeof options.read === 'function') this._read = options.read;
95415
95416 if (typeof options.destroy === 'function') this._destroy = options.destroy;
95417 }
95418
95419 Stream.call(this);
95420 }
95421
95422 Object.defineProperty(Readable.prototype, 'destroyed', {
95423 get: function () {
95424 if (this._readableState === undefined) {
95425 return false;
95426 }
95427 return this._readableState.destroyed;
95428 },
95429 set: function (value) {
95430 // we ignore the value if the stream
95431 // has not been initialized yet
95432 if (!this._readableState) {
95433 return;
95434 }
95435
95436 // backward compatibility, the user is explicitly
95437 // managing destroyed
95438 this._readableState.destroyed = value;
95439 }
95440 });
95441
95442 Readable.prototype.destroy = destroyImpl.destroy;
95443 Readable.prototype._undestroy = destroyImpl.undestroy;
95444 Readable.prototype._destroy = function (err, cb) {
95445 this.push(null);
95446 cb(err);
95447 };
95448
95449 // Manually shove something into the read() buffer.
95450 // This returns true if the highWaterMark has not been hit yet,
95451 // similar to how Writable.write() returns true if you should
95452 // write() some more.
95453 Readable.prototype.push = function (chunk, encoding) {
95454 var state = this._readableState;
95455 var skipChunkCheck;
95456
95457 if (!state.objectMode) {
95458 if (typeof chunk === 'string') {
95459 encoding = encoding || state.defaultEncoding;
95460 if (encoding !== state.encoding) {
95461 chunk = Buffer.from(chunk, encoding);
95462 encoding = '';
95463 }
95464 skipChunkCheck = true;
95465 }
95466 } else {
95467 skipChunkCheck = true;
95468 }
95469
95470 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
95471 };
95472
95473 // Unshift should *always* be something directly out of read()
95474 Readable.prototype.unshift = function (chunk) {
95475 return readableAddChunk(this, chunk, null, true, false);
95476 };
95477
95478 function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
95479 var state = stream._readableState;
95480 if (chunk === null) {
95481 state.reading = false;
95482 onEofChunk(stream, state);
95483 } else {
95484 var er;
95485 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
95486 if (er) {
95487 stream.emit('error', er);
95488 } else if (state.objectMode || chunk && chunk.length > 0) {
95489 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
95490 chunk = _uint8ArrayToBuffer(chunk);
95491 }
95492
95493 if (addToFront) {
95494 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
95495 } else if (state.ended) {
95496 stream.emit('error', new Error('stream.push() after EOF'));
95497 } else {
95498 state.reading = false;
95499 if (state.decoder && !encoding) {
95500 chunk = state.decoder.write(chunk);
95501 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
95502 } else {
95503 addChunk(stream, state, chunk, false);
95504 }
95505 }
95506 } else if (!addToFront) {
95507 state.reading = false;
95508 }
95509 }
95510
95511 return needMoreData(state);
95512 }
95513
95514 function addChunk(stream, state, chunk, addToFront) {
95515 if (state.flowing && state.length === 0 && !state.sync) {
95516 stream.emit('data', chunk);
95517 stream.read(0);
95518 } else {
95519 // update the buffer info.
95520 state.length += state.objectMode ? 1 : chunk.length;
95521 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
95522
95523 if (state.needReadable) emitReadable(stream);
95524 }
95525 maybeReadMore(stream, state);
95526 }
95527
95528 function chunkInvalid(state, chunk) {
95529 var er;
95530 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
95531 er = new TypeError('Invalid non-string/buffer chunk');
95532 }
95533 return er;
95534 }
95535
95536 // if it's past the high water mark, we can push in some more.
95537 // Also, if we have no data yet, we can stand some
95538 // more bytes. This is to work around cases where hwm=0,
95539 // such as the repl. Also, if the push() triggered a
95540 // readable event, and the user called read(largeNumber) such that
95541 // needReadable was set, then we ought to push more, so that another
95542 // 'readable' event will be triggered.
95543 function needMoreData(state) {
95544 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
95545 }
95546
95547 Readable.prototype.isPaused = function () {
95548 return this._readableState.flowing === false;
95549 };
95550
95551 // backwards compatibility.
95552 Readable.prototype.setEncoding = function (enc) {
95553 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
95554 this._readableState.decoder = new StringDecoder(enc);
95555 this._readableState.encoding = enc;
95556 return this;
95557 };
95558
95559 // Don't raise the hwm > 8MB
95560 var MAX_HWM = 0x800000;
95561 function computeNewHighWaterMark(n) {
95562 if (n >= MAX_HWM) {
95563 n = MAX_HWM;
95564 } else {
95565 // Get the next highest power of 2 to prevent increasing hwm excessively in
95566 // tiny amounts
95567 n--;
95568 n |= n >>> 1;
95569 n |= n >>> 2;
95570 n |= n >>> 4;
95571 n |= n >>> 8;
95572 n |= n >>> 16;
95573 n++;
95574 }
95575 return n;
95576 }
95577
95578 // This function is designed to be inlinable, so please take care when making
95579 // changes to the function body.
95580 function howMuchToRead(n, state) {
95581 if (n <= 0 || state.length === 0 && state.ended) return 0;
95582 if (state.objectMode) return 1;
95583 if (n !== n) {
95584 // Only flow one buffer at a time
95585 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
95586 }
95587 // If we're asking for more than the current hwm, then raise the hwm.
95588 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
95589 if (n <= state.length) return n;
95590 // Don't have enough
95591 if (!state.ended) {
95592 state.needReadable = true;
95593 return 0;
95594 }
95595 return state.length;
95596 }
95597
95598 // you can override either this method, or the async _read(n) below.
95599 Readable.prototype.read = function (n) {
95600 debug('read', n);
95601 n = parseInt(n, 10);
95602 var state = this._readableState;
95603 var nOrig = n;
95604
95605 if (n !== 0) state.emittedReadable = false;
95606
95607 // if we're doing read(0) to trigger a readable event, but we
95608 // already have a bunch of data in the buffer, then just trigger
95609 // the 'readable' event and move on.
95610 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
95611 debug('read: emitReadable', state.length, state.ended);
95612 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
95613 return null;
95614 }
95615
95616 n = howMuchToRead(n, state);
95617
95618 // if we've ended, and we're now clear, then finish it up.
95619 if (n === 0 && state.ended) {
95620 if (state.length === 0) endReadable(this);
95621 return null;
95622 }
95623
95624 // All the actual chunk generation logic needs to be
95625 // *below* the call to _read. The reason is that in certain
95626 // synthetic stream cases, such as passthrough streams, _read
95627 // may be a completely synchronous operation which may change
95628 // the state of the read buffer, providing enough data when
95629 // before there was *not* enough.
95630 //
95631 // So, the steps are:
95632 // 1. Figure out what the state of things will be after we do
95633 // a read from the buffer.
95634 //
95635 // 2. If that resulting state will trigger a _read, then call _read.
95636 // Note that this may be asynchronous, or synchronous. Yes, it is
95637 // deeply ugly to write APIs this way, but that still doesn't mean
95638 // that the Readable class should behave improperly, as streams are
95639 // designed to be sync/async agnostic.
95640 // Take note if the _read call is sync or async (ie, if the read call
95641 // has returned yet), so that we know whether or not it's safe to emit
95642 // 'readable' etc.
95643 //
95644 // 3. Actually pull the requested chunks out of the buffer and return.
95645
95646 // if we need a readable event, then we need to do some reading.
95647 var doRead = state.needReadable;
95648 debug('need readable', doRead);
95649
95650 // if we currently have less than the highWaterMark, then also read some
95651 if (state.length === 0 || state.length - n < state.highWaterMark) {
95652 doRead = true;
95653 debug('length less than watermark', doRead);
95654 }
95655
95656 // however, if we've ended, then there's no point, and if we're already
95657 // reading, then it's unnecessary.
95658 if (state.ended || state.reading) {
95659 doRead = false;
95660 debug('reading or ended', doRead);
95661 } else if (doRead) {
95662 debug('do read');
95663 state.reading = true;
95664 state.sync = true;
95665 // if the length is currently zero, then we *need* a readable event.
95666 if (state.length === 0) state.needReadable = true;
95667 // call internal read method
95668 this._read(state.highWaterMark);
95669 state.sync = false;
95670 // If _read pushed data synchronously, then `reading` will be false,
95671 // and we need to re-evaluate how much data we can return to the user.
95672 if (!state.reading) n = howMuchToRead(nOrig, state);
95673 }
95674
95675 var ret;
95676 if (n > 0) ret = fromList(n, state);else ret = null;
95677
95678 if (ret === null) {
95679 state.needReadable = true;
95680 n = 0;
95681 } else {
95682 state.length -= n;
95683 }
95684
95685 if (state.length === 0) {
95686 // If we have nothing in the buffer, then we want to know
95687 // as soon as we *do* get something into the buffer.
95688 if (!state.ended) state.needReadable = true;
95689
95690 // If we tried to read() past the EOF, then emit end on the next tick.
95691 if (nOrig !== n && state.ended) endReadable(this);
95692 }
95693
95694 if (ret !== null) this.emit('data', ret);
95695
95696 return ret;
95697 };
95698
95699 function onEofChunk(stream, state) {
95700 if (state.ended) return;
95701 if (state.decoder) {
95702 var chunk = state.decoder.end();
95703 if (chunk && chunk.length) {
95704 state.buffer.push(chunk);
95705 state.length += state.objectMode ? 1 : chunk.length;
95706 }
95707 }
95708 state.ended = true;
95709
95710 // emit 'readable' now to make sure it gets picked up.
95711 emitReadable(stream);
95712 }
95713
95714 // Don't emit readable right away in sync mode, because this can trigger
95715 // another read() call => stack overflow. This way, it might trigger
95716 // a nextTick recursion warning, but that's not so bad.
95717 function emitReadable(stream) {
95718 var state = stream._readableState;
95719 state.needReadable = false;
95720 if (!state.emittedReadable) {
95721 debug('emitReadable', state.flowing);
95722 state.emittedReadable = true;
95723 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
95724 }
95725 }
95726
95727 function emitReadable_(stream) {
95728 debug('emit readable');
95729 stream.emit('readable');
95730 flow(stream);
95731 }
95732
95733 // at this point, the user has presumably seen the 'readable' event,
95734 // and called read() to consume some data. that may have triggered
95735 // in turn another _read(n) call, in which case reading = true if
95736 // it's in progress.
95737 // However, if we're not ended, or reading, and the length < hwm,
95738 // then go ahead and try to read some more preemptively.
95739 function maybeReadMore(stream, state) {
95740 if (!state.readingMore) {
95741 state.readingMore = true;
95742 processNextTick(maybeReadMore_, stream, state);
95743 }
95744 }
95745
95746 function maybeReadMore_(stream, state) {
95747 var len = state.length;
95748 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
95749 debug('maybeReadMore read 0');
95750 stream.read(0);
95751 if (len === state.length)
95752 // didn't get any data, stop spinning.
95753 break;else len = state.length;
95754 }
95755 state.readingMore = false;
95756 }
95757
95758 // abstract method. to be overridden in specific implementation classes.
95759 // call cb(er, data) where data is <= n in length.
95760 // for virtual (non-string, non-buffer) streams, "length" is somewhat
95761 // arbitrary, and perhaps not very meaningful.
95762 Readable.prototype._read = function (n) {
95763 this.emit('error', new Error('_read() is not implemented'));
95764 };
95765
95766 Readable.prototype.pipe = function (dest, pipeOpts) {
95767 var src = this;
95768 var state = this._readableState;
95769
95770 switch (state.pipesCount) {
95771 case 0:
95772 state.pipes = dest;
95773 break;
95774 case 1:
95775 state.pipes = [state.pipes, dest];
95776 break;
95777 default:
95778 state.pipes.push(dest);
95779 break;
95780 }
95781 state.pipesCount += 1;
95782 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
95783
95784 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
95785
95786 var endFn = doEnd ? onend : unpipe;
95787 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
95788
95789 dest.on('unpipe', onunpipe);
95790 function onunpipe(readable, unpipeInfo) {
95791 debug('onunpipe');
95792 if (readable === src) {
95793 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
95794 unpipeInfo.hasUnpiped = true;
95795 cleanup();
95796 }
95797 }
95798 }
95799
95800 function onend() {
95801 debug('onend');
95802 dest.end();
95803 }
95804
95805 // when the dest drains, it reduces the awaitDrain counter
95806 // on the source. This would be more elegant with a .once()
95807 // handler in flow(), but adding and removing repeatedly is
95808 // too slow.
95809 var ondrain = pipeOnDrain(src);
95810 dest.on('drain', ondrain);
95811
95812 var cleanedUp = false;
95813 function cleanup() {
95814 debug('cleanup');
95815 // cleanup event handlers once the pipe is broken
95816 dest.removeListener('close', onclose);
95817 dest.removeListener('finish', onfinish);
95818 dest.removeListener('drain', ondrain);
95819 dest.removeListener('error', onerror);
95820 dest.removeListener('unpipe', onunpipe);
95821 src.removeListener('end', onend);
95822 src.removeListener('end', unpipe);
95823 src.removeListener('data', ondata);
95824
95825 cleanedUp = true;
95826
95827 // if the reader is waiting for a drain event from this
95828 // specific writer, then it would cause it to never start
95829 // flowing again.
95830 // So, if this is awaiting a drain, then we just call it now.
95831 // If we don't know, then assume that we are waiting for one.
95832 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
95833 }
95834
95835 // If the user pushes more data while we're writing to dest then we'll end up
95836 // in ondata again. However, we only want to increase awaitDrain once because
95837 // dest will only emit one 'drain' event for the multiple writes.
95838 // => Introduce a guard on increasing awaitDrain.
95839 var increasedAwaitDrain = false;
95840 src.on('data', ondata);
95841 function ondata(chunk) {
95842 debug('ondata');
95843 increasedAwaitDrain = false;
95844 var ret = dest.write(chunk);
95845 if (false === ret && !increasedAwaitDrain) {
95846 // If the user unpiped during `dest.write()`, it is possible
95847 // to get stuck in a permanently paused state if that write
95848 // also returned false.
95849 // => Check whether `dest` is still a piping destination.
95850 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
95851 debug('false write response, pause', src._readableState.awaitDrain);
95852 src._readableState.awaitDrain++;
95853 increasedAwaitDrain = true;
95854 }
95855 src.pause();
95856 }
95857 }
95858
95859 // if the dest has an error, then stop piping into it.
95860 // however, don't suppress the throwing behavior for this.
95861 function onerror(er) {
95862 debug('onerror', er);
95863 unpipe();
95864 dest.removeListener('error', onerror);
95865 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
95866 }
95867
95868 // Make sure our error handler is attached before userland ones.
95869 prependListener(dest, 'error', onerror);
95870
95871 // Both close and finish should trigger unpipe, but only once.
95872 function onclose() {
95873 dest.removeListener('finish', onfinish);
95874 unpipe();
95875 }
95876 dest.once('close', onclose);
95877 function onfinish() {
95878 debug('onfinish');
95879 dest.removeListener('close', onclose);
95880 unpipe();
95881 }
95882 dest.once('finish', onfinish);
95883
95884 function unpipe() {
95885 debug('unpipe');
95886 src.unpipe(dest);
95887 }
95888
95889 // tell the dest that it's being piped to
95890 dest.emit('pipe', src);
95891
95892 // start the flow if it hasn't been started already.
95893 if (!state.flowing) {
95894 debug('pipe resume');
95895 src.resume();
95896 }
95897
95898 return dest;
95899 };
95900
95901 function pipeOnDrain(src) {
95902 return function () {
95903 var state = src._readableState;
95904 debug('pipeOnDrain', state.awaitDrain);
95905 if (state.awaitDrain) state.awaitDrain--;
95906 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
95907 state.flowing = true;
95908 flow(src);
95909 }
95910 };
95911 }
95912
95913 Readable.prototype.unpipe = function (dest) {
95914 var state = this._readableState;
95915 var unpipeInfo = { hasUnpiped: false };
95916
95917 // if we're not piping anywhere, then do nothing.
95918 if (state.pipesCount === 0) return this;
95919
95920 // just one destination. most common case.
95921 if (state.pipesCount === 1) {
95922 // passed in one, but it's not the right one.
95923 if (dest && dest !== state.pipes) return this;
95924
95925 if (!dest) dest = state.pipes;
95926
95927 // got a match.
95928 state.pipes = null;
95929 state.pipesCount = 0;
95930 state.flowing = false;
95931 if (dest) dest.emit('unpipe', this, unpipeInfo);
95932 return this;
95933 }
95934
95935 // slow case. multiple pipe destinations.
95936
95937 if (!dest) {
95938 // remove all.
95939 var dests = state.pipes;
95940 var len = state.pipesCount;
95941 state.pipes = null;
95942 state.pipesCount = 0;
95943 state.flowing = false;
95944
95945 for (var i = 0; i < len; i++) {
95946 dests[i].emit('unpipe', this, unpipeInfo);
95947 }return this;
95948 }
95949
95950 // try to find the right one.
95951 var index = indexOf(state.pipes, dest);
95952 if (index === -1) return this;
95953
95954 state.pipes.splice(index, 1);
95955 state.pipesCount -= 1;
95956 if (state.pipesCount === 1) state.pipes = state.pipes[0];
95957
95958 dest.emit('unpipe', this, unpipeInfo);
95959
95960 return this;
95961 };
95962
95963 // set up data events if they are asked for
95964 // Ensure readable listeners eventually get something
95965 Readable.prototype.on = function (ev, fn) {
95966 var res = Stream.prototype.on.call(this, ev, fn);
95967
95968 if (ev === 'data') {
95969 // Start flowing on next tick if stream isn't explicitly paused
95970 if (this._readableState.flowing !== false) this.resume();
95971 } else if (ev === 'readable') {
95972 var state = this._readableState;
95973 if (!state.endEmitted && !state.readableListening) {
95974 state.readableListening = state.needReadable = true;
95975 state.emittedReadable = false;
95976 if (!state.reading) {
95977 processNextTick(nReadingNextTick, this);
95978 } else if (state.length) {
95979 emitReadable(this);
95980 }
95981 }
95982 }
95983
95984 return res;
95985 };
95986 Readable.prototype.addListener = Readable.prototype.on;
95987
95988 function nReadingNextTick(self) {
95989 debug('readable nexttick read 0');
95990 self.read(0);
95991 }
95992
95993 // pause() and resume() are remnants of the legacy readable stream API
95994 // If the user uses them, then switch into old mode.
95995 Readable.prototype.resume = function () {
95996 var state = this._readableState;
95997 if (!state.flowing) {
95998 debug('resume');
95999 state.flowing = true;
96000 resume(this, state);
96001 }
96002 return this;
96003 };
96004
96005 function resume(stream, state) {
96006 if (!state.resumeScheduled) {
96007 state.resumeScheduled = true;
96008 processNextTick(resume_, stream, state);
96009 }
96010 }
96011
96012 function resume_(stream, state) {
96013 if (!state.reading) {
96014 debug('resume read 0');
96015 stream.read(0);
96016 }
96017
96018 state.resumeScheduled = false;
96019 state.awaitDrain = 0;
96020 stream.emit('resume');
96021 flow(stream);
96022 if (state.flowing && !state.reading) stream.read(0);
96023 }
96024
96025 Readable.prototype.pause = function () {
96026 debug('call pause flowing=%j', this._readableState.flowing);
96027 if (false !== this._readableState.flowing) {
96028 debug('pause');
96029 this._readableState.flowing = false;
96030 this.emit('pause');
96031 }
96032 return this;
96033 };
96034
96035 function flow(stream) {
96036 var state = stream._readableState;
96037 debug('flow', state.flowing);
96038 while (state.flowing && stream.read() !== null) {}
96039 }
96040
96041 // wrap an old-style stream as the async data source.
96042 // This is *not* part of the readable stream interface.
96043 // It is an ugly unfortunate mess of history.
96044 Readable.prototype.wrap = function (stream) {
96045 var state = this._readableState;
96046 var paused = false;
96047
96048 var self = this;
96049 stream.on('end', function () {
96050 debug('wrapped end');
96051 if (state.decoder && !state.ended) {
96052 var chunk = state.decoder.end();
96053 if (chunk && chunk.length) self.push(chunk);
96054 }
96055
96056 self.push(null);
96057 });
96058
96059 stream.on('data', function (chunk) {
96060 debug('wrapped data');
96061 if (state.decoder) chunk = state.decoder.write(chunk);
96062
96063 // don't skip over falsy values in objectMode
96064 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
96065
96066 var ret = self.push(chunk);
96067 if (!ret) {
96068 paused = true;
96069 stream.pause();
96070 }
96071 });
96072
96073 // proxy all the other methods.
96074 // important when wrapping filters and duplexes.
96075 for (var i in stream) {
96076 if (this[i] === undefined && typeof stream[i] === 'function') {
96077 this[i] = function (method) {
96078 return function () {
96079 return stream[method].apply(stream, arguments);
96080 };
96081 }(i);
96082 }
96083 }
96084
96085 // proxy certain important events.
96086 for (var n = 0; n < kProxyEvents.length; n++) {
96087 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
96088 }
96089
96090 // when we try to consume some more bytes, simply unpause the
96091 // underlying stream.
96092 self._read = function (n) {
96093 debug('wrapped _read', n);
96094 if (paused) {
96095 paused = false;
96096 stream.resume();
96097 }
96098 };
96099
96100 return self;
96101 };
96102
96103 // exposed for testing purposes only.
96104 Readable._fromList = fromList;
96105
96106 // Pluck off n bytes from an array of buffers.
96107 // Length is the combined lengths of all the buffers in the list.
96108 // This function is designed to be inlinable, so please take care when making
96109 // changes to the function body.
96110 function fromList(n, state) {
96111 // nothing buffered
96112 if (state.length === 0) return null;
96113
96114 var ret;
96115 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
96116 // read it all, truncate the list
96117 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
96118 state.buffer.clear();
96119 } else {
96120 // read part of list
96121 ret = fromListPartial(n, state.buffer, state.decoder);
96122 }
96123
96124 return ret;
96125 }
96126
96127 // Extracts only enough buffered data to satisfy the amount requested.
96128 // This function is designed to be inlinable, so please take care when making
96129 // changes to the function body.
96130 function fromListPartial(n, list, hasStrings) {
96131 var ret;
96132 if (n < list.head.data.length) {
96133 // slice is the same for buffers and strings
96134 ret = list.head.data.slice(0, n);
96135 list.head.data = list.head.data.slice(n);
96136 } else if (n === list.head.data.length) {
96137 // first chunk is a perfect match
96138 ret = list.shift();
96139 } else {
96140 // result spans more than one buffer
96141 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
96142 }
96143 return ret;
96144 }
96145
96146 // Copies a specified amount of characters from the list of buffered data
96147 // chunks.
96148 // This function is designed to be inlinable, so please take care when making
96149 // changes to the function body.
96150 function copyFromBufferString(n, list) {
96151 var p = list.head;
96152 var c = 1;
96153 var ret = p.data;
96154 n -= ret.length;
96155 while (p = p.next) {
96156 var str = p.data;
96157 var nb = n > str.length ? str.length : n;
96158 if (nb === str.length) ret += str;else ret += str.slice(0, n);
96159 n -= nb;
96160 if (n === 0) {
96161 if (nb === str.length) {
96162 ++c;
96163 if (p.next) list.head = p.next;else list.head = list.tail = null;
96164 } else {
96165 list.head = p;
96166 p.data = str.slice(nb);
96167 }
96168 break;
96169 }
96170 ++c;
96171 }
96172 list.length -= c;
96173 return ret;
96174 }
96175
96176 // Copies a specified amount of bytes from the list of buffered data chunks.
96177 // This function is designed to be inlinable, so please take care when making
96178 // changes to the function body.
96179 function copyFromBuffer(n, list) {
96180 var ret = Buffer.allocUnsafe(n);
96181 var p = list.head;
96182 var c = 1;
96183 p.data.copy(ret);
96184 n -= p.data.length;
96185 while (p = p.next) {
96186 var buf = p.data;
96187 var nb = n > buf.length ? buf.length : n;
96188 buf.copy(ret, ret.length - n, 0, nb);
96189 n -= nb;
96190 if (n === 0) {
96191 if (nb === buf.length) {
96192 ++c;
96193 if (p.next) list.head = p.next;else list.head = list.tail = null;
96194 } else {
96195 list.head = p;
96196 p.data = buf.slice(nb);
96197 }
96198 break;
96199 }
96200 ++c;
96201 }
96202 list.length -= c;
96203 return ret;
96204 }
96205
96206 function endReadable(stream) {
96207 var state = stream._readableState;
96208
96209 // If we get here before consuming all the bytes, then that is a
96210 // bug in node. Should never happen.
96211 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
96212
96213 if (!state.endEmitted) {
96214 state.ended = true;
96215 processNextTick(endReadableNT, state, stream);
96216 }
96217 }
96218
96219 function endReadableNT(state, stream) {
96220 // Check that we didn't get one last unshift.
96221 if (!state.endEmitted && state.length === 0) {
96222 state.endEmitted = true;
96223 stream.readable = false;
96224 stream.emit('end');
96225 }
96226 }
96227
96228 function forEach(xs, f) {
96229 for (var i = 0, l = xs.length; i < l; i++) {
96230 f(xs[i], i);
96231 }
96232 }
96233
96234 function indexOf(xs, x) {
96235 for (var i = 0, l = xs.length; i < l; i++) {
96236 if (xs[i] === x) return i;
96237 }
96238 return -1;
96239 }
96240 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
96241 },{"./_stream_duplex":27,"./internal/streams/BufferList":32,"./internal/streams/destroy":33,"./internal/streams/stream":34,"_process":25,"core-util-is":14,"events":18,"inherits":21,"isarray":23,"process-nextick-args":24,"safe-buffer":40,"string_decoder/":50,"util":4}],30:[function(require,module,exports){
96242 // Copyright Joyent, Inc. and other Node contributors.
96243 //
96244 // Permission is hereby granted, free of charge, to any person obtaining a
96245 // copy of this software and associated documentation files (the
96246 // "Software"), to deal in the Software without restriction, including
96247 // without limitation the rights to use, copy, modify, merge, publish,
96248 // distribute, sublicense, and/or sell copies of the Software, and to permit
96249 // persons to whom the Software is furnished to do so, subject to the
96250 // following conditions:
96251 //
96252 // The above copyright notice and this permission notice shall be included
96253 // in all copies or substantial portions of the Software.
96254 //
96255 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
96256 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
96257 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
96258 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
96259 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
96260 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
96261 // USE OR OTHER DEALINGS IN THE SOFTWARE.
96262
96263 // a transform stream is a readable/writable stream where you do
96264 // something with the data. Sometimes it's called a "filter",
96265 // but that's not a great name for it, since that implies a thing where
96266 // some bits pass through, and others are simply ignored. (That would
96267 // be a valid example of a transform, of course.)
96268 //
96269 // While the output is causally related to the input, it's not a
96270 // necessarily symmetric or synchronous transformation. For example,
96271 // a zlib stream might take multiple plain-text writes(), and then
96272 // emit a single compressed chunk some time in the future.
96273 //
96274 // Here's how this works:
96275 //
96276 // The Transform stream has all the aspects of the readable and writable
96277 // stream classes. When you write(chunk), that calls _write(chunk,cb)
96278 // internally, and returns false if there's a lot of pending writes
96279 // buffered up. When you call read(), that calls _read(n) until
96280 // there's enough pending readable data buffered up.
96281 //
96282 // In a transform stream, the written data is placed in a buffer. When
96283 // _read(n) is called, it transforms the queued up data, calling the
96284 // buffered _write cb's as it consumes chunks. If consuming a single
96285 // written chunk would result in multiple output chunks, then the first
96286 // outputted bit calls the readcb, and subsequent chunks just go into
96287 // the read buffer, and will cause it to emit 'readable' if necessary.
96288 //
96289 // This way, back-pressure is actually determined by the reading side,
96290 // since _read has to be called to start processing a new chunk. However,
96291 // a pathological inflate type of transform can cause excessive buffering
96292 // here. For example, imagine a stream where every byte of input is
96293 // interpreted as an integer from 0-255, and then results in that many
96294 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
96295 // 1kb of data being output. In this case, you could write a very small
96296 // amount of input, and end up with a very large amount of output. In
96297 // such a pathological inflating mechanism, there'd be no way to tell
96298 // the system to stop doing the transform. A single 4MB write could
96299 // cause the system to run out of memory.
96300 //
96301 // However, even in such a pathological case, only a single written chunk
96302 // would be consumed, and then the rest would wait (un-transformed) until
96303 // the results of the previous transformed chunk were consumed.
96304
96305 'use strict';
96306
96307 module.exports = Transform;
96308
96309 var Duplex = require('./_stream_duplex');
96310
96311 /*<replacement>*/
96312 var util = require('core-util-is');
96313 util.inherits = require('inherits');
96314 /*</replacement>*/
96315
96316 util.inherits(Transform, Duplex);
96317
96318 function TransformState(stream) {
96319 this.afterTransform = function (er, data) {
96320 return afterTransform(stream, er, data);
96321 };
96322
96323 this.needTransform = false;
96324 this.transforming = false;
96325 this.writecb = null;
96326 this.writechunk = null;
96327 this.writeencoding = null;
96328 }
96329
96330 function afterTransform(stream, er, data) {
96331 var ts = stream._transformState;
96332 ts.transforming = false;
96333
96334 var cb = ts.writecb;
96335
96336 if (!cb) {
96337 return stream.emit('error', new Error('write callback called multiple times'));
96338 }
96339
96340 ts.writechunk = null;
96341 ts.writecb = null;
96342
96343 if (data !== null && data !== undefined) stream.push(data);
96344
96345 cb(er);
96346
96347 var rs = stream._readableState;
96348 rs.reading = false;
96349 if (rs.needReadable || rs.length < rs.highWaterMark) {
96350 stream._read(rs.highWaterMark);
96351 }
96352 }
96353
96354 function Transform(options) {
96355 if (!(this instanceof Transform)) return new Transform(options);
96356
96357 Duplex.call(this, options);
96358
96359 this._transformState = new TransformState(this);
96360
96361 var stream = this;
96362
96363 // start out asking for a readable event once data is transformed.
96364 this._readableState.needReadable = true;
96365
96366 // we have implemented the _read method, and done the other things
96367 // that Readable wants before the first _read call, so unset the
96368 // sync guard flag.
96369 this._readableState.sync = false;
96370
96371 if (options) {
96372 if (typeof options.transform === 'function') this._transform = options.transform;
96373
96374 if (typeof options.flush === 'function') this._flush = options.flush;
96375 }
96376
96377 // When the writable side finishes, then flush out anything remaining.
96378 this.once('prefinish', function () {
96379 if (typeof this._flush === 'function') this._flush(function (er, data) {
96380 done(stream, er, data);
96381 });else done(stream);
96382 });
96383 }
96384
96385 Transform.prototype.push = function (chunk, encoding) {
96386 this._transformState.needTransform = false;
96387 return Duplex.prototype.push.call(this, chunk, encoding);
96388 };
96389
96390 // This is the part where you do stuff!
96391 // override this function in implementation classes.
96392 // 'chunk' is an input chunk.
96393 //
96394 // Call `push(newChunk)` to pass along transformed output
96395 // to the readable side. You may call 'push' zero or more times.
96396 //
96397 // Call `cb(err)` when you are done with this chunk. If you pass
96398 // an error, then that'll put the hurt on the whole operation. If you
96399 // never call cb(), then you'll never get another chunk.
96400 Transform.prototype._transform = function (chunk, encoding, cb) {
96401 throw new Error('_transform() is not implemented');
96402 };
96403
96404 Transform.prototype._write = function (chunk, encoding, cb) {
96405 var ts = this._transformState;
96406 ts.writecb = cb;
96407 ts.writechunk = chunk;
96408 ts.writeencoding = encoding;
96409 if (!ts.transforming) {
96410 var rs = this._readableState;
96411 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
96412 }
96413 };
96414
96415 // Doesn't matter what the args are here.
96416 // _transform does all the work.
96417 // That we got here means that the readable side wants more data.
96418 Transform.prototype._read = function (n) {
96419 var ts = this._transformState;
96420
96421 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
96422 ts.transforming = true;
96423 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
96424 } else {
96425 // mark that we need a transform, so that any data that comes in
96426 // will get processed, now that we've asked for it.
96427 ts.needTransform = true;
96428 }
96429 };
96430
96431 Transform.prototype._destroy = function (err, cb) {
96432 var _this = this;
96433
96434 Duplex.prototype._destroy.call(this, err, function (err2) {
96435 cb(err2);
96436 _this.emit('close');
96437 });
96438 };
96439
96440 function done(stream, er, data) {
96441 if (er) return stream.emit('error', er);
96442
96443 if (data !== null && data !== undefined) stream.push(data);
96444
96445 // if there's nothing in the write buffer, then that means
96446 // that nothing more will ever be provided
96447 var ws = stream._writableState;
96448 var ts = stream._transformState;
96449
96450 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
96451
96452 if (ts.transforming) throw new Error('Calling transform done when still transforming');
96453
96454 return stream.push(null);
96455 }
96456 },{"./_stream_duplex":27,"core-util-is":14,"inherits":21}],31:[function(require,module,exports){
96457 (function (process,global){
96458 // Copyright Joyent, Inc. and other Node contributors.
96459 //
96460 // Permission is hereby granted, free of charge, to any person obtaining a
96461 // copy of this software and associated documentation files (the
96462 // "Software"), to deal in the Software without restriction, including
96463 // without limitation the rights to use, copy, modify, merge, publish,
96464 // distribute, sublicense, and/or sell copies of the Software, and to permit
96465 // persons to whom the Software is furnished to do so, subject to the
96466 // following conditions:
96467 //
96468 // The above copyright notice and this permission notice shall be included
96469 // in all copies or substantial portions of the Software.
96470 //
96471 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
96472 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
96473 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
96474 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
96475 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
96476 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
96477 // USE OR OTHER DEALINGS IN THE SOFTWARE.
96478
96479 // A bit simpler than readable streams.
96480 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
96481 // the drain event emission and buffering.
96482
96483 'use strict';
96484
96485 /*<replacement>*/
96486
96487 var processNextTick = require('process-nextick-args');
96488 /*</replacement>*/
96489
96490 module.exports = Writable;
96491
96492 /* <replacement> */
96493 function WriteReq(chunk, encoding, cb) {
96494 this.chunk = chunk;
96495 this.encoding = encoding;
96496 this.callback = cb;
96497 this.next = null;
96498 }
96499
96500 // It seems a linked list but it is not
96501 // there will be only 2 of these for each stream
96502 function CorkedRequest(state) {
96503 var _this = this;
96504
96505 this.next = null;
96506 this.entry = null;
96507 this.finish = function () {
96508 onCorkedFinish(_this, state);
96509 };
96510 }
96511 /* </replacement> */
96512
96513 /*<replacement>*/
96514 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
96515 /*</replacement>*/
96516
96517 /*<replacement>*/
96518 var Duplex;
96519 /*</replacement>*/
96520
96521 Writable.WritableState = WritableState;
96522
96523 /*<replacement>*/
96524 var util = require('core-util-is');
96525 util.inherits = require('inherits');
96526 /*</replacement>*/
96527
96528 /*<replacement>*/
96529 var internalUtil = {
96530 deprecate: require('util-deprecate')
96531 };
96532 /*</replacement>*/
96533
96534 /*<replacement>*/
96535 var Stream = require('./internal/streams/stream');
96536 /*</replacement>*/
96537
96538 /*<replacement>*/
96539 var Buffer = require('safe-buffer').Buffer;
96540 var OurUint8Array = global.Uint8Array || function () {};
96541 function _uint8ArrayToBuffer(chunk) {
96542 return Buffer.from(chunk);
96543 }
96544 function _isUint8Array(obj) {
96545 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
96546 }
96547 /*</replacement>*/
96548
96549 var destroyImpl = require('./internal/streams/destroy');
96550
96551 util.inherits(Writable, Stream);
96552
96553 function nop() {}
96554
96555 function WritableState(options, stream) {
96556 Duplex = Duplex || require('./_stream_duplex');
96557
96558 options = options || {};
96559
96560 // object stream flag to indicate whether or not this stream
96561 // contains buffers or objects.
96562 this.objectMode = !!options.objectMode;
96563
96564 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
96565
96566 // the point at which write() starts returning false
96567 // Note: 0 is a valid value, means that we always return false if
96568 // the entire buffer is not flushed immediately on write()
96569 var hwm = options.highWaterMark;
96570 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
96571 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
96572
96573 // cast to ints.
96574 this.highWaterMark = Math.floor(this.highWaterMark);
96575
96576 // if _final has been called
96577 this.finalCalled = false;
96578
96579 // drain event flag.
96580 this.needDrain = false;
96581 // at the start of calling end()
96582 this.ending = false;
96583 // when end() has been called, and returned
96584 this.ended = false;
96585 // when 'finish' is emitted
96586 this.finished = false;
96587
96588 // has it been destroyed
96589 this.destroyed = false;
96590
96591 // should we decode strings into buffers before passing to _write?
96592 // this is here so that some node-core streams can optimize string
96593 // handling at a lower level.
96594 var noDecode = options.decodeStrings === false;
96595 this.decodeStrings = !noDecode;
96596
96597 // Crypto is kind of old and crusty. Historically, its default string
96598 // encoding is 'binary' so we have to make this configurable.
96599 // Everything else in the universe uses 'utf8', though.
96600 this.defaultEncoding = options.defaultEncoding || 'utf8';
96601
96602 // not an actual buffer we keep track of, but a measurement
96603 // of how much we're waiting to get pushed to some underlying
96604 // socket or file.
96605 this.length = 0;
96606
96607 // a flag to see when we're in the middle of a write.
96608 this.writing = false;
96609
96610 // when true all writes will be buffered until .uncork() call
96611 this.corked = 0;
96612
96613 // a flag to be able to tell if the onwrite cb is called immediately,
96614 // or on a later tick. We set this to true at first, because any
96615 // actions that shouldn't happen until "later" should generally also
96616 // not happen before the first write call.
96617 this.sync = true;
96618
96619 // a flag to know if we're processing previously buffered items, which
96620 // may call the _write() callback in the same tick, so that we don't
96621 // end up in an overlapped onwrite situation.
96622 this.bufferProcessing = false;
96623
96624 // the callback that's passed to _write(chunk,cb)
96625 this.onwrite = function (er) {
96626 onwrite(stream, er);
96627 };
96628
96629 // the callback that the user supplies to write(chunk,encoding,cb)
96630 this.writecb = null;
96631
96632 // the amount that is being written when _write is called.
96633 this.writelen = 0;
96634
96635 this.bufferedRequest = null;
96636 this.lastBufferedRequest = null;
96637
96638 // number of pending user-supplied write callbacks
96639 // this must be 0 before 'finish' can be emitted
96640 this.pendingcb = 0;
96641
96642 // emit prefinish if the only thing we're waiting for is _write cbs
96643 // This is relevant for synchronous Transform streams
96644 this.prefinished = false;
96645
96646 // True if the error was already emitted and should not be thrown again
96647 this.errorEmitted = false;
96648
96649 // count buffered requests
96650 this.bufferedRequestCount = 0;
96651
96652 // allocate the first CorkedRequest, there is always
96653 // one allocated and free to use, and we maintain at most two
96654 this.corkedRequestsFree = new CorkedRequest(this);
96655 }
96656
96657 WritableState.prototype.getBuffer = function getBuffer() {
96658 var current = this.bufferedRequest;
96659 var out = [];
96660 while (current) {
96661 out.push(current);
96662 current = current.next;
96663 }
96664 return out;
96665 };
96666
96667 (function () {
96668 try {
96669 Object.defineProperty(WritableState.prototype, 'buffer', {
96670 get: internalUtil.deprecate(function () {
96671 return this.getBuffer();
96672 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
96673 });
96674 } catch (_) {}
96675 })();
96676
96677 // Test _writableState for inheritance to account for Duplex streams,
96678 // whose prototype chain only points to Readable.
96679 var realHasInstance;
96680 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
96681 realHasInstance = Function.prototype[Symbol.hasInstance];
96682 Object.defineProperty(Writable, Symbol.hasInstance, {
96683 value: function (object) {
96684 if (realHasInstance.call(this, object)) return true;
96685
96686 return object && object._writableState instanceof WritableState;
96687 }
96688 });
96689 } else {
96690 realHasInstance = function (object) {
96691 return object instanceof this;
96692 };
96693 }
96694
96695 function Writable(options) {
96696 Duplex = Duplex || require('./_stream_duplex');
96697
96698 // Writable ctor is applied to Duplexes, too.
96699 // `realHasInstance` is necessary because using plain `instanceof`
96700 // would return false, as no `_writableState` property is attached.
96701
96702 // Trying to use the custom `instanceof` for Writable here will also break the
96703 // Node.js LazyTransform implementation, which has a non-trivial getter for
96704 // `_writableState` that would lead to infinite recursion.
96705 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
96706 return new Writable(options);
96707 }
96708
96709 this._writableState = new WritableState(options, this);
96710
96711 // legacy.
96712 this.writable = true;
96713
96714 if (options) {
96715 if (typeof options.write === 'function') this._write = options.write;
96716
96717 if (typeof options.writev === 'function') this._writev = options.writev;
96718
96719 if (typeof options.destroy === 'function') this._destroy = options.destroy;
96720
96721 if (typeof options.final === 'function') this._final = options.final;
96722 }
96723
96724 Stream.call(this);
96725 }
96726
96727 // Otherwise people can pipe Writable streams, which is just wrong.
96728 Writable.prototype.pipe = function () {
96729 this.emit('error', new Error('Cannot pipe, not readable'));
96730 };
96731
96732 function writeAfterEnd(stream, cb) {
96733 var er = new Error('write after end');
96734 // TODO: defer error events consistently everywhere, not just the cb
96735 stream.emit('error', er);
96736 processNextTick(cb, er);
96737 }
96738
96739 // Checks that a user-supplied chunk is valid, especially for the particular
96740 // mode the stream is in. Currently this means that `null` is never accepted
96741 // and undefined/non-string values are only allowed in object mode.
96742 function validChunk(stream, state, chunk, cb) {
96743 var valid = true;
96744 var er = false;
96745
96746 if (chunk === null) {
96747 er = new TypeError('May not write null values to stream');
96748 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
96749 er = new TypeError('Invalid non-string/buffer chunk');
96750 }
96751 if (er) {
96752 stream.emit('error', er);
96753 processNextTick(cb, er);
96754 valid = false;
96755 }
96756 return valid;
96757 }
96758
96759 Writable.prototype.write = function (chunk, encoding, cb) {
96760 var state = this._writableState;
96761 var ret = false;
96762 var isBuf = _isUint8Array(chunk) && !state.objectMode;
96763
96764 if (isBuf && !Buffer.isBuffer(chunk)) {
96765 chunk = _uint8ArrayToBuffer(chunk);
96766 }
96767
96768 if (typeof encoding === 'function') {
96769 cb = encoding;
96770 encoding = null;
96771 }
96772
96773 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
96774
96775 if (typeof cb !== 'function') cb = nop;
96776
96777 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
96778 state.pendingcb++;
96779 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
96780 }
96781
96782 return ret;
96783 };
96784
96785 Writable.prototype.cork = function () {
96786 var state = this._writableState;
96787
96788 state.corked++;
96789 };
96790
96791 Writable.prototype.uncork = function () {
96792 var state = this._writableState;
96793
96794 if (state.corked) {
96795 state.corked--;
96796
96797 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
96798 }
96799 };
96800
96801 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
96802 // node::ParseEncoding() requires lower case.
96803 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
96804 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
96805 this._writableState.defaultEncoding = encoding;
96806 return this;
96807 };
96808
96809 function decodeChunk(state, chunk, encoding) {
96810 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
96811 chunk = Buffer.from(chunk, encoding);
96812 }
96813 return chunk;
96814 }
96815
96816 // if we're already writing something, then just put this
96817 // in the queue, and wait our turn. Otherwise, call _write
96818 // If we return false, then we need a drain event, so set that flag.
96819 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
96820 if (!isBuf) {
96821 var newChunk = decodeChunk(state, chunk, encoding);
96822 if (chunk !== newChunk) {
96823 isBuf = true;
96824 encoding = 'buffer';
96825 chunk = newChunk;
96826 }
96827 }
96828 var len = state.objectMode ? 1 : chunk.length;
96829
96830 state.length += len;
96831
96832 var ret = state.length < state.highWaterMark;
96833 // we must ensure that previous needDrain will not be reset to false.
96834 if (!ret) state.needDrain = true;
96835
96836 if (state.writing || state.corked) {
96837 var last = state.lastBufferedRequest;
96838 state.lastBufferedRequest = {
96839 chunk: chunk,
96840 encoding: encoding,
96841 isBuf: isBuf,
96842 callback: cb,
96843 next: null
96844 };
96845 if (last) {
96846 last.next = state.lastBufferedRequest;
96847 } else {
96848 state.bufferedRequest = state.lastBufferedRequest;
96849 }
96850 state.bufferedRequestCount += 1;
96851 } else {
96852 doWrite(stream, state, false, len, chunk, encoding, cb);
96853 }
96854
96855 return ret;
96856 }
96857
96858 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
96859 state.writelen = len;
96860 state.writecb = cb;
96861 state.writing = true;
96862 state.sync = true;
96863 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
96864 state.sync = false;
96865 }
96866
96867 function onwriteError(stream, state, sync, er, cb) {
96868 --state.pendingcb;
96869
96870 if (sync) {
96871 // defer the callback if we are being called synchronously
96872 // to avoid piling up things on the stack
96873 processNextTick(cb, er);
96874 // this can emit finish, and it will always happen
96875 // after error
96876 processNextTick(finishMaybe, stream, state);
96877 stream._writableState.errorEmitted = true;
96878 stream.emit('error', er);
96879 } else {
96880 // the caller expect this to happen before if
96881 // it is async
96882 cb(er);
96883 stream._writableState.errorEmitted = true;
96884 stream.emit('error', er);
96885 // this can emit finish, but finish must
96886 // always follow error
96887 finishMaybe(stream, state);
96888 }
96889 }
96890
96891 function onwriteStateUpdate(state) {
96892 state.writing = false;
96893 state.writecb = null;
96894 state.length -= state.writelen;
96895 state.writelen = 0;
96896 }
96897
96898 function onwrite(stream, er) {
96899 var state = stream._writableState;
96900 var sync = state.sync;
96901 var cb = state.writecb;
96902
96903 onwriteStateUpdate(state);
96904
96905 if (er) onwriteError(stream, state, sync, er, cb);else {
96906 // Check if we're actually ready to finish, but don't emit yet
96907 var finished = needFinish(state);
96908
96909 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
96910 clearBuffer(stream, state);
96911 }
96912
96913 if (sync) {
96914 /*<replacement>*/
96915 asyncWrite(afterWrite, stream, state, finished, cb);
96916 /*</replacement>*/
96917 } else {
96918 afterWrite(stream, state, finished, cb);
96919 }
96920 }
96921 }
96922
96923 function afterWrite(stream, state, finished, cb) {
96924 if (!finished) onwriteDrain(stream, state);
96925 state.pendingcb--;
96926 cb();
96927 finishMaybe(stream, state);
96928 }
96929
96930 // Must force callback to be called on nextTick, so that we don't
96931 // emit 'drain' before the write() consumer gets the 'false' return
96932 // value, and has a chance to attach a 'drain' listener.
96933 function onwriteDrain(stream, state) {
96934 if (state.length === 0 && state.needDrain) {
96935 state.needDrain = false;
96936 stream.emit('drain');
96937 }
96938 }
96939
96940 // if there's something in the buffer waiting, then process it
96941 function clearBuffer(stream, state) {
96942 state.bufferProcessing = true;
96943 var entry = state.bufferedRequest;
96944
96945 if (stream._writev && entry && entry.next) {
96946 // Fast case, write everything using _writev()
96947 var l = state.bufferedRequestCount;
96948 var buffer = new Array(l);
96949 var holder = state.corkedRequestsFree;
96950 holder.entry = entry;
96951
96952 var count = 0;
96953 var allBuffers = true;
96954 while (entry) {
96955 buffer[count] = entry;
96956 if (!entry.isBuf) allBuffers = false;
96957 entry = entry.next;
96958 count += 1;
96959 }
96960 buffer.allBuffers = allBuffers;
96961
96962 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
96963
96964 // doWrite is almost always async, defer these to save a bit of time
96965 // as the hot path ends with doWrite
96966 state.pendingcb++;
96967 state.lastBufferedRequest = null;
96968 if (holder.next) {
96969 state.corkedRequestsFree = holder.next;
96970 holder.next = null;
96971 } else {
96972 state.corkedRequestsFree = new CorkedRequest(state);
96973 }
96974 } else {
96975 // Slow case, write chunks one-by-one
96976 while (entry) {
96977 var chunk = entry.chunk;
96978 var encoding = entry.encoding;
96979 var cb = entry.callback;
96980 var len = state.objectMode ? 1 : chunk.length;
96981
96982 doWrite(stream, state, false, len, chunk, encoding, cb);
96983 entry = entry.next;
96984 // if we didn't call the onwrite immediately, then
96985 // it means that we need to wait until it does.
96986 // also, that means that the chunk and cb are currently
96987 // being processed, so move the buffer counter past them.
96988 if (state.writing) {
96989 break;
96990 }
96991 }
96992
96993 if (entry === null) state.lastBufferedRequest = null;
96994 }
96995
96996 state.bufferedRequestCount = 0;
96997 state.bufferedRequest = entry;
96998 state.bufferProcessing = false;
96999 }
97000
97001 Writable.prototype._write = function (chunk, encoding, cb) {
97002 cb(new Error('_write() is not implemented'));
97003 };
97004
97005 Writable.prototype._writev = null;
97006
97007 Writable.prototype.end = function (chunk, encoding, cb) {
97008 var state = this._writableState;
97009
97010 if (typeof chunk === 'function') {
97011 cb = chunk;
97012 chunk = null;
97013 encoding = null;
97014 } else if (typeof encoding === 'function') {
97015 cb = encoding;
97016 encoding = null;
97017 }
97018
97019 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
97020
97021 // .end() fully uncorks
97022 if (state.corked) {
97023 state.corked = 1;
97024 this.uncork();
97025 }
97026
97027 // ignore unnecessary end() calls.
97028 if (!state.ending && !state.finished) endWritable(this, state, cb);
97029 };
97030
97031 function needFinish(state) {
97032 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
97033 }
97034 function callFinal(stream, state) {
97035 stream._final(function (err) {
97036 state.pendingcb--;
97037 if (err) {
97038 stream.emit('error', err);
97039 }
97040 state.prefinished = true;
97041 stream.emit('prefinish');
97042 finishMaybe(stream, state);
97043 });
97044 }
97045 function prefinish(stream, state) {
97046 if (!state.prefinished && !state.finalCalled) {
97047 if (typeof stream._final === 'function') {
97048 state.pendingcb++;
97049 state.finalCalled = true;
97050 processNextTick(callFinal, stream, state);
97051 } else {
97052 state.prefinished = true;
97053 stream.emit('prefinish');
97054 }
97055 }
97056 }
97057
97058 function finishMaybe(stream, state) {
97059 var need = needFinish(state);
97060 if (need) {
97061 prefinish(stream, state);
97062 if (state.pendingcb === 0) {
97063 state.finished = true;
97064 stream.emit('finish');
97065 }
97066 }
97067 return need;
97068 }
97069
97070 function endWritable(stream, state, cb) {
97071 state.ending = true;
97072 finishMaybe(stream, state);
97073 if (cb) {
97074 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
97075 }
97076 state.ended = true;
97077 stream.writable = false;
97078 }
97079
97080 function onCorkedFinish(corkReq, state, err) {
97081 var entry = corkReq.entry;
97082 corkReq.entry = null;
97083 while (entry) {
97084 var cb = entry.callback;
97085 state.pendingcb--;
97086 cb(err);
97087 entry = entry.next;
97088 }
97089 if (state.corkedRequestsFree) {
97090 state.corkedRequestsFree.next = corkReq;
97091 } else {
97092 state.corkedRequestsFree = corkReq;
97093 }
97094 }
97095
97096 Object.defineProperty(Writable.prototype, 'destroyed', {
97097 get: function () {
97098 if (this._writableState === undefined) {
97099 return false;
97100 }
97101 return this._writableState.destroyed;
97102 },
97103 set: function (value) {
97104 // we ignore the value if the stream
97105 // has not been initialized yet
97106 if (!this._writableState) {
97107 return;
97108 }
97109
97110 // backward compatibility, the user is explicitly
97111 // managing destroyed
97112 this._writableState.destroyed = value;
97113 }
97114 });
97115
97116 Writable.prototype.destroy = destroyImpl.destroy;
97117 Writable.prototype._undestroy = destroyImpl.undestroy;
97118 Writable.prototype._destroy = function (err, cb) {
97119 this.end();
97120 cb(err);
97121 };
97122 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
97123 },{"./_stream_duplex":27,"./internal/streams/destroy":33,"./internal/streams/stream":34,"_process":25,"core-util-is":14,"inherits":21,"process-nextick-args":24,"safe-buffer":40,"util-deprecate":51}],32:[function(require,module,exports){
97124 'use strict';
97125
97126 /*<replacement>*/
97127
97128 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
97129
97130 var Buffer = require('safe-buffer').Buffer;
97131 /*</replacement>*/
97132
97133 function copyBuffer(src, target, offset) {
97134 src.copy(target, offset);
97135 }
97136
97137 module.exports = function () {
97138 function BufferList() {
97139 _classCallCheck(this, BufferList);
97140
97141 this.head = null;
97142 this.tail = null;
97143 this.length = 0;
97144 }
97145
97146 BufferList.prototype.push = function push(v) {
97147 var entry = { data: v, next: null };
97148 if (this.length > 0) this.tail.next = entry;else this.head = entry;
97149 this.tail = entry;
97150 ++this.length;
97151 };
97152
97153 BufferList.prototype.unshift = function unshift(v) {
97154 var entry = { data: v, next: this.head };
97155 if (this.length === 0) this.tail = entry;
97156 this.head = entry;
97157 ++this.length;
97158 };
97159
97160 BufferList.prototype.shift = function shift() {
97161 if (this.length === 0) return;
97162 var ret = this.head.data;
97163 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
97164 --this.length;
97165 return ret;
97166 };
97167
97168 BufferList.prototype.clear = function clear() {
97169 this.head = this.tail = null;
97170 this.length = 0;
97171 };
97172
97173 BufferList.prototype.join = function join(s) {
97174 if (this.length === 0) return '';
97175 var p = this.head;
97176 var ret = '' + p.data;
97177 while (p = p.next) {
97178 ret += s + p.data;
97179 }return ret;
97180 };
97181
97182 BufferList.prototype.concat = function concat(n) {
97183 if (this.length === 0) return Buffer.alloc(0);
97184 if (this.length === 1) return this.head.data;
97185 var ret = Buffer.allocUnsafe(n >>> 0);
97186 var p = this.head;
97187 var i = 0;
97188 while (p) {
97189 copyBuffer(p.data, ret, i);
97190 i += p.data.length;
97191 p = p.next;
97192 }
97193 return ret;
97194 };
97195
97196 return BufferList;
97197 }();
97198 },{"safe-buffer":40}],33:[function(require,module,exports){
97199 'use strict';
97200
97201 /*<replacement>*/
97202
97203 var processNextTick = require('process-nextick-args');
97204 /*</replacement>*/
97205
97206 // undocumented cb() API, needed for core, not for public API
97207 function destroy(err, cb) {
97208 var _this = this;
97209
97210 var readableDestroyed = this._readableState && this._readableState.destroyed;
97211 var writableDestroyed = this._writableState && this._writableState.destroyed;
97212
97213 if (readableDestroyed || writableDestroyed) {
97214 if (cb) {
97215 cb(err);
97216 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
97217 processNextTick(emitErrorNT, this, err);
97218 }
97219 return;
97220 }
97221
97222 // we set destroyed to true before firing error callbacks in order
97223 // to make it re-entrance safe in case destroy() is called within callbacks
97224
97225 if (this._readableState) {
97226 this._readableState.destroyed = true;
97227 }
97228
97229 // if this is a duplex stream mark the writable part as destroyed as well
97230 if (this._writableState) {
97231 this._writableState.destroyed = true;
97232 }
97233
97234 this._destroy(err || null, function (err) {
97235 if (!cb && err) {
97236 processNextTick(emitErrorNT, _this, err);
97237 if (_this._writableState) {
97238 _this._writableState.errorEmitted = true;
97239 }
97240 } else if (cb) {
97241 cb(err);
97242 }
97243 });
97244 }
97245
97246 function undestroy() {
97247 if (this._readableState) {
97248 this._readableState.destroyed = false;
97249 this._readableState.reading = false;
97250 this._readableState.ended = false;
97251 this._readableState.endEmitted = false;
97252 }
97253
97254 if (this._writableState) {
97255 this._writableState.destroyed = false;
97256 this._writableState.ended = false;
97257 this._writableState.ending = false;
97258 this._writableState.finished = false;
97259 this._writableState.errorEmitted = false;
97260 }
97261 }
97262
97263 function emitErrorNT(self, err) {
97264 self.emit('error', err);
97265 }
97266
97267 module.exports = {
97268 destroy: destroy,
97269 undestroy: undestroy
97270 };
97271 },{"process-nextick-args":24}],34:[function(require,module,exports){
97272 module.exports = require('events').EventEmitter;
97273
97274 },{"events":18}],35:[function(require,module,exports){
97275 module.exports = require('./readable').PassThrough
97276
97277 },{"./readable":36}],36:[function(require,module,exports){
97278 exports = module.exports = require('./lib/_stream_readable.js');
97279 exports.Stream = exports;
97280 exports.Readable = exports;
97281 exports.Writable = require('./lib/_stream_writable.js');
97282 exports.Duplex = require('./lib/_stream_duplex.js');
97283 exports.Transform = require('./lib/_stream_transform.js');
97284 exports.PassThrough = require('./lib/_stream_passthrough.js');
97285
97286 },{"./lib/_stream_duplex.js":27,"./lib/_stream_passthrough.js":28,"./lib/_stream_readable.js":29,"./lib/_stream_transform.js":30,"./lib/_stream_writable.js":31}],37:[function(require,module,exports){
97287 module.exports = require('./readable').Transform
97288
97289 },{"./readable":36}],38:[function(require,module,exports){
97290 module.exports = require('./lib/_stream_writable.js');
97291
97292 },{"./lib/_stream_writable.js":31}],39:[function(require,module,exports){
97293 (function (Buffer){
97294 'use strict'
97295 var inherits = require('inherits')
97296 var HashBase = require('hash-base')
97297
97298 function RIPEMD160 () {
97299 HashBase.call(this, 64)
97300
97301 // state
97302 this._a = 0x67452301
97303 this._b = 0xefcdab89
97304 this._c = 0x98badcfe
97305 this._d = 0x10325476
97306 this._e = 0xc3d2e1f0
97307 }
97308
97309 inherits(RIPEMD160, HashBase)
97310
97311 RIPEMD160.prototype._update = function () {
97312 var m = new Array(16)
97313 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
97314
97315 var al = this._a
97316 var bl = this._b
97317 var cl = this._c
97318 var dl = this._d
97319 var el = this._e
97320
97321 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
97322 // K = 0x00000000
97323 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
97324 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
97325 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
97326 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
97327 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
97328 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
97329 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
97330 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
97331 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
97332 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
97333 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
97334 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
97335 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
97336 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
97337 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
97338 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
97339 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
97340
97341 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
97342 // K = 0x5a827999
97343 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
97344 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
97345 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
97346 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
97347 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
97348 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
97349 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
97350 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
97351 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
97352 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
97353 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
97354 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
97355 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
97356 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
97357 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
97358 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
97359 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
97360
97361 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
97362 // K = 0x6ed9eba1
97363 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
97364 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
97365 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
97366 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
97367 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
97368 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
97369 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
97370 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
97371 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
97372 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
97373 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
97374 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
97375 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
97376 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
97377 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
97378 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
97379 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
97380
97381 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
97382 // K = 0x8f1bbcdc
97383 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
97384 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
97385 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
97386 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
97387 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
97388 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
97389 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
97390 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
97391 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
97392 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
97393 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
97394 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
97395 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
97396 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
97397 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
97398 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
97399 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
97400
97401 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
97402 // K = 0xa953fd4e
97403 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
97404 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
97405 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
97406 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
97407 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
97408 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
97409 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
97410 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
97411 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
97412 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
97413 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
97414 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
97415 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
97416 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
97417 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
97418 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
97419 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
97420
97421 var ar = this._a
97422 var br = this._b
97423 var cr = this._c
97424 var dr = this._d
97425 var er = this._e
97426
97427 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
97428 // K' = 0x50a28be6
97429 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
97430 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
97431 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
97432 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
97433 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
97434 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
97435 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
97436 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
97437 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
97438 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
97439 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
97440 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
97441 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
97442 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
97443 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
97444 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
97445 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
97446
97447 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
97448 // K' = 0x5c4dd124
97449 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
97450 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
97451 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
97452 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
97453 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
97454 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
97455 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
97456 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
97457 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
97458 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
97459 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
97460 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
97461 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
97462 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
97463 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
97464 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
97465 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
97466
97467 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
97468 // K' = 0x6d703ef3
97469 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
97470 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
97471 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
97472 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
97473 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
97474 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
97475 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
97476 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
97477 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
97478 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
97479 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
97480 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
97481 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
97482 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
97483 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
97484 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
97485 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
97486
97487 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
97488 // K' = 0x7a6d76e9
97489 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
97490 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
97491 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
97492 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
97493 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
97494 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
97495 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
97496 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
97497 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
97498 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
97499 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
97500 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
97501 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
97502 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
97503 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
97504 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
97505 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
97506
97507 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
97508 // K' = 0x00000000
97509 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
97510 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
97511 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
97512 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
97513 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
97514 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
97515 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
97516 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
97517 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
97518 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
97519 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
97520 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
97521 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
97522 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
97523 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
97524 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
97525 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
97526
97527 // change state
97528 var t = (this._b + cl + dr) | 0
97529 this._b = (this._c + dl + er) | 0
97530 this._c = (this._d + el + ar) | 0
97531 this._d = (this._e + al + br) | 0
97532 this._e = (this._a + bl + cr) | 0
97533 this._a = t
97534 }
97535
97536 RIPEMD160.prototype._digest = function () {
97537 // create padding and handle blocks
97538 this._block[this._blockOffset++] = 0x80
97539 if (this._blockOffset > 56) {
97540 this._block.fill(0, this._blockOffset, 64)
97541 this._update()
97542 this._blockOffset = 0
97543 }
97544
97545 this._block.fill(0, this._blockOffset, 56)
97546 this._block.writeUInt32LE(this._length[0], 56)
97547 this._block.writeUInt32LE(this._length[1], 60)
97548 this._update()
97549
97550 // produce result
97551 var buffer = new Buffer(20)
97552 buffer.writeInt32LE(this._a, 0)
97553 buffer.writeInt32LE(this._b, 4)
97554 buffer.writeInt32LE(this._c, 8)
97555 buffer.writeInt32LE(this._d, 12)
97556 buffer.writeInt32LE(this._e, 16)
97557 return buffer
97558 }
97559
97560 function rotl (x, n) {
97561 return (x << n) | (x >>> (32 - n))
97562 }
97563
97564 function fn1 (a, b, c, d, e, m, k, s) {
97565 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
97566 }
97567
97568 function fn2 (a, b, c, d, e, m, k, s) {
97569 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
97570 }
97571
97572 function fn3 (a, b, c, d, e, m, k, s) {
97573 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
97574 }
97575
97576 function fn4 (a, b, c, d, e, m, k, s) {
97577 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
97578 }
97579
97580 function fn5 (a, b, c, d, e, m, k, s) {
97581 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
97582 }
97583
97584 module.exports = RIPEMD160
97585
97586 }).call(this,require("buffer").Buffer)
97587 },{"buffer":8,"hash-base":19,"inherits":21}],40:[function(require,module,exports){
97588 /* eslint-disable node/no-deprecated-api */
97589 var buffer = require('buffer')
97590 var Buffer = buffer.Buffer
97591
97592 // alternative to using Object.keys for old browsers
97593 function copyProps (src, dst) {
97594 for (var key in src) {
97595 dst[key] = src[key]
97596 }
97597 }
97598 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
97599 module.exports = buffer
97600 } else {
97601 // Copy properties from require('buffer')
97602 copyProps(buffer, exports)
97603 exports.Buffer = SafeBuffer
97604 }
97605
97606 function SafeBuffer (arg, encodingOrOffset, length) {
97607 return Buffer(arg, encodingOrOffset, length)
97608 }
97609
97610 // Copy static methods from Buffer
97611 copyProps(Buffer, SafeBuffer)
97612
97613 SafeBuffer.from = function (arg, encodingOrOffset, length) {
97614 if (typeof arg === 'number') {
97615 throw new TypeError('Argument must not be a number')
97616 }
97617 return Buffer(arg, encodingOrOffset, length)
97618 }
97619
97620 SafeBuffer.alloc = function (size, fill, encoding) {
97621 if (typeof size !== 'number') {
97622 throw new TypeError('Argument must be a number')
97623 }
97624 var buf = Buffer(size)
97625 if (fill !== undefined) {
97626 if (typeof encoding === 'string') {
97627 buf.fill(fill, encoding)
97628 } else {
97629 buf.fill(fill)
97630 }
97631 } else {
97632 buf.fill(0)
97633 }
97634 return buf
97635 }
97636
97637 SafeBuffer.allocUnsafe = function (size) {
97638 if (typeof size !== 'number') {
97639 throw new TypeError('Argument must be a number')
97640 }
97641 return Buffer(size)
97642 }
97643
97644 SafeBuffer.allocUnsafeSlow = function (size) {
97645 if (typeof size !== 'number') {
97646 throw new TypeError('Argument must be a number')
97647 }
97648 return buffer.SlowBuffer(size)
97649 }
97650
97651 },{"buffer":8}],41:[function(require,module,exports){
97652 var Buffer = require('safe-buffer').Buffer
97653
97654 // prototype class for hash functions
97655 function Hash (blockSize, finalSize) {
97656 this._block = Buffer.alloc(blockSize)
97657 this._finalSize = finalSize
97658 this._blockSize = blockSize
97659 this._len = 0
97660 }
97661
97662 Hash.prototype.update = function (data, enc) {
97663 if (typeof data === 'string') {
97664 enc = enc || 'utf8'
97665 data = Buffer.from(data, enc)
97666 }
97667
97668 var block = this._block
97669 var blockSize = this._blockSize
97670 var length = data.length
97671 var accum = this._len
97672
97673 for (var offset = 0; offset < length;) {
97674 var assigned = accum % blockSize
97675 var remainder = Math.min(length - offset, blockSize - assigned)
97676
97677 for (var i = 0; i < remainder; i++) {
97678 block[assigned + i] = data[offset + i]
97679 }
97680
97681 accum += remainder
97682 offset += remainder
97683
97684 if ((accum % blockSize) === 0) {
97685 this._update(block)
97686 }
97687 }
97688
97689 this._len += length
97690 return this
97691 }
97692
97693 Hash.prototype.digest = function (enc) {
97694 var rem = this._len % this._blockSize
97695
97696 this._block[rem] = 0x80
97697
97698 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
97699 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
97700 this._block.fill(0, rem + 1)
97701
97702 if (rem >= this._finalSize) {
97703 this._update(this._block)
97704 this._block.fill(0)
97705 }
97706
97707 var bits = this._len * 8
97708
97709 // uint32
97710 if (bits <= 0xffffffff) {
97711 this._block.writeUInt32BE(bits, this._blockSize - 4)
97712
97713 // uint64
97714 } else {
97715 var lowBits = bits & 0xffffffff
97716 var highBits = (bits - lowBits) / 0x100000000
97717
97718 this._block.writeUInt32BE(highBits, this._blockSize - 8)
97719 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
97720 }
97721
97722 this._update(this._block)
97723 var hash = this._hash()
97724
97725 return enc ? hash.toString(enc) : hash
97726 }
97727
97728 Hash.prototype._update = function () {
97729 throw new Error('_update must be implemented by subclass')
97730 }
97731
97732 module.exports = Hash
97733
97734 },{"safe-buffer":40}],42:[function(require,module,exports){
97735 var exports = module.exports = function SHA (algorithm) {
97736 algorithm = algorithm.toLowerCase()
97737
97738 var Algorithm = exports[algorithm]
97739 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
97740
97741 return new Algorithm()
97742 }
97743
97744 exports.sha = require('./sha')
97745 exports.sha1 = require('./sha1')
97746 exports.sha224 = require('./sha224')
97747 exports.sha256 = require('./sha256')
97748 exports.sha384 = require('./sha384')
97749 exports.sha512 = require('./sha512')
97750
97751 },{"./sha":43,"./sha1":44,"./sha224":45,"./sha256":46,"./sha384":47,"./sha512":48}],43:[function(require,module,exports){
97752 /*
97753 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
97754 * in FIPS PUB 180-1
97755 * This source code is derived from sha1.js of the same repository.
97756 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
97757 * operation was added.
97758 */
97759
97760 var inherits = require('inherits')
97761 var Hash = require('./hash')
97762 var Buffer = require('safe-buffer').Buffer
97763
97764 var K = [
97765 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97766 ]
97767
97768 var W = new Array(80)
97769
97770 function Sha () {
97771 this.init()
97772 this._w = W
97773
97774 Hash.call(this, 64, 56)
97775 }
97776
97777 inherits(Sha, Hash)
97778
97779 Sha.prototype.init = function () {
97780 this._a = 0x67452301
97781 this._b = 0xefcdab89
97782 this._c = 0x98badcfe
97783 this._d = 0x10325476
97784 this._e = 0xc3d2e1f0
97785
97786 return this
97787 }
97788
97789 function rotl5 (num) {
97790 return (num << 5) | (num >>> 27)
97791 }
97792
97793 function rotl30 (num) {
97794 return (num << 30) | (num >>> 2)
97795 }
97796
97797 function ft (s, b, c, d) {
97798 if (s === 0) return (b & c) | ((~b) & d)
97799 if (s === 2) return (b & c) | (b & d) | (c & d)
97800 return b ^ c ^ d
97801 }
97802
97803 Sha.prototype._update = function (M) {
97804 var W = this._w
97805
97806 var a = this._a | 0
97807 var b = this._b | 0
97808 var c = this._c | 0
97809 var d = this._d | 0
97810 var e = this._e | 0
97811
97812 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97813 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
97814
97815 for (var j = 0; j < 80; ++j) {
97816 var s = ~~(j / 20)
97817 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97818
97819 e = d
97820 d = c
97821 c = rotl30(b)
97822 b = a
97823 a = t
97824 }
97825
97826 this._a = (a + this._a) | 0
97827 this._b = (b + this._b) | 0
97828 this._c = (c + this._c) | 0
97829 this._d = (d + this._d) | 0
97830 this._e = (e + this._e) | 0
97831 }
97832
97833 Sha.prototype._hash = function () {
97834 var H = Buffer.allocUnsafe(20)
97835
97836 H.writeInt32BE(this._a | 0, 0)
97837 H.writeInt32BE(this._b | 0, 4)
97838 H.writeInt32BE(this._c | 0, 8)
97839 H.writeInt32BE(this._d | 0, 12)
97840 H.writeInt32BE(this._e | 0, 16)
97841
97842 return H
97843 }
97844
97845 module.exports = Sha
97846
97847 },{"./hash":41,"inherits":21,"safe-buffer":40}],44:[function(require,module,exports){
97848 /*
97849 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
97850 * in FIPS PUB 180-1
97851 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
97852 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97853 * Distributed under the BSD License
97854 * See http://pajhome.org.uk/crypt/md5 for details.
97855 */
97856
97857 var inherits = require('inherits')
97858 var Hash = require('./hash')
97859 var Buffer = require('safe-buffer').Buffer
97860
97861 var K = [
97862 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97863 ]
97864
97865 var W = new Array(80)
97866
97867 function Sha1 () {
97868 this.init()
97869 this._w = W
97870
97871 Hash.call(this, 64, 56)
97872 }
97873
97874 inherits(Sha1, Hash)
97875
97876 Sha1.prototype.init = function () {
97877 this._a = 0x67452301
97878 this._b = 0xefcdab89
97879 this._c = 0x98badcfe
97880 this._d = 0x10325476
97881 this._e = 0xc3d2e1f0
97882
97883 return this
97884 }
97885
97886 function rotl1 (num) {
97887 return (num << 1) | (num >>> 31)
97888 }
97889
97890 function rotl5 (num) {
97891 return (num << 5) | (num >>> 27)
97892 }
97893
97894 function rotl30 (num) {
97895 return (num << 30) | (num >>> 2)
97896 }
97897
97898 function ft (s, b, c, d) {
97899 if (s === 0) return (b & c) | ((~b) & d)
97900 if (s === 2) return (b & c) | (b & d) | (c & d)
97901 return b ^ c ^ d
97902 }
97903
97904 Sha1.prototype._update = function (M) {
97905 var W = this._w
97906
97907 var a = this._a | 0
97908 var b = this._b | 0
97909 var c = this._c | 0
97910 var d = this._d | 0
97911 var e = this._e | 0
97912
97913 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97914 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
97915
97916 for (var j = 0; j < 80; ++j) {
97917 var s = ~~(j / 20)
97918 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97919
97920 e = d
97921 d = c
97922 c = rotl30(b)
97923 b = a
97924 a = t
97925 }
97926
97927 this._a = (a + this._a) | 0
97928 this._b = (b + this._b) | 0
97929 this._c = (c + this._c) | 0
97930 this._d = (d + this._d) | 0
97931 this._e = (e + this._e) | 0
97932 }
97933
97934 Sha1.prototype._hash = function () {
97935 var H = Buffer.allocUnsafe(20)
97936
97937 H.writeInt32BE(this._a | 0, 0)
97938 H.writeInt32BE(this._b | 0, 4)
97939 H.writeInt32BE(this._c | 0, 8)
97940 H.writeInt32BE(this._d | 0, 12)
97941 H.writeInt32BE(this._e | 0, 16)
97942
97943 return H
97944 }
97945
97946 module.exports = Sha1
97947
97948 },{"./hash":41,"inherits":21,"safe-buffer":40}],45:[function(require,module,exports){
97949 /**
97950 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97951 * in FIPS 180-2
97952 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97953 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97954 *
97955 */
97956
97957 var inherits = require('inherits')
97958 var Sha256 = require('./sha256')
97959 var Hash = require('./hash')
97960 var Buffer = require('safe-buffer').Buffer
97961
97962 var W = new Array(64)
97963
97964 function Sha224 () {
97965 this.init()
97966
97967 this._w = W // new Array(64)
97968
97969 Hash.call(this, 64, 56)
97970 }
97971
97972 inherits(Sha224, Sha256)
97973
97974 Sha224.prototype.init = function () {
97975 this._a = 0xc1059ed8
97976 this._b = 0x367cd507
97977 this._c = 0x3070dd17
97978 this._d = 0xf70e5939
97979 this._e = 0xffc00b31
97980 this._f = 0x68581511
97981 this._g = 0x64f98fa7
97982 this._h = 0xbefa4fa4
97983
97984 return this
97985 }
97986
97987 Sha224.prototype._hash = function () {
97988 var H = Buffer.allocUnsafe(28)
97989
97990 H.writeInt32BE(this._a, 0)
97991 H.writeInt32BE(this._b, 4)
97992 H.writeInt32BE(this._c, 8)
97993 H.writeInt32BE(this._d, 12)
97994 H.writeInt32BE(this._e, 16)
97995 H.writeInt32BE(this._f, 20)
97996 H.writeInt32BE(this._g, 24)
97997
97998 return H
97999 }
98000
98001 module.exports = Sha224
98002
98003 },{"./hash":41,"./sha256":46,"inherits":21,"safe-buffer":40}],46:[function(require,module,exports){
98004 /**
98005 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
98006 * in FIPS 180-2
98007 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
98008 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
98009 *
98010 */
98011
98012 var inherits = require('inherits')
98013 var Hash = require('./hash')
98014 var Buffer = require('safe-buffer').Buffer
98015
98016 var K = [
98017 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
98018 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
98019 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
98020 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
98021 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
98022 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
98023 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
98024 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
98025 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
98026 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
98027 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
98028 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
98029 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
98030 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
98031 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
98032 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
98033 ]
98034
98035 var W = new Array(64)
98036
98037 function Sha256 () {
98038 this.init()
98039
98040 this._w = W // new Array(64)
98041
98042 Hash.call(this, 64, 56)
98043 }
98044
98045 inherits(Sha256, Hash)
98046
98047 Sha256.prototype.init = function () {
98048 this._a = 0x6a09e667
98049 this._b = 0xbb67ae85
98050 this._c = 0x3c6ef372
98051 this._d = 0xa54ff53a
98052 this._e = 0x510e527f
98053 this._f = 0x9b05688c
98054 this._g = 0x1f83d9ab
98055 this._h = 0x5be0cd19
98056
98057 return this
98058 }
98059
98060 function ch (x, y, z) {
98061 return z ^ (x & (y ^ z))
98062 }
98063
98064 function maj (x, y, z) {
98065 return (x & y) | (z & (x | y))
98066 }
98067
98068 function sigma0 (x) {
98069 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
98070 }
98071
98072 function sigma1 (x) {
98073 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
98074 }
98075
98076 function gamma0 (x) {
98077 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
98078 }
98079
98080 function gamma1 (x) {
98081 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
98082 }
98083
98084 Sha256.prototype._update = function (M) {
98085 var W = this._w
98086
98087 var a = this._a | 0
98088 var b = this._b | 0
98089 var c = this._c | 0
98090 var d = this._d | 0
98091 var e = this._e | 0
98092 var f = this._f | 0
98093 var g = this._g | 0
98094 var h = this._h | 0
98095
98096 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
98097 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
98098
98099 for (var j = 0; j < 64; ++j) {
98100 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
98101 var T2 = (sigma0(a) + maj(a, b, c)) | 0
98102
98103 h = g
98104 g = f
98105 f = e
98106 e = (d + T1) | 0
98107 d = c
98108 c = b
98109 b = a
98110 a = (T1 + T2) | 0
98111 }
98112
98113 this._a = (a + this._a) | 0
98114 this._b = (b + this._b) | 0
98115 this._c = (c + this._c) | 0
98116 this._d = (d + this._d) | 0
98117 this._e = (e + this._e) | 0
98118 this._f = (f + this._f) | 0
98119 this._g = (g + this._g) | 0
98120 this._h = (h + this._h) | 0
98121 }
98122
98123 Sha256.prototype._hash = function () {
98124 var H = Buffer.allocUnsafe(32)
98125
98126 H.writeInt32BE(this._a, 0)
98127 H.writeInt32BE(this._b, 4)
98128 H.writeInt32BE(this._c, 8)
98129 H.writeInt32BE(this._d, 12)
98130 H.writeInt32BE(this._e, 16)
98131 H.writeInt32BE(this._f, 20)
98132 H.writeInt32BE(this._g, 24)
98133 H.writeInt32BE(this._h, 28)
98134
98135 return H
98136 }
98137
98138 module.exports = Sha256
98139
98140 },{"./hash":41,"inherits":21,"safe-buffer":40}],47:[function(require,module,exports){
98141 var inherits = require('inherits')
98142 var SHA512 = require('./sha512')
98143 var Hash = require('./hash')
98144 var Buffer = require('safe-buffer').Buffer
98145
98146 var W = new Array(160)
98147
98148 function Sha384 () {
98149 this.init()
98150 this._w = W
98151
98152 Hash.call(this, 128, 112)
98153 }
98154
98155 inherits(Sha384, SHA512)
98156
98157 Sha384.prototype.init = function () {
98158 this._ah = 0xcbbb9d5d
98159 this._bh = 0x629a292a
98160 this._ch = 0x9159015a
98161 this._dh = 0x152fecd8
98162 this._eh = 0x67332667
98163 this._fh = 0x8eb44a87
98164 this._gh = 0xdb0c2e0d
98165 this._hh = 0x47b5481d
98166
98167 this._al = 0xc1059ed8
98168 this._bl = 0x367cd507
98169 this._cl = 0x3070dd17
98170 this._dl = 0xf70e5939
98171 this._el = 0xffc00b31
98172 this._fl = 0x68581511
98173 this._gl = 0x64f98fa7
98174 this._hl = 0xbefa4fa4
98175
98176 return this
98177 }
98178
98179 Sha384.prototype._hash = function () {
98180 var H = Buffer.allocUnsafe(48)
98181
98182 function writeInt64BE (h, l, offset) {
98183 H.writeInt32BE(h, offset)
98184 H.writeInt32BE(l, offset + 4)
98185 }
98186
98187 writeInt64BE(this._ah, this._al, 0)
98188 writeInt64BE(this._bh, this._bl, 8)
98189 writeInt64BE(this._ch, this._cl, 16)
98190 writeInt64BE(this._dh, this._dl, 24)
98191 writeInt64BE(this._eh, this._el, 32)
98192 writeInt64BE(this._fh, this._fl, 40)
98193
98194 return H
98195 }
98196
98197 module.exports = Sha384
98198
98199 },{"./hash":41,"./sha512":48,"inherits":21,"safe-buffer":40}],48:[function(require,module,exports){
98200 var inherits = require('inherits')
98201 var Hash = require('./hash')
98202 var Buffer = require('safe-buffer').Buffer
98203
98204 var K = [
98205 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
98206 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
98207 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
98208 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
98209 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
98210 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
98211 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
98212 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
98213 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
98214 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
98215 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
98216 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
98217 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
98218 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
98219 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
98220 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
98221 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
98222 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
98223 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
98224 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
98225 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
98226 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
98227 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
98228 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
98229 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
98230 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
98231 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
98232 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
98233 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
98234 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
98235 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
98236 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
98237 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
98238 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
98239 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
98240 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
98241 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
98242 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
98243 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
98244 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
98245 ]
98246
98247 var W = new Array(160)
98248
98249 function Sha512 () {
98250 this.init()
98251 this._w = W
98252
98253 Hash.call(this, 128, 112)
98254 }
98255
98256 inherits(Sha512, Hash)
98257
98258 Sha512.prototype.init = function () {
98259 this._ah = 0x6a09e667
98260 this._bh = 0xbb67ae85
98261 this._ch = 0x3c6ef372
98262 this._dh = 0xa54ff53a
98263 this._eh = 0x510e527f
98264 this._fh = 0x9b05688c
98265 this._gh = 0x1f83d9ab
98266 this._hh = 0x5be0cd19
98267
98268 this._al = 0xf3bcc908
98269 this._bl = 0x84caa73b
98270 this._cl = 0xfe94f82b
98271 this._dl = 0x5f1d36f1
98272 this._el = 0xade682d1
98273 this._fl = 0x2b3e6c1f
98274 this._gl = 0xfb41bd6b
98275 this._hl = 0x137e2179
98276
98277 return this
98278 }
98279
98280 function Ch (x, y, z) {
98281 return z ^ (x & (y ^ z))
98282 }
98283
98284 function maj (x, y, z) {
98285 return (x & y) | (z & (x | y))
98286 }
98287
98288 function sigma0 (x, xl) {
98289 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
98290 }
98291
98292 function sigma1 (x, xl) {
98293 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
98294 }
98295
98296 function Gamma0 (x, xl) {
98297 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
98298 }
98299
98300 function Gamma0l (x, xl) {
98301 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
98302 }
98303
98304 function Gamma1 (x, xl) {
98305 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
98306 }
98307
98308 function Gamma1l (x, xl) {
98309 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
98310 }
98311
98312 function getCarry (a, b) {
98313 return (a >>> 0) < (b >>> 0) ? 1 : 0
98314 }
98315
98316 Sha512.prototype._update = function (M) {
98317 var W = this._w
98318
98319 var ah = this._ah | 0
98320 var bh = this._bh | 0
98321 var ch = this._ch | 0
98322 var dh = this._dh | 0
98323 var eh = this._eh | 0
98324 var fh = this._fh | 0
98325 var gh = this._gh | 0
98326 var hh = this._hh | 0
98327
98328 var al = this._al | 0
98329 var bl = this._bl | 0
98330 var cl = this._cl | 0
98331 var dl = this._dl | 0
98332 var el = this._el | 0
98333 var fl = this._fl | 0
98334 var gl = this._gl | 0
98335 var hl = this._hl | 0
98336
98337 for (var i = 0; i < 32; i += 2) {
98338 W[i] = M.readInt32BE(i * 4)
98339 W[i + 1] = M.readInt32BE(i * 4 + 4)
98340 }
98341 for (; i < 160; i += 2) {
98342 var xh = W[i - 15 * 2]
98343 var xl = W[i - 15 * 2 + 1]
98344 var gamma0 = Gamma0(xh, xl)
98345 var gamma0l = Gamma0l(xl, xh)
98346
98347 xh = W[i - 2 * 2]
98348 xl = W[i - 2 * 2 + 1]
98349 var gamma1 = Gamma1(xh, xl)
98350 var gamma1l = Gamma1l(xl, xh)
98351
98352 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
98353 var Wi7h = W[i - 7 * 2]
98354 var Wi7l = W[i - 7 * 2 + 1]
98355
98356 var Wi16h = W[i - 16 * 2]
98357 var Wi16l = W[i - 16 * 2 + 1]
98358
98359 var Wil = (gamma0l + Wi7l) | 0
98360 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
98361 Wil = (Wil + gamma1l) | 0
98362 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
98363 Wil = (Wil + Wi16l) | 0
98364 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
98365
98366 W[i] = Wih
98367 W[i + 1] = Wil
98368 }
98369
98370 for (var j = 0; j < 160; j += 2) {
98371 Wih = W[j]
98372 Wil = W[j + 1]
98373
98374 var majh = maj(ah, bh, ch)
98375 var majl = maj(al, bl, cl)
98376
98377 var sigma0h = sigma0(ah, al)
98378 var sigma0l = sigma0(al, ah)
98379 var sigma1h = sigma1(eh, el)
98380 var sigma1l = sigma1(el, eh)
98381
98382 // t1 = h + sigma1 + ch + K[j] + W[j]
98383 var Kih = K[j]
98384 var Kil = K[j + 1]
98385
98386 var chh = Ch(eh, fh, gh)
98387 var chl = Ch(el, fl, gl)
98388
98389 var t1l = (hl + sigma1l) | 0
98390 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
98391 t1l = (t1l + chl) | 0
98392 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
98393 t1l = (t1l + Kil) | 0
98394 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
98395 t1l = (t1l + Wil) | 0
98396 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
98397
98398 // t2 = sigma0 + maj
98399 var t2l = (sigma0l + majl) | 0
98400 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
98401
98402 hh = gh
98403 hl = gl
98404 gh = fh
98405 gl = fl
98406 fh = eh
98407 fl = el
98408 el = (dl + t1l) | 0
98409 eh = (dh + t1h + getCarry(el, dl)) | 0
98410 dh = ch
98411 dl = cl
98412 ch = bh
98413 cl = bl
98414 bh = ah
98415 bl = al
98416 al = (t1l + t2l) | 0
98417 ah = (t1h + t2h + getCarry(al, t1l)) | 0
98418 }
98419
98420 this._al = (this._al + al) | 0
98421 this._bl = (this._bl + bl) | 0
98422 this._cl = (this._cl + cl) | 0
98423 this._dl = (this._dl + dl) | 0
98424 this._el = (this._el + el) | 0
98425 this._fl = (this._fl + fl) | 0
98426 this._gl = (this._gl + gl) | 0
98427 this._hl = (this._hl + hl) | 0
98428
98429 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
98430 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
98431 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
98432 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
98433 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
98434 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
98435 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
98436 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
98437 }
98438
98439 Sha512.prototype._hash = function () {
98440 var H = Buffer.allocUnsafe(64)
98441
98442 function writeInt64BE (h, l, offset) {
98443 H.writeInt32BE(h, offset)
98444 H.writeInt32BE(l, offset + 4)
98445 }
98446
98447 writeInt64BE(this._ah, this._al, 0)
98448 writeInt64BE(this._bh, this._bl, 8)
98449 writeInt64BE(this._ch, this._cl, 16)
98450 writeInt64BE(this._dh, this._dl, 24)
98451 writeInt64BE(this._eh, this._el, 32)
98452 writeInt64BE(this._fh, this._fl, 40)
98453 writeInt64BE(this._gh, this._gl, 48)
98454 writeInt64BE(this._hh, this._hl, 56)
98455
98456 return H
98457 }
98458
98459 module.exports = Sha512
98460
98461 },{"./hash":41,"inherits":21,"safe-buffer":40}],49:[function(require,module,exports){
98462 // Copyright Joyent, Inc. and other Node contributors.
98463 //
98464 // Permission is hereby granted, free of charge, to any person obtaining a
98465 // copy of this software and associated documentation files (the
98466 // "Software"), to deal in the Software without restriction, including
98467 // without limitation the rights to use, copy, modify, merge, publish,
98468 // distribute, sublicense, and/or sell copies of the Software, and to permit
98469 // persons to whom the Software is furnished to do so, subject to the
98470 // following conditions:
98471 //
98472 // The above copyright notice and this permission notice shall be included
98473 // in all copies or substantial portions of the Software.
98474 //
98475 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
98476 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
98477 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
98478 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
98479 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
98480 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
98481 // USE OR OTHER DEALINGS IN THE SOFTWARE.
98482
98483 module.exports = Stream;
98484
98485 var EE = require('events').EventEmitter;
98486 var inherits = require('inherits');
98487
98488 inherits(Stream, EE);
98489 Stream.Readable = require('readable-stream/readable.js');
98490 Stream.Writable = require('readable-stream/writable.js');
98491 Stream.Duplex = require('readable-stream/duplex.js');
98492 Stream.Transform = require('readable-stream/transform.js');
98493 Stream.PassThrough = require('readable-stream/passthrough.js');
98494
98495 // Backwards-compat with node 0.4.x
98496 Stream.Stream = Stream;
98497
98498
98499
98500 // old-style streams. Note that the pipe method (the only relevant
98501 // part of this class) is overridden in the Readable class.
98502
98503 function Stream() {
98504 EE.call(this);
98505 }
98506
98507 Stream.prototype.pipe = function(dest, options) {
98508 var source = this;
98509
98510 function ondata(chunk) {
98511 if (dest.writable) {
98512 if (false === dest.write(chunk) && source.pause) {
98513 source.pause();
98514 }
98515 }
98516 }
98517
98518 source.on('data', ondata);
98519
98520 function ondrain() {
98521 if (source.readable && source.resume) {
98522 source.resume();
98523 }
98524 }
98525
98526 dest.on('drain', ondrain);
98527
98528 // If the 'end' option is not supplied, dest.end() will be called when
98529 // source gets the 'end' or 'close' events. Only dest.end() once.
98530 if (!dest._isStdio && (!options || options.end !== false)) {
98531 source.on('end', onend);
98532 source.on('close', onclose);
98533 }
98534
98535 var didOnEnd = false;
98536 function onend() {
98537 if (didOnEnd) return;
98538 didOnEnd = true;
98539
98540 dest.end();
98541 }
98542
98543
98544 function onclose() {
98545 if (didOnEnd) return;
98546 didOnEnd = true;
98547
98548 if (typeof dest.destroy === 'function') dest.destroy();
98549 }
98550
98551 // don't leave dangling pipes when there are errors.
98552 function onerror(er) {
98553 cleanup();
98554 if (EE.listenerCount(this, 'error') === 0) {
98555 throw er; // Unhandled stream error in pipe.
98556 }
98557 }
98558
98559 source.on('error', onerror);
98560 dest.on('error', onerror);
98561
98562 // remove all the event listeners that were added.
98563 function cleanup() {
98564 source.removeListener('data', ondata);
98565 dest.removeListener('drain', ondrain);
98566
98567 source.removeListener('end', onend);
98568 source.removeListener('close', onclose);
98569
98570 source.removeListener('error', onerror);
98571 dest.removeListener('error', onerror);
98572
98573 source.removeListener('end', cleanup);
98574 source.removeListener('close', cleanup);
98575
98576 dest.removeListener('close', cleanup);
98577 }
98578
98579 source.on('end', cleanup);
98580 source.on('close', cleanup);
98581
98582 dest.on('close', cleanup);
98583
98584 dest.emit('pipe', source);
98585
98586 // Allow for unix-like usage: A.pipe(B).pipe(C)
98587 return dest;
98588 };
98589
98590 },{"events":18,"inherits":21,"readable-stream/duplex.js":26,"readable-stream/passthrough.js":35,"readable-stream/readable.js":36,"readable-stream/transform.js":37,"readable-stream/writable.js":38}],50:[function(require,module,exports){
98591 'use strict';
98592
98593 var Buffer = require('safe-buffer').Buffer;
98594
98595 var isEncoding = Buffer.isEncoding || function (encoding) {
98596 encoding = '' + encoding;
98597 switch (encoding && encoding.toLowerCase()) {
98598 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':
98599 return true;
98600 default:
98601 return false;
98602 }
98603 };
98604
98605 function _normalizeEncoding(enc) {
98606 if (!enc) return 'utf8';
98607 var retried;
98608 while (true) {
98609 switch (enc) {
98610 case 'utf8':
98611 case 'utf-8':
98612 return 'utf8';
98613 case 'ucs2':
98614 case 'ucs-2':
98615 case 'utf16le':
98616 case 'utf-16le':
98617 return 'utf16le';
98618 case 'latin1':
98619 case 'binary':
98620 return 'latin1';
98621 case 'base64':
98622 case 'ascii':
98623 case 'hex':
98624 return enc;
98625 default:
98626 if (retried) return; // undefined
98627 enc = ('' + enc).toLowerCase();
98628 retried = true;
98629 }
98630 }
98631 };
98632
98633 // Do not cache `Buffer.isEncoding` when checking encoding names as some
98634 // modules monkey-patch it to support additional encodings
98635 function normalizeEncoding(enc) {
98636 var nenc = _normalizeEncoding(enc);
98637 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
98638 return nenc || enc;
98639 }
98640
98641 // StringDecoder provides an interface for efficiently splitting a series of
98642 // buffers into a series of JS strings without breaking apart multi-byte
98643 // characters.
98644 exports.StringDecoder = StringDecoder;
98645 function StringDecoder(encoding) {
98646 this.encoding = normalizeEncoding(encoding);
98647 var nb;
98648 switch (this.encoding) {
98649 case 'utf16le':
98650 this.text = utf16Text;
98651 this.end = utf16End;
98652 nb = 4;
98653 break;
98654 case 'utf8':
98655 this.fillLast = utf8FillLast;
98656 nb = 4;
98657 break;
98658 case 'base64':
98659 this.text = base64Text;
98660 this.end = base64End;
98661 nb = 3;
98662 break;
98663 default:
98664 this.write = simpleWrite;
98665 this.end = simpleEnd;
98666 return;
98667 }
98668 this.lastNeed = 0;
98669 this.lastTotal = 0;
98670 this.lastChar = Buffer.allocUnsafe(nb);
98671 }
98672
98673 StringDecoder.prototype.write = function (buf) {
98674 if (buf.length === 0) return '';
98675 var r;
98676 var i;
98677 if (this.lastNeed) {
98678 r = this.fillLast(buf);
98679 if (r === undefined) return '';
98680 i = this.lastNeed;
98681 this.lastNeed = 0;
98682 } else {
98683 i = 0;
98684 }
98685 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
98686 return r || '';
98687 };
98688
98689 StringDecoder.prototype.end = utf8End;
98690
98691 // Returns only complete characters in a Buffer
98692 StringDecoder.prototype.text = utf8Text;
98693
98694 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
98695 StringDecoder.prototype.fillLast = function (buf) {
98696 if (this.lastNeed <= buf.length) {
98697 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
98698 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
98699 }
98700 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
98701 this.lastNeed -= buf.length;
98702 };
98703
98704 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
98705 // continuation byte.
98706 function utf8CheckByte(byte) {
98707 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
98708 return -1;
98709 }
98710
98711 // Checks at most 3 bytes at the end of a Buffer in order to detect an
98712 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
98713 // needed to complete the UTF-8 character (if applicable) are returned.
98714 function utf8CheckIncomplete(self, buf, i) {
98715 var j = buf.length - 1;
98716 if (j < i) return 0;
98717 var nb = utf8CheckByte(buf[j]);
98718 if (nb >= 0) {
98719 if (nb > 0) self.lastNeed = nb - 1;
98720 return nb;
98721 }
98722 if (--j < i) return 0;
98723 nb = utf8CheckByte(buf[j]);
98724 if (nb >= 0) {
98725 if (nb > 0) self.lastNeed = nb - 2;
98726 return nb;
98727 }
98728 if (--j < i) return 0;
98729 nb = utf8CheckByte(buf[j]);
98730 if (nb >= 0) {
98731 if (nb > 0) {
98732 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
98733 }
98734 return nb;
98735 }
98736 return 0;
98737 }
98738
98739 // Validates as many continuation bytes for a multi-byte UTF-8 character as
98740 // needed or are available. If we see a non-continuation byte where we expect
98741 // one, we "replace" the validated continuation bytes we've seen so far with
98742 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
98743 // behavior. The continuation byte check is included three times in the case
98744 // where all of the continuation bytes for a character exist in the same buffer.
98745 // It is also done this way as a slight performance increase instead of using a
98746 // loop.
98747 function utf8CheckExtraBytes(self, buf, p) {
98748 if ((buf[0] & 0xC0) !== 0x80) {
98749 self.lastNeed = 0;
98750 return '\ufffd'.repeat(p);
98751 }
98752 if (self.lastNeed > 1 && buf.length > 1) {
98753 if ((buf[1] & 0xC0) !== 0x80) {
98754 self.lastNeed = 1;
98755 return '\ufffd'.repeat(p + 1);
98756 }
98757 if (self.lastNeed > 2 && buf.length > 2) {
98758 if ((buf[2] & 0xC0) !== 0x80) {
98759 self.lastNeed = 2;
98760 return '\ufffd'.repeat(p + 2);
98761 }
98762 }
98763 }
98764 }
98765
98766 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
98767 function utf8FillLast(buf) {
98768 var p = this.lastTotal - this.lastNeed;
98769 var r = utf8CheckExtraBytes(this, buf, p);
98770 if (r !== undefined) return r;
98771 if (this.lastNeed <= buf.length) {
98772 buf.copy(this.lastChar, p, 0, this.lastNeed);
98773 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
98774 }
98775 buf.copy(this.lastChar, p, 0, buf.length);
98776 this.lastNeed -= buf.length;
98777 }
98778
98779 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
98780 // partial character, the character's bytes are buffered until the required
98781 // number of bytes are available.
98782 function utf8Text(buf, i) {
98783 var total = utf8CheckIncomplete(this, buf, i);
98784 if (!this.lastNeed) return buf.toString('utf8', i);
98785 this.lastTotal = total;
98786 var end = buf.length - (total - this.lastNeed);
98787 buf.copy(this.lastChar, 0, end);
98788 return buf.toString('utf8', i, end);
98789 }
98790
98791 // For UTF-8, a replacement character for each buffered byte of a (partial)
98792 // character needs to be added to the output.
98793 function utf8End(buf) {
98794 var r = buf && buf.length ? this.write(buf) : '';
98795 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
98796 return r;
98797 }
98798
98799 // UTF-16LE typically needs two bytes per character, but even if we have an even
98800 // number of bytes available, we need to check if we end on a leading/high
98801 // surrogate. In that case, we need to wait for the next two bytes in order to
98802 // decode the last character properly.
98803 function utf16Text(buf, i) {
98804 if ((buf.length - i) % 2 === 0) {
98805 var r = buf.toString('utf16le', i);
98806 if (r) {
98807 var c = r.charCodeAt(r.length - 1);
98808 if (c >= 0xD800 && c <= 0xDBFF) {
98809 this.lastNeed = 2;
98810 this.lastTotal = 4;
98811 this.lastChar[0] = buf[buf.length - 2];
98812 this.lastChar[1] = buf[buf.length - 1];
98813 return r.slice(0, -1);
98814 }
98815 }
98816 return r;
98817 }
98818 this.lastNeed = 1;
98819 this.lastTotal = 2;
98820 this.lastChar[0] = buf[buf.length - 1];
98821 return buf.toString('utf16le', i, buf.length - 1);
98822 }
98823
98824 // For UTF-16LE we do not explicitly append special replacement characters if we
98825 // end on a partial character, we simply let v8 handle that.
98826 function utf16End(buf) {
98827 var r = buf && buf.length ? this.write(buf) : '';
98828 if (this.lastNeed) {
98829 var end = this.lastTotal - this.lastNeed;
98830 return r + this.lastChar.toString('utf16le', 0, end);
98831 }
98832 return r;
98833 }
98834
98835 function base64Text(buf, i) {
98836 var n = (buf.length - i) % 3;
98837 if (n === 0) return buf.toString('base64', i);
98838 this.lastNeed = 3 - n;
98839 this.lastTotal = 3;
98840 if (n === 1) {
98841 this.lastChar[0] = buf[buf.length - 1];
98842 } else {
98843 this.lastChar[0] = buf[buf.length - 2];
98844 this.lastChar[1] = buf[buf.length - 1];
98845 }
98846 return buf.toString('base64', i, buf.length - n);
98847 }
98848
98849 function base64End(buf) {
98850 var r = buf && buf.length ? this.write(buf) : '';
98851 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
98852 return r;
98853 }
98854
98855 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
98856 function simpleWrite(buf) {
98857 return buf.toString(this.encoding);
98858 }
98859
98860 function simpleEnd(buf) {
98861 return buf && buf.length ? this.write(buf) : '';
98862 }
98863 },{"safe-buffer":40}],51:[function(require,module,exports){
98864 (function (global){
98865
98866 /**
98867 * Module exports.
98868 */
98869
98870 module.exports = deprecate;
98871
98872 /**
98873 * Mark that a method should not be used.
98874 * Returns a modified function which warns once by default.
98875 *
98876 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
98877 *
98878 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
98879 * will throw an Error when invoked.
98880 *
98881 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
98882 * will invoke `console.trace()` instead of `console.error()`.
98883 *
98884 * @param {Function} fn - the function to deprecate
98885 * @param {String} msg - the string to print to the console when `fn` is invoked
98886 * @returns {Function} a new "deprecated" version of `fn`
98887 * @api public
98888 */
98889
98890 function deprecate (fn, msg) {
98891 if (config('noDeprecation')) {
98892 return fn;
98893 }
98894
98895 var warned = false;
98896 function deprecated() {
98897 if (!warned) {
98898 if (config('throwDeprecation')) {
98899 throw new Error(msg);
98900 } else if (config('traceDeprecation')) {
98901 console.trace(msg);
98902 } else {
98903 console.warn(msg);
98904 }
98905 warned = true;
98906 }
98907 return fn.apply(this, arguments);
98908 }
98909
98910 return deprecated;
98911 }
98912
98913 /**
98914 * Checks `localStorage` for boolean values for the given `name`.
98915 *
98916 * @param {String} name
98917 * @returns {Boolean}
98918 * @api private
98919 */
98920
98921 function config (name) {
98922 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
98923 try {
98924 if (!global.localStorage) return false;
98925 } catch (_) {
98926 return false;
98927 }
98928 var val = global.localStorage[name];
98929 if (null == val) return false;
98930 return String(val).toLowerCase() === 'true';
98931 }
98932
98933 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
98934 },{}],52:[function(require,module,exports){
98935 (function (Buffer){
98936 /***
98937 * @license
98938 * https://github.com/bitcoincashjs/bchaddr
98939 * Copyright (c) 2018 Emilio Almansi
98940 * Distributed under the MIT software license, see the accompanying
98941 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
98942 */
98943
98944 var bs58check = require('bs58check')
98945 var cashaddr = require('cashaddrjs')
98946
98947 /**
98948 * General purpose Bitcoin Cash address detection and translation.<br />
98949 * Supports all major Bitcoin Cash address formats.<br />
98950 * Currently:
98951 * <ul>
98952 * <li> Legacy format </li>
98953 * <li> Bitpay format </li>
98954 * <li> Cashaddr format </li>
98955 * </ul>
98956 * @module bchaddr
98957 */
98958
98959 /**
98960 * @static
98961 * Supported Bitcoin Cash address formats.
98962 */
98963 var Format = {}
98964 Format.Legacy = 'legacy'
98965 Format.Bitpay = 'bitpay'
98966 Format.Cashaddr = 'cashaddr'
98967
98968 /**
98969 * @static
98970 * Supported networks.
98971 */
98972 var Network = {}
98973 Network.Mainnet = 'mainnet'
98974 Network.Testnet = 'testnet'
98975
98976 /**
98977 * @static
98978 * Supported address types.
98979 */
98980 var Type = {}
98981 Type.P2PKH = 'p2pkh'
98982 Type.P2SH = 'p2sh'
98983
98984 /**
98985 * Detects what is the given address' format.
98986 * @static
98987 * @param {string} address - A valid Bitcoin Cash address in any format.
98988 * @return {string}
98989 * @throws {InvalidAddressError}
98990 */
98991 function detectAddressFormat (address) {
98992 return decodeAddress(address).format
98993 }
98994
98995 /**
98996 * Detects what is the given address' network.
98997 * @static
98998 * @param {string} address - A valid Bitcoin Cash address in any format.
98999 * @return {string}
99000 * @throws {InvalidAddressError}
99001 */
99002 function detectAddressNetwork (address) {
99003 return decodeAddress(address).network
99004 }
99005
99006 /**
99007 * Detects what is the given address' type.
99008 * @static
99009 * @param {string} address - A valid Bitcoin Cash address in any format.
99010 * @return {string}
99011 * @throws {InvalidAddressError}
99012 */
99013 function detectAddressType (address) {
99014 return decodeAddress(address).type
99015 }
99016
99017 /**
99018 * Translates the given address into legacy format.
99019 * @static
99020 * @param {string} address - A valid Bitcoin Cash address in any format.
99021 * @return {string}
99022 * @throws {InvalidAddressError}
99023 */
99024 function toLegacyAddress (address) {
99025 var decoded = decodeAddress(address)
99026 if (decoded.format === Format.Legacy) {
99027 return address
99028 }
99029 return encodeAsLegacy(decoded)
99030 }
99031
99032 /**
99033 * Translates the given address into bitpay format.
99034 * @static
99035 * @param {string} address - A valid Bitcoin Cash address in any format.
99036 * @return {string}
99037 * @throws {InvalidAddressError}
99038 */
99039 function toBitpayAddress (address) {
99040 var decoded = decodeAddress(address)
99041 if (decoded.format === Format.Bitpay) {
99042 return address
99043 }
99044 return encodeAsBitpay(decoded)
99045 }
99046
99047 /**
99048 * Translates the given address into cashaddr format.
99049 * @static
99050 * @param {string} address - A valid Bitcoin Cash address in any format.
99051 * @return {string}
99052 * @throws {InvalidAddressError}
99053 */
99054 function toCashAddress (address) {
99055 var decoded = decodeAddress(address)
99056 return encodeAsCashaddr(decoded)
99057 }
99058
99059 /**
99060 * Version byte table for base58 formats.
99061 * @private
99062 */
99063 var VERSION_BYTE = {}
99064 VERSION_BYTE[Format.Legacy] = {}
99065 VERSION_BYTE[Format.Legacy][Network.Mainnet] = {}
99066 VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2PKH] = 0
99067 VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2SH] = 5
99068 VERSION_BYTE[Format.Legacy][Network.Testnet] = {}
99069 VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2PKH] = 111
99070 VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2SH] = 196
99071 VERSION_BYTE[Format.Bitpay] = {}
99072 VERSION_BYTE[Format.Bitpay][Network.Mainnet] = {}
99073 VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2PKH] = 28
99074 VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2SH] = 40
99075 VERSION_BYTE[Format.Bitpay][Network.Testnet] = {}
99076 VERSION_BYTE[Format.Bitpay][Network.Testnet][Type.P2PKH] = 111
99077 VERSION_BYTE[Format.Bitpay][Network.Testnet][Type.P2SH] = 196
99078
99079 /**
99080 * Decodes the given address into its constituting hash, format, network and type.
99081 * @private
99082 * @param {string} address - A valid Bitcoin Cash address in any format.
99083 * @return {object}
99084 * @throws {InvalidAddressError}
99085 */
99086 function decodeAddress (address) {
99087 try {
99088 return decodeBase58Address(address)
99089 } catch (error) {
99090 }
99091 try {
99092 return decodeCashAddress(address)
99093 } catch (error) {
99094 }
99095 throw new InvalidAddressError()
99096 }
99097
99098 /**
99099 * Attempts to decode the given address assuming it is a base58 address.
99100 * @private
99101 * @param {string} address - A valid Bitcoin Cash address in any format.
99102 * @return {object}
99103 * @throws {InvalidAddressError}
99104 */
99105 function decodeBase58Address (address) {
99106 try {
99107 var payload = bs58check.decode(address)
99108 var versionByte = payload[0]
99109 var hash = Array.prototype.slice.call(payload, 1)
99110 switch (versionByte) {
99111 case VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2PKH]:
99112 return {
99113 hash: hash,
99114 format: Format.Legacy,
99115 network: Network.Mainnet,
99116 type: Type.P2PKH
99117 }
99118 case VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2SH]:
99119 return {
99120 hash: hash,
99121 format: Format.Legacy,
99122 network: Network.Mainnet,
99123 type: Type.P2SH
99124 }
99125 case VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2PKH]:
99126 return {
99127 hash: hash,
99128 format: Format.Legacy,
99129 network: Network.Testnet,
99130 type: Type.P2PKH
99131 }
99132 case VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2SH]:
99133 return {
99134 hash: hash,
99135 format: Format.Legacy,
99136 network: Network.Testnet,
99137 type: Type.P2SH
99138 }
99139 case VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2PKH]:
99140 return {
99141 hash: hash,
99142 format: Format.Bitpay,
99143 network: Network.Mainnet,
99144 type: Type.P2PKH
99145 }
99146 case VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2SH]:
99147 return {
99148 hash: hash,
99149 format: Format.Bitpay,
99150 network: Network.Mainnet,
99151 type: Type.P2SH
99152 }
99153 }
99154 } catch (error) {
99155 }
99156 throw new InvalidAddressError()
99157 }
99158
99159 /**
99160 * Attempts to decode the given address assuming it is a cashaddr address.
99161 * @private
99162 * @param {string} address - A valid Bitcoin Cash address in any format.
99163 * @return {object}
99164 * @throws {InvalidAddressError}
99165 */
99166 function decodeCashAddress (address) {
99167 if (address.indexOf(':') !== -1) {
99168 try {
99169 return decodeCashAddressWithPrefix(address)
99170 } catch (error) {
99171 }
99172 } else {
99173 var prefixes = ['bitcoincash', 'bchtest', 'regtest']
99174 for (var i = 0; i < prefixes.length; ++i) {
99175 try {
99176 var prefix = prefixes[i]
99177 return decodeCashAddressWithPrefix(prefix + ':' + address)
99178 } catch (error) {
99179 }
99180 }
99181 }
99182 throw new InvalidAddressError()
99183 }
99184
99185 /**
99186 * Attempts to decode the given address assuming it is a cashaddr address with explicit prefix.
99187 * @private
99188 * @param {string} address - A valid Bitcoin Cash address in any format.
99189 * @return {object}
99190 * @throws {InvalidAddressError}
99191 */
99192 function decodeCashAddressWithPrefix (address) {
99193 try {
99194 var decoded = cashaddr.decode(address)
99195 var hash = Array.prototype.slice.call(decoded.hash, 0)
99196 var type = decoded.type === 'P2PKH' ? Type.P2PKH : Type.P2SH
99197 switch (decoded.prefix) {
99198 case 'bitcoincash':
99199 return {
99200 hash: hash,
99201 format: Format.Cashaddr,
99202 network: Network.Mainnet,
99203 type: type
99204 }
99205 case 'bchtest':
99206 case 'regtest':
99207 return {
99208 hash: hash,
99209 format: Format.Cashaddr,
99210 network: Network.Testnet,
99211 type: type
99212 }
99213 }
99214 } catch (error) {
99215 }
99216 throw new InvalidAddressError()
99217 }
99218
99219 /**
99220 * Encodes the given decoded address into legacy format.
99221 * @private
99222 * @param {object} decoded
99223 * @returns {string}
99224 */
99225 function encodeAsLegacy (decoded) {
99226 var versionByte = VERSION_BYTE[Format.Legacy][decoded.network][decoded.type]
99227 var buffer = Buffer.alloc(1 + decoded.hash.length)
99228 buffer[0] = versionByte
99229 buffer.set(decoded.hash, 1)
99230 return bs58check.encode(buffer)
99231 }
99232
99233 /**
99234 * Encodes the given decoded address into bitpay format.
99235 * @private
99236 * @param {object} decoded
99237 * @returns {string}
99238 */
99239 function encodeAsBitpay (decoded) {
99240 var versionByte = VERSION_BYTE[Format.Bitpay][decoded.network][decoded.type]
99241 var buffer = Buffer.alloc(1 + decoded.hash.length)
99242 buffer[0] = versionByte
99243 buffer.set(decoded.hash, 1)
99244 return bs58check.encode(buffer)
99245 }
99246
99247 /**
99248 * Encodes the given decoded address into cashaddr format.
99249 * @private
99250 * @param {object} decoded
99251 * @returns {string}
99252 */
99253 function encodeAsCashaddr (decoded) {
99254 var prefix = decoded.network === Network.Mainnet ? 'bitcoincash' : 'bchtest'
99255 var type = decoded.type === Type.P2PKH ? 'P2PKH' : 'P2SH'
99256 var hash = Uint8Array.from(decoded.hash)
99257 return cashaddr.encode(prefix, type, hash)
99258 }
99259
99260 /**
99261 * Returns a boolean indicating whether the address is in legacy format.
99262 * @static
99263 * @param {string} address - A valid Bitcoin Cash address in any format.
99264 * @returns {boolean}
99265 * @throws {InvalidAddressError}
99266 */
99267 function isLegacyAddress (address) {
99268 return detectAddressFormat(address) === Format.Legacy
99269 }
99270
99271 /**
99272 * Returns a boolean indicating whether the address is in bitpay format.
99273 * @static
99274 * @param {string} address - A valid Bitcoin Cash address in any format.
99275 * @returns {boolean}
99276 * @throws {InvalidAddressError}
99277 */
99278 function isBitpayAddress (address) {
99279 return detectAddressFormat(address) === Format.Bitpay
99280 }
99281
99282 /**
99283 * Returns a boolean indicating whether the address is in cashaddr format.
99284 * @static
99285 * @param {string} address - A valid Bitcoin Cash address in any format.
99286 * @returns {boolean}
99287 * @throws {InvalidAddressError}
99288 */
99289 function isCashAddress (address) {
99290 return detectAddressFormat(address) === Format.Cashaddr
99291 }
99292
99293 /**
99294 * Returns a boolean indicating whether the address is a mainnet address.
99295 * @static
99296 * @param {string} address - A valid Bitcoin Cash address in any format.
99297 * @returns {boolean}
99298 * @throws {InvalidAddressError}
99299 */
99300 function isMainnetAddress (address) {
99301 return detectAddressNetwork(address) === Network.Mainnet
99302 }
99303
99304 /**
99305 * Returns a boolean indicating whether the address is a testnet address.
99306 * @static
99307 * @param {string} address - A valid Bitcoin Cash address in any format.
99308 * @returns {boolean}
99309 * @throws {InvalidAddressError}
99310 */
99311 function isTestnetAddress (address) {
99312 return detectAddressNetwork(address) === Network.Testnet
99313 }
99314
99315 /**
99316 * Returns a boolean indicating whether the address is a p2pkh address.
99317 * @static
99318 * @param {string} address - A valid Bitcoin Cash address in any format.
99319 * @returns {boolean}
99320 * @throws {InvalidAddressError}
99321 */
99322 function isP2PKHAddress (address) {
99323 return detectAddressType(address) === Type.P2PKH
99324 }
99325
99326 /**
99327 * Returns a boolean indicating whether the address is a p2sh address.
99328 * @static
99329 * @param {string} address - A valid Bitcoin Cash address in any format.
99330 * @returns {boolean}
99331 * @throws {InvalidAddressError}
99332 */
99333 function isP2SHAddress (address) {
99334 return detectAddressType(address) === Type.P2SH
99335 }
99336
99337 /**
99338 * Error thrown when the address given as input is not a valid Bitcoin Cash address.
99339 * @constructor
99340 * InvalidAddressError
99341 */
99342 function InvalidAddressError () {
99343 var error = new Error()
99344 this.name = error.name = 'InvalidAddressError'
99345 this.message = error.message = 'Received an invalid Bitcoin Cash address as input.'
99346 this.stack = error.stack
99347 }
99348
99349 InvalidAddressError.prototype = Object.create(Error.prototype)
99350
99351 module.exports = {
99352 Format: Format,
99353 Network: Network,
99354 Type: Type,
99355 detectAddressFormat: detectAddressFormat,
99356 detectAddressNetwork: detectAddressNetwork,
99357 detectAddressType: detectAddressType,
99358 toLegacyAddress: toLegacyAddress,
99359 toBitpayAddress: toBitpayAddress,
99360 toCashAddress: toCashAddress,
99361 isLegacyAddress: isLegacyAddress,
99362 isBitpayAddress: isBitpayAddress,
99363 isCashAddress: isCashAddress,
99364 isMainnetAddress: isMainnetAddress,
99365 isTestnetAddress: isTestnetAddress,
99366 isP2PKHAddress: isP2PKHAddress,
99367 isP2SHAddress: isP2SHAddress,
99368 InvalidAddressError: InvalidAddressError
99369 }
99370
99371 }).call(this,require("buffer").Buffer)
99372 },{"bs58check":7,"buffer":8,"cashaddrjs":10}]},{},[52])(52)
99373 });</script>
99374 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
99375
99376 //// base.js
99377
99378 /** @fileOverview Javascript cryptography implementation.
99379 *
99380 * Crush to remove comments, shorten variable names and
99381 * generally reduce transmission size.
99382 *
99383 * @author Emily Stark
99384 * @author Mike Hamburg
99385 * @author Dan Boneh
99386 */
99387
99388 "use strict";
99389 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
99390 /*global document, window, escape, unescape, module, require, Uint32Array */
99391
99392 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
99393 var sjcl = {
99394 /** @namespace Symmetric ciphers. */
99395 cipher: {},
99396
99397 /** @namespace Hash functions. Right now only SHA256 is implemented. */
99398 hash: {},
99399
99400 /** @namespace Key exchange functions. Right now only SRP is implemented. */
99401 keyexchange: {},
99402
99403 /** @namespace Block cipher modes of operation. */
99404 mode: {},
99405
99406 /** @namespace Miscellaneous. HMAC and PBKDF2. */
99407 misc: {},
99408
99409 /**
99410 * @namespace Bit array encoders and decoders.
99411 *
99412 * @description
99413 * The members of this namespace are functions which translate between
99414 * SJCL's bitArrays and other objects (usually strings). Because it
99415 * isn't always clear which direction is encoding and which is decoding,
99416 * the method names are "fromBits" and "toBits".
99417 */
99418 codec: {},
99419
99420 /** @namespace Exceptions. */
99421 exception: {
99422 /** @constructor Ciphertext is corrupt. */
99423 corrupt: function(message) {
99424 this.toString = function() { return "CORRUPT: "+this.message; };
99425 this.message = message;
99426 },
99427
99428 /** @constructor Invalid parameter. */
99429 invalid: function(message) {
99430 this.toString = function() { return "INVALID: "+this.message; };
99431 this.message = message;
99432 },
99433
99434 /** @constructor Bug or missing feature in SJCL. @constructor */
99435 bug: function(message) {
99436 this.toString = function() { return "BUG: "+this.message; };
99437 this.message = message;
99438 },
99439
99440 /** @constructor Something isn't ready. */
99441 notReady: function(message) {
99442 this.toString = function() { return "NOT READY: "+this.message; };
99443 this.message = message;
99444 }
99445 }
99446 };
99447
99448 if(typeof module !== 'undefined' && module.exports){
99449 module.exports = sjcl;
99450 }
99451 if (typeof define === "function") {
99452 define([], function () {
99453 return sjcl;
99454 });
99455 }
99456
99457
99458 //// bitArray.js
99459
99460 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
99461 *
99462 * @author Emily Stark
99463 * @author Mike Hamburg
99464 * @author Dan Boneh
99465 */
99466
99467 /** @namespace Arrays of bits, encoded as arrays of Numbers.
99468 *
99469 * @description
99470 * <p>
99471 * These objects are the currency accepted by SJCL's crypto functions.
99472 * </p>
99473 *
99474 * <p>
99475 * Most of our crypto primitives operate on arrays of 4-byte words internally,
99476 * but many of them can take arguments that are not a multiple of 4 bytes.
99477 * This library encodes arrays of bits (whose size need not be a multiple of 8
99478 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
99479 * array of words, 32 bits at a time. Since the words are double-precision
99480 * floating point numbers, they fit some extra data. We use this (in a private,
99481 * possibly-changing manner) to encode the number of bits actually present
99482 * in the last word of the array.
99483 * </p>
99484 *
99485 * <p>
99486 * Because bitwise ops clear this out-of-band data, these arrays can be passed
99487 * to ciphers like AES which want arrays of words.
99488 * </p>
99489 */
99490 sjcl.bitArray = {
99491 /**
99492 * Array slices in units of bits.
99493 * @param {bitArray} a The array to slice.
99494 * @param {Number} bstart The offset to the start of the slice, in bits.
99495 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
99496 * slice until the end of the array.
99497 * @return {bitArray} The requested slice.
99498 */
99499 bitSlice: function (a, bstart, bend) {
99500 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
99501 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
99502 },
99503
99504 /**
99505 * Extract a number packed into a bit array.
99506 * @param {bitArray} a The array to slice.
99507 * @param {Number} bstart The offset to the start of the slice, in bits.
99508 * @param {Number} length The length of the number to extract.
99509 * @return {Number} The requested slice.
99510 */
99511 extract: function(a, bstart, blength) {
99512 // FIXME: this Math.floor is not necessary at all, but for some reason
99513 // seems to suppress a bug in the Chromium JIT.
99514 var x, sh = Math.floor((-bstart-blength) & 31);
99515 if ((bstart + blength - 1 ^ bstart) & -32) {
99516 // it crosses a boundary
99517 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
99518 } else {
99519 // within a single word
99520 x = a[bstart/32|0] >>> sh;
99521 }
99522 return x & ((1<<blength) - 1);
99523 },
99524
99525 /**
99526 * Concatenate two bit arrays.
99527 * @param {bitArray} a1 The first array.
99528 * @param {bitArray} a2 The second array.
99529 * @return {bitArray} The concatenation of a1 and a2.
99530 */
99531 concat: function (a1, a2) {
99532 if (a1.length === 0 || a2.length === 0) {
99533 return a1.concat(a2);
99534 }
99535
99536 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
99537 if (shift === 32) {
99538 return a1.concat(a2);
99539 } else {
99540 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
99541 }
99542 },
99543
99544 /**
99545 * Find the length of an array of bits.
99546 * @param {bitArray} a The array.
99547 * @return {Number} The length of a, in bits.
99548 */
99549 bitLength: function (a) {
99550 var l = a.length, x;
99551 if (l === 0) { return 0; }
99552 x = a[l - 1];
99553 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
99554 },
99555
99556 /**
99557 * Truncate an array.
99558 * @param {bitArray} a The array.
99559 * @param {Number} len The length to truncate to, in bits.
99560 * @return {bitArray} A new array, truncated to len bits.
99561 */
99562 clamp: function (a, len) {
99563 if (a.length * 32 < len) { return a; }
99564 a = a.slice(0, Math.ceil(len / 32));
99565 var l = a.length;
99566 len = len & 31;
99567 if (l > 0 && len) {
99568 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
99569 }
99570 return a;
99571 },
99572
99573 /**
99574 * Make a partial word for a bit array.
99575 * @param {Number} len The number of bits in the word.
99576 * @param {Number} x The bits.
99577 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
99578 * @return {Number} The partial word.
99579 */
99580 partial: function (len, x, _end) {
99581 if (len === 32) { return x; }
99582 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
99583 },
99584
99585 /**
99586 * Get the number of bits used by a partial word.
99587 * @param {Number} x The partial word.
99588 * @return {Number} The number of bits used by the partial word.
99589 */
99590 getPartial: function (x) {
99591 return Math.round(x/0x10000000000) || 32;
99592 },
99593
99594 /**
99595 * Compare two arrays for equality in a predictable amount of time.
99596 * @param {bitArray} a The first array.
99597 * @param {bitArray} b The second array.
99598 * @return {boolean} true if a == b; false otherwise.
99599 */
99600 equal: function (a, b) {
99601 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
99602 return false;
99603 }
99604 var x = 0, i;
99605 for (i=0; i<a.length; i++) {
99606 x |= a[i]^b[i];
99607 }
99608 return (x === 0);
99609 },
99610
99611 /** Shift an array right.
99612 * @param {bitArray} a The array to shift.
99613 * @param {Number} shift The number of bits to shift.
99614 * @param {Number} [carry=0] A byte to carry in
99615 * @param {bitArray} [out=[]] An array to prepend to the output.
99616 * @private
99617 */
99618 _shiftRight: function (a, shift, carry, out) {
99619 var i, last2=0, shift2;
99620 if (out === undefined) { out = []; }
99621
99622 for (; shift >= 32; shift -= 32) {
99623 out.push(carry);
99624 carry = 0;
99625 }
99626 if (shift === 0) {
99627 return out.concat(a);
99628 }
99629
99630 for (i=0; i<a.length; i++) {
99631 out.push(carry | a[i]>>>shift);
99632 carry = a[i] << (32-shift);
99633 }
99634 last2 = a.length ? a[a.length-1] : 0;
99635 shift2 = sjcl.bitArray.getPartial(last2);
99636 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
99637 return out;
99638 },
99639
99640 /** xor a block of 4 words together.
99641 * @private
99642 */
99643 _xor4: function(x,y) {
99644 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
99645 },
99646
99647 /** byteswap a word array inplace.
99648 * (does not handle partial words)
99649 * @param {sjcl.bitArray} a word array
99650 * @return {sjcl.bitArray} byteswapped array
99651 */
99652 byteswapM: function(a) {
99653 var i, v, m = 0xff00;
99654 for (i = 0; i < a.length; ++i) {
99655 v = a[i];
99656 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
99657 }
99658 return a;
99659 }
99660 };
99661
99662
99663 //// codecString.js
99664
99665 /** @fileOverview Bit array codec implementations.
99666 *
99667 * @author Emily Stark
99668 * @author Mike Hamburg
99669 * @author Dan Boneh
99670 */
99671
99672 /** @namespace UTF-8 strings */
99673 sjcl.codec.utf8String = {
99674 /** Convert from a bitArray to a UTF-8 string. */
99675 fromBits: function (arr) {
99676 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
99677 for (i=0; i<bl/8; i++) {
99678 if ((i&3) === 0) {
99679 tmp = arr[i/4];
99680 }
99681 out += String.fromCharCode(tmp >>> 24);
99682 tmp <<= 8;
99683 }
99684 return decodeURIComponent(escape(out));
99685 },
99686
99687 /** Convert from a UTF-8 string to a bitArray. */
99688 toBits: function (str) {
99689 str = unescape(encodeURIComponent(str));
99690 var out = [], i, tmp=0;
99691 for (i=0; i<str.length; i++) {
99692 tmp = tmp << 8 | str.charCodeAt(i);
99693 if ((i&3) === 3) {
99694 out.push(tmp);
99695 tmp = 0;
99696 }
99697 }
99698 if (i&3) {
99699 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
99700 }
99701 return out;
99702 }
99703 };
99704
99705
99706 //// codecHex.js
99707
99708 /** @fileOverview Bit array codec implementations.
99709 *
99710 * @author Emily Stark
99711 * @author Mike Hamburg
99712 * @author Dan Boneh
99713 */
99714
99715 /** @namespace Hexadecimal */
99716 sjcl.codec.hex = {
99717 /** Convert from a bitArray to a hex string. */
99718 fromBits: function (arr) {
99719 var out = "", i;
99720 for (i=0; i<arr.length; i++) {
99721 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
99722 }
99723 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
99724 },
99725 /** Convert from a hex string to a bitArray. */
99726 toBits: function (str) {
99727 var i, out=[], len;
99728 str = str.replace(/\s|0x/g, "");
99729 len = str.length;
99730 str = str + "00000000";
99731 for (i=0; i<str.length; i+=8) {
99732 out.push(parseInt(str.substr(i,8),16)^0);
99733 }
99734 return sjcl.bitArray.clamp(out, len*4);
99735 }
99736 };
99737
99738
99739 //// sha512.js
99740
99741 /** @fileOverview Javascript SHA-512 implementation.
99742 *
99743 * This implementation was written for CryptoJS by Jeff Mott and adapted for
99744 * SJCL by Stefan Thomas.
99745 *
99746 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
99747 * Released with New BSD License
99748 *
99749 * @author Emily Stark
99750 * @author Mike Hamburg
99751 * @author Dan Boneh
99752 * @author Jeff Mott
99753 * @author Stefan Thomas
99754 */
99755
99756 /**
99757 * Context for a SHA-512 operation in progress.
99758 * @constructor
99759 * @class Secure Hash Algorithm, 512 bits.
99760 */
99761 sjcl.hash.sha512 = function (hash) {
99762 if (!this._key[0]) { this._precompute(); }
99763 if (hash) {
99764 this._h = hash._h.slice(0);
99765 this._buffer = hash._buffer.slice(0);
99766 this._length = hash._length;
99767 } else {
99768 this.reset();
99769 }
99770 };
99771
99772 /**
99773 * Hash a string or an array of words.
99774 * @static
99775 * @param {bitArray|String} data the data to hash.
99776 * @return {bitArray} The hash value, an array of 16 big-endian words.
99777 */
99778 sjcl.hash.sha512.hash = function (data) {
99779 return (new sjcl.hash.sha512()).update(data).finalize();
99780 };
99781
99782 sjcl.hash.sha512.prototype = {
99783 /**
99784 * The hash's block size, in bits.
99785 * @constant
99786 */
99787 blockSize: 1024,
99788
99789 /**
99790 * Reset the hash state.
99791 * @return this
99792 */
99793 reset:function () {
99794 this._h = this._init.slice(0);
99795 this._buffer = [];
99796 this._length = 0;
99797 return this;
99798 },
99799
99800 /**
99801 * Input several words to the hash.
99802 * @param {bitArray|String} data the data to hash.
99803 * @return this
99804 */
99805 update: function (data) {
99806 if (typeof data === "string") {
99807 data = sjcl.codec.utf8String.toBits(data);
99808 }
99809 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
99810 ol = this._length,
99811 nl = this._length = ol + sjcl.bitArray.bitLength(data);
99812 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
99813 this._block(b.splice(0,32));
99814 }
99815 return this;
99816 },
99817
99818 /**
99819 * Complete hashing and output the hash value.
99820 * @return {bitArray} The hash value, an array of 16 big-endian words.
99821 */
99822 finalize:function () {
99823 var i, b = this._buffer, h = this._h;
99824
99825 // Round out and push the buffer
99826 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
99827
99828 // Round out the buffer to a multiple of 32 words, less the 4 length words.
99829 for (i = b.length + 4; i & 31; i++) {
99830 b.push(0);
99831 }
99832
99833 // append the length
99834 b.push(0);
99835 b.push(0);
99836 b.push(Math.floor(this._length / 0x100000000));
99837 b.push(this._length | 0);
99838
99839 while (b.length) {
99840 this._block(b.splice(0,32));
99841 }
99842
99843 this.reset();
99844 return h;
99845 },
99846
99847 /**
99848 * The SHA-512 initialization vector, to be precomputed.
99849 * @private
99850 */
99851 _init:[],
99852
99853 /**
99854 * Least significant 24 bits of SHA512 initialization values.
99855 *
99856 * Javascript only has 53 bits of precision, so we compute the 40 most
99857 * significant bits and add the remaining 24 bits as constants.
99858 *
99859 * @private
99860 */
99861 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
99862
99863 /*
99864 _init:
99865 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
99866 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
99867 */
99868
99869 /**
99870 * The SHA-512 hash key, to be precomputed.
99871 * @private
99872 */
99873 _key:[],
99874
99875 /**
99876 * Least significant 24 bits of SHA512 key values.
99877 * @private
99878 */
99879 _keyr:
99880 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
99881 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
99882 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
99883 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
99884 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
99885 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
99886 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
99887 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
99888 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
99889 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
99890
99891 /*
99892 _key:
99893 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
99894 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
99895 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
99896 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
99897 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
99898 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
99899 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
99900 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
99901 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
99902 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
99903 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
99904 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
99905 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
99906 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
99907 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
99908 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
99909 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
99910 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
99911 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
99912 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
99913 */
99914
99915 /**
99916 * Function to precompute _init and _key.
99917 * @private
99918 */
99919 _precompute: function () {
99920 // XXX: This code is for precomputing the SHA256 constants, change for
99921 // SHA512 and re-enable.
99922 var i = 0, prime = 2, factor;
99923
99924 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
99925 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
99926
99927 outer: for (; i<80; prime++) {
99928 for (factor=2; factor*factor <= prime; factor++) {
99929 if (prime % factor === 0) {
99930 // not a prime
99931 continue outer;
99932 }
99933 }
99934
99935 if (i<8) {
99936 this._init[i*2] = frac(Math.pow(prime, 1/2));
99937 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
99938 }
99939 this._key[i*2] = frac(Math.pow(prime, 1/3));
99940 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
99941 i++;
99942 }
99943 },
99944
99945 /**
99946 * Perform one cycle of SHA-512.
99947 * @param {bitArray} words one block of words.
99948 * @private
99949 */
99950 _block:function (words) {
99951 var i, wrh, wrl,
99952 w = words.slice(0),
99953 h = this._h,
99954 k = this._key,
99955 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
99956 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
99957 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
99958 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
99959
99960 // Working variables
99961 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
99962 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
99963 eh = h4h, el = h4l, fh = h5h, fl = h5l,
99964 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
99965
99966 for (i=0; i<80; i++) {
99967 // load up the input word for this round
99968 if (i<16) {
99969 wrh = w[i * 2];
99970 wrl = w[i * 2 + 1];
99971 } else {
99972 // Gamma0
99973 var gamma0xh = w[(i-15) * 2];
99974 var gamma0xl = w[(i-15) * 2 + 1];
99975 var gamma0h =
99976 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
99977 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
99978 (gamma0xh >>> 7);
99979 var gamma0l =
99980 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
99981 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
99982 ((gamma0xh << 25) | (gamma0xl >>> 7));
99983
99984 // Gamma1
99985 var gamma1xh = w[(i-2) * 2];
99986 var gamma1xl = w[(i-2) * 2 + 1];
99987 var gamma1h =
99988 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
99989 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
99990 (gamma1xh >>> 6);
99991 var gamma1l =
99992 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
99993 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
99994 ((gamma1xh << 26) | (gamma1xl >>> 6));
99995
99996 // Shortcuts
99997 var wr7h = w[(i-7) * 2];
99998 var wr7l = w[(i-7) * 2 + 1];
99999
100000 var wr16h = w[(i-16) * 2];
100001 var wr16l = w[(i-16) * 2 + 1];
100002
100003 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
100004 wrl = gamma0l + wr7l;
100005 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
100006 wrl += gamma1l;
100007 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
100008 wrl += wr16l;
100009 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
100010 }
100011
100012 w[i*2] = wrh |= 0;
100013 w[i*2 + 1] = wrl |= 0;
100014
100015 // Ch
100016 var chh = (eh & fh) ^ (~eh & gh);
100017 var chl = (el & fl) ^ (~el & gl);
100018
100019 // Maj
100020 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
100021 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
100022
100023 // Sigma0
100024 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
100025 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
100026
100027 // Sigma1
100028 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
100029 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
100030
100031 // K(round)
100032 var krh = k[i*2];
100033 var krl = k[i*2+1];
100034
100035 // t1 = h + sigma1 + ch + K(round) + W(round)
100036 var t1l = hl + sigma1l;
100037 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
100038 t1l += chl;
100039 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
100040 t1l += krl;
100041 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
100042 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
100043 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
100044
100045 // t2 = sigma0 + maj
100046 var t2l = sigma0l + majl;
100047 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
100048
100049 // Update working variables
100050 hh = gh;
100051 hl = gl;
100052 gh = fh;
100053 gl = fl;
100054 fh = eh;
100055 fl = el;
100056 el = (dl + t1l) | 0;
100057 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
100058 dh = ch;
100059 dl = cl;
100060 ch = bh;
100061 cl = bl;
100062 bh = ah;
100063 bl = al;
100064 al = (t1l + t2l) | 0;
100065 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
100066 }
100067
100068 // Intermediate hash
100069 h0l = h[1] = (h0l + al) | 0;
100070 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
100071 h1l = h[3] = (h1l + bl) | 0;
100072 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
100073 h2l = h[5] = (h2l + cl) | 0;
100074 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
100075 h3l = h[7] = (h3l + dl) | 0;
100076 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
100077 h4l = h[9] = (h4l + el) | 0;
100078 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
100079 h5l = h[11] = (h5l + fl) | 0;
100080 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
100081 h6l = h[13] = (h6l + gl) | 0;
100082 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
100083 h7l = h[15] = (h7l + hl) | 0;
100084 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
100085 }
100086 };
100087
100088
100089 //// hmac.js
100090
100091 /** @fileOverview HMAC implementation.
100092 *
100093 * @author Emily Stark
100094 * @author Mike Hamburg
100095 * @author Dan Boneh
100096 */
100097
100098 /** HMAC with the specified hash function.
100099 * @constructor
100100 * @param {bitArray} key the key for HMAC.
100101 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
100102 */
100103 sjcl.misc.hmac = function (key, Hash) {
100104 this._hash = Hash = Hash || sjcl.hash.sha256;
100105 var exKey = [[],[]], i,
100106 bs = Hash.prototype.blockSize / 32;
100107 this._baseHash = [new Hash(), new Hash()];
100108
100109 if (key.length > bs) {
100110 key = Hash.hash(key);
100111 }
100112
100113 for (i=0; i<bs; i++) {
100114 exKey[0][i] = key[i]^0x36363636;
100115 exKey[1][i] = key[i]^0x5C5C5C5C;
100116 }
100117
100118 this._baseHash[0].update(exKey[0]);
100119 this._baseHash[1].update(exKey[1]);
100120 this._resultHash = new Hash(this._baseHash[0]);
100121 };
100122
100123 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
100124 * @param {bitArray|String} data The data to mac.
100125 */
100126 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
100127 if (!this._updated) {
100128 this.update(data);
100129 return this.digest(data);
100130 } else {
100131 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
100132 }
100133 };
100134
100135 sjcl.misc.hmac.prototype.reset = function () {
100136 this._resultHash = new this._hash(this._baseHash[0]);
100137 this._updated = false;
100138 };
100139
100140 sjcl.misc.hmac.prototype.update = function (data) {
100141 this._updated = true;
100142 this._resultHash.update(data);
100143 };
100144
100145 sjcl.misc.hmac.prototype.digest = function () {
100146 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
100147
100148 this.reset();
100149
100150 return result;
100151 };
100152
100153
100154 //// pbkdf2.js
100155
100156
100157 /** @fileOverview Password-based key-derivation function, version 2.0.
100158 *
100159 * @author Emily Stark
100160 * @author Mike Hamburg
100161 * @author Dan Boneh
100162 */
100163
100164 /** Password-Based Key-Derivation Function, version 2.0.
100165 *
100166 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
100167 *
100168 * This is the method specified by RSA's PKCS #5 standard.
100169 *
100170 * @param {bitArray|String} password The password.
100171 * @param {bitArray|String} salt The salt. Should have lots of entropy.
100172 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
100173 * @param {Number} [length] The length of the derived key. Defaults to the
100174 output size of the hash function.
100175 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
100176 * @return {bitArray} the derived key.
100177 */
100178 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
100179 count = count || 1000;
100180
100181 if (length < 0 || count < 0) {
100182 throw sjcl.exception.invalid("invalid params to pbkdf2");
100183 }
100184
100185 if (typeof password === "string") {
100186 password = sjcl.codec.utf8String.toBits(password);
100187 }
100188
100189 if (typeof salt === "string") {
100190 salt = sjcl.codec.utf8String.toBits(salt);
100191 }
100192
100193 Prff = Prff || sjcl.misc.hmac;
100194
100195 var prf = new Prff(password),
100196 u, ui, i, j, k, out = [], b = sjcl.bitArray;
100197
100198 for (k = 1; 32 * out.length < (length || 1); k++) {
100199 u = ui = prf.encrypt(b.concat(salt,[k]));
100200
100201 for (i=1; i<count; i++) {
100202 ui = prf.encrypt(ui);
100203 for (j=0; j<ui.length; j++) {
100204 u[j] ^= ui[j];
100205 }
100206 }
100207
100208 out = out.concat(u);
100209 }
100210
100211 if (length) { out = b.clamp(out, length); }
100212
100213 return out;
100214 };
100215
100216
100217 //// sha256.js
100218
100219 /** @fileOverview Javascript SHA-256 implementation.
100220 *
100221 * An older version of this implementation is available in the public
100222 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
100223 * Stanford University 2008-2010 and BSD-licensed for liability
100224 * reasons.
100225 *
100226 * Special thanks to Aldo Cortesi for pointing out several bugs in
100227 * this code.
100228 *
100229 * @author Emily Stark
100230 * @author Mike Hamburg
100231 * @author Dan Boneh
100232 */
100233
100234 /**
100235 * Context for a SHA-256 operation in progress.
100236 * @constructor
100237 * @class Secure Hash Algorithm, 256 bits.
100238 */
100239 sjcl.hash.sha256 = function (hash) {
100240 if (!this._key[0]) { this._precompute(); }
100241 if (hash) {
100242 this._h = hash._h.slice(0);
100243 this._buffer = hash._buffer.slice(0);
100244 this._length = hash._length;
100245 } else {
100246 this.reset();
100247 }
100248 };
100249
100250 /**
100251 * Hash a string or an array of words.
100252 * @static
100253 * @param {bitArray|String} data the data to hash.
100254 * @return {bitArray} The hash value, an array of 16 big-endian words.
100255 */
100256 sjcl.hash.sha256.hash = function (data) {
100257 return (new sjcl.hash.sha256()).update(data).finalize();
100258 };
100259
100260 sjcl.hash.sha256.prototype = {
100261 /**
100262 * The hash's block size, in bits.
100263 * @constant
100264 */
100265 blockSize: 512,
100266
100267 /**
100268 * Reset the hash state.
100269 * @return this
100270 */
100271 reset:function () {
100272 this._h = this._init.slice(0);
100273 this._buffer = [];
100274 this._length = 0;
100275 return this;
100276 },
100277
100278 /**
100279 * Input several words to the hash.
100280 * @param {bitArray|String} data the data to hash.
100281 * @return this
100282 */
100283 update: function (data) {
100284 if (typeof data === "string") {
100285 data = sjcl.codec.utf8String.toBits(data);
100286 }
100287 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
100288 ol = this._length,
100289 nl = this._length = ol + sjcl.bitArray.bitLength(data);
100290 for (i = 512+ol & -512; i <= nl; i+= 512) {
100291 this._block(b.splice(0,16));
100292 }
100293 return this;
100294 },
100295
100296 /**
100297 * Complete hashing and output the hash value.
100298 * @return {bitArray} The hash value, an array of 8 big-endian words.
100299 */
100300 finalize:function () {
100301 var i, b = this._buffer, h = this._h;
100302
100303 // Round out and push the buffer
100304 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
100305
100306 // Round out the buffer to a multiple of 16 words, less the 2 length words.
100307 for (i = b.length + 2; i & 15; i++) {
100308 b.push(0);
100309 }
100310
100311 // append the length
100312 b.push(Math.floor(this._length / 0x100000000));
100313 b.push(this._length | 0);
100314
100315 while (b.length) {
100316 this._block(b.splice(0,16));
100317 }
100318
100319 this.reset();
100320 return h;
100321 },
100322
100323 /**
100324 * The SHA-256 initialization vector, to be precomputed.
100325 * @private
100326 */
100327 _init:[],
100328 /*
100329 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
100330 */
100331
100332 /**
100333 * The SHA-256 hash key, to be precomputed.
100334 * @private
100335 */
100336 _key:[],
100337 /*
100338 _key:
100339 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
100340 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
100341 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
100342 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
100343 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
100344 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
100345 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
100346 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
100347 */
100348
100349
100350 /**
100351 * Function to precompute _init and _key.
100352 * @private
100353 */
100354 _precompute: function () {
100355 var i = 0, prime = 2, factor;
100356
100357 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
100358
100359 outer: for (; i<64; prime++) {
100360 for (factor=2; factor*factor <= prime; factor++) {
100361 if (prime % factor === 0) {
100362 // not a prime
100363 continue outer;
100364 }
100365 }
100366
100367 if (i<8) {
100368 this._init[i] = frac(Math.pow(prime, 1/2));
100369 }
100370 this._key[i] = frac(Math.pow(prime, 1/3));
100371 i++;
100372 }
100373 },
100374
100375 /**
100376 * Perform one cycle of SHA-256.
100377 * @param {bitArray} words one block of words.
100378 * @private
100379 */
100380 _block:function (words) {
100381 var i, tmp, a, b,
100382 w = words.slice(0),
100383 h = this._h,
100384 k = this._key,
100385 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
100386 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
100387
100388 /* Rationale for placement of |0 :
100389 * If a value can overflow is original 32 bits by a factor of more than a few
100390 * million (2^23 ish), there is a possibility that it might overflow the
100391 * 53-bit mantissa and lose precision.
100392 *
100393 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
100394 * propagates around the loop, and on the hash state h[]. I don't believe
100395 * that the clamps on h4 and on h0 are strictly necessary, but it's close
100396 * (for h4 anyway), and better safe than sorry.
100397 *
100398 * The clamps on h[] are necessary for the output to be correct even in the
100399 * common case and for short inputs.
100400 */
100401 for (i=0; i<64; i++) {
100402 // load up the input word for this round
100403 if (i<16) {
100404 tmp = w[i];
100405 } else {
100406 a = w[(i+1 ) & 15];
100407 b = w[(i+14) & 15];
100408 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
100409 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
100410 w[i&15] + w[(i+9) & 15]) | 0;
100411 }
100412
100413 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
100414
100415 // shift register
100416 h7 = h6; h6 = h5; h5 = h4;
100417 h4 = h3 + tmp | 0;
100418 h3 = h2; h2 = h1; h1 = h0;
100419
100420 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
100421 }
100422
100423 h[0] = h[0]+h0 | 0;
100424 h[1] = h[1]+h1 | 0;
100425 h[2] = h[2]+h2 | 0;
100426 h[3] = h[3]+h3 | 0;
100427 h[4] = h[4]+h4 | 0;
100428 h[5] = h[5]+h5 | 0;
100429 h[6] = h[6]+h6 | 0;
100430 h[7] = h[7]+h7 | 0;
100431 }
100432 };
100433 </script>
100434 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100435 WORDLISTS["english"] = [
100436 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
100437 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
100438 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
100439 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
100440 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
100441 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
100442 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
100443 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
100444 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
100445 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
100446 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
100447 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
100448 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
100449 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
100450 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
100451 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
100452 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
100453 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
100454 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
100455 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
100456 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
100457 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
100458 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
100459 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
100460 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
100461 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
100462 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
100463 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
100464 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
100465 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
100466 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
100467 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
100468 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
100469 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
100470 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
100471 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
100472 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
100473 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
100474 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
100475 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
100476 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
100477 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
100478 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
100479 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
100480 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
100481 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
100482 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
100483 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
100484 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
100485 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
100486 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
100487 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
100488 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
100489 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
100490 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
100491 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
100492 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
100493 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
100494 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
100495 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
100496 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
100497 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
100498 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
100499 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
100500 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
100501 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
100502 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
100503 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
100504 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
100505 "film","filter","final","find","fine","finger","finish","fire","firm","first",
100506 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
100507 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
100508 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
100509 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
100510 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
100511 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
100512 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
100513 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
100514 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
100515 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
100516 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
100517 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
100518 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
100519 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
100520 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
100521 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
100522 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
100523 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
100524 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
100525 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
100526 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
100527 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
100528 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
100529 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
100530 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
100531 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
100532 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
100533 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
100534 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
100535 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
100536 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
100537 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
100538 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
100539 "liar","liberty","library","license","life","lift","light","like","limb","limit",
100540 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
100541 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
100542 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
100543 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
100544 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
100545 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
100546 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
100547 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
100548 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
100549 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
100550 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
100551 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
100552 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
100553 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
100554 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
100555 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
100556 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
100557 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
100558 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
100559 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
100560 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
100561 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
100562 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
100563 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
100564 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
100565 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
100566 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
100567 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
100568 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
100569 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
100570 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
100571 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
100572 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
100573 "prize","problem","process","produce","profit","program","project","promote","proof","property",
100574 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
100575 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
100576 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
100577 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
100578 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
100579 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
100580 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
100581 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
100582 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
100583 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
100584 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
100585 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
100586 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
100587 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
100588 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
100589 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
100590 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
100591 "scrub","sea","search","season","seat","second","secret","section","security","seed",
100592 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
100593 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
100594 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
100595 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
100596 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
100597 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
100598 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
100599 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
100600 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
100601 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
100602 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
100603 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
100604 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
100605 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
100606 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
100607 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
100608 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
100609 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
100610 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
100611 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
100612 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
100613 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
100614 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
100615 "thank","that","theme","then","theory","there","they","thing","this","thought",
100616 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
100617 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
100618 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
100619 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
100620 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
100621 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
100622 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
100623 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
100624 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
100625 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
100626 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
100627 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
100628 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
100629 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
100630 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
100631 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
100632 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
100633 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
100634 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
100635 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
100636 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
100637 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
100638 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
100639 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
100640 "yellow","you","young","youth","zebra","zero","zone","zoo"]
100641 </script>
100642 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100643 WORDLISTS["japanese"] = [
100644 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
100645 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
100646 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
100647 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
100648 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
100649 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
100650 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
100651 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
100652 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
100653 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
100654 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
100655 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
100656 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
100657 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
100658 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
100659 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
100660 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
100661 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
100662 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
100663 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
100664 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
100665 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
100666 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
100667 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
100668 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
100669 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
100670 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
100671 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
100672 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
100673 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
100674 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
100675 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
100676 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
100677 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
100678 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
100679 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
100680 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
100681 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
100682 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
100683 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
100684 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
100685 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
100686 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
100687 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
100688 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
100689 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
100690 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
100691 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
100692 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
100693 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
100694 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
100695 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
100696 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
100697 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
100698 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
100699 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
100700 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
100701 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
100702 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
100703 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
100704 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
100705 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
100706 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
100707 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
100708 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
100709 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
100710 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
100711 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
100712 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
100713 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
100714 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
100715 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
100716 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
100717 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
100718 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
100719 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
100720 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
100721 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
100722 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
100723 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
100724 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
100725 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
100726 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
100727 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
100728 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
100729 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
100730 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
100731 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
100732 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
100733 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
100734 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
100735 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
100736 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
100737 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
100738 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
100739 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
100740 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
100741 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
100742 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
100743 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
100744 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
100745 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
100746 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
100747 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
100748 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
100749 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
100750 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
100751 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
100752 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
100753 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
100754 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
100755 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
100756 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
100757 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
100758 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
100759 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
100760 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
100761 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
100762 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
100763 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
100764 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
100765 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
100766 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
100767 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
100768 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
100769 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
100770 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
100771 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
100772 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
100773 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
100774 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
100775 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
100776 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
100777 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
100778 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
100779 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
100780 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
100781 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
100782 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
100783 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
100784 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
100785 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
100786 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
100787 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
100788 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
100789 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
100790 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
100791 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
100792 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
100793 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
100794 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
100795 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
100796 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
100797 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
100798 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
100799 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
100800 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
100801 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
100802 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
100803 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
100804 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
100805 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
100806 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
100807 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
100808 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
100809 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
100810 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
100811 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
100812 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
100813 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
100814 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
100815 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
100816 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
100817 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
100818 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
100819 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
100820 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
100821 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
100822 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
100823 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
100824 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
100825 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
100826 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
100827 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
100828 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
100829 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
100830 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
100831 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
100832 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
100833 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
100834 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
100835 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
100836 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
100837 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
100838 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
100839 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
100840 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
100841 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
100842 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
100843 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
100844 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
100845 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
100846 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
100847 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
100848 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
100849 </script>
100850 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100851 WORDLISTS["spanish"] = [
100852 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
100853 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
100854 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
100855 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
100856 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
100857 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
100858 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
100859 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
100860 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
100861 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
100862 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
100863 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
100864 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
100865 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
100866 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
100867 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
100868 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
100869 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
100870 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
100871 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
100872 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
100873 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
100874 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
100875 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
100876 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
100877 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
100878 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
100879 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
100880 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
100881 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
100882 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
100883 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
100884 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
100885 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
100886 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
100887 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
100888 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
100889 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
100890 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
100891 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
100892 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
100893 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
100894 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
100895 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
100896 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
100897 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
100898 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
100899 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
100900 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
100901 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
100902 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
100903 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
100904 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
100905 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
100906 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
100907 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
100908 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
100909 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
100910 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
100911 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
100912 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
100913 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
100914 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
100915 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
100916 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
100917 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
100918 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
100919 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
100920 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
100921 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
100922 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
100923 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
100924 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
100925 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
100926 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
100927 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
100928 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
100929 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
100930 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
100931 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
100932 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
100933 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
100934 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
100935 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
100936 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
100937 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
100938 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
100939 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
100940 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
100941 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
100942 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
100943 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
100944 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
100945 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
100946 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
100947 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
100948 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
100949 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
100950 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
100951 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
100952 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
100953 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
100954 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
100955 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
100956 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
100957 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
100958 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
100959 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
100960 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
100961 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
100962 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
100963 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
100964 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
100965 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
100966 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
100967 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
100968 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
100969 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
100970 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
100971 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
100972 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
100973 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
100974 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
100975 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
100976 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
100977 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
100978 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
100979 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
100980 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
100981 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
100982 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
100983 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
100984 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
100985 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
100986 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
100987 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
100988 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
100989 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
100990 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
100991 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
100992 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
100993 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
100994 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
100995 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
100996 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
100997 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
100998 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
100999 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
101000 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
101001 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
101002 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
101003 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
101004 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
101005 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
101006 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
101007 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
101008 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
101009 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
101010 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
101011 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
101012 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
101013 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
101014 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
101015 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
101016 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
101017 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
101018 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
101019 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
101020 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
101021 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
101022 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
101023 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
101024 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
101025 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
101026 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
101027 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
101028 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
101029 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
101030 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
101031 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
101032 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
101033 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
101034 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
101035 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
101036 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
101037 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
101038 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
101039 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
101040 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
101041 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
101042 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
101043 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
101044 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
101045 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
101046 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
101047 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
101048 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
101049 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
101050 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
101051 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
101052 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
101053 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
101054 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
101055 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
101056 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
101057 </script>
101058 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101059 WORDLISTS["chinese_simplified"] = [
101060 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
101061 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
101062 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
101063 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
101064 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
101065 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
101066 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
101067 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
101068 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
101069 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
101070 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
101071 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
101072 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
101073 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
101074 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
101075 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
101076 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
101077 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
101078 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
101079 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
101080 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
101081 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
101082 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
101083 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
101084 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
101085 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
101086 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
101087 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
101088 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
101089 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
101090 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
101091 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
101092 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
101093 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
101094 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
101095 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
101096 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
101097 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
101098 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
101099 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
101100 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
101101 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
101102 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
101103 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
101104 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
101105 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
101106 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
101107 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
101108 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
101109 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
101110 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
101111 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
101112 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
101113 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
101114 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
101115 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
101116 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
101117 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
101118 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
101119 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
101120 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
101121 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
101122 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
101123 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
101124 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
101125 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
101126 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
101127 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
101128 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
101129 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
101130 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
101131 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
101132 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
101133 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
101134 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
101135 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
101136 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
101137 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
101138 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
101139 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
101140 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
101141 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
101142 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
101143 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
101144 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
101145 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
101146 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
101147 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
101148 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
101149 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
101150 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
101151 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
101152 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
101153 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
101154 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
101155 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
101156 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
101157 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
101158 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
101159 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
101160 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
101161 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
101162 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
101163 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
101164 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
101165 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
101166 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
101167 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
101168 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
101169 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
101170 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
101171 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
101172 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
101173 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
101174 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
101175 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
101176 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
101177 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
101178 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
101179 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
101180 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
101181 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
101182 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
101183 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
101184 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
101185 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
101186 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
101187 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
101188 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
101189 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
101190 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
101191 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
101192 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
101193 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
101194 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
101195 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
101196 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
101197 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
101198 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
101199 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
101200 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
101201 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
101202 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
101203 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
101204 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
101205 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
101206 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
101207 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
101208 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
101209 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
101210 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
101211 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
101212 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
101213 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
101214 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
101215 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
101216 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
101217 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
101218 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
101219 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
101220 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
101221 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
101222 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
101223 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
101224 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
101225 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
101226 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
101227 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
101228 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
101229 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
101230 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
101231 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
101232 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
101233 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
101234 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
101235 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
101236 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
101237 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
101238 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
101239 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
101240 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
101241 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
101242 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
101243 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
101244 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
101245 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
101246 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
101247 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
101248 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
101249 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
101250 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
101251 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
101252 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
101253 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
101254 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
101255 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
101256 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
101257 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
101258 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
101259 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
101260 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
101261 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
101262 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
101263 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
101264 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
101265 </script>
101266 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101267 WORDLISTS["chinese_traditional"] = [
101268 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
101269 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
101270 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
101271 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
101272 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
101273 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
101274 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
101275 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
101276 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
101277 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
101278 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
101279 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
101280 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
101281 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
101282 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
101283 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
101284 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
101285 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
101286 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
101287 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
101288 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
101289 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
101290 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
101291 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
101292 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
101293 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
101294 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
101295 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
101296 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
101297 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
101298 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
101299 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
101300 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
101301 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
101302 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
101303 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
101304 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
101305 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
101306 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
101307 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
101308 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
101309 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
101310 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
101311 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
101312 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
101313 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
101314 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
101315 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
101316 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
101317 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
101318 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
101319 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
101320 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
101321 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
101322 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
101323 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
101324 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
101325 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
101326 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
101327 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
101328 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
101329 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
101330 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
101331 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
101332 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
101333 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
101334 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
101335 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
101336 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
101337 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
101338 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
101339 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
101340 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
101341 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
101342 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
101343 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
101344 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
101345 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
101346 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
101347 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
101348 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
101349 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
101350 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
101351 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
101352 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
101353 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
101354 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
101355 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
101356 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
101357 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
101358 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
101359 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
101360 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
101361 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
101362 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
101363 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
101364 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
101365 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
101366 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
101367 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
101368 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
101369 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
101370 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
101371 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
101372 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
101373 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
101374 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
101375 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
101376 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
101377 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
101378 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
101379 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
101380 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
101381 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
101382 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
101383 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
101384 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
101385 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
101386 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
101387 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
101388 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
101389 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
101390 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
101391 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
101392 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
101393 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
101394 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
101395 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
101396 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
101397 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
101398 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
101399 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
101400 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
101401 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
101402 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
101403 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
101404 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
101405 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
101406 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
101407 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
101408 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
101409 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
101410 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
101411 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
101412 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
101413 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
101414 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
101415 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
101416 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
101417 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
101418 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
101419 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
101420 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
101421 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
101422 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
101423 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
101424 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
101425 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
101426 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
101427 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
101428 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
101429 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
101430 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
101431 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
101432 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
101433 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
101434 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
101435 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
101436 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
101437 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
101438 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
101439 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
101440 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
101441 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
101442 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
101443 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
101444 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
101445 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
101446 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
101447 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
101448 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
101449 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
101450 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
101451 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
101452 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
101453 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
101454 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
101455 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
101456 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
101457 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
101458 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
101459 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
101460 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
101461 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
101462 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
101463 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
101464 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
101465 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
101466 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
101467 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
101468 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
101469 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
101470 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
101471 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
101472 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
101473 </script>
101474 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101475 WORDLISTS["french"] = [
101476 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
101477 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
101478 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
101479 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
101480 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
101481 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
101482 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
101483 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
101484 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
101485 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
101486 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
101487 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
101488 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
101489 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
101490 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
101491 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
101492 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
101493 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
101494 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
101495 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
101496 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
101497 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
101498 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
101499 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
101500 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
101501 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
101502 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
101503 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
101504 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
101505 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
101506 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
101507 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
101508 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
101509 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
101510 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
101511 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
101512 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
101513 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
101514 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
101515 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
101516 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
101517 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
101518 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
101519 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
101520 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
101521 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
101522 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
101523 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
101524 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
101525 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
101526 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
101527 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
101528 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
101529 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
101530 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
101531 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
101532 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
101533 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
101534 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
101535 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
101536 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
101537 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
101538 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
101539 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
101540 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
101541 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
101542 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
101543 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
101544 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
101545 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
101546 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
101547 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
101548 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
101549 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
101550 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
101551 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
101552 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
101553 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
101554 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
101555 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
101556 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
101557 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
101558 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
101559 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
101560 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
101561 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
101562 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
101563 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
101564 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
101565 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
101566 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
101567 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
101568 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
101569 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
101570 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
101571 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
101572 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
101573 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
101574 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
101575 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
101576 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
101577 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
101578 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
101579 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
101580 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
101581 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
101582 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
101583 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
101584 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
101585 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
101586 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
101587 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
101588 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
101589 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
101590 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
101591 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
101592 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
101593 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
101594 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
101595 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
101596 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
101597 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
101598 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
101599 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
101600 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
101601 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
101602 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
101603 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
101604 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
101605 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
101606 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
101607 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
101608 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
101609 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
101610 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
101611 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
101612 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
101613 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
101614 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
101615 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
101616 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
101617 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
101618 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
101619 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
101620 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
101621 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
101622 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
101623 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
101624 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
101625 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
101626 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
101627 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
101628 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
101629 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
101630 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
101631 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
101632 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
101633 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
101634 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
101635 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
101636 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
101637 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
101638 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
101639 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
101640 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
101641 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
101642 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
101643 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
101644 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
101645 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
101646 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
101647 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
101648 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
101649 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
101650 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
101651 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
101652 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
101653 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
101654 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
101655 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
101656 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
101657 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
101658 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
101659 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
101660 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
101661 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
101662 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
101663 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
101664 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
101665 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
101666 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
101667 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
101668 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
101669 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
101670 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
101671 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
101672 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
101673 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
101674 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
101675 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
101676 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
101677 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
101678 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
101679 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
101680 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
101681 </script>
101682 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101683 WORDLISTS["italian"] = [
101684 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
101685 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
101686 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
101687 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
101688 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
101689 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
101690 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
101691 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
101692 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
101693 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
101694 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
101695 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
101696 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
101697 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
101698 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
101699 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
101700 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
101701 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
101702 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
101703 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
101704 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
101705 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
101706 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
101707 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
101708 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
101709 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
101710 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
101711 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
101712 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
101713 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
101714 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
101715 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
101716 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
101717 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
101718 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
101719 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
101720 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
101721 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
101722 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
101723 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
101724 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
101725 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
101726 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
101727 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
101728 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
101729 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
101730 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
101731 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
101732 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
101733 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
101734 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
101735 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
101736 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
101737 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
101738 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
101739 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
101740 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
101741 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
101742 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
101743 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
101744 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
101745 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
101746 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
101747 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
101748 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
101749 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
101750 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
101751 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
101752 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
101753 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
101754 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
101755 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
101756 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
101757 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
101758 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
101759 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
101760 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
101761 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
101762 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
101763 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
101764 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
101765 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
101766 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
101767 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
101768 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
101769 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
101770 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
101771 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
101772 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
101773 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
101774 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
101775 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
101776 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
101777 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
101778 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
101779 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
101780 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
101781 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
101782 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
101783 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
101784 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
101785 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
101786 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
101787 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
101788 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
101789 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
101790 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
101791 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
101792 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
101793 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
101794 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
101795 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
101796 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
101797 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
101798 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
101799 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
101800 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
101801 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
101802 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
101803 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
101804 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
101805 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
101806 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
101807 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
101808 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
101809 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
101810 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
101811 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
101812 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
101813 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
101814 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
101815 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
101816 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
101817 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
101818 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
101819 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
101820 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
101821 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
101822 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
101823 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
101824 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
101825 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
101826 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
101827 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
101828 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
101829 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
101830 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
101831 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
101832 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
101833 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
101834 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
101835 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
101836 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
101837 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
101838 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
101839 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
101840 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
101841 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
101842 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
101843 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
101844 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
101845 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
101846 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
101847 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
101848 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
101849 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
101850 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
101851 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
101852 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
101853 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
101854 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
101855 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
101856 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
101857 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
101858 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
101859 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
101860 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
101861 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
101862 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
101863 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
101864 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
101865 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
101866 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
101867 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
101868 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
101869 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
101870 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
101871 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
101872 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
101873 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
101874 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
101875 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
101876 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
101877 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
101878 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
101879 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
101880 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
101881 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
101882 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
101883 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
101884 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
101885 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
101886 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
101887 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
101888 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
101889 </script>
101890 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101891 WORDLISTS["korean"] = [
101892 "가격",
101893 "가끔",
101894 "가난",
101895 "가능",
101896 "가득",
101897 "가르침",
101898 "가뭄",
101899 "가방",
101900 "가상",
101901 "가슴",
101902 "가운데",
101903 "가을",
101904 "가이드",
101905 "가입",
101906 "가장",
101907 "가정",
101908 "가족",
101909 "가죽",
101910 "각오",
101911 "각자",
101912 "간격",
101913 "간부",
101914 "간섭",
101915 "간장",
101916 "간접",
101917 "간판",
101918 "갈등",
101919 "갈비",
101920 "갈색",
101921 "갈증",
101922 "감각",
101923 "감기",
101924 "감소",
101925 "감수성",
101926 "감자",
101927 "감정",
101928 "갑자기",
101929 "강남",
101930 "강당",
101931 "강도",
101932 "강력히",
101933 "강변",
101934 "강북",
101935 "강사",
101936 "강수량",
101937 "강아지",
101938 "강원도",
101939 "강의",
101940 "강제",
101941 "강조",
101942 "같이",
101943 "개구리",
101944 "개나리",
101945 "개방",
101946 "개별",
101947 "개선",
101948 "개성",
101949 "개인",
101950 "객관적",
101951 "거실",
101952 "거액",
101953 "거울",
101954 "거짓",
101955 "거품",
101956 "걱정",
101957 "건강",
101958 "건물",
101959 "건설",
101960 "건조",
101961 "건축",
101962 "걸음",
101963 "검사",
101964 "검토",
101965 "게시판",
101966 "게임",
101967 "겨울",
101968 "견해",
101969 "결과",
101970 "결국",
101971 "결론",
101972 "결석",
101973 "결승",
101974 "결심",
101975 "결정",
101976 "결혼",
101977 "경계",
101978 "경고",
101979 "경기",
101980 "경력",
101981 "경복궁",
101982 "경비",
101983 "경상도",
101984 "경영",
101985 "경우",
101986 "경쟁",
101987 "경제",
101988 "경주",
101989 "경찰",
101990 "경치",
101991 "경향",
101992 "경험",
101993 "계곡",
101994 "계단",
101995 "계란",
101996 "계산",
101997 "계속",
101998 "계약",
101999 "계절",
102000 "계층",
102001 "계획",
102002 "고객",
102003 "고구려",
102004 "고궁",
102005 "고급",
102006 "고등학생",
102007 "고무신",
102008 "고민",
102009 "고양이",
102010 "고장",
102011 "고전",
102012 "고집",
102013 "고춧가루",
102014 "고통",
102015 "고향",
102016 "곡식",
102017 "골목",
102018 "골짜기",
102019 "골프",
102020 "공간",
102021 "공개",
102022 "공격",
102023 "공군",
102024 "공급",
102025 "공기",
102026 "공동",
102027 "공무원",
102028 "공부",
102029 "공사",
102030 "공식",
102031 "공업",
102032 "공연",
102033 "공원",
102034 "공장",
102035 "공짜",
102036 "공책",
102037 "공통",
102038 "공포",
102039 "공항",
102040 "공휴일",
102041 "과목",
102042 "과일",
102043 "과장",
102044 "과정",
102045 "과학",
102046 "관객",
102047 "관계",
102048 "관광",
102049 "관념",
102050 "관람",
102051 "관련",
102052 "관리",
102053 "관습",
102054 "관심",
102055 "관점",
102056 "관찰",
102057 "광경",
102058 "광고",
102059 "광장",
102060 "광주",
102061 "괴로움",
102062 "굉장히",
102063 "교과서",
102064 "교문",
102065 "교복",
102066 "교실",
102067 "교양",
102068 "교육",
102069 "교장",
102070 "교직",
102071 "교통",
102072 "교환",
102073 "교훈",
102074 "구경",
102075 "구름",
102076 "구멍",
102077 "구별",
102078 "구분",
102079 "구석",
102080 "구성",
102081 "구속",
102082 "구역",
102083 "구입",
102084 "구청",
102085 "구체적",
102086 "국가",
102087 "국기",
102088 "국내",
102089 "국립",
102090 "국물",
102091 "국민",
102092 "국수",
102093 "국어",
102094 "국왕",
102095 "국적",
102096 "국제",
102097 "국회",
102098 "군대",
102099 "군사",
102100 "군인",
102101 "궁극적",
102102 "권리",
102103 "권위",
102104 "권투",
102105 "귀국",
102106 "귀신",
102107 "규정",
102108 "규칙",
102109 "균형",
102110 "그날",
102111 "그냥",
102112 "그늘",
102113 "그러나",
102114 "그룹",
102115 "그릇",
102116 "그림",
102117 "그제서야",
102118 "그토록",
102119 "극복",
102120 "극히",
102121 "근거",
102122 "근교",
102123 "근래",
102124 "근로",
102125 "근무",
102126 "근본",
102127 "근원",
102128 "근육",
102129 "근처",
102130 "글씨",
102131 "글자",
102132 "금강산",
102133 "금고",
102134 "금년",
102135 "금메달",
102136 "금액",
102137 "금연",
102138 "금요일",
102139 "금지",
102140 "긍정적",
102141 "기간",
102142 "기관",
102143 "기념",
102144 "기능",
102145 "기독교",
102146 "기둥",
102147 "기록",
102148 "기름",
102149 "기법",
102150 "기본",
102151 "기분",
102152 "기쁨",
102153 "기숙사",
102154 "기술",
102155 "기억",
102156 "기업",
102157 "기온",
102158 "기운",
102159 "기원",
102160 "기적",
102161 "기준",
102162 "기침",
102163 "기혼",
102164 "기획",
102165 "긴급",
102166 "긴장",
102167 "길이",
102168 "김밥",
102169 "김치",
102170 "김포공항",
102171 "깍두기",
102172 "깜빡",
102173 "깨달음",
102174 "깨소금",
102175 "껍질",
102176 "꼭대기",
102177 "꽃잎",
102178 "나들이",
102179 "나란히",
102180 "나머지",
102181 "나물",
102182 "나침반",
102183 "나흘",
102184 "낙엽",
102185 "난방",
102186 "날개",
102187 "날씨",
102188 "날짜",
102189 "남녀",
102190 "남대문",
102191 "남매",
102192 "남산",
102193 "남자",
102194 "남편",
102195 "남학생",
102196 "낭비",
102197 "낱말",
102198 "내년",
102199 "내용",
102200 "내일",
102201 "냄비",
102202 "냄새",
102203 "냇물",
102204 "냉동",
102205 "냉면",
102206 "냉방",
102207 "냉장고",
102208 "넥타이",
102209 "넷째",
102210 "노동",
102211 "노란색",
102212 "노력",
102213 "노인",
102214 "녹음",
102215 "녹차",
102216 "녹화",
102217 "논리",
102218 "논문",
102219 "논쟁",
102220 "놀이",
102221 "농구",
102222 "농담",
102223 "농민",
102224 "농부",
102225 "농업",
102226 "농장",
102227 "농촌",
102228 "높이",
102229 "눈동자",
102230 "눈물",
102231 "눈썹",
102232 "뉴욕",
102233 "느낌",
102234 "늑대",
102235 "능동적",
102236 "능력",
102237 "다방",
102238 "다양성",
102239 "다음",
102240 "다이어트",
102241 "다행",
102242 "단계",
102243 "단골",
102244 "단독",
102245 "단맛",
102246 "단순",
102247 "단어",
102248 "단위",
102249 "단점",
102250 "단체",
102251 "단추",
102252 "단편",
102253 "단풍",
102254 "달걀",
102255 "달러",
102256 "달력",
102257 "달리",
102258 "닭고기",
102259 "담당",
102260 "담배",
102261 "담요",
102262 "담임",
102263 "답변",
102264 "답장",
102265 "당근",
102266 "당분간",
102267 "당연히",
102268 "당장",
102269 "대규모",
102270 "대낮",
102271 "대단히",
102272 "대답",
102273 "대도시",
102274 "대략",
102275 "대량",
102276 "대륙",
102277 "대문",
102278 "대부분",
102279 "대신",
102280 "대응",
102281 "대장",
102282 "대전",
102283 "대접",
102284 "대중",
102285 "대책",
102286 "대출",
102287 "대충",
102288 "대통령",
102289 "대학",
102290 "대한민국",
102291 "대합실",
102292 "대형",
102293 "덩어리",
102294 "데이트",
102295 "도대체",
102296 "도덕",
102297 "도둑",
102298 "도망",
102299 "도서관",
102300 "도심",
102301 "도움",
102302 "도입",
102303 "도자기",
102304 "도저히",
102305 "도전",
102306 "도중",
102307 "도착",
102308 "독감",
102309 "독립",
102310 "독서",
102311 "독일",
102312 "독창적",
102313 "동화책",
102314 "뒷모습",
102315 "뒷산",
102316 "딸아이",
102317 "마누라",
102318 "마늘",
102319 "마당",
102320 "마라톤",
102321 "마련",
102322 "마무리",
102323 "마사지",
102324 "마약",
102325 "마요네즈",
102326 "마을",
102327 "마음",
102328 "마이크",
102329 "마중",
102330 "마지막",
102331 "마찬가지",
102332 "마찰",
102333 "마흔",
102334 "막걸리",
102335 "막내",
102336 "막상",
102337 "만남",
102338 "만두",
102339 "만세",
102340 "만약",
102341 "만일",
102342 "만점",
102343 "만족",
102344 "만화",
102345 "많이",
102346 "말기",
102347 "말씀",
102348 "말투",
102349 "맘대로",
102350 "망원경",
102351 "매년",
102352 "매달",
102353 "매력",
102354 "매번",
102355 "매스컴",
102356 "매일",
102357 "매장",
102358 "맥주",
102359 "먹이",
102360 "먼저",
102361 "먼지",
102362 "멀리",
102363 "메일",
102364 "며느리",
102365 "며칠",
102366 "면담",
102367 "멸치",
102368 "명단",
102369 "명령",
102370 "명예",
102371 "명의",
102372 "명절",
102373 "명칭",
102374 "명함",
102375 "모금",
102376 "모니터",
102377 "모델",
102378 "모든",
102379 "모범",
102380 "모습",
102381 "모양",
102382 "모임",
102383 "모조리",
102384 "모집",
102385 "모퉁이",
102386 "목걸이",
102387 "목록",
102388 "목사",
102389 "목소리",
102390 "목숨",
102391 "목적",
102392 "목표",
102393 "몰래",
102394 "몸매",
102395 "몸무게",
102396 "몸살",
102397 "몸속",
102398 "몸짓",
102399 "몸통",
102400 "몹시",
102401 "무관심",
102402 "무궁화",
102403 "무더위",
102404 "무덤",
102405 "무릎",
102406 "무슨",
102407 "무엇",
102408 "무역",
102409 "무용",
102410 "무조건",
102411 "무지개",
102412 "무척",
102413 "문구",
102414 "문득",
102415 "문법",
102416 "문서",
102417 "문제",
102418 "문학",
102419 "문화",
102420 "물가",
102421 "물건",
102422 "물결",
102423 "물고기",
102424 "물론",
102425 "물리학",
102426 "물음",
102427 "물질",
102428 "물체",
102429 "미국",
102430 "미디어",
102431 "미사일",
102432 "미술",
102433 "미역",
102434 "미용실",
102435 "미움",
102436 "미인",
102437 "미팅",
102438 "미혼",
102439 "민간",
102440 "민족",
102441 "민주",
102442 "믿음",
102443 "밀가루",
102444 "밀리미터",
102445 "밑바닥",
102446 "바가지",
102447 "바구니",
102448 "바나나",
102449 "바늘",
102450 "바닥",
102451 "바닷가",
102452 "바람",
102453 "바이러스",
102454 "바탕",
102455 "박물관",
102456 "박사",
102457 "박수",
102458 "반대",
102459 "반드시",
102460 "반말",
102461 "반발",
102462 "반성",
102463 "반응",
102464 "반장",
102465 "반죽",
102466 "반지",
102467 "반찬",
102468 "받침",
102469 "발가락",
102470 "발걸음",
102471 "발견",
102472 "발달",
102473 "발레",
102474 "발목",
102475 "발바닥",
102476 "발생",
102477 "발음",
102478 "발자국",
102479 "발전",
102480 "발톱",
102481 "발표",
102482 "밤하늘",
102483 "밥그릇",
102484 "밥맛",
102485 "밥상",
102486 "밥솥",
102487 "방금",
102488 "방면",
102489 "방문",
102490 "방바닥",
102491 "방법",
102492 "방송",
102493 "방식",
102494 "방안",
102495 "방울",
102496 "방지",
102497 "방학",
102498 "방해",
102499 "방향",
102500 "배경",
102501 "배꼽",
102502 "배달",
102503 "배드민턴",
102504 "백두산",
102505 "백색",
102506 "백성",
102507 "백인",
102508 "백제",
102509 "백화점",
102510 "버릇",
102511 "버섯",
102512 "버튼",
102513 "번개",
102514 "번역",
102515 "번지",
102516 "번호",
102517 "벌금",
102518 "벌레",
102519 "벌써",
102520 "범위",
102521 "범인",
102522 "범죄",
102523 "법률",
102524 "법원",
102525 "법적",
102526 "법칙",
102527 "베이징",
102528 "벨트",
102529 "변경",
102530 "변동",
102531 "변명",
102532 "변신",
102533 "변호사",
102534 "변화",
102535 "별도",
102536 "별명",
102537 "별일",
102538 "병실",
102539 "병아리",
102540 "병원",
102541 "보관",
102542 "보너스",
102543 "보라색",
102544 "보람",
102545 "보름",
102546 "보상",
102547 "보안",
102548 "보자기",
102549 "보장",
102550 "보전",
102551 "보존",
102552 "보통",
102553 "보편적",
102554 "보험",
102555 "복도",
102556 "복사",
102557 "복숭아",
102558 "복습",
102559 "볶음",
102560 "본격적",
102561 "본래",
102562 "본부",
102563 "본사",
102564 "본성",
102565 "본인",
102566 "본질",
102567 "볼펜",
102568 "봉사",
102569 "봉지",
102570 "봉투",
102571 "부근",
102572 "부끄러움",
102573 "부담",
102574 "부동산",
102575 "부문",
102576 "부분",
102577 "부산",
102578 "부상",
102579 "부엌",
102580 "부인",
102581 "부작용",
102582 "부장",
102583 "부정",
102584 "부족",
102585 "부지런히",
102586 "부친",
102587 "부탁",
102588 "부품",
102589 "부회장",
102590 "북부",
102591 "북한",
102592 "분노",
102593 "분량",
102594 "분리",
102595 "분명",
102596 "분석",
102597 "분야",
102598 "분위기",
102599 "분필",
102600 "분홍색",
102601 "불고기",
102602 "불과",
102603 "불교",
102604 "불꽃",
102605 "불만",
102606 "불법",
102607 "불빛",
102608 "불안",
102609 "불이익",
102610 "불행",
102611 "브랜드",
102612 "비극",
102613 "비난",
102614 "비닐",
102615 "비둘기",
102616 "비디오",
102617 "비로소",
102618 "비만",
102619 "비명",
102620 "비밀",
102621 "비바람",
102622 "비빔밥",
102623 "비상",
102624 "비용",
102625 "비율",
102626 "비중",
102627 "비타민",
102628 "비판",
102629 "빌딩",
102630 "빗물",
102631 "빗방울",
102632 "빗줄기",
102633 "빛깔",
102634 "빨간색",
102635 "빨래",
102636 "빨리",
102637 "사건",
102638 "사계절",
102639 "사나이",
102640 "사냥",
102641 "사람",
102642 "사랑",
102643 "사립",
102644 "사모님",
102645 "사물",
102646 "사방",
102647 "사상",
102648 "사생활",
102649 "사설",
102650 "사슴",
102651 "사실",
102652 "사업",
102653 "사용",
102654 "사월",
102655 "사장",
102656 "사전",
102657 "사진",
102658 "사촌",
102659 "사춘기",
102660 "사탕",
102661 "사투리",
102662 "사흘",
102663 "산길",
102664 "산부인과",
102665 "산업",
102666 "산책",
102667 "살림",
102668 "살인",
102669 "살짝",
102670 "삼계탕",
102671 "삼국",
102672 "삼십",
102673 "삼월",
102674 "삼촌",
102675 "상관",
102676 "상금",
102677 "상대",
102678 "상류",
102679 "상반기",
102680 "상상",
102681 "상식",
102682 "상업",
102683 "상인",
102684 "상자",
102685 "상점",
102686 "상처",
102687 "상추",
102688 "상태",
102689 "상표",
102690 "상품",
102691 "상황",
102692 "새벽",
102693 "색깔",
102694 "색연필",
102695 "생각",
102696 "생명",
102697 "생물",
102698 "생방송",
102699 "생산",
102700 "생선",
102701 "생신",
102702 "생일",
102703 "생활",
102704 "서랍",
102705 "서른",
102706 "서명",
102707 "서민",
102708 "서비스",
102709 "서양",
102710 "서울",
102711 "서적",
102712 "서점",
102713 "서쪽",
102714 "서클",
102715 "석사",
102716 "석유",
102717 "선거",
102718 "선물",
102719 "선배",
102720 "선생",
102721 "선수",
102722 "선원",
102723 "선장",
102724 "선전",
102725 "선택",
102726 "선풍기",
102727 "설거지",
102728 "설날",
102729 "설렁탕",
102730 "설명",
102731 "설문",
102732 "설사",
102733 "설악산",
102734 "설치",
102735 "설탕",
102736 "섭씨",
102737 "성공",
102738 "성당",
102739 "성명",
102740 "성별",
102741 "성인",
102742 "성장",
102743 "성적",
102744 "성질",
102745 "성함",
102746 "세금",
102747 "세미나",
102748 "세상",
102749 "세월",
102750 "세종대왕",
102751 "세탁",
102752 "센터",
102753 "센티미터",
102754 "셋째",
102755 "소규모",
102756 "소극적",
102757 "소금",
102758 "소나기",
102759 "소년",
102760 "소득",
102761 "소망",
102762 "소문",
102763 "소설",
102764 "소속",
102765 "소아과",
102766 "소용",
102767 "소원",
102768 "소음",
102769 "소중히",
102770 "소지품",
102771 "소질",
102772 "소풍",
102773 "소형",
102774 "속담",
102775 "속도",
102776 "속옷",
102777 "손가락",
102778 "손길",
102779 "손녀",
102780 "손님",
102781 "손등",
102782 "손목",
102783 "손뼉",
102784 "손실",
102785 "손질",
102786 "손톱",
102787 "손해",
102788 "솔직히",
102789 "솜씨",
102790 "송아지",
102791 "송이",
102792 "송편",
102793 "쇠고기",
102794 "쇼핑",
102795 "수건",
102796 "수년",
102797 "수단",
102798 "수돗물",
102799 "수동적",
102800 "수면",
102801 "수명",
102802 "수박",
102803 "수상",
102804 "수석",
102805 "수술",
102806 "수시로",
102807 "수업",
102808 "수염",
102809 "수영",
102810 "수입",
102811 "수준",
102812 "수집",
102813 "수출",
102814 "수컷",
102815 "수필",
102816 "수학",
102817 "수험생",
102818 "수화기",
102819 "숙녀",
102820 "숙소",
102821 "숙제",
102822 "순간",
102823 "순서",
102824 "순수",
102825 "순식간",
102826 "순위",
102827 "숟가락",
102828 "술병",
102829 "술집",
102830 "숫자",
102831 "스님",
102832 "스물",
102833 "스스로",
102834 "스승",
102835 "스웨터",
102836 "스위치",
102837 "스케이트",
102838 "스튜디오",
102839 "스트레스",
102840 "스포츠",
102841 "슬쩍",
102842 "슬픔",
102843 "습관",
102844 "습기",
102845 "승객",
102846 "승리",
102847 "승부",
102848 "승용차",
102849 "승진",
102850 "시각",
102851 "시간",
102852 "시골",
102853 "시금치",
102854 "시나리오",
102855 "시댁",
102856 "시리즈",
102857 "시멘트",
102858 "시민",
102859 "시부모",
102860 "시선",
102861 "시설",
102862 "시스템",
102863 "시아버지",
102864 "시어머니",
102865 "시월",
102866 "시인",
102867 "시일",
102868 "시작",
102869 "시장",
102870 "시절",
102871 "시점",
102872 "시중",
102873 "시즌",
102874 "시집",
102875 "시청",
102876 "시합",
102877 "시험",
102878 "식구",
102879 "식기",
102880 "식당",
102881 "식량",
102882 "식료품",
102883 "식물",
102884 "식빵",
102885 "식사",
102886 "식생활",
102887 "식초",
102888 "식탁",
102889 "식품",
102890 "신고",
102891 "신규",
102892 "신념",
102893 "신문",
102894 "신발",
102895 "신비",
102896 "신사",
102897 "신세",
102898 "신용",
102899 "신제품",
102900 "신청",
102901 "신체",
102902 "신화",
102903 "실감",
102904 "실내",
102905 "실력",
102906 "실례",
102907 "실망",
102908 "실수",
102909 "실습",
102910 "실시",
102911 "실장",
102912 "실정",
102913 "실질적",
102914 "실천",
102915 "실체",
102916 "실컷",
102917 "실태",
102918 "실패",
102919 "실험",
102920 "실현",
102921 "심리",
102922 "심부름",
102923 "심사",
102924 "심장",
102925 "심정",
102926 "심판",
102927 "쌍둥이",
102928 "씨름",
102929 "씨앗",
102930 "아가씨",
102931 "아나운서",
102932 "아드님",
102933 "아들",
102934 "아쉬움",
102935 "아스팔트",
102936 "아시아",
102937 "아울러",
102938 "아저씨",
102939 "아줌마",
102940 "아직",
102941 "아침",
102942 "아파트",
102943 "아프리카",
102944 "아픔",
102945 "아홉",
102946 "아흔",
102947 "악기",
102948 "악몽",
102949 "악수",
102950 "안개",
102951 "안경",
102952 "안과",
102953 "안내",
102954 "안녕",
102955 "안동",
102956 "안방",
102957 "안부",
102958 "안주",
102959 "알루미늄",
102960 "알코올",
102961 "암시",
102962 "암컷",
102963 "압력",
102964 "앞날",
102965 "앞문",
102966 "애인",
102967 "애정",
102968 "액수",
102969 "앨범",
102970 "야간",
102971 "야단",
102972 "야옹",
102973 "약간",
102974 "약국",
102975 "약속",
102976 "약수",
102977 "약점",
102978 "약품",
102979 "약혼녀",
102980 "양념",
102981 "양력",
102982 "양말",
102983 "양배추",
102984 "양주",
102985 "양파",
102986 "어둠",
102987 "어려움",
102988 "어른",
102989 "어젯밤",
102990 "어쨌든",
102991 "어쩌다가",
102992 "어쩐지",
102993 "언니",
102994 "언덕",
102995 "언론",
102996 "언어",
102997 "얼굴",
102998 "얼른",
102999 "얼음",
103000 "얼핏",
103001 "엄마",
103002 "업무",
103003 "업종",
103004 "업체",
103005 "엉덩이",
103006 "엉망",
103007 "엉터리",
103008 "엊그제",
103009 "에너지",
103010 "에어컨",
103011 "엔진",
103012 "여건",
103013 "여고생",
103014 "여관",
103015 "여군",
103016 "여권",
103017 "여대생",
103018 "여덟",
103019 "여동생",
103020 "여든",
103021 "여론",
103022 "여름",
103023 "여섯",
103024 "여성",
103025 "여왕",
103026 "여인",
103027 "여전히",
103028 "여직원",
103029 "여학생",
103030 "여행",
103031 "역사",
103032 "역시",
103033 "역할",
103034 "연결",
103035 "연구",
103036 "연극",
103037 "연기",
103038 "연락",
103039 "연설",
103040 "연세",
103041 "연속",
103042 "연습",
103043 "연애",
103044 "연예인",
103045 "연인",
103046 "연장",
103047 "연주",
103048 "연출",
103049 "연필",
103050 "연합",
103051 "연휴",
103052 "열기",
103053 "열매",
103054 "열쇠",
103055 "열심히",
103056 "열정",
103057 "열차",
103058 "열흘",
103059 "염려",
103060 "엽서",
103061 "영국",
103062 "영남",
103063 "영상",
103064 "영양",
103065 "영역",
103066 "영웅",
103067 "영원히",
103068 "영하",
103069 "영향",
103070 "영혼",
103071 "영화",
103072 "옆구리",
103073 "옆방",
103074 "옆집",
103075 "예감",
103076 "예금",
103077 "예방",
103078 "예산",
103079 "예상",
103080 "예선",
103081 "예술",
103082 "예습",
103083 "예식장",
103084 "예약",
103085 "예전",
103086 "예절",
103087 "예정",
103088 "예컨대",
103089 "옛날",
103090 "오늘",
103091 "오락",
103092 "오랫동안",
103093 "오렌지",
103094 "오로지",
103095 "오른발",
103096 "오븐",
103097 "오십",
103098 "오염",
103099 "오월",
103100 "오전",
103101 "오직",
103102 "오징어",
103103 "오페라",
103104 "오피스텔",
103105 "오히려",
103106 "옥상",
103107 "옥수수",
103108 "온갖",
103109 "온라인",
103110 "온몸",
103111 "온종일",
103112 "온통",
103113 "올가을",
103114 "올림픽",
103115 "올해",
103116 "옷차림",
103117 "와이셔츠",
103118 "와인",
103119 "완성",
103120 "완전",
103121 "왕비",
103122 "왕자",
103123 "왜냐하면",
103124 "왠지",
103125 "외갓집",
103126 "외국",
103127 "외로움",
103128 "외삼촌",
103129 "외출",
103130 "외침",
103131 "외할머니",
103132 "왼발",
103133 "왼손",
103134 "왼쪽",
103135 "요금",
103136 "요일",
103137 "요즘",
103138 "요청",
103139 "용기",
103140 "용서",
103141 "용어",
103142 "우산",
103143 "우선",
103144 "우승",
103145 "우연히",
103146 "우정",
103147 "우체국",
103148 "우편",
103149 "운동",
103150 "운명",
103151 "운반",
103152 "운전",
103153 "운행",
103154 "울산",
103155 "울음",
103156 "움직임",
103157 "웃어른",
103158 "웃음",
103159 "워낙",
103160 "원고",
103161 "원래",
103162 "원서",
103163 "원숭이",
103164 "원인",
103165 "원장",
103166 "원피스",
103167 "월급",
103168 "월드컵",
103169 "월세",
103170 "월요일",
103171 "웨이터",
103172 "위반",
103173 "위법",
103174 "위성",
103175 "위원",
103176 "위험",
103177 "위협",
103178 "윗사람",
103179 "유난히",
103180 "유럽",
103181 "유명",
103182 "유물",
103183 "유산",
103184 "유적",
103185 "유치원",
103186 "유학",
103187 "유행",
103188 "유형",
103189 "육군",
103190 "육상",
103191 "육십",
103192 "육체",
103193 "은행",
103194 "음력",
103195 "음료",
103196 "음반",
103197 "음성",
103198 "음식",
103199 "음악",
103200 "음주",
103201 "의견",
103202 "의논",
103203 "의문",
103204 "의복",
103205 "의식",
103206 "의심",
103207 "의외로",
103208 "의욕",
103209 "의원",
103210 "의학",
103211 "이것",
103212 "이곳",
103213 "이념",
103214 "이놈",
103215 "이달",
103216 "이대로",
103217 "이동",
103218 "이렇게",
103219 "이력서",
103220 "이론적",
103221 "이름",
103222 "이민",
103223 "이발소",
103224 "이별",
103225 "이불",
103226 "이빨",
103227 "이상",
103228 "이성",
103229 "이슬",
103230 "이야기",
103231 "이용",
103232 "이웃",
103233 "이월",
103234 "이윽고",
103235 "이익",
103236 "이전",
103237 "이중",
103238 "이튿날",
103239 "이틀",
103240 "이혼",
103241 "인간",
103242 "인격",
103243 "인공",
103244 "인구",
103245 "인근",
103246 "인기",
103247 "인도",
103248 "인류",
103249 "인물",
103250 "인생",
103251 "인쇄",
103252 "인연",
103253 "인원",
103254 "인재",
103255 "인종",
103256 "인천",
103257 "인체",
103258 "인터넷",
103259 "인하",
103260 "인형",
103261 "일곱",
103262 "일기",
103263 "일단",
103264 "일대",
103265 "일등",
103266 "일반",
103267 "일본",
103268 "일부",
103269 "일상",
103270 "일생",
103271 "일손",
103272 "일요일",
103273 "일월",
103274 "일정",
103275 "일종",
103276 "일주일",
103277 "일찍",
103278 "일체",
103279 "일치",
103280 "일행",
103281 "일회용",
103282 "임금",
103283 "임무",
103284 "입대",
103285 "입력",
103286 "입맛",
103287 "입사",
103288 "입술",
103289 "입시",
103290 "입원",
103291 "입장",
103292 "입학",
103293 "자가용",
103294 "자격",
103295 "자극",
103296 "자동",
103297 "자랑",
103298 "자부심",
103299 "자식",
103300 "자신",
103301 "자연",
103302 "자원",
103303 "자율",
103304 "자전거",
103305 "자정",
103306 "자존심",
103307 "자판",
103308 "작가",
103309 "작년",
103310 "작성",
103311 "작업",
103312 "작용",
103313 "작은딸",
103314 "작품",
103315 "잔디",
103316 "잔뜩",
103317 "잔치",
103318 "잘못",
103319 "잠깐",
103320 "잠수함",
103321 "잠시",
103322 "잠옷",
103323 "잠자리",
103324 "잡지",
103325 "장관",
103326 "장군",
103327 "장기간",
103328 "장래",
103329 "장례",
103330 "장르",
103331 "장마",
103332 "장면",
103333 "장모",
103334 "장미",
103335 "장비",
103336 "장사",
103337 "장소",
103338 "장식",
103339 "장애인",
103340 "장인",
103341 "장점",
103342 "장차",
103343 "장학금",
103344 "재능",
103345 "재빨리",
103346 "재산",
103347 "재생",
103348 "재작년",
103349 "재정",
103350 "재채기",
103351 "재판",
103352 "재학",
103353 "재활용",
103354 "저것",
103355 "저고리",
103356 "저곳",
103357 "저녁",
103358 "저런",
103359 "저렇게",
103360 "저번",
103361 "저울",
103362 "저절로",
103363 "저축",
103364 "적극",
103365 "적당히",
103366 "적성",
103367 "적용",
103368 "적응",
103369 "전개",
103370 "전공",
103371 "전기",
103372 "전달",
103373 "전라도",
103374 "전망",
103375 "전문",
103376 "전반",
103377 "전부",
103378 "전세",
103379 "전시",
103380 "전용",
103381 "전자",
103382 "전쟁",
103383 "전주",
103384 "전철",
103385 "전체",
103386 "전통",
103387 "전혀",
103388 "전후",
103389 "절대",
103390 "절망",
103391 "절반",
103392 "절약",
103393 "절차",
103394 "점검",
103395 "점수",
103396 "점심",
103397 "점원",
103398 "점점",
103399 "점차",
103400 "접근",
103401 "접시",
103402 "접촉",
103403 "젓가락",
103404 "정거장",
103405 "정도",
103406 "정류장",
103407 "정리",
103408 "정말",
103409 "정면",
103410 "정문",
103411 "정반대",
103412 "정보",
103413 "정부",
103414 "정비",
103415 "정상",
103416 "정성",
103417 "정오",
103418 "정원",
103419 "정장",
103420 "정지",
103421 "정치",
103422 "정확히",
103423 "제공",
103424 "제과점",
103425 "제대로",
103426 "제목",
103427 "제발",
103428 "제법",
103429 "제삿날",
103430 "제안",
103431 "제일",
103432 "제작",
103433 "제주도",
103434 "제출",
103435 "제품",
103436 "제한",
103437 "조각",
103438 "조건",
103439 "조금",
103440 "조깅",
103441 "조명",
103442 "조미료",
103443 "조상",
103444 "조선",
103445 "조용히",
103446 "조절",
103447 "조정",
103448 "조직",
103449 "존댓말",
103450 "존재",
103451 "졸업",
103452 "졸음",
103453 "종교",
103454 "종로",
103455 "종류",
103456 "종소리",
103457 "종업원",
103458 "종종",
103459 "종합",
103460 "좌석",
103461 "죄인",
103462 "주관적",
103463 "주름",
103464 "주말",
103465 "주머니",
103466 "주먹",
103467 "주문",
103468 "주민",
103469 "주방",
103470 "주변",
103471 "주식",
103472 "주인",
103473 "주일",
103474 "주장",
103475 "주전자",
103476 "주택",
103477 "준비",
103478 "줄거리",
103479 "줄기",
103480 "줄무늬",
103481 "중간",
103482 "중계방송",
103483 "중국",
103484 "중년",
103485 "중단",
103486 "중독",
103487 "중반",
103488 "중부",
103489 "중세",
103490 "중소기업",
103491 "중순",
103492 "중앙",
103493 "중요",
103494 "중학교",
103495 "즉석",
103496 "즉시",
103497 "즐거움",
103498 "증가",
103499 "증거",
103500 "증권",
103501 "증상",
103502 "증세",
103503 "지각",
103504 "지갑",
103505 "지경",
103506 "지극히",
103507 "지금",
103508 "지급",
103509 "지능",
103510 "지름길",
103511 "지리산",
103512 "지방",
103513 "지붕",
103514 "지식",
103515 "지역",
103516 "지우개",
103517 "지원",
103518 "지적",
103519 "지점",
103520 "지진",
103521 "지출",
103522 "직선",
103523 "직업",
103524 "직원",
103525 "직장",
103526 "진급",
103527 "진동",
103528 "진로",
103529 "진료",
103530 "진리",
103531 "진짜",
103532 "진찰",
103533 "진출",
103534 "진통",
103535 "진행",
103536 "질문",
103537 "질병",
103538 "질서",
103539 "짐작",
103540 "집단",
103541 "집안",
103542 "집중",
103543 "짜증",
103544 "찌꺼기",
103545 "차남",
103546 "차라리",
103547 "차량",
103548 "차림",
103549 "차별",
103550 "차선",
103551 "차츰",
103552 "착각",
103553 "찬물",
103554 "찬성",
103555 "참가",
103556 "참기름",
103557 "참새",
103558 "참석",
103559 "참여",
103560 "참외",
103561 "참조",
103562 "찻잔",
103563 "창가",
103564 "창고",
103565 "창구",
103566 "창문",
103567 "창밖",
103568 "창작",
103569 "창조",
103570 "채널",
103571 "채점",
103572 "책가방",
103573 "책방",
103574 "책상",
103575 "책임",
103576 "챔피언",
103577 "처벌",
103578 "처음",
103579 "천국",
103580 "천둥",
103581 "천장",
103582 "천재",
103583 "천천히",
103584 "철도",
103585 "철저히",
103586 "철학",
103587 "첫날",
103588 "첫째",
103589 "청년",
103590 "청바지",
103591 "청소",
103592 "청춘",
103593 "체계",
103594 "체력",
103595 "체온",
103596 "체육",
103597 "체중",
103598 "체험",
103599 "초등학생",
103600 "초반",
103601 "초밥",
103602 "초상화",
103603 "초순",
103604 "초여름",
103605 "초원",
103606 "초저녁",
103607 "초점",
103608 "초청",
103609 "초콜릿",
103610 "촛불",
103611 "총각",
103612 "총리",
103613 "총장",
103614 "촬영",
103615 "최근",
103616 "최상",
103617 "최선",
103618 "최신",
103619 "최악",
103620 "최종",
103621 "추석",
103622 "추억",
103623 "추진",
103624 "추천",
103625 "추측",
103626 "축구",
103627 "축소",
103628 "축제",
103629 "축하",
103630 "출근",
103631 "출발",
103632 "출산",
103633 "출신",
103634 "출연",
103635 "출입",
103636 "출장",
103637 "출판",
103638 "충격",
103639 "충고",
103640 "충돌",
103641 "충분히",
103642 "충청도",
103643 "취업",
103644 "취직",
103645 "취향",
103646 "치약",
103647 "친구",
103648 "친척",
103649 "칠십",
103650 "칠월",
103651 "칠판",
103652 "침대",
103653 "침묵",
103654 "침실",
103655 "칫솔",
103656 "칭찬",
103657 "카메라",
103658 "카운터",
103659 "칼국수",
103660 "캐릭터",
103661 "캠퍼스",
103662 "캠페인",
103663 "커튼",
103664 "컨디션",
103665 "컬러",
103666 "컴퓨터",
103667 "코끼리",
103668 "코미디",
103669 "콘서트",
103670 "콜라",
103671 "콤플렉스",
103672 "콩나물",
103673 "쾌감",
103674 "쿠데타",
103675 "크림",
103676 "큰길",
103677 "큰딸",
103678 "큰소리",
103679 "큰아들",
103680 "큰어머니",
103681 "큰일",
103682 "큰절",
103683 "클래식",
103684 "클럽",
103685 "킬로",
103686 "타입",
103687 "타자기",
103688 "탁구",
103689 "탁자",
103690 "탄생",
103691 "태권도",
103692 "태양",
103693 "태풍",
103694 "택시",
103695 "탤런트",
103696 "터널",
103697 "터미널",
103698 "테니스",
103699 "테스트",
103700 "테이블",
103701 "텔레비전",
103702 "토론",
103703 "토마토",
103704 "토요일",
103705 "통계",
103706 "통과",
103707 "통로",
103708 "통신",
103709 "통역",
103710 "통일",
103711 "통장",
103712 "통제",
103713 "통증",
103714 "통합",
103715 "통화",
103716 "퇴근",
103717 "퇴원",
103718 "퇴직금",
103719 "튀김",
103720 "트럭",
103721 "특급",
103722 "특별",
103723 "특성",
103724 "특수",
103725 "특징",
103726 "특히",
103727 "튼튼히",
103728 "티셔츠",
103729 "파란색",
103730 "파일",
103731 "파출소",
103732 "판결",
103733 "판단",
103734 "판매",
103735 "판사",
103736 "팔십",
103737 "팔월",
103738 "팝송",
103739 "패션",
103740 "팩스",
103741 "팩시밀리",
103742 "팬티",
103743 "퍼센트",
103744 "페인트",
103745 "편견",
103746 "편의",
103747 "편지",
103748 "편히",
103749 "평가",
103750 "평균",
103751 "평생",
103752 "평소",
103753 "평양",
103754 "평일",
103755 "평화",
103756 "포스터",
103757 "포인트",
103758 "포장",
103759 "포함",
103760 "표면",
103761 "표정",
103762 "표준",
103763 "표현",
103764 "품목",
103765 "품질",
103766 "풍경",
103767 "풍속",
103768 "풍습",
103769 "프랑스",
103770 "프린터",
103771 "플라스틱",
103772 "피곤",
103773 "피망",
103774 "피아노",
103775 "필름",
103776 "필수",
103777 "필요",
103778 "필자",
103779 "필통",
103780 "핑계",
103781 "하느님",
103782 "하늘",
103783 "하드웨어",
103784 "하룻밤",
103785 "하반기",
103786 "하숙집",
103787 "하순",
103788 "하여튼",
103789 "하지만",
103790 "하천",
103791 "하품",
103792 "하필",
103793 "학과",
103794 "학교",
103795 "학급",
103796 "학기",
103797 "학년",
103798 "학력",
103799 "학번",
103800 "학부모",
103801 "학비",
103802 "학생",
103803 "학술",
103804 "학습",
103805 "학용품",
103806 "학원",
103807 "학위",
103808 "학자",
103809 "학점",
103810 "한계",
103811 "한글",
103812 "한꺼번에",
103813 "한낮",
103814 "한눈",
103815 "한동안",
103816 "한때",
103817 "한라산",
103818 "한마디",
103819 "한문",
103820 "한번",
103821 "한복",
103822 "한식",
103823 "한여름",
103824 "한쪽",
103825 "할머니",
103826 "할아버지",
103827 "할인",
103828 "함께",
103829 "함부로",
103830 "합격",
103831 "합리적",
103832 "항공",
103833 "항구",
103834 "항상",
103835 "항의",
103836 "해결",
103837 "해군",
103838 "해답",
103839 "해당",
103840 "해물",
103841 "해석",
103842 "해설",
103843 "해수욕장",
103844 "해안",
103845 "핵심",
103846 "핸드백",
103847 "햄버거",
103848 "햇볕",
103849 "햇살",
103850 "행동",
103851 "행복",
103852 "행사",
103853 "행운",
103854 "행위",
103855 "향기",
103856 "향상",
103857 "향수",
103858 "허락",
103859 "허용",
103860 "헬기",
103861 "현관",
103862 "현금",
103863 "현대",
103864 "현상",
103865 "현실",
103866 "현장",
103867 "현재",
103868 "현지",
103869 "혈액",
103870 "협력",
103871 "형부",
103872 "형사",
103873 "형수",
103874 "형식",
103875 "형제",
103876 "형태",
103877 "형편",
103878 "혜택",
103879 "호기심",
103880 "호남",
103881 "호랑이",
103882 "호박",
103883 "호텔",
103884 "호흡",
103885 "혹시",
103886 "홀로",
103887 "홈페이지",
103888 "홍보",
103889 "홍수",
103890 "홍차",
103891 "화면",
103892 "화분",
103893 "화살",
103894 "화요일",
103895 "화장",
103896 "화학",
103897 "확보",
103898 "확인",
103899 "확장",
103900 "확정",
103901 "환갑",
103902 "환경",
103903 "환영",
103904 "환율",
103905 "환자",
103906 "활기",
103907 "활동",
103908 "활발히",
103909 "활용",
103910 "활짝",
103911 "회견",
103912 "회관",
103913 "회복",
103914 "회색",
103915 "회원",
103916 "회장",
103917 "회전",
103918 "횟수",
103919 "횡단보도",
103920 "효율적",
103921 "후반",
103922 "후춧가루",
103923 "훈련",
103924 "훨씬",
103925 "휴식",
103926 "휴일",
103927 "흉내",
103928 "흐름",
103929 "흑백",
103930 "흑인",
103931 "흔적",
103932 "흔히",
103933 "흥미",
103934 "흥분",
103935 "희곡",
103936 "희망",
103937 "희생",
103938 "흰색",
103939 "힘껏"
103940 ]
103941 </script>
103942 <script>/*
103943 * Copyright (c) 2013 Pavol Rusnak
103944 *
103945 * Permission is hereby granted, free of charge, to any person obtaining a copy of
103946 * this software and associated documentation files (the "Software"), to deal in
103947 * the Software without restriction, including without limitation the rights to
103948 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
103949 * of the Software, and to permit persons to whom the Software is furnished to do
103950 * so, subject to the following conditions:
103951 *
103952 * The above copyright notice and this permission notice shall be included in all
103953 * copies or substantial portions of the Software.
103954 *
103955 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
103956 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
103957 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
103958 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
103959 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
103960 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
103961 */
103962
103963 /*
103964 * Javascript port from python by Ian Coleman
103965 *
103966 * Requires code from sjcl
103967 * https://github.com/bitwiseshiftleft/sjcl
103968 */
103969
103970 var Mnemonic = function(language) {
103971
103972 var PBKDF2_ROUNDS = 2048;
103973 var RADIX = 2048;
103974
103975 var self = this;
103976 var wordlist = [];
103977
103978 var hmacSHA512 = function(key) {
103979 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
103980 this.encrypt = function() {
103981 return hasher.encrypt.apply(hasher, arguments);
103982 };
103983 };
103984
103985 function init() {
103986 wordlist = WORDLISTS[language];
103987 if (wordlist.length != RADIX) {
103988 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
103989 throw err;
103990 }
103991 }
103992
103993 self.generate = function(strength) {
103994 strength = strength || 128;
103995 var r = strength % 32;
103996 if (r > 0) {
103997 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
103998 }
103999 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
104000 if (!hasStrongCrypto) {
104001 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
104002 }
104003 var buffer = new Uint8Array(strength / 8);
104004 var data = crypto.getRandomValues(buffer);
104005 return self.toMnemonic(data);
104006 }
104007
104008 self.toMnemonic = function(byteArray) {
104009 if (byteArray.length % 4 > 0) {
104010 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
104011 }
104012
104013 //h = hashlib.sha256(data).hexdigest()
104014 var data = byteArrayToWordArray(byteArray);
104015 var hash = sjcl.hash.sha256.hash(data);
104016 var h = sjcl.codec.hex.fromBits(hash);
104017
104018 // b is a binary string, eg '00111010101100...'
104019 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
104020 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
104021 //
104022 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
104023 // c = bin(int(h, 16))[2:].zfill(256)
104024 // d = c[:len(data) * 8 / 32]
104025 var a = byteArrayToBinaryString(byteArray);
104026 var c = zfill(hexStringToBinaryString(h), 256);
104027 var d = c.substring(0, byteArray.length * 8 / 32);
104028 // b = line1 + line2
104029 var b = a + d;
104030
104031 var result = [];
104032 var blen = b.length / 11;
104033 for (var i=0; i<blen; i++) {
104034 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
104035 result.push(wordlist[idx]);
104036 }
104037 return self.joinWords(result);
104038 }
104039
104040 self.check = function(mnemonic) {
104041 var mnemonic = self.splitWords(mnemonic);
104042 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
104043 return false
104044 }
104045 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
104046 var idx = [];
104047 for (var i=0; i<mnemonic.length; i++) {
104048 var word = mnemonic[i];
104049 var wordIndex = wordlist.indexOf(word);
104050 if (wordIndex == -1) {
104051 return false;
104052 }
104053 var binaryIndex = zfill(wordIndex.toString(2), 11);
104054 idx.push(binaryIndex);
104055 }
104056 var b = idx.join('');
104057 var l = b.length;
104058 //d = b[:l / 33 * 32]
104059 //h = b[-l / 33:]
104060 var d = b.substring(0, l / 33 * 32);
104061 var h = b.substring(l - l / 33, l);
104062 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
104063 var nd = binaryStringToWordArray(d);
104064 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
104065 var ndHash = sjcl.hash.sha256.hash(nd);
104066 var ndHex = sjcl.codec.hex.fromBits(ndHash);
104067 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
104068 var nh = ndBstr.substring(0,l/33);
104069 return h == nh;
104070 }
104071
104072 self.toSeed = function(mnemonic, passphrase) {
104073 passphrase = passphrase || '';
104074 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
104075 var mnemonicNormalized = self.normalizeString(mnemonic);
104076 passphrase = self.normalizeString(passphrase)
104077 passphrase = "mnemonic" + passphrase;
104078 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
104079 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
104080 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
104081 var hashHex = sjcl.codec.hex.fromBits(result);
104082 return hashHex;
104083 }
104084
104085 self.splitWords = function(mnemonic) {
104086 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
104087 }
104088
104089 self.joinWords = function(words) {
104090 // Set space correctly depending on the language
104091 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
104092 var space = " ";
104093 if (language == "japanese") {
104094 space = "\u3000"; // ideographic space
104095 }
104096 return words.join(space);
104097 }
104098
104099 self.normalizeString = function(str) {
104100 return str.normalize("NFKD");
104101 }
104102
104103 function byteArrayToWordArray(data) {
104104 var a = [];
104105 for (var i=0; i<data.length/4; i++) {
104106 v = 0;
104107 v += data[i*4 + 0] << 8 * 3;
104108 v += data[i*4 + 1] << 8 * 2;
104109 v += data[i*4 + 2] << 8 * 1;
104110 v += data[i*4 + 3] << 8 * 0;
104111 a.push(v);
104112 }
104113 return a;
104114 }
104115
104116 function byteArrayToBinaryString(data) {
104117 var bin = "";
104118 for (var i=0; i<data.length; i++) {
104119 bin += zfill(data[i].toString(2), 8);
104120 }
104121 return bin;
104122 }
104123
104124 function hexStringToBinaryString(hexString) {
104125 binaryString = "";
104126 for (var i=0; i<hexString.length; i++) {
104127 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
104128 }
104129 return binaryString;
104130 }
104131
104132 function binaryStringToWordArray(binary) {
104133 var aLen = binary.length / 32;
104134 var a = [];
104135 for (var i=0; i<aLen; i++) {
104136 var valueStr = binary.substring(0,32);
104137 var value = parseInt(valueStr, 2);
104138 a.push(value);
104139 binary = binary.slice(32);
104140 }
104141 return a;
104142 }
104143
104144 // Pad a numeric string on the left with zero digits until the given width
104145 // is reached.
104146 // Note this differs to the python implementation because it does not
104147 // handle numbers starting with a sign.
104148 function zfill(source, length) {
104149 source = source.toString();
104150 while (source.length < length) {
104151 source = '0' + source;
104152 }
104153 return source;
104154 }
104155
104156 init();
104157
104158 }
104159 </script>
104160 <script>/*
104161 JavaScript BigInteger library version 0.9.1
104162 http://silentmatt.com/biginteger/
104163
104164 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
104165 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
104166 Licensed under the MIT license.
104167
104168 Support for arbitrary internal representation base was added by
104169 Vitaly Magerya.
104170 */
104171
104172 /*
104173 File: biginteger.js
104174
104175 Exports:
104176
104177 <BigInteger>
104178 */
104179 (function(exports) {
104180 "use strict";
104181 /*
104182 Class: BigInteger
104183 An arbitrarily-large integer.
104184
104185 <BigInteger> objects should be considered immutable. None of the "built-in"
104186 methods modify *this* or their arguments. All properties should be
104187 considered private.
104188
104189 All the methods of <BigInteger> instances can be called "statically". The
104190 static versions are convenient if you don't already have a <BigInteger>
104191 object.
104192
104193 As an example, these calls are equivalent.
104194
104195 > BigInteger(4).multiply(5); // returns BigInteger(20);
104196 > BigInteger.multiply(4, 5); // returns BigInteger(20);
104197
104198 > var a = 42;
104199 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
104200 */
104201
104202 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
104203
104204 /*
104205 Constructor: BigInteger()
104206 Convert a value to a <BigInteger>.
104207
104208 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
104209 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
104210 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
104211 without a radix argument.
104212
104213 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
104214 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
104215 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
104216 > var n3 = BigInteger(n2); // Return n2, unchanged
104217
104218 The constructor form only takes an array and a sign. *n* must be an
104219 array of numbers in little-endian order, where each digit is between 0
104220 and BigInteger.base. The second parameter sets the sign: -1 for
104221 negative, +1 for positive, or 0 for zero. The array is *not copied and
104222 may be modified*. If the array contains only zeros, the sign parameter
104223 is ignored and is forced to zero.
104224
104225 > new BigInteger([5], -1): create a new BigInteger with value -5
104226
104227 Parameters:
104228
104229 n - Value to convert to a <BigInteger>.
104230
104231 Returns:
104232
104233 A <BigInteger> value.
104234
104235 See Also:
104236
104237 <parse>, <BigInteger>
104238 */
104239 function BigInteger(n, s, token) {
104240 if (token !== CONSTRUCT) {
104241 if (n instanceof BigInteger) {
104242 return n;
104243 }
104244 else if (typeof n === "undefined") {
104245 return ZERO;
104246 }
104247 return BigInteger.parse(n);
104248 }
104249
104250 n = n || []; // Provide the nullary constructor for subclasses.
104251 while (n.length && !n[n.length - 1]) {
104252 --n.length;
104253 }
104254 this._d = n;
104255 this._s = n.length ? (s || 1) : 0;
104256 }
104257
104258 BigInteger._construct = function(n, s) {
104259 return new BigInteger(n, s, CONSTRUCT);
104260 };
104261
104262 // Base-10 speedup hacks in parse, toString, exp10 and log functions
104263 // require base to be a power of 10. 10^7 is the largest such power
104264 // that won't cause a precision loss when digits are multiplied.
104265 var BigInteger_base = 10000000;
104266 var BigInteger_base_log10 = 7;
104267
104268 BigInteger.base = BigInteger_base;
104269 BigInteger.base_log10 = BigInteger_base_log10;
104270
104271 var ZERO = new BigInteger([], 0, CONSTRUCT);
104272 // Constant: ZERO
104273 // <BigInteger> 0.
104274 BigInteger.ZERO = ZERO;
104275
104276 var ONE = new BigInteger([1], 1, CONSTRUCT);
104277 // Constant: ONE
104278 // <BigInteger> 1.
104279 BigInteger.ONE = ONE;
104280
104281 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
104282 // Constant: M_ONE
104283 // <BigInteger> -1.
104284 BigInteger.M_ONE = M_ONE;
104285
104286 // Constant: _0
104287 // Shortcut for <ZERO>.
104288 BigInteger._0 = ZERO;
104289
104290 // Constant: _1
104291 // Shortcut for <ONE>.
104292 BigInteger._1 = ONE;
104293
104294 /*
104295 Constant: small
104296 Array of <BigIntegers> from 0 to 36.
104297
104298 These are used internally for parsing, but useful when you need a "small"
104299 <BigInteger>.
104300
104301 See Also:
104302
104303 <ZERO>, <ONE>, <_0>, <_1>
104304 */
104305 BigInteger.small = [
104306 ZERO,
104307 ONE,
104308 /* Assuming BigInteger_base > 36 */
104309 new BigInteger( [2], 1, CONSTRUCT),
104310 new BigInteger( [3], 1, CONSTRUCT),
104311 new BigInteger( [4], 1, CONSTRUCT),
104312 new BigInteger( [5], 1, CONSTRUCT),
104313 new BigInteger( [6], 1, CONSTRUCT),
104314 new BigInteger( [7], 1, CONSTRUCT),
104315 new BigInteger( [8], 1, CONSTRUCT),
104316 new BigInteger( [9], 1, CONSTRUCT),
104317 new BigInteger([10], 1, CONSTRUCT),
104318 new BigInteger([11], 1, CONSTRUCT),
104319 new BigInteger([12], 1, CONSTRUCT),
104320 new BigInteger([13], 1, CONSTRUCT),
104321 new BigInteger([14], 1, CONSTRUCT),
104322 new BigInteger([15], 1, CONSTRUCT),
104323 new BigInteger([16], 1, CONSTRUCT),
104324 new BigInteger([17], 1, CONSTRUCT),
104325 new BigInteger([18], 1, CONSTRUCT),
104326 new BigInteger([19], 1, CONSTRUCT),
104327 new BigInteger([20], 1, CONSTRUCT),
104328 new BigInteger([21], 1, CONSTRUCT),
104329 new BigInteger([22], 1, CONSTRUCT),
104330 new BigInteger([23], 1, CONSTRUCT),
104331 new BigInteger([24], 1, CONSTRUCT),
104332 new BigInteger([25], 1, CONSTRUCT),
104333 new BigInteger([26], 1, CONSTRUCT),
104334 new BigInteger([27], 1, CONSTRUCT),
104335 new BigInteger([28], 1, CONSTRUCT),
104336 new BigInteger([29], 1, CONSTRUCT),
104337 new BigInteger([30], 1, CONSTRUCT),
104338 new BigInteger([31], 1, CONSTRUCT),
104339 new BigInteger([32], 1, CONSTRUCT),
104340 new BigInteger([33], 1, CONSTRUCT),
104341 new BigInteger([34], 1, CONSTRUCT),
104342 new BigInteger([35], 1, CONSTRUCT),
104343 new BigInteger([36], 1, CONSTRUCT)
104344 ];
104345
104346 // Used for parsing/radix conversion
104347 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
104348
104349 /*
104350 Method: toString
104351 Convert a <BigInteger> to a string.
104352
104353 When *base* is greater than 10, letters are upper case.
104354
104355 Parameters:
104356
104357 base - Optional base to represent the number in (default is base 10).
104358 Must be between 2 and 36 inclusive, or an Error will be thrown.
104359
104360 Returns:
104361
104362 The string representation of the <BigInteger>.
104363 */
104364 BigInteger.prototype.toString = function(base) {
104365 base = +base || 10;
104366 if (base < 2 || base > 36) {
104367 throw new Error("illegal radix " + base + ".");
104368 }
104369 if (this._s === 0) {
104370 return "0";
104371 }
104372 if (base === 10) {
104373 var str = this._s < 0 ? "-" : "";
104374 str += this._d[this._d.length - 1].toString();
104375 for (var i = this._d.length - 2; i >= 0; i--) {
104376 var group = this._d[i].toString();
104377 while (group.length < BigInteger_base_log10) group = '0' + group;
104378 str += group;
104379 }
104380 return str;
104381 }
104382 else {
104383 var numerals = BigInteger.digits;
104384 base = BigInteger.small[base];
104385 var sign = this._s;
104386
104387 var n = this.abs();
104388 var digits = [];
104389 var digit;
104390
104391 while (n._s !== 0) {
104392 var divmod = n.divRem(base);
104393 n = divmod[0];
104394 digit = divmod[1];
104395 // TODO: This could be changed to unshift instead of reversing at the end.
104396 // Benchmark both to compare speeds.
104397 digits.push(numerals[digit.valueOf()]);
104398 }
104399 return (sign < 0 ? "-" : "") + digits.reverse().join("");
104400 }
104401 };
104402
104403 // Verify strings for parsing
104404 BigInteger.radixRegex = [
104405 /^$/,
104406 /^$/,
104407 /^[01]*$/,
104408 /^[012]*$/,
104409 /^[0-3]*$/,
104410 /^[0-4]*$/,
104411 /^[0-5]*$/,
104412 /^[0-6]*$/,
104413 /^[0-7]*$/,
104414 /^[0-8]*$/,
104415 /^[0-9]*$/,
104416 /^[0-9aA]*$/,
104417 /^[0-9abAB]*$/,
104418 /^[0-9abcABC]*$/,
104419 /^[0-9a-dA-D]*$/,
104420 /^[0-9a-eA-E]*$/,
104421 /^[0-9a-fA-F]*$/,
104422 /^[0-9a-gA-G]*$/,
104423 /^[0-9a-hA-H]*$/,
104424 /^[0-9a-iA-I]*$/,
104425 /^[0-9a-jA-J]*$/,
104426 /^[0-9a-kA-K]*$/,
104427 /^[0-9a-lA-L]*$/,
104428 /^[0-9a-mA-M]*$/,
104429 /^[0-9a-nA-N]*$/,
104430 /^[0-9a-oA-O]*$/,
104431 /^[0-9a-pA-P]*$/,
104432 /^[0-9a-qA-Q]*$/,
104433 /^[0-9a-rA-R]*$/,
104434 /^[0-9a-sA-S]*$/,
104435 /^[0-9a-tA-T]*$/,
104436 /^[0-9a-uA-U]*$/,
104437 /^[0-9a-vA-V]*$/,
104438 /^[0-9a-wA-W]*$/,
104439 /^[0-9a-xA-X]*$/,
104440 /^[0-9a-yA-Y]*$/,
104441 /^[0-9a-zA-Z]*$/
104442 ];
104443
104444 /*
104445 Function: parse
104446 Parse a string into a <BigInteger>.
104447
104448 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
104449 *base* is not provided, it will be guessed based on the leading characters
104450 of *s* as follows:
104451
104452 - "0x" or "0X": *base* = 16
104453 - "0c" or "0C": *base* = 8
104454 - "0b" or "0B": *base* = 2
104455 - else: *base* = 10
104456
104457 If no base is provided, or *base* is 10, the number can be in exponential
104458 form. For example, these are all valid:
104459
104460 > BigInteger.parse("1e9"); // Same as "1000000000"
104461 > BigInteger.parse("1.234*10^3"); // Same as 1234
104462 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
104463
104464 If any characters fall outside the range defined by the radix, an exception
104465 will be thrown.
104466
104467 Parameters:
104468
104469 s - The string to parse.
104470 base - Optional radix (default is to guess based on *s*).
104471
104472 Returns:
104473
104474 a <BigInteger> instance.
104475 */
104476 BigInteger.parse = function(s, base) {
104477 // Expands a number in exponential form to decimal form.
104478 // expandExponential("-13.441*10^5") === "1344100";
104479 // expandExponential("1.12300e-1") === "0.112300";
104480 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
104481 function expandExponential(str) {
104482 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
104483
104484 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
104485 c = +c;
104486 var l = c < 0;
104487 var i = n.length + c;
104488 x = (l ? n : f).length;
104489 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
104490 var z = (new Array(c + 1)).join("0");
104491 var r = n + f;
104492 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
104493 });
104494 }
104495
104496 s = s.toString();
104497 if (typeof base === "undefined" || +base === 10) {
104498 s = expandExponential(s);
104499 }
104500
104501 var prefixRE;
104502 if (typeof base === "undefined") {
104503 prefixRE = '0[xcb]';
104504 }
104505 else if (base == 16) {
104506 prefixRE = '0x';
104507 }
104508 else if (base == 8) {
104509 prefixRE = '0c';
104510 }
104511 else if (base == 2) {
104512 prefixRE = '0b';
104513 }
104514 else {
104515 prefixRE = '';
104516 }
104517 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
104518 if (parts) {
104519 var sign = parts[1] || "+";
104520 var baseSection = parts[2] || "";
104521 var digits = parts[3] || "";
104522
104523 if (typeof base === "undefined") {
104524 // Guess base
104525 if (baseSection === "0x" || baseSection === "0X") { // Hex
104526 base = 16;
104527 }
104528 else if (baseSection === "0c" || baseSection === "0C") { // Octal
104529 base = 8;
104530 }
104531 else if (baseSection === "0b" || baseSection === "0B") { // Binary
104532 base = 2;
104533 }
104534 else {
104535 base = 10;
104536 }
104537 }
104538 else if (base < 2 || base > 36) {
104539 throw new Error("Illegal radix " + base + ".");
104540 }
104541
104542 base = +base;
104543
104544 // Check for digits outside the range
104545 if (!(BigInteger.radixRegex[base].test(digits))) {
104546 throw new Error("Bad digit for radix " + base);
104547 }
104548
104549 // Strip leading zeros, and convert to array
104550 digits = digits.replace(/^0+/, "").split("");
104551 if (digits.length === 0) {
104552 return ZERO;
104553 }
104554
104555 // Get the sign (we know it's not zero)
104556 sign = (sign === "-") ? -1 : 1;
104557
104558 // Optimize 10
104559 if (base == 10) {
104560 var d = [];
104561 while (digits.length >= BigInteger_base_log10) {
104562 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
104563 }
104564 d.push(parseInt(digits.join(''), 10));
104565 return new BigInteger(d, sign, CONSTRUCT);
104566 }
104567
104568 // Do the conversion
104569 var d = ZERO;
104570 base = BigInteger.small[base];
104571 var small = BigInteger.small;
104572 for (var i = 0; i < digits.length; i++) {
104573 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
104574 }
104575 return new BigInteger(d._d, sign, CONSTRUCT);
104576 }
104577 else {
104578 throw new Error("Invalid BigInteger format: " + s);
104579 }
104580 };
104581
104582 /*
104583 Function: add
104584 Add two <BigIntegers>.
104585
104586 Parameters:
104587
104588 n - The number to add to *this*. Will be converted to a <BigInteger>.
104589
104590 Returns:
104591
104592 The numbers added together.
104593
104594 See Also:
104595
104596 <subtract>, <multiply>, <quotient>, <next>
104597 */
104598 BigInteger.prototype.add = function(n) {
104599 if (this._s === 0) {
104600 return BigInteger(n);
104601 }
104602
104603 n = BigInteger(n);
104604 if (n._s === 0) {
104605 return this;
104606 }
104607 if (this._s !== n._s) {
104608 n = n.negate();
104609 return this.subtract(n);
104610 }
104611
104612 var a = this._d;
104613 var b = n._d;
104614 var al = a.length;
104615 var bl = b.length;
104616 var sum = new Array(Math.max(al, bl) + 1);
104617 var size = Math.min(al, bl);
104618 var carry = 0;
104619 var digit;
104620
104621 for (var i = 0; i < size; i++) {
104622 digit = a[i] + b[i] + carry;
104623 sum[i] = digit % BigInteger_base;
104624 carry = (digit / BigInteger_base) | 0;
104625 }
104626 if (bl > al) {
104627 a = b;
104628 al = bl;
104629 }
104630 for (i = size; carry && i < al; i++) {
104631 digit = a[i] + carry;
104632 sum[i] = digit % BigInteger_base;
104633 carry = (digit / BigInteger_base) | 0;
104634 }
104635 if (carry) {
104636 sum[i] = carry;
104637 }
104638
104639 for ( ; i < al; i++) {
104640 sum[i] = a[i];
104641 }
104642
104643 return new BigInteger(sum, this._s, CONSTRUCT);
104644 };
104645
104646 /*
104647 Function: negate
104648 Get the additive inverse of a <BigInteger>.
104649
104650 Returns:
104651
104652 A <BigInteger> with the same magnatude, but with the opposite sign.
104653
104654 See Also:
104655
104656 <abs>
104657 */
104658 BigInteger.prototype.negate = function() {
104659 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
104660 };
104661
104662 /*
104663 Function: abs
104664 Get the absolute value of a <BigInteger>.
104665
104666 Returns:
104667
104668 A <BigInteger> with the same magnatude, but always positive (or zero).
104669
104670 See Also:
104671
104672 <negate>
104673 */
104674 BigInteger.prototype.abs = function() {
104675 return (this._s < 0) ? this.negate() : this;
104676 };
104677
104678 /*
104679 Function: subtract
104680 Subtract two <BigIntegers>.
104681
104682 Parameters:
104683
104684 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
104685
104686 Returns:
104687
104688 The *n* subtracted from *this*.
104689
104690 See Also:
104691
104692 <add>, <multiply>, <quotient>, <prev>
104693 */
104694 BigInteger.prototype.subtract = function(n) {
104695 if (this._s === 0) {
104696 return BigInteger(n).negate();
104697 }
104698
104699 n = BigInteger(n);
104700 if (n._s === 0) {
104701 return this;
104702 }
104703 if (this._s !== n._s) {
104704 n = n.negate();
104705 return this.add(n);
104706 }
104707
104708 var m = this;
104709 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
104710 if (this._s < 0) {
104711 m = new BigInteger(n._d, 1, CONSTRUCT);
104712 n = new BigInteger(this._d, 1, CONSTRUCT);
104713 }
104714
104715 // Both are positive => a - b
104716 var sign = m.compareAbs(n);
104717 if (sign === 0) {
104718 return ZERO;
104719 }
104720 else if (sign < 0) {
104721 // swap m and n
104722 var t = n;
104723 n = m;
104724 m = t;
104725 }
104726
104727 // a > b
104728 var a = m._d;
104729 var b = n._d;
104730 var al = a.length;
104731 var bl = b.length;
104732 var diff = new Array(al); // al >= bl since a > b
104733 var borrow = 0;
104734 var i;
104735 var digit;
104736
104737 for (i = 0; i < bl; i++) {
104738 digit = a[i] - borrow - b[i];
104739 if (digit < 0) {
104740 digit += BigInteger_base;
104741 borrow = 1;
104742 }
104743 else {
104744 borrow = 0;
104745 }
104746 diff[i] = digit;
104747 }
104748 for (i = bl; i < al; i++) {
104749 digit = a[i] - borrow;
104750 if (digit < 0) {
104751 digit += BigInteger_base;
104752 }
104753 else {
104754 diff[i++] = digit;
104755 break;
104756 }
104757 diff[i] = digit;
104758 }
104759 for ( ; i < al; i++) {
104760 diff[i] = a[i];
104761 }
104762
104763 return new BigInteger(diff, sign, CONSTRUCT);
104764 };
104765
104766 (function() {
104767 function addOne(n, sign) {
104768 var a = n._d;
104769 var sum = a.slice();
104770 var carry = true;
104771 var i = 0;
104772
104773 while (true) {
104774 var digit = (a[i] || 0) + 1;
104775 sum[i] = digit % BigInteger_base;
104776 if (digit <= BigInteger_base - 1) {
104777 break;
104778 }
104779 ++i;
104780 }
104781
104782 return new BigInteger(sum, sign, CONSTRUCT);
104783 }
104784
104785 function subtractOne(n, sign) {
104786 var a = n._d;
104787 var sum = a.slice();
104788 var borrow = true;
104789 var i = 0;
104790
104791 while (true) {
104792 var digit = (a[i] || 0) - 1;
104793 if (digit < 0) {
104794 sum[i] = digit + BigInteger_base;
104795 }
104796 else {
104797 sum[i] = digit;
104798 break;
104799 }
104800 ++i;
104801 }
104802
104803 return new BigInteger(sum, sign, CONSTRUCT);
104804 }
104805
104806 /*
104807 Function: next
104808 Get the next <BigInteger> (add one).
104809
104810 Returns:
104811
104812 *this* + 1.
104813
104814 See Also:
104815
104816 <add>, <prev>
104817 */
104818 BigInteger.prototype.next = function() {
104819 switch (this._s) {
104820 case 0:
104821 return ONE;
104822 case -1:
104823 return subtractOne(this, -1);
104824 // case 1:
104825 default:
104826 return addOne(this, 1);
104827 }
104828 };
104829
104830 /*
104831 Function: prev
104832 Get the previous <BigInteger> (subtract one).
104833
104834 Returns:
104835
104836 *this* - 1.
104837
104838 See Also:
104839
104840 <next>, <subtract>
104841 */
104842 BigInteger.prototype.prev = function() {
104843 switch (this._s) {
104844 case 0:
104845 return M_ONE;
104846 case -1:
104847 return addOne(this, -1);
104848 // case 1:
104849 default:
104850 return subtractOne(this, 1);
104851 }
104852 };
104853 })();
104854
104855 /*
104856 Function: compareAbs
104857 Compare the absolute value of two <BigIntegers>.
104858
104859 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
104860
104861 Parameters:
104862
104863 n - The number to compare to *this*. Will be converted to a <BigInteger>.
104864
104865 Returns:
104866
104867 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
104868
104869 See Also:
104870
104871 <compare>, <abs>
104872 */
104873 BigInteger.prototype.compareAbs = function(n) {
104874 if (this === n) {
104875 return 0;
104876 }
104877
104878 if (!(n instanceof BigInteger)) {
104879 if (!isFinite(n)) {
104880 return(isNaN(n) ? n : -1);
104881 }
104882 n = BigInteger(n);
104883 }
104884
104885 if (this._s === 0) {
104886 return (n._s !== 0) ? -1 : 0;
104887 }
104888 if (n._s === 0) {
104889 return 1;
104890 }
104891
104892 var l = this._d.length;
104893 var nl = n._d.length;
104894 if (l < nl) {
104895 return -1;
104896 }
104897 else if (l > nl) {
104898 return 1;
104899 }
104900
104901 var a = this._d;
104902 var b = n._d;
104903 for (var i = l-1; i >= 0; i--) {
104904 if (a[i] !== b[i]) {
104905 return a[i] < b[i] ? -1 : 1;
104906 }
104907 }
104908
104909 return 0;
104910 };
104911
104912 /*
104913 Function: compare
104914 Compare two <BigIntegers>.
104915
104916 Parameters:
104917
104918 n - The number to compare to *this*. Will be converted to a <BigInteger>.
104919
104920 Returns:
104921
104922 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
104923
104924 See Also:
104925
104926 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
104927 */
104928 BigInteger.prototype.compare = function(n) {
104929 if (this === n) {
104930 return 0;
104931 }
104932
104933 n = BigInteger(n);
104934
104935 if (this._s === 0) {
104936 return -n._s;
104937 }
104938
104939 if (this._s === n._s) { // both positive or both negative
104940 var cmp = this.compareAbs(n);
104941 return cmp * this._s;
104942 }
104943 else {
104944 return this._s;
104945 }
104946 };
104947
104948 /*
104949 Function: isUnit
104950 Return true iff *this* is either 1 or -1.
104951
104952 Returns:
104953
104954 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
104955
104956 See Also:
104957
104958 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
104959 <BigInteger.ONE>, <BigInteger.M_ONE>
104960 */
104961 BigInteger.prototype.isUnit = function() {
104962 return this === ONE ||
104963 this === M_ONE ||
104964 (this._d.length === 1 && this._d[0] === 1);
104965 };
104966
104967 /*
104968 Function: multiply
104969 Multiply two <BigIntegers>.
104970
104971 Parameters:
104972
104973 n - The number to multiply *this* by. Will be converted to a
104974 <BigInteger>.
104975
104976 Returns:
104977
104978 The numbers multiplied together.
104979
104980 See Also:
104981
104982 <add>, <subtract>, <quotient>, <square>
104983 */
104984 BigInteger.prototype.multiply = function(n) {
104985 // TODO: Consider adding Karatsuba multiplication for large numbers
104986 if (this._s === 0) {
104987 return ZERO;
104988 }
104989
104990 n = BigInteger(n);
104991 if (n._s === 0) {
104992 return ZERO;
104993 }
104994 if (this.isUnit()) {
104995 if (this._s < 0) {
104996 return n.negate();
104997 }
104998 return n;
104999 }
105000 if (n.isUnit()) {
105001 if (n._s < 0) {
105002 return this.negate();
105003 }
105004 return this;
105005 }
105006 if (this === n) {
105007 return this.square();
105008 }
105009
105010 var r = (this._d.length >= n._d.length);
105011 var a = (r ? this : n)._d; // a will be longer than b
105012 var b = (r ? n : this)._d;
105013 var al = a.length;
105014 var bl = b.length;
105015
105016 var pl = al + bl;
105017 var partial = new Array(pl);
105018 var i;
105019 for (i = 0; i < pl; i++) {
105020 partial[i] = 0;
105021 }
105022
105023 for (i = 0; i < bl; i++) {
105024 var carry = 0;
105025 var bi = b[i];
105026 var jlimit = al + i;
105027 var digit;
105028 for (var j = i; j < jlimit; j++) {
105029 digit = partial[j] + bi * a[j - i] + carry;
105030 carry = (digit / BigInteger_base) | 0;
105031 partial[j] = (digit % BigInteger_base) | 0;
105032 }
105033 if (carry) {
105034 digit = partial[j] + carry;
105035 carry = (digit / BigInteger_base) | 0;
105036 partial[j] = digit % BigInteger_base;
105037 }
105038 }
105039 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
105040 };
105041
105042 // Multiply a BigInteger by a single-digit native number
105043 // Assumes that this and n are >= 0
105044 // This is not really intended to be used outside the library itself
105045 BigInteger.prototype.multiplySingleDigit = function(n) {
105046 if (n === 0 || this._s === 0) {
105047 return ZERO;
105048 }
105049 if (n === 1) {
105050 return this;
105051 }
105052
105053 var digit;
105054 if (this._d.length === 1) {
105055 digit = this._d[0] * n;
105056 if (digit >= BigInteger_base) {
105057 return new BigInteger([(digit % BigInteger_base)|0,
105058 (digit / BigInteger_base)|0], 1, CONSTRUCT);
105059 }
105060 return new BigInteger([digit], 1, CONSTRUCT);
105061 }
105062
105063 if (n === 2) {
105064 return this.add(this);
105065 }
105066 if (this.isUnit()) {
105067 return new BigInteger([n], 1, CONSTRUCT);
105068 }
105069
105070 var a = this._d;
105071 var al = a.length;
105072
105073 var pl = al + 1;
105074 var partial = new Array(pl);
105075 for (var i = 0; i < pl; i++) {
105076 partial[i] = 0;
105077 }
105078
105079 var carry = 0;
105080 for (var j = 0; j < al; j++) {
105081 digit = n * a[j] + carry;
105082 carry = (digit / BigInteger_base) | 0;
105083 partial[j] = (digit % BigInteger_base) | 0;
105084 }
105085 if (carry) {
105086 partial[j] = carry;
105087 }
105088
105089 return new BigInteger(partial, 1, CONSTRUCT);
105090 };
105091
105092 /*
105093 Function: square
105094 Multiply a <BigInteger> by itself.
105095
105096 This is slightly faster than regular multiplication, since it removes the
105097 duplicated multiplcations.
105098
105099 Returns:
105100
105101 > this.multiply(this)
105102
105103 See Also:
105104 <multiply>
105105 */
105106 BigInteger.prototype.square = function() {
105107 // Normally, squaring a 10-digit number would take 100 multiplications.
105108 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
105109 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
105110 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
105111
105112 if (this._s === 0) {
105113 return ZERO;
105114 }
105115 if (this.isUnit()) {
105116 return ONE;
105117 }
105118
105119 var digits = this._d;
105120 var length = digits.length;
105121 var imult1 = new Array(length + length + 1);
105122 var product, carry, k;
105123 var i;
105124
105125 // Calculate diagonal
105126 for (i = 0; i < length; i++) {
105127 k = i * 2;
105128 product = digits[i] * digits[i];
105129 carry = (product / BigInteger_base) | 0;
105130 imult1[k] = product % BigInteger_base;
105131 imult1[k + 1] = carry;
105132 }
105133
105134 // Calculate repeating part
105135 for (i = 0; i < length; i++) {
105136 carry = 0;
105137 k = i * 2 + 1;
105138 for (var j = i + 1; j < length; j++, k++) {
105139 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
105140 carry = (product / BigInteger_base) | 0;
105141 imult1[k] = product % BigInteger_base;
105142 }
105143 k = length + i;
105144 var digit = carry + imult1[k];
105145 carry = (digit / BigInteger_base) | 0;
105146 imult1[k] = digit % BigInteger_base;
105147 imult1[k + 1] += carry;
105148 }
105149
105150 return new BigInteger(imult1, 1, CONSTRUCT);
105151 };
105152
105153 /*
105154 Function: quotient
105155 Divide two <BigIntegers> and truncate towards zero.
105156
105157 <quotient> throws an exception if *n* is zero.
105158
105159 Parameters:
105160
105161 n - The number to divide *this* by. Will be converted to a <BigInteger>.
105162
105163 Returns:
105164
105165 The *this* / *n*, truncated to an integer.
105166
105167 See Also:
105168
105169 <add>, <subtract>, <multiply>, <divRem>, <remainder>
105170 */
105171 BigInteger.prototype.quotient = function(n) {
105172 return this.divRem(n)[0];
105173 };
105174
105175 /*
105176 Function: divide
105177 Deprecated synonym for <quotient>.
105178 */
105179 BigInteger.prototype.divide = BigInteger.prototype.quotient;
105180
105181 /*
105182 Function: remainder
105183 Calculate the remainder of two <BigIntegers>.
105184
105185 <remainder> throws an exception if *n* is zero.
105186
105187 Parameters:
105188
105189 n - The remainder after *this* is divided *this* by *n*. Will be
105190 converted to a <BigInteger>.
105191
105192 Returns:
105193
105194 *this* % *n*.
105195
105196 See Also:
105197
105198 <divRem>, <quotient>
105199 */
105200 BigInteger.prototype.remainder = function(n) {
105201 return this.divRem(n)[1];
105202 };
105203
105204 /*
105205 Function: divRem
105206 Calculate the integer quotient and remainder of two <BigIntegers>.
105207
105208 <divRem> throws an exception if *n* is zero.
105209
105210 Parameters:
105211
105212 n - The number to divide *this* by. Will be converted to a <BigInteger>.
105213
105214 Returns:
105215
105216 A two-element array containing the quotient and the remainder.
105217
105218 > a.divRem(b)
105219
105220 is exactly equivalent to
105221
105222 > [a.quotient(b), a.remainder(b)]
105223
105224 except it is faster, because they are calculated at the same time.
105225
105226 See Also:
105227
105228 <quotient>, <remainder>
105229 */
105230 BigInteger.prototype.divRem = function(n) {
105231 n = BigInteger(n);
105232 if (n._s === 0) {
105233 throw new Error("Divide by zero");
105234 }
105235 if (this._s === 0) {
105236 return [ZERO, ZERO];
105237 }
105238 if (n._d.length === 1) {
105239 return this.divRemSmall(n._s * n._d[0]);
105240 }
105241
105242 // Test for easy cases -- |n1| <= |n2|
105243 switch (this.compareAbs(n)) {
105244 case 0: // n1 == n2
105245 return [this._s === n._s ? ONE : M_ONE, ZERO];
105246 case -1: // |n1| < |n2|
105247 return [ZERO, this];
105248 }
105249
105250 var sign = this._s * n._s;
105251 var a = n.abs();
105252 var b_digits = this._d;
105253 var b_index = b_digits.length;
105254 var digits = n._d.length;
105255 var quot = [];
105256 var guess;
105257
105258 var part = new BigInteger([], 0, CONSTRUCT);
105259
105260 while (b_index) {
105261 part._d.unshift(b_digits[--b_index]);
105262 part = new BigInteger(part._d, 1, CONSTRUCT);
105263
105264 if (part.compareAbs(n) < 0) {
105265 quot.push(0);
105266 continue;
105267 }
105268 if (part._s === 0) {
105269 guess = 0;
105270 }
105271 else {
105272 var xlen = part._d.length, ylen = a._d.length;
105273 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
105274 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
105275 if (part._d.length > a._d.length) {
105276 // The length of part._d can either match a._d length,
105277 // or exceed it by one.
105278 highx = (highx+1)*BigInteger_base;
105279 }
105280 guess = Math.ceil(highx/highy);
105281 }
105282 do {
105283 var check = a.multiplySingleDigit(guess);
105284 if (check.compareAbs(part) <= 0) {
105285 break;
105286 }
105287 guess--;
105288 } while (guess);
105289
105290 quot.push(guess);
105291 if (!guess) {
105292 continue;
105293 }
105294 var diff = part.subtract(check);
105295 part._d = diff._d.slice();
105296 }
105297
105298 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
105299 new BigInteger(part._d, this._s, CONSTRUCT)];
105300 };
105301
105302 // Throws an exception if n is outside of (-BigInteger.base, -1] or
105303 // [1, BigInteger.base). It's not necessary to call this, since the
105304 // other division functions will call it if they are able to.
105305 BigInteger.prototype.divRemSmall = function(n) {
105306 var r;
105307 n = +n;
105308 if (n === 0) {
105309 throw new Error("Divide by zero");
105310 }
105311
105312 var n_s = n < 0 ? -1 : 1;
105313 var sign = this._s * n_s;
105314 n = Math.abs(n);
105315
105316 if (n < 1 || n >= BigInteger_base) {
105317 throw new Error("Argument out of range");
105318 }
105319
105320 if (this._s === 0) {
105321 return [ZERO, ZERO];
105322 }
105323
105324 if (n === 1 || n === -1) {
105325 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
105326 }
105327
105328 // 2 <= n < BigInteger_base
105329
105330 // divide a single digit by a single digit
105331 if (this._d.length === 1) {
105332 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
105333 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
105334 if (sign < 0) {
105335 q = q.negate();
105336 }
105337 if (this._s < 0) {
105338 r = r.negate();
105339 }
105340 return [q, r];
105341 }
105342
105343 var digits = this._d.slice();
105344 var quot = new Array(digits.length);
105345 var part = 0;
105346 var diff = 0;
105347 var i = 0;
105348 var guess;
105349
105350 while (digits.length) {
105351 part = part * BigInteger_base + digits[digits.length - 1];
105352 if (part < n) {
105353 quot[i++] = 0;
105354 digits.pop();
105355 diff = BigInteger_base * diff + part;
105356 continue;
105357 }
105358 if (part === 0) {
105359 guess = 0;
105360 }
105361 else {
105362 guess = (part / n) | 0;
105363 }
105364
105365 var check = n * guess;
105366 diff = part - check;
105367 quot[i++] = guess;
105368 if (!guess) {
105369 digits.pop();
105370 continue;
105371 }
105372
105373 digits.pop();
105374 part = diff;
105375 }
105376
105377 r = new BigInteger([diff], 1, CONSTRUCT);
105378 if (this._s < 0) {
105379 r = r.negate();
105380 }
105381 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
105382 };
105383
105384 /*
105385 Function: isEven
105386 Return true iff *this* is divisible by two.
105387
105388 Note that <BigInteger.ZERO> is even.
105389
105390 Returns:
105391
105392 true if *this* is even, false otherwise.
105393
105394 See Also:
105395
105396 <isOdd>
105397 */
105398 BigInteger.prototype.isEven = function() {
105399 var digits = this._d;
105400 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
105401 };
105402
105403 /*
105404 Function: isOdd
105405 Return true iff *this* is not divisible by two.
105406
105407 Returns:
105408
105409 true if *this* is odd, false otherwise.
105410
105411 See Also:
105412
105413 <isEven>
105414 */
105415 BigInteger.prototype.isOdd = function() {
105416 return !this.isEven();
105417 };
105418
105419 /*
105420 Function: sign
105421 Get the sign of a <BigInteger>.
105422
105423 Returns:
105424
105425 * -1 if *this* < 0
105426 * 0 if *this* == 0
105427 * +1 if *this* > 0
105428
105429 See Also:
105430
105431 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
105432 */
105433 BigInteger.prototype.sign = function() {
105434 return this._s;
105435 };
105436
105437 /*
105438 Function: isPositive
105439 Return true iff *this* > 0.
105440
105441 Returns:
105442
105443 true if *this*.compare(<BigInteger.ZERO>) == 1.
105444
105445 See Also:
105446
105447 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
105448 */
105449 BigInteger.prototype.isPositive = function() {
105450 return this._s > 0;
105451 };
105452
105453 /*
105454 Function: isNegative
105455 Return true iff *this* < 0.
105456
105457 Returns:
105458
105459 true if *this*.compare(<BigInteger.ZERO>) == -1.
105460
105461 See Also:
105462
105463 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
105464 */
105465 BigInteger.prototype.isNegative = function() {
105466 return this._s < 0;
105467 };
105468
105469 /*
105470 Function: isZero
105471 Return true iff *this* == 0.
105472
105473 Returns:
105474
105475 true if *this*.compare(<BigInteger.ZERO>) == 0.
105476
105477 See Also:
105478
105479 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
105480 */
105481 BigInteger.prototype.isZero = function() {
105482 return this._s === 0;
105483 };
105484
105485 /*
105486 Function: exp10
105487 Multiply a <BigInteger> by a power of 10.
105488
105489 This is equivalent to, but faster than
105490
105491 > if (n >= 0) {
105492 > return this.multiply(BigInteger("1e" + n));
105493 > }
105494 > else { // n <= 0
105495 > return this.quotient(BigInteger("1e" + -n));
105496 > }
105497
105498 Parameters:
105499
105500 n - The power of 10 to multiply *this* by. *n* is converted to a
105501 javascipt number and must be no greater than <BigInteger.MAX_EXP>
105502 (0x7FFFFFFF), or an exception will be thrown.
105503
105504 Returns:
105505
105506 *this* * (10 ** *n*), truncated to an integer if necessary.
105507
105508 See Also:
105509
105510 <pow>, <multiply>
105511 */
105512 BigInteger.prototype.exp10 = function(n) {
105513 n = +n;
105514 if (n === 0) {
105515 return this;
105516 }
105517 if (Math.abs(n) > Number(MAX_EXP)) {
105518 throw new Error("exponent too large in BigInteger.exp10");
105519 }
105520 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
105521 if (this._s === 0) {
105522 return ZERO;
105523 }
105524 if (n > 0) {
105525 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
105526
105527 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
105528 k._d.unshift(0);
105529 }
105530 if (n == 0)
105531 return k;
105532 k._s = 1;
105533 k = k.multiplySingleDigit(Math.pow(10, n));
105534 return (this._s < 0 ? k.negate() : k);
105535 } else if (-n >= this._d.length*BigInteger_base_log10) {
105536 return ZERO;
105537 } else {
105538 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
105539
105540 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
105541 k._d.shift();
105542 }
105543 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
105544 }
105545 };
105546
105547 /*
105548 Function: pow
105549 Raise a <BigInteger> to a power.
105550
105551 In this implementation, 0**0 is 1.
105552
105553 Parameters:
105554
105555 n - The exponent to raise *this* by. *n* must be no greater than
105556 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
105557
105558 Returns:
105559
105560 *this* raised to the *nth* power.
105561
105562 See Also:
105563
105564 <modPow>
105565 */
105566 BigInteger.prototype.pow = function(n) {
105567 if (this.isUnit()) {
105568 if (this._s > 0) {
105569 return this;
105570 }
105571 else {
105572 return BigInteger(n).isOdd() ? this : this.negate();
105573 }
105574 }
105575
105576 n = BigInteger(n);
105577 if (n._s === 0) {
105578 return ONE;
105579 }
105580 else if (n._s < 0) {
105581 if (this._s === 0) {
105582 throw new Error("Divide by zero");
105583 }
105584 else {
105585 return ZERO;
105586 }
105587 }
105588 if (this._s === 0) {
105589 return ZERO;
105590 }
105591 if (n.isUnit()) {
105592 return this;
105593 }
105594
105595 if (n.compareAbs(MAX_EXP) > 0) {
105596 throw new Error("exponent too large in BigInteger.pow");
105597 }
105598 var x = this;
105599 var aux = ONE;
105600 var two = BigInteger.small[2];
105601
105602 while (n.isPositive()) {
105603 if (n.isOdd()) {
105604 aux = aux.multiply(x);
105605 if (n.isUnit()) {
105606 return aux;
105607 }
105608 }
105609 x = x.square();
105610 n = n.quotient(two);
105611 }
105612
105613 return aux;
105614 };
105615
105616 /*
105617 Function: modPow
105618 Raise a <BigInteger> to a power (mod m).
105619
105620 Because it is reduced by a modulus, <modPow> is not limited by
105621 <BigInteger.MAX_EXP> like <pow>.
105622
105623 Parameters:
105624
105625 exponent - The exponent to raise *this* by. Must be positive.
105626 modulus - The modulus.
105627
105628 Returns:
105629
105630 *this* ^ *exponent* (mod *modulus*).
105631
105632 See Also:
105633
105634 <pow>, <mod>
105635 */
105636 BigInteger.prototype.modPow = function(exponent, modulus) {
105637 var result = ONE;
105638 var base = this;
105639
105640 while (exponent.isPositive()) {
105641 if (exponent.isOdd()) {
105642 result = result.multiply(base).remainder(modulus);
105643 }
105644
105645 exponent = exponent.quotient(BigInteger.small[2]);
105646 if (exponent.isPositive()) {
105647 base = base.square().remainder(modulus);
105648 }
105649 }
105650
105651 return result;
105652 };
105653
105654 /*
105655 Function: log
105656 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
105657
105658 This is equivalent to
105659
105660 > Math.log(this.toJSValue())
105661
105662 but handles values outside of the native number range.
105663
105664 Returns:
105665
105666 log( *this* )
105667
105668 See Also:
105669
105670 <toJSValue>
105671 */
105672 BigInteger.prototype.log = function() {
105673 switch (this._s) {
105674 case 0: return -Infinity;
105675 case -1: return NaN;
105676 default: // Fall through.
105677 }
105678
105679 var l = this._d.length;
105680
105681 if (l*BigInteger_base_log10 < 30) {
105682 return Math.log(this.valueOf());
105683 }
105684
105685 var N = Math.ceil(30/BigInteger_base_log10);
105686 var firstNdigits = this._d.slice(l - N);
105687 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
105688 };
105689
105690 /*
105691 Function: valueOf
105692 Convert a <BigInteger> to a native JavaScript integer.
105693
105694 This is called automatically by JavaScipt to convert a <BigInteger> to a
105695 native value.
105696
105697 Returns:
105698
105699 > parseInt(this.toString(), 10)
105700
105701 See Also:
105702
105703 <toString>, <toJSValue>
105704 */
105705 BigInteger.prototype.valueOf = function() {
105706 return parseInt(this.toString(), 10);
105707 };
105708
105709 /*
105710 Function: toJSValue
105711 Convert a <BigInteger> to a native JavaScript integer.
105712
105713 This is the same as valueOf, but more explicitly named.
105714
105715 Returns:
105716
105717 > parseInt(this.toString(), 10)
105718
105719 See Also:
105720
105721 <toString>, <valueOf>
105722 */
105723 BigInteger.prototype.toJSValue = function() {
105724 return parseInt(this.toString(), 10);
105725 };
105726
105727 var MAX_EXP = BigInteger(0x7FFFFFFF);
105728 // Constant: MAX_EXP
105729 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
105730 BigInteger.MAX_EXP = MAX_EXP;
105731
105732 (function() {
105733 function makeUnary(fn) {
105734 return function(a) {
105735 return fn.call(BigInteger(a));
105736 };
105737 }
105738
105739 function makeBinary(fn) {
105740 return function(a, b) {
105741 return fn.call(BigInteger(a), BigInteger(b));
105742 };
105743 }
105744
105745 function makeTrinary(fn) {
105746 return function(a, b, c) {
105747 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
105748 };
105749 }
105750
105751 (function() {
105752 var i, fn;
105753 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
105754 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
105755 var trinary = ["modPow"];
105756
105757 for (i = 0; i < unary.length; i++) {
105758 fn = unary[i];
105759 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
105760 }
105761
105762 for (i = 0; i < binary.length; i++) {
105763 fn = binary[i];
105764 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
105765 }
105766
105767 for (i = 0; i < trinary.length; i++) {
105768 fn = trinary[i];
105769 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
105770 }
105771
105772 BigInteger.exp10 = function(x, n) {
105773 return BigInteger(x).exp10(n);
105774 };
105775 })();
105776 })();
105777
105778 exports.BigInteger = BigInteger;
105779 })(typeof exports !== 'undefined' ? exports : this);
105780 </script>
105781 <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.zxcvbn = 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){
105782 var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
105783
105784 },{}],2:[function(require,module,exports){
105785 var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
105786
105787 },{"./scoring":6}],3:[function(require,module,exports){
105788 var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
105789 english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
105790 female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
105791 us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
105792 male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
105793
105794 },{}],4:[function(require,module,exports){
105795 var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
105796
105797 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
105798 var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
105799
105800 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
105801 var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
105802
105803 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
105804 var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
105805
105806 },{}]},{},[4])(4)
105807 });
105808
105809 </script>
105810 <script>/*
105811 * Detects entropy from a string.
105812 *
105813 * Formats include:
105814 * binary [0-1]
105815 * base 6 [0-5]
105816 * dice 6 [1-6]
105817 * decimal [0-9]
105818 * hexadecimal [0-9A-F]
105819 * card [A2-9TJQK][CDHS]
105820 *
105821 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
105822 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
105823 * entropy.
105824 */
105825
105826 window.Entropy = new (function() {
105827
105828 var TWO = new BigInteger(2);
105829
105830 // matchers returns an array of the matched events for each type of entropy.
105831 // eg
105832 // matchers.binary("010") returns ["0", "1", "0"]
105833 // matchers.binary("a10") returns ["1", "0"]
105834 // matchers.hex("a10") returns ["a", "1", "0"]
105835 var matchers = {
105836 binary: function(str) {
105837 return str.match(/[0-1]/gi) || [];
105838 },
105839 base6: function(str) {
105840 return str.match(/[0-5]/gi) || [];
105841 },
105842 dice: function(str) {
105843 return str.match(/[1-6]/gi) || []; // ie dice numbers
105844 },
105845 base10: function(str) {
105846 return str.match(/[0-9]/gi) || [];
105847 },
105848 hex: function(str) {
105849 return str.match(/[0-9A-F]/gi) || [];
105850 },
105851 card: function(str) {
105852 // Format is NumberSuit, eg
105853 // AH ace of hearts
105854 // 8C eight of clubs
105855 // TD ten of diamonds
105856 // JS jack of spades
105857 // QH queen of hearts
105858 // KC king of clubs
105859 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
105860 }
105861 }
105862
105863 // Convert array of cards from ["ac", "4d", "ks"]
105864 // to numbers between 0 and 51 [0, 16, 51]
105865 function convertCardsToInts(cards) {
105866 var ints = [];
105867 var values = "a23456789tjqk";
105868 var suits = "cdhs";
105869 for (var i=0; i<cards.length; i++) {
105870 var card = cards[i].toLowerCase();
105871 var value = card[0];
105872 var suit = card[1];
105873 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
105874 ints.push(asInt);
105875 }
105876 return ints;
105877 }
105878
105879 this.fromString = function(rawEntropyStr) {
105880 // Find type of entropy being used (binary, hex, dice etc)
105881 var base = getBase(rawEntropyStr);
105882 // Convert dice to base6 entropy (ie 1-6 to 0-5)
105883 // This is done by changing all 6s to 0s
105884 if (base.str == "dice") {
105885 var newParts = [];
105886 var newInts = [];
105887 for (var i=0; i<base.parts.length; i++) {
105888 var c = base.parts[i];
105889 if ("12345".indexOf(c) > -1) {
105890 newParts[i] = base.parts[i];
105891 newInts[i] = base.ints[i];
105892 }
105893 else {
105894 newParts[i] = "0";
105895 newInts[i] = 0;
105896 }
105897 }
105898 base.str = "base 6 (dice)";
105899 base.ints = newInts;
105900 base.parts = newParts;
105901 base.matcher = matchers.base6;
105902 }
105903 // Detect empty entropy
105904 if (base.parts.length == 0) {
105905 return {
105906 binaryStr: "",
105907 cleanStr: "",
105908 cleanHtml: "",
105909 base: base,
105910 };
105911 }
105912 // Convert base.ints to BigInteger.
105913 // Due to using unusual bases, eg cards of base52, this is not as simple as
105914 // using BigInteger.parse()
105915 var entropyInt = BigInteger.ZERO;
105916 for (var i=base.ints.length-1; i>=0; i--) {
105917 var thisInt = BigInteger.parse(base.ints[i]);
105918 var power = (base.ints.length - 1) - i;
105919 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
105920 entropyInt = entropyInt.add(additionalEntropy);
105921 }
105922 // Convert entropy to binary
105923 var entropyBin = entropyInt.toString(2);
105924 // If the first integer is small, it must be padded with zeros.
105925 // Otherwise the chance of the first bit being 1 is 100%, which is
105926 // obviously incorrect.
105927 // This is not perfect for non-2^n bases.
105928 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
105929 while (entropyBin.length < expectedBits) {
105930 entropyBin = "0" + entropyBin;
105931 }
105932 // Calculate the number of bits per event
105933 var bitsPerEvent = Math.log2(base.asInt);
105934 // Cards binary must be handled differently, since they're not replaced
105935 if (base.asInt == 52) {
105936 var cardEntropy = processCardEntropy(base.parts);
105937 entropyBin = cardEntropy.binaryStr;
105938 bitsPerEvent = cardEntropy.bitsPerEvent;
105939 }
105940 // Supply a 'filtered' entropy string for display purposes
105941 var entropyClean = base.parts.join("");
105942 var entropyHtml = base.parts.join("");
105943 if (base.asInt == 52) {
105944 entropyClean = base.parts.join(" ").toUpperCase();
105945 entropyClean = entropyClean.replace(/C/g, "\u2663");
105946 entropyClean = entropyClean.replace(/D/g, "\u2666");
105947 entropyClean = entropyClean.replace(/H/g, "\u2665");
105948 entropyClean = entropyClean.replace(/S/g, "\u2660");
105949 entropyHtml = base.parts.join(" ").toUpperCase();
105950 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
105951 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
105952 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
105953 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
105954 }
105955 // Return the result
105956 var e = {
105957 binaryStr: entropyBin,
105958 cleanStr: entropyClean,
105959 cleanHtml: entropyHtml,
105960 bitsPerEvent: bitsPerEvent,
105961 base: base,
105962 }
105963 return e;
105964 }
105965
105966 function getSortedDeck() {
105967 var s = [];
105968 var suits = "CDHS";
105969 var values = "A23456789TJQK";
105970 for (var i=0; i<suits.length; i++) {
105971 for (var j=0; j<values.length; j++) {
105972 s.push(values[j]+suits[i]);
105973 }
105974 }
105975 return s;
105976 }
105977
105978 function getBase(str) {
105979 // Need to get the lowest base for the supplied entropy.
105980 // This prevents interpreting, say, dice rolls as hexadecimal.
105981 var binaryMatches = matchers.binary(str);
105982 var hexMatches = matchers.hex(str);
105983 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
105984 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
105985 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
105986 return {
105987 ints: ints,
105988 parts: binaryMatches,
105989 matcher: matchers.binary,
105990 asInt: 2,
105991 str: "binary",
105992 }
105993 }
105994 var cardMatches = matchers.card(str);
105995 if (cardMatches.length >= hexMatches.length / 2) {
105996 var ints = convertCardsToInts(cardMatches);
105997 return {
105998 ints: ints,
105999 parts: cardMatches,
106000 matcher: matchers.card,
106001 asInt: 52,
106002 str: "card",
106003 }
106004 }
106005 var diceMatches = matchers.dice(str);
106006 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
106007 var ints = diceMatches.map(function(i) { return parseInt(i) });
106008 return {
106009 ints: ints,
106010 parts: diceMatches,
106011 matcher: matchers.dice,
106012 asInt: 6,
106013 str: "dice",
106014 }
106015 }
106016 var base6Matches = matchers.base6(str);
106017 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
106018 var ints = base6Matches.map(function(i) { return parseInt(i) });
106019 return {
106020 ints: ints,
106021 parts: base6Matches,
106022 matcher: matchers.base6,
106023 asInt: 6,
106024 str: "base 6",
106025 }
106026 }
106027 var base10Matches = matchers.base10(str);
106028 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
106029 var ints = base10Matches.map(function(i) { return parseInt(i) });
106030 return {
106031 ints: ints,
106032 parts: base10Matches,
106033 matcher: matchers.base10,
106034 asInt: 10,
106035 str: "base 10",
106036 }
106037 }
106038 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
106039 return {
106040 ints: ints,
106041 parts: hexMatches,
106042 matcher: matchers.hex,
106043 asInt: 16,
106044 str: "hexadecimal",
106045 }
106046 }
106047
106048 // Assume cards are NOT replaced.
106049 // Additional entropy decreases as more cards are used. This means
106050 // total possible entropy is measured using n!, not base^n.
106051 // eg the second last card can be only one of two, not one of fifty two
106052 // so the added entropy for that card is only one bit at most
106053 function processCardEntropy(cards) {
106054 // Track how many instances of each card have been used, and thus
106055 // how many decks are in use.
106056 var cardCounts = {};
106057 var numberOfDecks = 0;
106058 // Work out number of decks by max(duplicates)
106059 for (var i=0; i<cards.length; i++) {
106060 // Get the card that was drawn
106061 var cardLower = cards[i];
106062 var card = cardLower.toUpperCase();
106063 // Initialize the count for this card if needed
106064 if (!(card in cardCounts)) {
106065 cardCounts[card] = 0;
106066 }
106067 cardCounts[card] += 1;
106068 // See if this is max(duplicates)
106069 if (cardCounts[card] > numberOfDecks) {
106070 numberOfDecks = cardCounts[card];
106071 }
106072 }
106073 // Work out the total number of bits for this many decks
106074 // See http://crypto.stackexchange.com/q/41886
106075 var gainedBits = 0;
106076 // Equivalent of Math.log2(factorial(52*numberOfDecks))
106077 // which becomes infinity for numberOfDecks > 4
106078 for (var i=1; i<=52*numberOfDecks; i++) {
106079 gainedBits = gainedBits + Math.log2(i);
106080 }
106081 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
106082 var maxBits = gainedBits - lostBits;
106083 // Convert the drawn cards to a binary representation.
106084 // The exact technique for doing this is unclear.
106085 // See
106086 // http://crypto.stackexchange.com/a/41896
106087 // "I even doubt that this is well defined (only the average entropy
106088 // is, I believe)."
106089 // See
106090 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
106091 // "The binary representation can be the first log(permutations,2) bits
106092 // of the sha-2 hash of the normalized deck string."
106093 //
106094 // In this specific implementation, the first N bits of the hash of the
106095 // normalized cards string is being used. Uppercase, no spaces; eg
106096 // sha256("AH8DQSTC2H")
106097 var totalCards = numberOfDecks * 52;
106098 var percentUsed = cards.length / totalCards;
106099 // Calculate the average number of bits of entropy for the number of
106100 // cards drawn.
106101 var numberOfBits = Math.floor(maxBits * percentUsed);
106102 // Create a normalized string of the selected cards
106103 var normalizedCards = cards.join("").toUpperCase();
106104 // Convert to binary using the SHA256 hash of the normalized cards.
106105 // If the number of bits is more than 256, multiple hashes
106106 // are used until the required number of bits is reached.
106107 var entropyBin = "";
106108 var iterations = 0;
106109 while (entropyBin.length < numberOfBits) {
106110 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
106111 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
106112 for (var i=0; i<hashHex.length; i++) {
106113 var decimal = parseInt(hashHex[i], 16);
106114 var binary = decimal.toString(2);
106115 while (binary.length < 4) {
106116 binary = "0" + binary;
106117 }
106118 entropyBin = entropyBin + binary;
106119 }
106120 iterations = iterations + 1;
106121 }
106122 // Truncate to the appropriate number of bits.
106123 entropyBin = entropyBin.substring(0, numberOfBits);
106124 // Get the number of bits per event
106125 bitsPerEvent = maxBits / totalCards;
106126 return {
106127 binaryStr: entropyBin,
106128 bitsPerEvent: bitsPerEvent,
106129 }
106130 }
106131
106132 // Polyfill for Math.log2
106133 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
106134 Math.log2 = Math.log2 || function(x) {
106135 // The polyfill isn't good enough because of the poor accuracy of
106136 // Math.LOG2E
106137 // log2(8) gave 2.9999999999999996 which when floored causes issues.
106138 // So instead use the BigInteger library to get it right.
106139 return BigInteger.log(x) / BigInteger.log(2);
106140 };
106141
106142 // Depends on BigInteger
106143 function factorial(n) {
106144 if (n == 0) {
106145 return 1;
106146 }
106147 f = BigInteger.ONE;
106148 for (var i=1; i<=n; i++) {
106149 f = f.multiply(new BigInteger(i));
106150 }
106151 return f;
106152 }
106153
106154 })();
106155 </script>
106156 <script>(function() {
106157
106158 // mnemonics is populated as required by getLanguage
106159 var mnemonics = { "english": new Mnemonic("english") };
106160 var mnemonic = mnemonics["english"];
106161 var seed = null;
106162 var bip32RootKey = null;
106163 var bip32ExtendedKey = null;
106164 var network = bitcoinjs.bitcoin.networks.bitcoin;
106165 var addressRowTemplate = $("#address-row-template");
106166
106167 var showIndex = true;
106168 var showAddress = true;
106169 var showPubKey = true;
106170 var showPrivKey = true;
106171 var showQr = false;
106172 var litecoinUseLtub = true;
106173
106174 var entropyChangeTimeoutEvent = null;
106175 var phraseChangeTimeoutEvent = null;
106176 var rootKeyChangedTimeoutEvent = null;
106177
106178 var generationProcesses = [];
106179
106180 var DOM = {};
106181 DOM.network = $(".network");
106182 DOM.bip32Client = $("#bip32-client");
106183 DOM.phraseNetwork = $("#network-phrase");
106184 DOM.useEntropy = $(".use-entropy");
106185 DOM.entropyContainer = $(".entropy-container");
106186 DOM.entropy = $(".entropy");
106187 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
106188 DOM.entropyType = DOM.entropyContainer.find(".type");
106189 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
106190 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
106191 DOM.entropyBits = DOM.entropyContainer.find(".bits");
106192 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
106193 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
106194 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
106195 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
106196 DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
106197 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
106198 DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning");
106199 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
106200 DOM.phrase = $(".phrase");
106201 DOM.passphrase = $(".passphrase");
106202 DOM.generateContainer = $(".generate-container");
106203 DOM.generate = $(".generate");
106204 DOM.seed = $(".seed");
106205 DOM.rootKey = $(".root-key");
106206 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
106207 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
106208 DOM.extendedPrivKey = $(".extended-priv-key");
106209 DOM.extendedPubKey = $(".extended-pub-key");
106210 DOM.bip32tab = $("#bip32-tab");
106211 DOM.bip44tab = $("#bip44-tab");
106212 DOM.bip49tab = $("#bip49-tab");
106213 DOM.bip84tab = $("#bip84-tab");
106214 DOM.bip141tab = $("#bip141-tab");
106215 DOM.bip32panel = $("#bip32");
106216 DOM.bip44panel = $("#bip44");
106217 DOM.bip49panel = $("#bip49");
106218 DOM.bip32path = $("#bip32-path");
106219 DOM.bip44path = $("#bip44-path");
106220 DOM.bip44purpose = $("#bip44 .purpose");
106221 DOM.bip44coin = $("#bip44 .coin");
106222 DOM.bip44account = $("#bip44 .account");
106223 DOM.bip44accountXprv = $("#bip44 .account-xprv");
106224 DOM.bip44accountXpub = $("#bip44 .account-xpub");
106225 DOM.bip44change = $("#bip44 .change");
106226 DOM.bip49unavailable = $("#bip49 .unavailable");
106227 DOM.bip49available = $("#bip49 .available");
106228 DOM.bip49path = $("#bip49-path");
106229 DOM.bip49purpose = $("#bip49 .purpose");
106230 DOM.bip49coin = $("#bip49 .coin");
106231 DOM.bip49account = $("#bip49 .account");
106232 DOM.bip49accountXprv = $("#bip49 .account-xprv");
106233 DOM.bip49accountXpub = $("#bip49 .account-xpub");
106234 DOM.bip49change = $("#bip49 .change");
106235 DOM.bip84path = $("#bip84-path");
106236 DOM.bip84purpose = $("#bip84 .purpose");
106237 DOM.bip84coin = $("#bip84 .coin");
106238 DOM.bip84account = $("#bip84 .account");
106239 DOM.bip84accountXprv = $("#bip84 .account-xprv");
106240 DOM.bip84accountXpub = $("#bip84 .account-xpub");
106241 DOM.bip84change = $("#bip84 .change");
106242 DOM.bip141unavailable = $("#bip141 .unavailable");
106243 DOM.bip141available = $("#bip141 .available");
106244 DOM.bip141path = $("#bip141-path");
106245 DOM.bip141semantics = $(".bip141-semantics");
106246 DOM.generatedStrength = $(".generate-container .strength");
106247 DOM.generatedStrengthWarning = $(".generate-container .warning");
106248 DOM.hardenedAddresses = $(".hardened-addresses");
106249 DOM.bitcoinCashAddressTypeContainer = $(".bch-addr-type-container");
106250 DOM.bitcoinCashAddressType = $("[name=bch-addr-type]")
106251 DOM.useBip38 = $(".use-bip38");
106252 DOM.bip38Password = $(".bip38-password");
106253 DOM.addresses = $(".addresses");
106254 DOM.csvTab = $("#csv-tab a");
106255 DOM.csv = $(".csv");
106256 DOM.rowsToAdd = $(".rows-to-add");
106257 DOM.more = $(".more");
106258 DOM.moreRowsStartIndex = $(".more-rows-start-index");
106259 DOM.feedback = $(".feedback");
106260 DOM.tab = $(".derivation-type a");
106261 DOM.indexToggle = $(".index-toggle");
106262 DOM.addressToggle = $(".address-toggle");
106263 DOM.publicKeyToggle = $(".public-key-toggle");
106264 DOM.privateKeyToggle = $(".private-key-toggle");
106265 DOM.languages = $(".languages a");
106266 DOM.qrContainer = $(".qr-container");
106267 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
106268 DOM.qrImage = DOM.qrContainer.find(".qr-image");
106269 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
106270 DOM.showQrEls = $("[data-show-qr]");
106271
106272 function init() {
106273 // Events
106274 DOM.generatedStrength.on("change", generatedStrengthChanged);
106275 DOM.network.on("change", networkChanged);
106276 DOM.bip32Client.on("change", bip32ClientChanged);
106277 DOM.useEntropy.on("change", setEntropyVisibility);
106278 DOM.entropy.on("input", delayedEntropyChanged);
106279 DOM.entropyMnemonicLength.on("change", entropyChanged);
106280 DOM.phrase.on("input", delayedPhraseChanged);
106281 DOM.passphrase.on("input", delayedPhraseChanged);
106282 DOM.generate.on("click", generateClicked);
106283 DOM.more.on("click", showMore);
106284 DOM.rootKey.on("input", delayedRootKeyChanged);
106285 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
106286 DOM.bip32path.on("input", calcForDerivationPath);
106287 DOM.bip44account.on("input", calcForDerivationPath);
106288 DOM.bip44change.on("input", calcForDerivationPath);
106289 DOM.bip49account.on("input", calcForDerivationPath);
106290 DOM.bip49change.on("input", calcForDerivationPath);
106291 DOM.bip84account.on("input", calcForDerivationPath);
106292 DOM.bip84change.on("input", calcForDerivationPath);
106293 DOM.bip141path.on("input", calcForDerivationPath);
106294 DOM.bip141semantics.on("change", tabChanged);
106295 DOM.tab.on("shown.bs.tab", tabChanged);
106296 DOM.hardenedAddresses.on("change", calcForDerivationPath);
106297 DOM.useBip38.on("change", calcForDerivationPath);
106298 DOM.bip38Password.on("change", calcForDerivationPath);
106299 DOM.indexToggle.on("click", toggleIndexes);
106300 DOM.addressToggle.on("click", toggleAddresses);
106301 DOM.publicKeyToggle.on("click", togglePublicKeys);
106302 DOM.privateKeyToggle.on("click", togglePrivateKeys);
106303 DOM.csvTab.on("click", updateCsv);
106304 DOM.languages.on("click", languageChanged);
106305 DOM.bitcoinCashAddressType.on("change", bitcoinCashAddressTypeChange);
106306 setQrEvents(DOM.showQrEls);
106307 disableForms();
106308 hidePending();
106309 hideValidationError();
106310 populateNetworkSelect();
106311 populateClientSelect();
106312 }
106313
106314 // Event handlers
106315
106316 function generatedStrengthChanged() {
106317 var strength = parseInt(DOM.generatedStrength.val());
106318 if (strength < 12) {
106319 DOM.generatedStrengthWarning.removeClass("hidden");
106320 }
106321 else {
106322 DOM.generatedStrengthWarning.addClass("hidden");
106323 }
106324 }
106325
106326 function networkChanged(e) {
106327 clearDerivedKeys();
106328 clearAddressesList();
106329 DOM.litecoinLtubContainer.addClass("hidden");
106330 DOM.bitcoinCashAddressTypeContainer.addClass("hidden");
106331 var networkIndex = e.target.value;
106332 var network = networks[networkIndex];
106333 network.onSelect();
106334 if (network.segwitAvailable) {
106335 adjustNetworkForSegwit();
106336 showSegwitAvailable();
106337 }
106338 else {
106339 showSegwitUnavailable();
106340 }
106341 if (seed != null) {
106342 phraseChanged();
106343 }
106344 else {
106345 rootKeyChanged();
106346 }
106347 }
106348
106349 function bip32ClientChanged(e) {
106350 var clientIndex = DOM.bip32Client.val();
106351 if (clientIndex == "custom") {
106352 DOM.bip32path.prop("readonly", false);
106353 }
106354 else {
106355 DOM.bip32path.prop("readonly", true);
106356 clients[clientIndex].onSelect();
106357 if (seed != null) {
106358 phraseChanged();
106359 }
106360 else {
106361 rootKeyChanged();
106362 }
106363 }
106364 }
106365
106366 function setEntropyVisibility() {
106367 if (isUsingOwnEntropy()) {
106368 DOM.entropyContainer.removeClass("hidden");
106369 DOM.generateContainer.addClass("hidden");
106370 DOM.phrase.prop("readonly", true);
106371 DOM.entropy.focus();
106372 entropyChanged();
106373 }
106374 else {
106375 DOM.entropyContainer.addClass("hidden");
106376 DOM.generateContainer.removeClass("hidden");
106377 DOM.phrase.prop("readonly", false);
106378 hidePending();
106379 }
106380 }
106381
106382 function delayedPhraseChanged() {
106383 hideValidationError();
106384 seed = null;
106385 bip32RootKey = null;
106386 bip32ExtendedKey = null;
106387 clearAddressesList();
106388 showPending();
106389 if (phraseChangeTimeoutEvent != null) {
106390 clearTimeout(phraseChangeTimeoutEvent);
106391 }
106392 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
106393 }
106394
106395 function phraseChanged() {
106396 showPending();
106397 setMnemonicLanguage();
106398 // Get the mnemonic phrase
106399 var phrase = DOM.phrase.val();
106400 var errorText = findPhraseErrors(phrase);
106401 if (errorText) {
106402 showValidationError(errorText);
106403 return;
106404 }
106405 // Calculate and display
106406 var passphrase = DOM.passphrase.val();
106407 calcBip32RootKeyFromSeed(phrase, passphrase);
106408 calcForDerivationPath();
106409 // Show the word indexes
106410 showWordIndexes();
106411 }
106412
106413 function tabChanged() {
106414 showPending();
106415 adjustNetworkForSegwit();
106416 var phrase = DOM.phrase.val();
106417 if (phrase != "") {
106418 // Calculate and display for mnemonic
106419 var errorText = findPhraseErrors(phrase);
106420 if (errorText) {
106421 showValidationError(errorText);
106422 return;
106423 }
106424 // Calculate and display
106425 var passphrase = DOM.passphrase.val();
106426 calcBip32RootKeyFromSeed(phrase, passphrase);
106427 }
106428 else {
106429 // Calculate and display for root key
106430 var rootKeyBase58 = DOM.rootKey.val();
106431 var errorText = validateRootKey(rootKeyBase58);
106432 if (errorText) {
106433 showValidationError(errorText);
106434 return;
106435 }
106436 // Calculate and display
106437 calcBip32RootKeyFromBase58(rootKeyBase58);
106438 }
106439 calcForDerivationPath();
106440 }
106441
106442 function delayedEntropyChanged() {
106443 hideValidationError();
106444 showPending();
106445 if (entropyChangeTimeoutEvent != null) {
106446 clearTimeout(entropyChangeTimeoutEvent);
106447 }
106448 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
106449 }
106450
106451 function entropyChanged() {
106452 // If blank entropy, clear mnemonic, addresses, errors
106453 if (DOM.entropy.val().trim().length == 0) {
106454 clearDisplay();
106455 clearEntropyFeedback();
106456 DOM.phrase.val("");
106457 showValidationError("Blank entropy");
106458 return;
106459 }
106460 // Get the current phrase to detect changes
106461 var phrase = DOM.phrase.val();
106462 // Set the phrase from the entropy
106463 setMnemonicFromEntropy();
106464 // Recalc addresses if the phrase has changed
106465 var newPhrase = DOM.phrase.val();
106466 if (newPhrase != phrase) {
106467 if (newPhrase.length == 0) {
106468 clearDisplay();
106469 }
106470 else {
106471 phraseChanged();
106472 }
106473 }
106474 else {
106475 hidePending();
106476 }
106477 }
106478
106479 function delayedRootKeyChanged() {
106480 // Warn if there is an existing mnemonic or passphrase.
106481 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
106482 if (!confirm("This will clear existing mnemonic and passphrase")) {
106483 DOM.rootKey.val(bip32RootKey);
106484 return
106485 }
106486 }
106487 hideValidationError();
106488 showPending();
106489 // Clear existing mnemonic and passphrase
106490 DOM.phrase.val("");
106491 DOM.passphrase.val("");
106492 seed = null;
106493 if (rootKeyChangedTimeoutEvent != null) {
106494 clearTimeout(rootKeyChangedTimeoutEvent);
106495 }
106496 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
106497 }
106498
106499 function rootKeyChanged() {
106500 showPending();
106501 hideValidationError();
106502 var rootKeyBase58 = DOM.rootKey.val();
106503 var errorText = validateRootKey(rootKeyBase58);
106504 if (errorText) {
106505 showValidationError(errorText);
106506 return;
106507 }
106508 // Calculate and display
106509 calcBip32RootKeyFromBase58(rootKeyBase58);
106510 calcForDerivationPath();
106511 }
106512
106513 function litecoinUseLtubChanged() {
106514 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
106515 if (litecoinUseLtub) {
106516 network = bitcoinjs.bitcoin.networks.litecoin;
106517 }
106518 else {
106519 network = bitcoinjs.bitcoin.networks.litecoinXprv;
106520 }
106521 phraseChanged();
106522 }
106523
106524 function calcForDerivationPath() {
106525 clearDerivedKeys();
106526 clearAddressesList();
106527 showPending();
106528 // Don't show segwit if it's selected but network doesn't support it
106529 if (segwitSelected() && !networkHasSegwit()) {
106530 return;
106531 }
106532 // Get the derivation path
106533 var derivationPath = getDerivationPath();
106534 var errorText = findDerivationPathErrors(derivationPath);
106535 if (errorText) {
106536 showValidationError(errorText);
106537 return;
106538 }
106539 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
106540 if (bip44TabSelected()) {
106541 displayBip44Info();
106542 }
106543 else if (bip49TabSelected()) {
106544 displayBip49Info();
106545 }
106546 else if (bip84TabSelected()) {
106547 displayBip84Info();
106548 }
106549 displayBip32Info();
106550 }
106551
106552 function generateClicked() {
106553 if (isUsingOwnEntropy()) {
106554 return;
106555 }
106556 clearDisplay();
106557 showPending();
106558 setTimeout(function() {
106559 setMnemonicLanguage();
106560 var phrase = generateRandomPhrase();
106561 if (!phrase) {
106562 return;
106563 }
106564 phraseChanged();
106565 }, 50);
106566 }
106567
106568 function languageChanged() {
106569 setTimeout(function() {
106570 setMnemonicLanguage();
106571 if (DOM.phrase.val().length > 0) {
106572 var newPhrase = convertPhraseToNewLanguage();
106573 DOM.phrase.val(newPhrase);
106574 phraseChanged();
106575 }
106576 else {
106577 DOM.generate.trigger("click");
106578 }
106579 }, 50);
106580 }
106581
106582 function bitcoinCashAddressTypeChange() {
106583 phraseChanged();
106584 }
106585
106586 function toggleIndexes() {
106587 showIndex = !showIndex;
106588 $("td.index span").toggleClass("invisible");
106589 }
106590
106591 function toggleAddresses() {
106592 showAddress = !showAddress;
106593 $("td.address span").toggleClass("invisible");
106594 }
106595
106596 function togglePublicKeys() {
106597 showPubKey = !showPubKey;
106598 $("td.pubkey span").toggleClass("invisible");
106599 }
106600
106601 function togglePrivateKeys() {
106602 showPrivKey = !showPrivKey;
106603 $("td.privkey span").toggleClass("invisible");
106604 }
106605
106606 // Private methods
106607
106608 function generateRandomPhrase() {
106609 if (!hasStrongRandom()) {
106610 var errorText = "This browser does not support strong randomness";
106611 showValidationError(errorText);
106612 return;
106613 }
106614 // get the amount of entropy to use
106615 var numWords = parseInt(DOM.generatedStrength.val());
106616 var strength = numWords / 3 * 32;
106617 var buffer = new Uint8Array(strength / 8);
106618 // create secure entropy
106619 var data = crypto.getRandomValues(buffer);
106620 // show the words
106621 var words = mnemonic.toMnemonic(data);
106622 DOM.phrase.val(words);
106623 // show the entropy
106624 var entropyHex = uint8ArrayToHex(data);
106625 DOM.entropy.val(entropyHex);
106626 // ensure entropy fields are consistent with what is being displayed
106627 DOM.entropyMnemonicLength.val("raw");
106628 return words;
106629 }
106630
106631 function calcBip32RootKeyFromSeed(phrase, passphrase) {
106632 seed = mnemonic.toSeed(phrase, passphrase);
106633 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
106634 }
106635
106636 function calcBip32RootKeyFromBase58(rootKeyBase58) {
106637 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
106638 }
106639
106640 function calcBip32ExtendedKey(path) {
106641 // Check there's a root key to derive from
106642 if (!bip32RootKey) {
106643 return bip32RootKey;
106644 }
106645 var extendedKey = bip32RootKey;
106646 // Derive the key from the path
106647 var pathBits = path.split("/");
106648 for (var i=0; i<pathBits.length; i++) {
106649 var bit = pathBits[i];
106650 var index = parseInt(bit);
106651 if (isNaN(index)) {
106652 continue;
106653 }
106654 var hardened = bit[bit.length-1] == "'";
106655 var isPriv = !(extendedKey.isNeutered());
106656 var invalidDerivationPath = hardened && !isPriv;
106657 if (invalidDerivationPath) {
106658 extendedKey = null;
106659 }
106660 else if (hardened) {
106661 extendedKey = extendedKey.deriveHardened(index);
106662 }
106663 else {
106664 extendedKey = extendedKey.derive(index);
106665 }
106666 }
106667 return extendedKey
106668 }
106669
106670 function showValidationError(errorText) {
106671 DOM.feedback
106672 .text(errorText)
106673 .show();
106674 }
106675
106676 function hideValidationError() {
106677 DOM.feedback
106678 .text("")
106679 .hide();
106680 }
106681
106682 function findPhraseErrors(phrase) {
106683 // Preprocess the words
106684 phrase = mnemonic.normalizeString(phrase);
106685 var words = phraseToWordArray(phrase);
106686 // Detect blank phrase
106687 if (words.length == 0) {
106688 return "Blank mnemonic";
106689 }
106690 // Check each word
106691 for (var i=0; i<words.length; i++) {
106692 var word = words[i];
106693 var language = getLanguage();
106694 if (WORDLISTS[language].indexOf(word) == -1) {
106695 console.log("Finding closest match to " + word);
106696 var nearestWord = findNearestWord(word);
106697 return word + " not in wordlist, did you mean " + nearestWord + "?";
106698 }
106699 }
106700 // Check the words are valid
106701 var properPhrase = wordArrayToPhrase(words);
106702 var isValid = mnemonic.check(properPhrase);
106703 if (!isValid) {
106704 return "Invalid mnemonic";
106705 }
106706 return false;
106707 }
106708
106709 function validateRootKey(rootKeyBase58) {
106710 try {
106711 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
106712 }
106713 catch (e) {
106714 return "Invalid root key";
106715 }
106716 return "";
106717 }
106718
106719 function getDerivationPath() {
106720 if (bip44TabSelected()) {
106721 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
106722 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
106723 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
106724 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
106725 var path = "m/";
106726 path += purpose + "'/";
106727 path += coin + "'/";
106728 path += account + "'/";
106729 path += change;
106730 DOM.bip44path.val(path);
106731 var derivationPath = DOM.bip44path.val();
106732 console.log("Using derivation path from BIP44 tab: " + derivationPath);
106733 return derivationPath;
106734 }
106735 else if (bip49TabSelected()) {
106736 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
106737 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
106738 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
106739 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
106740 var path = "m/";
106741 path += purpose + "'/";
106742 path += coin + "'/";
106743 path += account + "'/";
106744 path += change;
106745 DOM.bip49path.val(path);
106746 var derivationPath = DOM.bip49path.val();
106747 console.log("Using derivation path from BIP49 tab: " + derivationPath);
106748 return derivationPath;
106749 }
106750 else if (bip84TabSelected()) {
106751 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
106752 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
106753 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
106754 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
106755 var path = "m/";
106756 path += purpose + "'/";
106757 path += coin + "'/";
106758 path += account + "'/";
106759 path += change;
106760 DOM.bip84path.val(path);
106761 var derivationPath = DOM.bip84path.val();
106762 console.log("Using derivation path from BIP84 tab: " + derivationPath);
106763 return derivationPath;
106764 }
106765 else if (bip32TabSelected()) {
106766 var derivationPath = DOM.bip32path.val();
106767 console.log("Using derivation path from BIP32 tab: " + derivationPath);
106768 return derivationPath;
106769 }
106770 else if (bip141TabSelected()) {
106771 var derivationPath = DOM.bip141path.val();
106772 console.log("Using derivation path from BIP141 tab: " + derivationPath);
106773 return derivationPath;
106774 }
106775 else {
106776 console.log("Unknown derivation path");
106777 }
106778 }
106779
106780 function findDerivationPathErrors(path) {
106781 // TODO is not perfect but is better than nothing
106782 // Inspired by
106783 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
106784 // and
106785 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
106786 var maxDepth = 255; // TODO verify this!!
106787 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
106788 if (path[0] != "m") {
106789 return "First character must be 'm'";
106790 }
106791 if (path.length > 1) {
106792 if (path[1] != "/") {
106793 return "Separator must be '/'";
106794 }
106795 var indexes = path.split("/");
106796 if (indexes.length > maxDepth) {
106797 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
106798 }
106799 for (var depth = 1; depth<indexes.length; depth++) {
106800 var index = indexes[depth];
106801 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
106802 if (invalidChars.length > 0) {
106803 return "Invalid characters " + invalidChars + " found at depth " + depth;
106804 }
106805 var indexValue = parseInt(index.replace("'", ""));
106806 if (isNaN(depth)) {
106807 return "Invalid number at depth " + depth;
106808 }
106809 if (indexValue > maxIndexValue) {
106810 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
106811 }
106812 }
106813 }
106814 // Check root key exists or else derivation path is useless!
106815 if (!bip32RootKey) {
106816 return "No root key";
106817 }
106818 // Check no hardened derivation path when using xpub keys
106819 var hardenedPath = path.indexOf("'") > -1;
106820 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
106821 var hardened = hardenedPath || hardenedAddresses;
106822 var isXpubkey = bip32RootKey.isNeutered();
106823 if (hardened && isXpubkey) {
106824 return "Hardened derivation path is invalid with xpub key";
106825 }
106826 return false;
106827 }
106828
106829 function displayBip44Info() {
106830 // Get the derivation path for the account
106831 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
106832 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
106833 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
106834 var path = "m/";
106835 path += purpose + "'/";
106836 path += coin + "'/";
106837 path += account + "'/";
106838 // Calculate the account extended keys
106839 var accountExtendedKey = calcBip32ExtendedKey(path);
106840 var accountXprv = accountExtendedKey.toBase58();
106841 var accountXpub = accountExtendedKey.neutered().toBase58();
106842 // Display the extended keys
106843 DOM.bip44accountXprv.val(accountXprv);
106844 DOM.bip44accountXpub.val(accountXpub);
106845 }
106846
106847 function displayBip49Info() {
106848 // Get the derivation path for the account
106849 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
106850 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
106851 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
106852 var path = "m/";
106853 path += purpose + "'/";
106854 path += coin + "'/";
106855 path += account + "'/";
106856 // Calculate the account extended keys
106857 var accountExtendedKey = calcBip32ExtendedKey(path);
106858 var accountXprv = accountExtendedKey.toBase58();
106859 var accountXpub = accountExtendedKey.neutered().toBase58();
106860 // Display the extended keys
106861 DOM.bip49accountXprv.val(accountXprv);
106862 DOM.bip49accountXpub.val(accountXpub);
106863 }
106864
106865 function displayBip84Info() {
106866 // Get the derivation path for the account
106867 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
106868 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
106869 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
106870 var path = "m/";
106871 path += purpose + "'/";
106872 path += coin + "'/";
106873 path += account + "'/";
106874 // Calculate the account extended keys
106875 var accountExtendedKey = calcBip32ExtendedKey(path);
106876 var accountXprv = accountExtendedKey.toBase58();
106877 var accountXpub = accountExtendedKey.neutered().toBase58();
106878 // Display the extended keys
106879 DOM.bip84accountXprv.val(accountXprv);
106880 DOM.bip84accountXpub.val(accountXpub);
106881 }
106882
106883 function displayBip32Info() {
106884 // Display the key
106885 DOM.seed.val(seed);
106886 var rootKey = bip32RootKey.toBase58();
106887 DOM.rootKey.val(rootKey);
106888 var xprvkeyB58 = "NA";
106889 if (!bip32ExtendedKey.isNeutered()) {
106890 xprvkeyB58 = bip32ExtendedKey.toBase58();
106891 }
106892 var extendedPrivKey = xprvkeyB58;
106893 DOM.extendedPrivKey.val(extendedPrivKey);
106894 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
106895 DOM.extendedPubKey.val(extendedPubKey);
106896 // Display the addresses and privkeys
106897 clearAddressesList();
106898 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
106899 displayAddresses(0, initialAddressCount);
106900 }
106901
106902 function displayAddresses(start, total) {
106903 generationProcesses.push(new (function() {
106904
106905 var rows = [];
106906
106907 this.stop = function() {
106908 for (var i=0; i<rows.length; i++) {
106909 rows[i].shouldGenerate = false;
106910 }
106911 hidePending();
106912 }
106913
106914 for (var i=0; i<total; i++) {
106915 var index = i + start;
106916 var isLast = i == total - 1;
106917 rows.push(new TableRow(index, isLast));
106918 }
106919
106920 })());
106921 }
106922
106923 function segwitSelected() {
106924 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
106925 }
106926
106927 function p2wpkhSelected() {
106928 return bip84TabSelected() ||
106929 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
106930 }
106931
106932 function p2wpkhInP2shSelected() {
106933 return bip49TabSelected() ||
106934 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
106935 }
106936
106937 function TableRow(index, isLast) {
106938
106939 var self = this;
106940 this.shouldGenerate = true;
106941 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
106942 var useBip38 = DOM.useBip38.prop("checked");
106943 var bip38password = DOM.bip38Password.val();
106944 var isSegwit = segwitSelected();
106945 var segwitAvailable = networkHasSegwit();
106946 var isP2wpkh = p2wpkhSelected();
106947 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
106948
106949 function init() {
106950 calculateValues();
106951 }
106952
106953 function calculateValues() {
106954 setTimeout(function() {
106955 if (!self.shouldGenerate) {
106956 return;
106957 }
106958 // derive HDkey for this row of the table
106959 var key = "NA";
106960 if (useHardenedAddresses) {
106961 key = bip32ExtendedKey.deriveHardened(index);
106962 }
106963 else {
106964 key = bip32ExtendedKey.derive(index);
106965 }
106966 // bip38 requires uncompressed keys
106967 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
106968 var keyPair = key.keyPair;
106969 var useUncompressed = useBip38;
106970 if (useUncompressed) {
106971 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false });
106972 }
106973 // get address
106974 var address = keyPair.getAddress().toString();
106975 // get privkey
106976 var hasPrivkey = !key.isNeutered();
106977 var privkey = "NA";
106978 if (hasPrivkey) {
106979 privkey = keyPair.toWIF(network);
106980 // BIP38 encode private key if required
106981 if (useBip38) {
106982 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
106983 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
106984 });
106985 }
106986 }
106987 // get pubkey
106988 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
106989 var indexText = getDerivationPath() + "/" + index;
106990 if (useHardenedAddresses) {
106991 indexText = indexText + "'";
106992 }
106993 // Ethereum values are different
106994 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
106995 var privKeyBuffer = keyPair.d.toBuffer(32);
106996 privkey = privKeyBuffer.toString('hex');
106997 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
106998 var hexAddress = addressBuffer.toString('hex');
106999 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
107000 address = ethUtil.addHexPrefix(checksumAddress);
107001 privkey = ethUtil.addHexPrefix(privkey);
107002 pubkey = ethUtil.addHexPrefix(pubkey);
107003 }
107004 // Ripple values are different
107005 if (networks[DOM.network.val()].name == "XRP - Ripple") {
107006 privkey = convertRipplePriv(privkey);
107007 address = convertRippleAdrr(address);
107008 }
107009 // Bitcoin Cash address format may vary
107010 if (networks[DOM.network.val()].name == "BCH - Bitcoin Cash") {
107011 var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val();
107012 if (bchAddrType == "cashaddr") {
107013 address = bchaddr.toCashAddress(address);
107014 }
107015 else if (bchAddrType == "bitpay") {
107016 address = bchaddr.toBitpayAddress(address);
107017 }
107018 }
107019 // Segwit addresses are different
107020 if (isSegwit) {
107021 if (!segwitAvailable) {
107022 return;
107023 }
107024 if (isP2wpkh) {
107025 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
107026 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
107027 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
107028 }
107029 else if (isP2wpkhInP2sh) {
107030 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
107031 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
107032 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
107033 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
107034 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
107035 }
107036 }
107037 addAddressToList(indexText, address, pubkey, privkey);
107038 if (isLast) {
107039 hidePending();
107040 updateCsv();
107041 }
107042 }, 50)
107043 }
107044
107045 init();
107046
107047 }
107048
107049 function showMore() {
107050 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
107051 if (isNaN(rowsToAdd)) {
107052 rowsToAdd = 20;
107053 DOM.rowsToAdd.val("20");
107054 }
107055 var start = parseInt(DOM.moreRowsStartIndex.val())
107056 if (isNaN(start)) {
107057 start = lastIndexInTable() + 1;
107058 }
107059 else {
107060 var newStart = start + rowsToAdd;
107061 DOM.moreRowsStartIndex.val(newStart);
107062 }
107063 if (rowsToAdd > 200) {
107064 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
107065 msg += "Do you want to continue?";
107066 if (!confirm(msg)) {
107067 return;
107068 }
107069 }
107070 displayAddresses(start, rowsToAdd);
107071 }
107072
107073 function clearDisplay() {
107074 clearAddressesList();
107075 clearKeys();
107076 hideValidationError();
107077 }
107078
107079 function clearAddressesList() {
107080 DOM.addresses.empty();
107081 DOM.csv.val("");
107082 stopGenerating();
107083 }
107084
107085 function stopGenerating() {
107086 while (generationProcesses.length > 0) {
107087 var generation = generationProcesses.shift();
107088 generation.stop();
107089 }
107090 }
107091
107092 function clearKeys() {
107093 clearRootKey();
107094 clearDerivedKeys();
107095 }
107096
107097 function clearRootKey() {
107098 DOM.rootKey.val("");
107099 }
107100
107101 function clearDerivedKeys() {
107102 DOM.extendedPrivKey.val("");
107103 DOM.extendedPubKey.val("");
107104 DOM.bip44accountXprv.val("");
107105 DOM.bip44accountXpub.val("");
107106 }
107107
107108 function addAddressToList(indexText, address, pubkey, privkey) {
107109 var row = $(addressRowTemplate.html());
107110 // Elements
107111 var indexCell = row.find(".index span");
107112 var addressCell = row.find(".address span");
107113 var pubkeyCell = row.find(".pubkey span");
107114 var privkeyCell = row.find(".privkey span");
107115 // Content
107116 indexCell.text(indexText);
107117 addressCell.text(address);
107118 pubkeyCell.text(pubkey);
107119 privkeyCell.text(privkey);
107120 // Visibility
107121 if (!showIndex) {
107122 indexCell.addClass("invisible");
107123 }
107124 if (!showAddress) {
107125 addressCell.addClass("invisible");
107126 }
107127 if (!showPubKey) {
107128 pubkeyCell.addClass("invisible");
107129 }
107130 if (!showPrivKey) {
107131 privkeyCell.addClass("invisible");
107132 }
107133 DOM.addresses.append(row);
107134 var rowShowQrEls = row.find("[data-show-qr]");
107135 setQrEvents(rowShowQrEls);
107136 }
107137
107138 function hasStrongRandom() {
107139 return 'crypto' in window && window['crypto'] !== null;
107140 }
107141
107142 function disableForms() {
107143 $("form").on("submit", function(e) {
107144 e.preventDefault();
107145 });
107146 }
107147
107148 function parseIntNoNaN(val, defaultVal) {
107149 var v = parseInt(val);
107150 if (isNaN(v)) {
107151 return defaultVal;
107152 }
107153 return v;
107154 }
107155
107156 function showPending() {
107157 DOM.feedback
107158 .text("Calculating...")
107159 .show();
107160 }
107161
107162 function findNearestWord(word) {
107163 var language = getLanguage();
107164 var words = WORDLISTS[language];
107165 var minDistance = 99;
107166 var closestWord = words[0];
107167 for (var i=0; i<words.length; i++) {
107168 var comparedTo = words[i];
107169 if (comparedTo.indexOf(word) == 0) {
107170 return comparedTo;
107171 }
107172 var distance = Levenshtein.get(word, comparedTo);
107173 if (distance < minDistance) {
107174 closestWord = comparedTo;
107175 minDistance = distance;
107176 }
107177 }
107178 return closestWord;
107179 }
107180
107181 function hidePending() {
107182 DOM.feedback
107183 .text("")
107184 .hide();
107185 }
107186
107187 function populateNetworkSelect() {
107188 for (var i=0; i<networks.length; i++) {
107189 var network = networks[i];
107190 var option = $("<option>");
107191 option.attr("value", i);
107192 option.text(network.name);
107193 if (network.name == "BTC - Bitcoin") {
107194 option.prop("selected", true);
107195 }
107196 DOM.phraseNetwork.append(option);
107197 }
107198 }
107199
107200 function populateClientSelect() {
107201 for (var i=0; i<clients.length; i++) {
107202 var client = clients[i];
107203 var option = $("<option>");
107204 option.attr("value", i);
107205 option.text(client.name);
107206 DOM.bip32Client.append(option);
107207 }
107208 }
107209
107210 function getLanguage() {
107211 var defaultLanguage = "english";
107212 // Try to get from existing phrase
107213 var language = getLanguageFromPhrase();
107214 // Try to get from url if not from phrase
107215 if (language.length == 0) {
107216 language = getLanguageFromUrl();
107217 }
107218 // Default to English if no other option
107219 if (language.length == 0) {
107220 language = defaultLanguage;
107221 }
107222 return language;
107223 }
107224
107225 function getLanguageFromPhrase(phrase) {
107226 // Check if how many words from existing phrase match a language.
107227 var language = "";
107228 if (!phrase) {
107229 phrase = DOM.phrase.val();
107230 }
107231 if (phrase.length > 0) {
107232 var words = phraseToWordArray(phrase);
107233 var languageMatches = {};
107234 for (l in WORDLISTS) {
107235 // Track how many words match in this language
107236 languageMatches[l] = 0;
107237 for (var i=0; i<words.length; i++) {
107238 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
107239 if (wordInLanguage) {
107240 languageMatches[l]++;
107241 }
107242 }
107243 // Find languages with most word matches.
107244 // This is made difficult due to commonalities between Chinese
107245 // simplified vs traditional.
107246 var mostMatches = 0;
107247 var mostMatchedLanguages = [];
107248 for (var l in languageMatches) {
107249 var numMatches = languageMatches[l];
107250 if (numMatches > mostMatches) {
107251 mostMatches = numMatches;
107252 mostMatchedLanguages = [l];
107253 }
107254 else if (numMatches == mostMatches) {
107255 mostMatchedLanguages.push(l);
107256 }
107257 }
107258 }
107259 if (mostMatchedLanguages.length > 0) {
107260 // Use first language and warn if multiple detected
107261 language = mostMatchedLanguages[0];
107262 if (mostMatchedLanguages.length > 1) {
107263 console.warn("Multiple possible languages");
107264 console.warn(mostMatchedLanguages);
107265 }
107266 }
107267 }
107268 return language;
107269 }
107270
107271 function getLanguageFromUrl() {
107272 for (var language in WORDLISTS) {
107273 if (window.location.hash.indexOf(language) > -1) {
107274 return language;
107275 }
107276 }
107277 return "";
107278 }
107279
107280 function setMnemonicLanguage() {
107281 var language = getLanguage();
107282 // Load the bip39 mnemonic generator for this language if required
107283 if (!(language in mnemonics)) {
107284 mnemonics[language] = new Mnemonic(language);
107285 }
107286 mnemonic = mnemonics[language];
107287 }
107288
107289 function convertPhraseToNewLanguage() {
107290 var oldLanguage = getLanguageFromPhrase();
107291 var newLanguage = getLanguageFromUrl();
107292 var oldPhrase = DOM.phrase.val();
107293 var oldWords = phraseToWordArray(oldPhrase);
107294 var newWords = [];
107295 for (var i=0; i<oldWords.length; i++) {
107296 var oldWord = oldWords[i];
107297 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
107298 var newWord = WORDLISTS[newLanguage][index];
107299 newWords.push(newWord);
107300 }
107301 newPhrase = wordArrayToPhrase(newWords);
107302 return newPhrase;
107303 }
107304
107305 // TODO look at jsbip39 - mnemonic.splitWords
107306 function phraseToWordArray(phrase) {
107307 var words = phrase.split(/\s/g);
107308 var noBlanks = [];
107309 for (var i=0; i<words.length; i++) {
107310 var word = words[i];
107311 if (word.length > 0) {
107312 noBlanks.push(word);
107313 }
107314 }
107315 return noBlanks;
107316 }
107317
107318 // TODO look at jsbip39 - mnemonic.joinWords
107319 function wordArrayToPhrase(words) {
107320 var phrase = words.join(" ");
107321 var language = getLanguageFromPhrase(phrase);
107322 if (language == "japanese") {
107323 phrase = words.join("\u3000");
107324 }
107325 return phrase;
107326 }
107327
107328 function isUsingOwnEntropy() {
107329 return DOM.useEntropy.prop("checked");
107330 }
107331
107332 function setMnemonicFromEntropy() {
107333 clearEntropyFeedback();
107334 // Get entropy value
107335 var entropyStr = DOM.entropy.val();
107336 // Work out minimum base for entropy
107337 var entropy = Entropy.fromString(entropyStr);
107338 if (entropy.binaryStr.length == 0) {
107339 return;
107340 }
107341 // Show entropy details
107342 showEntropyFeedback(entropy);
107343 // Use entropy hash if not using raw entropy
107344 var bits = entropy.binaryStr;
107345 var mnemonicLength = DOM.entropyMnemonicLength.val();
107346 if (mnemonicLength != "raw") {
107347 // Get bits by hashing entropy with SHA256
107348 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
107349 var hex = sjcl.codec.hex.fromBits(hash);
107350 bits = BigInteger.parse(hex, 16).toString(2);
107351 while (bits.length % 256 != 0) {
107352 bits = "0" + bits;
107353 }
107354 // Truncate hash to suit number of words
107355 mnemonicLength = parseInt(mnemonicLength);
107356 var numberOfBits = 32 * mnemonicLength / 3;
107357 bits = bits.substring(0, numberOfBits);
107358 // show warning for weak entropy override
107359 if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) {
107360 DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden");
107361 }
107362 else {
107363 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
107364 }
107365 }
107366 else {
107367 // hide warning for weak entropy override
107368 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
107369 }
107370 // Discard trailing entropy
107371 var bitsToUse = Math.floor(bits.length / 32) * 32;
107372 var start = bits.length - bitsToUse;
107373 var binaryStr = bits.substring(start);
107374 // Convert entropy string to numeric array
107375 var entropyArr = [];
107376 for (var i=0; i<binaryStr.length / 8; i++) {
107377 var byteAsBits = binaryStr.substring(i*8, i*8+8);
107378 var entropyByte = parseInt(byteAsBits, 2);
107379 entropyArr.push(entropyByte)
107380 }
107381 // Convert entropy array to mnemonic
107382 var phrase = mnemonic.toMnemonic(entropyArr);
107383 // Set the mnemonic in the UI
107384 DOM.phrase.val(phrase);
107385 // Show the word indexes
107386 showWordIndexes();
107387 // Show the checksum
107388 showChecksum();
107389 }
107390
107391 function clearEntropyFeedback() {
107392 DOM.entropyCrackTime.text("...");
107393 DOM.entropyType.text("");
107394 DOM.entropyWordCount.text("0");
107395 DOM.entropyEventCount.text("0");
107396 DOM.entropyBitsPerEvent.text("0");
107397 DOM.entropyBits.text("0");
107398 DOM.entropyFiltered.html("&nbsp;");
107399 DOM.entropyBinary.html("&nbsp;");
107400 }
107401
107402 function showEntropyFeedback(entropy) {
107403 var numberOfBits = entropy.binaryStr.length;
107404 var timeToCrack = "unknown";
107405 try {
107406 var z = zxcvbn(entropy.base.parts.join(""));
107407 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
107408 if (z.feedback.warning != "") {
107409 timeToCrack = timeToCrack + " - " + z.feedback.warning;
107410 };
107411 }
107412 catch (e) {
107413 console.log("Error detecting entropy strength with zxcvbn:");
107414 console.log(e);
107415 }
107416 var entropyTypeStr = getEntropyTypeStr(entropy);
107417 var wordCount = Math.floor(numberOfBits / 32) * 3;
107418 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
107419 var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr);
107420 DOM.entropyFiltered.html(entropy.cleanHtml);
107421 DOM.entropyType.text(entropyTypeStr);
107422 DOM.entropyCrackTime.text(timeToCrack);
107423 DOM.entropyEventCount.text(entropy.base.ints.length);
107424 DOM.entropyBits.text(numberOfBits);
107425 DOM.entropyWordCount.text(wordCount);
107426 DOM.entropyBinary.text(spacedBinaryStr);
107427 DOM.entropyBitsPerEvent.text(bitsPerEvent);
107428 // detect and warn of filtering
107429 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
107430 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
107431 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
107432 if (isFiltered) {
107433 DOM.entropyFilterWarning.removeClass('hidden');
107434 }
107435 else {
107436 DOM.entropyFilterWarning.addClass('hidden');
107437 }
107438 }
107439
107440 function getEntropyTypeStr(entropy) {
107441 var typeStr = entropy.base.str;
107442 // Add some detail if these are cards
107443 if (entropy.base.asInt == 52) {
107444 var cardDetail = []; // array of message strings
107445 // Detect duplicates
107446 var dupes = [];
107447 var dupeTracker = {};
107448 for (var i=0; i<entropy.base.parts.length; i++) {
107449 var card = entropy.base.parts[i];
107450 var cardUpper = card.toUpperCase();
107451 if (cardUpper in dupeTracker) {
107452 dupes.push(card);
107453 }
107454 dupeTracker[cardUpper] = true;
107455 }
107456 if (dupes.length > 0) {
107457 var dupeWord = "duplicates";
107458 if (dupes.length == 1) {
107459 dupeWord = "duplicate";
107460 }
107461 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
107462 if (dupes.length > 3) {
107463 msg += "...";
107464 }
107465 cardDetail.push(msg);
107466 }
107467 // Detect full deck
107468 var uniqueCards = [];
107469 for (var uniqueCard in dupeTracker) {
107470 uniqueCards.push(uniqueCard);
107471 }
107472 if (uniqueCards.length == 52) {
107473 cardDetail.unshift("full deck");
107474 }
107475 // Detect missing cards
107476 var values = "A23456789TJQK";
107477 var suits = "CDHS";
107478 var missingCards = [];
107479 for (var i=0; i<suits.length; i++) {
107480 for (var j=0; j<values.length; j++) {
107481 var card = values[j] + suits[i];
107482 if (!(card in dupeTracker)) {
107483 missingCards.push(card);
107484 }
107485 }
107486 }
107487 // Display missing cards if six or less, ie clearly going for full deck
107488 if (missingCards.length > 0 && missingCards.length <= 6) {
107489 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
107490 if (missingCards.length > 3) {
107491 msg += "...";
107492 }
107493 cardDetail.push(msg);
107494 }
107495 // Add card details to typeStr
107496 if (cardDetail.length > 0) {
107497 typeStr += " (" + cardDetail.join(", ") + ")";
107498 }
107499 }
107500 return typeStr;
107501 }
107502
107503 function setQrEvents(els) {
107504 els.on("mouseenter", createQr);
107505 els.on("mouseleave", destroyQr);
107506 els.on("click", toggleQr);
107507 }
107508
107509 function createQr(e) {
107510 var content = e.target.textContent || e.target.value;
107511 if (content) {
107512 var qrEl = kjua({
107513 text: content,
107514 render: "canvas",
107515 size: 310,
107516 ecLevel: 'H',
107517 });
107518 DOM.qrImage.append(qrEl);
107519 if (!showQr) {
107520 DOM.qrHider.addClass("hidden");
107521 }
107522 else {
107523 DOM.qrHider.removeClass("hidden");
107524 }
107525 DOM.qrContainer.removeClass("hidden");
107526 }
107527 }
107528
107529 function destroyQr() {
107530 DOM.qrImage.text("");
107531 DOM.qrContainer.addClass("hidden");
107532 }
107533
107534 function toggleQr() {
107535 showQr = !showQr;
107536 DOM.qrHider.toggleClass("hidden");
107537 DOM.qrHint.toggleClass("hidden");
107538 }
107539
107540 function bip44TabSelected() {
107541 return DOM.bip44tab.hasClass("active");
107542 }
107543
107544 function bip32TabSelected() {
107545 return DOM.bip32tab.hasClass("active");
107546 }
107547
107548 function networkHasSegwit() {
107549 return networks[DOM.network.val()].segwitAvailable;
107550 }
107551
107552 function bip49TabSelected() {
107553 return DOM.bip49tab.hasClass("active");
107554 }
107555
107556 function bip84TabSelected() {
107557 return DOM.bip84tab.hasClass("active");
107558 }
107559
107560 function bip141TabSelected() {
107561 return DOM.bip141tab.hasClass("active");
107562 }
107563
107564 function setHdCoin(coinValue) {
107565 DOM.bip44coin.val(coinValue);
107566 DOM.bip49coin.val(coinValue);
107567 DOM.bip84coin.val(coinValue);
107568 }
107569
107570 function showSegwitAvailable() {
107571 DOM.bip49unavailable.addClass("hidden");
107572 DOM.bip49available.removeClass("hidden");
107573 DOM.bip141unavailable.addClass("hidden");
107574 DOM.bip141available.removeClass("hidden");
107575 }
107576
107577 function showSegwitUnavailable() {
107578 DOM.bip49available.addClass("hidden");
107579 DOM.bip49unavailable.removeClass("hidden");
107580 DOM.bip141available.addClass("hidden");
107581 DOM.bip141unavailable.removeClass("hidden");
107582 }
107583
107584 function adjustNetworkForSegwit() {
107585 // If segwit is selected the xpub/xprv prefixes need to be adjusted
107586 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
107587 // wallet.
107588 // See https://github.com/iancoleman/bip39/issues/125
107589 var segwitNetworks = null;
107590 // if a segwit network is alread selected, need to use base network to
107591 // look up new parameters
107592 if ("baseNetwork" in network) {
107593 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
107594 }
107595 // choose the right segwit params
107596 if (p2wpkhSelected() && "p2wpkh" in network) {
107597 network = network.p2wpkh;
107598 }
107599 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
107600 network = network.p2wpkhInP2sh;
107601 }
107602 }
107603
107604 function lastIndexInTable() {
107605 var pathText = DOM.addresses.find(".index").last().text();
107606 var pathBits = pathText.split("/");
107607 var lastBit = pathBits[pathBits.length-1];
107608 var lastBitClean = lastBit.replace("'", "");
107609 return parseInt(lastBitClean);
107610 }
107611
107612 function uint8ArrayToHex(a) {
107613 var s = ""
107614 for (var i=0; i<a.length; i++) {
107615 var h = a[i].toString(16);
107616 while (h.length < 2) {
107617 h = "0" + h;
107618 }
107619 s = s + h;
107620 }
107621 return s;
107622 }
107623
107624 function showWordIndexes() {
107625 var phrase = DOM.phrase.val();
107626 var words = phraseToWordArray(phrase);
107627 var wordIndexes = [];
107628 var language = getLanguage();
107629 for (var i=0; i<words.length; i++) {
107630 var word = words[i];
107631 var wordIndex = WORDLISTS[language].indexOf(word);
107632 wordIndexes.push(wordIndex);
107633 }
107634 var wordIndexesStr = wordIndexes.join(", ");
107635 DOM.entropyWordIndexes.text(wordIndexesStr);
107636 }
107637
107638 function showChecksum() {
107639 var phrase = DOM.phrase.val();
107640 var words = phraseToWordArray(phrase);
107641 var checksumBitlength = words.length / 3;
107642 var checksum = "";
107643 var binaryStr = "";
107644 var language = getLanguage();
107645 for (var i=words.length-1; i>=0; i--) {
107646 var word = words[i];
107647 var wordIndex = WORDLISTS[language].indexOf(word);
107648 var wordBinary = wordIndex.toString(2);
107649 while (wordBinary.length < 11) {
107650 wordBinary = "0" + wordBinary;
107651 }
107652 var binaryStr = wordBinary + binaryStr;
107653 if (binaryStr.length >= checksumBitlength) {
107654 var start = binaryStr.length - checksumBitlength;
107655 var end = binaryStr.length;
107656 checksum = binaryStr.substring(start, end);
107657 // add spaces so the last group is 11 bits, not the first
107658 checksum = checksum.split("").reverse().join("")
107659 checksum = addSpacesEveryElevenBits(checksum);
107660 checksum = checksum.split("").reverse().join("")
107661 break;
107662 }
107663 }
107664 DOM.entropyChecksum.text(checksum);
107665 }
107666
107667 function updateCsv() {
107668 var tableCsv = "path,address,public key,private key\n";
107669 var rows = DOM.addresses.find("tr");
107670 for (var i=0; i<rows.length; i++) {
107671 var row = $(rows[i]);
107672 var cells = row.find("td");
107673 for (var j=0; j<cells.length; j++) {
107674 var cell = $(cells[j]);
107675 if (!cell.children().hasClass("invisible")) {
107676 tableCsv = tableCsv + cell.text();
107677 }
107678 if (j != cells.length - 1) {
107679 tableCsv = tableCsv + ",";
107680 }
107681 }
107682 tableCsv = tableCsv + "\n";
107683 }
107684 DOM.csv.val(tableCsv);
107685 }
107686
107687 function addSpacesEveryElevenBits(binaryStr) {
107688 return binaryStr.match(/.{1,11}/g).join(" ");
107689 }
107690
107691 var networks = [
107692 {
107693 name: "AC - Asiacoin",
107694 segwitAvailable: false,
107695 onSelect: function() {
107696 network = bitcoinjs.bitcoin.networks.asiacoin;
107697 setHdCoin(51);
107698 },
107699 },
107700 {
107701 name: "ACC - Adcoin",
107702 segwitAvailable: true,
107703 onSelect: function() {
107704 network = bitcoinjs.bitcoin.networks.adcoin;
107705 setHdCoin(161);
107706 },
107707 },
107708 {
107709 name: "AUR - Auroracoin",
107710 segwitAvailable: false,
107711 onSelect: function() {
107712 network = bitcoinjs.bitcoin.networks.auroracoin;
107713 setHdCoin(85);
107714 },
107715 },
107716 {
107717 name: "AXE - Axe",
107718 segwitAvailable: false,
107719 onSelect: function() {
107720 network = bitcoinjs.bitcoin.networks.axe;
107721 setHdCoin(0);
107722 },
107723 },
107724 {
107725 name: "BCA - Bitcoin Atom",
107726 segwitAvailable: true,
107727 onSelect: function() {
107728 network = bitcoinjs.bitcoin.networks.atom;
107729 setHdCoin(185);
107730 },
107731 },
107732 {
107733 name: "BCH - Bitcoin Cash",
107734 segwitAvailable: false,
107735 onSelect: function() {
107736 DOM.bitcoinCashAddressTypeContainer.removeClass("hidden");
107737 setHdCoin(145);
107738 },
107739 },
107740 {
107741 name: "BEET - Beetlecoin",
107742 segwitAvailable: false,
107743 onSelect: function() {
107744 network = bitcoinjs.bitcoin.networks.beetlecoin;
107745 setHdCoin(800);
107746 },
107747 },
107748 {
107749 name: "BELA - Belacoin",
107750 segwitAvailable: false,
107751 onSelect: function() {
107752 network = bitcoinjs.bitcoin.networks.belacoin;
107753 setHdCoin(73);
107754 },
107755 },
107756 {
107757 name: "BLK - BlackCoin",
107758 segwitAvailable: false,
107759 onSelect: function() {
107760 network = bitcoinjs.bitcoin.networks.blackcoin;
107761 setHdCoin(10);
107762 },
107763 },
107764 {
107765 name: "BRIT - Britcoin",
107766 segwitAvailable: false,
107767 onSelect: function() {
107768 network = bitcoinjs.bitcoin.networks.britcoin;
107769 setHdCoin(70);
107770 },
107771 },
107772 {
107773 name: "BSD - Bitsend",
107774 segwitAvailable: true,
107775 onSelect: function() {
107776 network = bitcoinjs.bitcoin.networks.bitsend;
107777 setHdCoin(91);
107778 },
107779 },
107780 {
107781 name: "BTA - Bata",
107782 segwitAvailable: false,
107783 onSelect: function() {
107784 network = bitcoinjs.bitcoin.networks.bata;
107785 setHdCoin(89);
107786 },
107787 },
107788 {
107789 name: "BTC - Bitcoin",
107790 segwitAvailable: true,
107791 onSelect: function() {
107792 network = bitcoinjs.bitcoin.networks.bitcoin;
107793 setHdCoin(0);
107794 },
107795 },
107796 {
107797 name: "BTC - Bitcoin Testnet",
107798 segwitAvailable: true,
107799 onSelect: function() {
107800 network = bitcoinjs.bitcoin.networks.testnet;
107801 setHdCoin(1);
107802 },
107803 },
107804 {
107805 name: "BTG - Bitcoin Gold",
107806 segwitAvailable: true,
107807 onSelect: function() {
107808 network = bitcoinjs.bitcoin.networks.bgold;
107809 setHdCoin(156);
107810 },
107811 },
107812 {
107813 name: "BTX - Bitcore",
107814 segwitAvailable: true,
107815 onSelect: function() {
107816 network = bitcoinjs.bitcoin.networks.bitcore;
107817 setHdCoin(160);
107818 },
107819 },
107820 {
107821 name: "CCN - Cannacoin",
107822 segwitAvailable: false,
107823 onSelect: function() {
107824 network = bitcoinjs.bitcoin.networks.cannacoin;
107825 setHdCoin(19);
107826 },
107827 },
107828 {
107829 name: "CDN - Canadaecoin",
107830 segwitAvailable: false,
107831 onSelect: function() {
107832 network = bitcoinjs.bitcoin.networks.canadaecoin;
107833 setHdCoin(34);
107834 },
107835 },
107836 {
107837 name: "CLAM - Clams",
107838 segwitAvailable: false,
107839 onSelect: function() {
107840 network = bitcoinjs.bitcoin.networks.clam;
107841 setHdCoin(23);
107842 },
107843 },
107844 {
107845 name: "CLUB - Clubcoin",
107846 segwitAvailable: false,
107847 onSelect: function() {
107848 network = bitcoinjs.bitcoin.networks.clubcoin;
107849 setHdCoin(79);
107850 },
107851 },
107852 {
107853 name: "CMP - Compcoin",
107854 segwitAvailable: false,
107855 onSelect: function() {
107856 network = bitcoinjs.bitcoin.networks.compcoin;
107857 setHdCoin(71);
107858 },
107859 },
107860 {
107861 name: "CRAVE - Crave",
107862 segwitAvailable: false,
107863 onSelect: function() {
107864 network = bitcoinjs.bitcoin.networks.crave;
107865 setHdCoin(186);
107866 },
107867 },
107868 {
107869 name: "CRW - Crown",
107870 segwitAvailable: false,
107871 onSelect: function() {
107872 network = bitcoinjs.bitcoin.networks.crown;
107873 setHdCoin(72);
107874 },
107875 },
107876 {
107877 name: "DASH - Dash",
107878 segwitAvailable: false,
107879 onSelect: function() {
107880 network = bitcoinjs.bitcoin.networks.dash;
107881 setHdCoin(5);
107882 },
107883 },
107884 {
107885 name: "DASH - Dash Testnet",
107886 segwitAvailable: false,
107887 onSelect: function() {
107888 network = bitcoinjs.bitcoin.networks.dashtn;
107889 setHdCoin(1);
107890 },
107891 },
107892 {
107893 name: "DFC - Defcoin",
107894 segwitAvailable: false,
107895 onSelect: function() {
107896 network = bitcoinjs.bitcoin.networks.defcoin;
107897 setHdCoin(1337);
107898 },
107899 },
107900 {
107901 name: "DGB - Digibyte",
107902 segwitAvailable: true,
107903 onSelect: function() {
107904 network = bitcoinjs.bitcoin.networks.digibyte;
107905 setHdCoin(20);
107906 },
107907 },
107908 {
107909 name: "DGC - Digitalcoin",
107910 segwitAvailable: false,
107911 onSelect: function() {
107912 network = bitcoinjs.bitcoin.networks.digitalcoin;
107913 setHdCoin(18);
107914 },
107915 },
107916 {
107917 name: "DMD - Diamond",
107918 segwitAvailable: false,
107919 onSelect: function() {
107920 network = bitcoinjs.bitcoin.networks.diamond;
107921 setHdCoin(152);
107922 },
107923 },
107924 {
107925 name: "DNR - Denarius",
107926 segwitAvailable: false,
107927 onSelect: function() {
107928 network = bitcoinjs.bitcoin.networks.denarius;
107929 setHdCoin(116);
107930 },
107931 },
107932 {
107933 name: "DOGE - Dogecoin",
107934 segwitAvailable: false,
107935 onSelect: function() {
107936 network = bitcoinjs.bitcoin.networks.dogecoin;
107937 setHdCoin(3);
107938 },
107939 },
107940 {
107941 name: "ECN - Ecoin",
107942 segwitAvailable: false,
107943 onSelect: function() {
107944 network = bitcoinjs.bitcoin.networks.ecoin;
107945 setHdCoin(115);
107946 },
107947 },
107948 {
107949 name: "EDRC - Edrcoin",
107950 segwitAvailable: false,
107951 onSelect: function() {
107952 network = bitcoinjs.bitcoin.networks.edrcoin;
107953 setHdCoin(56);
107954 },
107955 },
107956 {
107957 name: "EFL - Egulden",
107958 segwitAvailable: true,
107959 onSelect: function() {
107960 network = bitcoinjs.bitcoin.networks.egulden;
107961 setHdCoin(78);
107962 },
107963 },
107964 {
107965 name: "EMC2 - Einsteinium",
107966 segwitAvailable: false,
107967 onSelect: function() {
107968 network = bitcoinjs.bitcoin.networks.einsteinium;
107969 setHdCoin(41);
107970 },
107971 },
107972 {
107973 name: "ERC - Europecoin",
107974 segwitAvailable: false,
107975 onSelect: function() {
107976 network = bitcoinjs.bitcoin.networks.europecoin;
107977 setHdCoin(151);
107978 },
107979 },
107980 {
107981 name: "ETH - Ethereum",
107982 segwitAvailable: false,
107983 onSelect: function() {
107984 network = bitcoinjs.bitcoin.networks.bitcoin;
107985 setHdCoin(60);
107986 },
107987 },
107988 {
107989 name: "EXCL - Exclusivecoin",
107990 segwitAvailable: false,
107991 onSelect: function() {
107992 network = bitcoinjs.bitcoin.networks.exclusivecoin;
107993 setHdCoin(190);
107994 },
107995 },
107996 {
107997 name: "FJC - Fujicoin",
107998 segwitAvailable: true,
107999 onSelect: function() {
108000 network = bitcoinjs.bitcoin.networks.fujicoin;
108001 setHdCoin(75);
108002 },
108003 },
108004 {
108005 name: "FLASH - Flashcoin",
108006 segwitAvailable: false,
108007 onSelect: function() {
108008 network = bitcoinjs.bitcoin.networks.flashcoin;
108009 setHdCoin(120);
108010 },
108011 },
108012 {
108013 name: "FRST - Firstcoin",
108014 segwitAvailable: false,
108015 onSelect: function() {
108016 network = bitcoinjs.bitcoin.networks.firstcoin;
108017 setHdCoin(167);
108018 },
108019 },
108020 {
108021 name: "FTC - Feathercoin",
108022 segwitAvailable: true,
108023 onSelect: function() {
108024 network = bitcoinjs.bitcoin.networks.feathercoin;
108025 setHdCoin(8);
108026 },
108027 },
108028 {
108029 name: "GAME - GameCredits",
108030 segwitAvailable: false,
108031 onSelect: function() {
108032 network = bitcoinjs.bitcoin.networks.game;
108033 setHdCoin(101);
108034 },
108035 },
108036 {
108037 name: "GBX - Gobyte",
108038 segwitAvailable: false,
108039 onSelect: function() {
108040 network = bitcoinjs.bitcoin.networks.gobyte;
108041 setHdCoin(176);
108042 },
108043 },
108044 {
108045 name: "GCR - GCRCoin",
108046 segwitAvailable: false,
108047 onSelect: function() {
108048 network = bitcoinjs.bitcoin.networks.gcr;
108049 setHdCoin(79);
108050 },
108051 },
108052 {
108053 name: "GRC - Gridcoin",
108054 segwitAvailable: false,
108055 onSelect: function() {
108056 network = bitcoinjs.bitcoin.networks.gridcoin;
108057 setHdCoin(84);
108058 },
108059 },
108060 {
108061 name: "HNC - Helleniccoin",
108062 segwitAvailable: false,
108063 onSelect: function() {
108064 network = bitcoinjs.bitcoin.networks.helleniccoin;
108065 setHdCoin(168);
108066 },
108067 },
108068 {
108069 name: "INSN - Insane",
108070 segwitAvailable: false,
108071 onSelect: function() {
108072 network = bitcoinjs.bitcoin.networks.insane;
108073 setHdCoin(68);
108074 },
108075 },
108076 {
108077 name: "IOP - Iop",
108078 segwitAvailable: true,
108079 onSelect: function() {
108080 network = bitcoinjs.bitcoin.networks.iop;
108081 setHdCoin(66);
108082 },
108083 },
108084 {
108085 name: "IXC - Ixcoin",
108086 segwitAvailable: false,
108087 onSelect: function() {
108088 network = bitcoinjs.bitcoin.networks.ixcoin;
108089 setHdCoin(86);
108090 },
108091 },
108092 {
108093 name: "JBS - Jumbucks",
108094 segwitAvailable: false,
108095 onSelect: function() {
108096 network = bitcoinjs.bitcoin.networks.jumbucks;
108097 setHdCoin(26);
108098 },
108099 },
108100 {
108101 name: "KMD - Komodo",
108102 bip49available: false,
108103 onSelect: function() {
108104 network = bitcoinjs.bitcoin.networks.komodo;
108105 setHdCoin(141);
108106 },
108107 },
108108 {
108109 name: "KOBO - Kobocoin",
108110 bip49available: false,
108111 onSelect: function() {
108112 network = bitcoinjs.bitcoin.networks.kobocoin;
108113 setHdCoin(196);
108114 },
108115 },
108116 {
108117 name: "LBC - Library Credits",
108118 segwitAvailable: false,
108119 onSelect: function() {
108120 network = bitcoinjs.bitcoin.networks.lbry;
108121 setHdCoin(140);
108122 },
108123 },
108124 {
108125 name: "LCC - Litecoincash",
108126 segwitAvailable: true,
108127 onSelect: function() {
108128 network = bitcoinjs.bitcoin.networks.litecoincash;
108129 setHdCoin(192);
108130 },
108131 },
108132 {
108133 name: "LDCN - Landcoin",
108134 segwitAvailable: false,
108135 onSelect: function() {
108136 network = bitcoinjs.bitcoin.networks.landcoin;
108137 setHdCoin(63);
108138 },
108139 },
108140 {
108141 name: "LINX - Linx",
108142 segwitAvailable: false,
108143 onSelect: function() {
108144 network = bitcoinjs.bitcoin.networks.linx;
108145 setHdCoin(114);
108146 },
108147 },
108148 {
108149 name: "LTC - Litecoin",
108150 segwitAvailable: true,
108151 onSelect: function() {
108152 network = bitcoinjs.bitcoin.networks.litecoin;
108153 setHdCoin(2);
108154 DOM.litecoinLtubContainer.removeClass("hidden");
108155 },
108156 },
108157 {
108158 name: "LYNX - Lynx",
108159 segwitAvailable: false,
108160 onSelect: function() {
108161 network = bitcoinjs.bitcoin.networks.lynx;
108162 setHdCoin(191);
108163 },
108164 },
108165 {
108166 name: "MAZA - Maza",
108167 segwitAvailable: false,
108168 onSelect: function() {
108169 network = bitcoinjs.bitcoin.networks.maza;
108170 setHdCoin(13);
108171 },
108172 },
108173 {
108174 name: "MNX - Minexcoin",
108175 segwitAvailable: true,
108176 onSelect: function() {
108177 network = bitcoinjs.bitcoin.networks.minexcoin;
108178 setHdCoin(182);
108179 },
108180 },
108181 {
108182 name: "MONA - Monacoin",
108183 segwitAvailable: true,
108184 onSelect: function() {
108185 network = bitcoinjs.bitcoin.networks.monacoin,
108186 setHdCoin(22);
108187 },
108188 },
108189 {
108190 name: "NAV - Navcoin",
108191 segwitAvailable: true,
108192 onSelect: function() {
108193 network = bitcoinjs.bitcoin.networks.navcoin;
108194 setHdCoin(130);
108195 },
108196 },
108197 {
108198 name: "NEBL - Neblio",
108199 segwitAvailable: false,
108200 onSelect: function() {
108201 network = bitcoinjs.bitcoin.networks.neblio;
108202 setHdCoin(146);
108203 },
108204 },
108205 {
108206 name: "NEOS - Neoscoin",
108207 segwitAvailable: false,
108208 onSelect: function() {
108209 network = bitcoinjs.bitcoin.networks.neoscoin;
108210 setHdCoin(25);
108211 },
108212 },
108213 {
108214 name: "NLG - Gulden",
108215 segwitAvailable: false,
108216 onSelect: function() {
108217 network = bitcoinjs.bitcoin.networks.gulden;
108218 setHdCoin(87);
108219 },
108220 },
108221 {
108222 name: "NMC - Namecoin",
108223 segwitAvailable: false,
108224 onSelect: function() {
108225 network = bitcoinjs.bitcoin.networks.namecoin;
108226 setHdCoin(7);
108227 },
108228 },
108229 {
108230 name: "NRO - Neurocoin",
108231 segwitAvailable: false,
108232 onSelect: function() {
108233 network = bitcoinjs.bitcoin.networks.neurocoin;
108234 setHdCoin(110);
108235 },
108236 },
108237 {
108238 name: "NSR - Nushares",
108239 segwitAvailable: false,
108240 onSelect: function() {
108241 network = bitcoinjs.bitcoin.networks.nushares;
108242 setHdCoin(11);
108243 },
108244 },
108245 {
108246 name: "NYC - Newyorkc",
108247 segwitAvailable: false,
108248 onSelect: function() {
108249 network = bitcoinjs.bitcoin.networks.newyorkc;
108250 setHdCoin(179);
108251 },
108252 },
108253 {
108254 name: "NVC - Novacoin",
108255 segwitAvailable: false,
108256 onSelect: function() {
108257 network = bitcoinjs.bitcoin.networks.novacoin;
108258 setHdCoin(50);
108259 },
108260 },
108261 {
108262 name: "OK - Okcash",
108263 segwitAvailable: false,
108264 onSelect: function() {
108265 network = bitcoinjs.bitcoin.networks.okcash;
108266 setHdCoin(69);
108267 },
108268 },
108269 {
108270 name: "OMNI - Omnicore",
108271 segwitAvailable: true,
108272 onSelect: function() {
108273 network = bitcoinjs.bitcoin.networks.omnicore;
108274 setHdCoin(200);
108275 },
108276 },
108277 {
108278 name: "ONX - Onixcoin",
108279 segwitAvailable: false,
108280 onSelect: function() {
108281 network = bitcoinjs.bitcoin.networks.onixcoin;
108282 setHdCoin(174);
108283 },
108284 },
108285 {
108286 name: "PINK - Pinkcoin",
108287 segwitAvailable: false,
108288 onSelect: function() {
108289 network = bitcoinjs.bitcoin.networks.pinkcoin;
108290 setHdCoin(117);
108291 },
108292 },
108293 {
108294 name: "PIVX - PIVX",
108295 segwitAvailable: false,
108296 onSelect: function() {
108297 network = bitcoinjs.bitcoin.networks.pivx;
108298 setHdCoin(119);
108299 },
108300 },
108301 {
108302 name: "PIVX - PIVX Testnet",
108303 segwitAvailable: false,
108304 onSelect: function() {
108305 network = bitcoinjs.bitcoin.networks.pivxtestnet;
108306 setHdCoin(1);
108307 },
108308 },
108309 {
108310 name: "POSW - POSWcoin",
108311 segwitAvailable: false,
108312 onSelect: function() {
108313 network = bitcoinjs.bitcoin.networks.poswcoin;
108314 setHdCoin(47);
108315 },
108316 },
108317 {
108318 name: "POT - Potcoin",
108319 segwitAvailable: false,
108320 onSelect: function() {
108321 network = bitcoinjs.bitcoin.networks.potcoin;
108322 setHdCoin(81);
108323 },
108324 },
108325 {
108326 name: "PPC - Peercoin",
108327 segwitAvailable: false,
108328 onSelect: function() {
108329 network = bitcoinjs.bitcoin.networks.peercoin;
108330 setHdCoin(6);
108331 },
108332 },
108333 {
108334 name: "PSB - Pesobit",
108335 segwitAvailable: false,
108336 onSelect: function() {
108337 network = bitcoinjs.bitcoin.networks.pesobit;
108338 setHdCoin(62);
108339 },
108340 },
108341 {
108342 name: "PUT - Putincoin",
108343 segwitAvailable: false,
108344 onSelect: function() {
108345 network = bitcoinjs.bitcoin.networks.putincoin;
108346 setHdCoin(122);
108347 },
108348 },
108349 {
108350 name: "RBY - Rubycoin",
108351 segwitAvailable: false,
108352 onSelect: function() {
108353 network = bitcoinjs.bitcoin.networks.rubycoin;
108354 setHdCoin(16);
108355 },
108356 },
108357 {
108358 name: "RDD - Reddcoin",
108359 segwitAvailable: false,
108360 onSelect: function() {
108361 network = bitcoinjs.bitcoin.networks.reddoin;
108362 setHdCoin(4);
108363 },
108364 },
108365 {
108366 name: "RVR - RevolutionVR",
108367 segwitAvailable: false,
108368 onSelect: function() {
108369 network = bitcoinjs.bitcoin.networks.revolutionvr;
108370 setHdCoin(129);
108371 },
108372 },
108373 {
108374 name: "SDC - ShadowCash",
108375 segwitAvailable: false,
108376 onSelect: function() {
108377 network = bitcoinjs.bitcoin.networks.shadow;
108378 setHdCoin(35);
108379 },
108380 },
108381 {
108382 name: "SDC - ShadowCash Testnet",
108383 segwitAvailable: false,
108384 onSelect: function() {
108385 network = bitcoinjs.bitcoin.networks.shadowtn;
108386 setHdCoin(1);
108387 },
108388 },
108389 {
108390 name: "SLM - Slimcoin",
108391 segwitAvailable: false,
108392 onSelect: function() {
108393 network = bitcoinjs.bitcoin.networks.slimcoin;
108394 setHdCoin(63);
108395 },
108396 },
108397 {
108398 name: "SLM - Slimcoin Testnet",
108399 segwitAvailable: false,
108400 onSelect: function() {
108401 network = bitcoinjs.bitcoin.networks.slimcointn;
108402 setHdCoin(111);
108403 },
108404 },
108405 {
108406 name: "SLR - Solarcoin",
108407 segwitAvailable: false,
108408 onSelect: function() {
108409 network = bitcoinjs.bitcoin.networks.solarcoin;
108410 setHdCoin(58);
108411 },
108412 },
108413 {
108414 name: "SMLY - Smileycoin",
108415 segwitAvailable: false,
108416 onSelect: function() {
108417 network = bitcoinjs.bitcoin.networks.smileycoin;
108418 setHdCoin(59);
108419 },
108420 },
108421 {
108422 name: "STRAT - Stratis",
108423 segwitAvailable: false,
108424 onSelect: function() {
108425 network = bitcoinjs.bitcoin.networks.stratis;
108426 setHdCoin(105);
108427 },
108428 },
108429 {
108430 name: "SYS - Syscoin",
108431 segwitAvailable: true,
108432 onSelect: function() {
108433 network = bitcoinjs.bitcoin.networks.syscoin;
108434 setHdCoin(57);
108435 },
108436 },
108437 {
108438 name: "THC - Hempcoin",
108439 segwitAvailable: false,
108440 onSelect: function() {
108441 network = bitcoinjs.bitcoin.networks.hempcoin;
108442 setHdCoin(113);
108443 },
108444 },
108445 {
108446 name: "TOA - Toa",
108447 segwitAvailable: false,
108448 onSelect: function() {
108449 network = bitcoinjs.bitcoin.networks.toa;
108450 setHdCoin(159);
108451 },
108452 },
108453 {
108454 name: "USC - Ultimatesecurecash",
108455 segwitAvailable: false,
108456 onSelect: function() {
108457 network = bitcoinjs.bitcoin.networks.ultimatesecurecash;
108458 setHdCoin(112);
108459 },
108460 },
108461 {
108462 name: "USNBT - NuBits",
108463 segwitAvailable: false,
108464 onSelect: function() {
108465 network = bitcoinjs.bitcoin.networks.nubits;
108466 setHdCoin(12);
108467 },
108468 },
108469 {
108470 name: "UNO - Unobtanium",
108471 segwitAvailable: false,
108472 onSelect: function() {
108473 network = bitcoinjs.bitcoin.networks.unobtanium;
108474 setHdCoin(92);
108475 },
108476 },
108477 {
108478 name: "VASH - Vpncoin",
108479 segwitAvailable: false,
108480 onSelect: function() {
108481 network = bitcoinjs.bitcoin.networks.vpncoin;
108482 setHdCoin(33);
108483 },
108484 },
108485 {
108486 name: "VIA - Viacoin",
108487 segwitAvailable: false,
108488 onSelect: function() {
108489 network = bitcoinjs.bitcoin.networks.viacoin;
108490 setHdCoin(14);
108491 },
108492 },
108493 {
108494 name: "VIA - Viacoin Testnet",
108495 segwitAvailable: false,
108496 onSelect: function() {
108497 network = bitcoinjs.bitcoin.networks.viacointestnet;
108498 setHdCoin(1);
108499 },
108500 },
108501 {
108502 name: "VIVO - Vivo",
108503 segwitAvailable: false,
108504 onSelect: function() {
108505 network = bitcoinjs.bitcoin.networks.vivo;
108506 setHdCoin(166);
108507 },
108508 },
108509 {
108510 name: "VTC - Vertcoin",
108511 segwitAvailable: true,
108512 onSelect: function() {
108513 network = bitcoinjs.bitcoin.networks.vertcoin;
108514 setHdCoin(28);
108515 },
108516 },
108517 {
108518 name: "WC - Wincoin",
108519 segwitAvailable: false,
108520 onSelect: function() {
108521 network = bitcoinjs.bitcoin.networks.wincoin;
108522 setHdCoin(181);
108523 },
108524 },
108525 {
108526 name: "XBC - Bitcoinplus",
108527 segwitAvailable: false,
108528 onSelect: function() {
108529 network = bitcoinjs.bitcoin.networks.bitcoinplus;
108530 setHdCoin(65);
108531 },
108532 },
108533 {
108534 name: "XMY - Myriadcoin",
108535 segwitAvailable: false,
108536 onSelect: function() {
108537 network = bitcoinjs.bitcoin.networks.myriadcoin;
108538 setHdCoin(90);
108539 },
108540 },
108541 {
108542 name: "XRP - Ripple",
108543 segwitAvailable: false,
108544 onSelect: function() {
108545 network = bitcoinjs.bitcoin.networks.bitcoin;
108546 setHdCoin(144);
108547 },
108548 },
108549 {
108550 name: "XVC - Vcash",
108551 segwitAvailable: false,
108552 onSelect: function() {
108553 network = bitcoinjs.bitcoin.networks.vcash;
108554 setHdCoin(127);
108555 },
108556 },
108557 {
108558 name: "XVG - Verge",
108559 segwitAvailable: false,
108560 onSelect: function() {
108561 network = bitcoinjs.bitcoin.networks.verge;
108562 setHdCoin(77);
108563 },
108564 },
108565 {
108566 name: "XWC - Whitecoin",
108567 segwitAvailable: false,
108568 onSelect: function() {
108569 network = bitcoinjs.bitcoin.networks.whitecoin;
108570 setHdCoin(155);
108571 },
108572 },
108573 {
108574 name: "XZC - Zcoin",
108575 segwitAvailable: true,
108576 onSelect: function() {
108577 network = bitcoinjs.bitcoin.networks.zcoin;
108578 setHdCoin(136);
108579 },
108580 },
108581 {
108582 name: "ZEC - Zcash",
108583 segwitAvailable: false,
108584 onSelect: function() {
108585 network = bitcoinjs.bitcoin.networks.zcash;
108586 setHdCoin(133);
108587 },
108588 },
108589 ]
108590
108591 var clients = [
108592 {
108593 name: "Bitcoin Core",
108594 onSelect: function() {
108595 DOM.bip32path.val("m/0'/0'");
108596 DOM.hardenedAddresses.prop('checked', true);
108597 },
108598 },
108599 {
108600 name: "blockchain.info",
108601 onSelect: function() {
108602 DOM.bip32path.val("m/44'/0'/0'");
108603 DOM.hardenedAddresses.prop('checked', false);
108604 },
108605 },
108606 {
108607 name: "MultiBit HD",
108608 onSelect: function() {
108609 DOM.bip32path.val("m/0'/0");
108610 DOM.hardenedAddresses.prop('checked', false);
108611 },
108612 }
108613 ]
108614
108615 init();
108616
108617 })();
108618 </script>
108619 </body>
108620 </html>