]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Add files via upload
[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.4</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 </div>
6915 </div>
6916 </div>
6917 </div>
6918 <div class="entropy-container hidden">
6919 <div class="form-group text-danger">
6920 <label class="col-sm-2 control-label">Warning</label>
6921 <div class="col-sm-10 form-control-static">
6922 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6923 <a href="#entropy-notes">Read more</a>
6924 </div>
6925 </div>
6926 <div class="form-group">
6927 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6928 <div class="col-sm-7">
6929 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6930 <div class="row filter-warning text-danger hidden">
6931 <p class="col-sm-12">
6932 <strong>
6933 Some characters have been discarded
6934 </strong>
6935 </p>
6936 </div>
6937 <div class="row">
6938 <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>
6939 <div class="crack-time col-sm-3 form-control-static"></div>
6940 <label class="col-sm-3 control-label">Event Count</label>
6941 <div class="event-count col-sm-3 form-control-static"></div>
6942 </div>
6943 <div class="row">
6944 <label class="col-sm-3 control-label">Entropy Type</label>
6945 <div class="type col-sm-3 form-control-static"></div>
6946 <label class="col-sm-3 control-label">Bits Per Event</label>
6947 <div class="bits-per-event col-sm-3 form-control-static"></div>
6948 </div>
6949 <div class="row">
6950 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6951 <div class="word-count col-sm-3 form-control-static"></div>
6952 <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>
6953 <div class="bits col-sm-3 form-control-static"></div>
6954 </div>
6955 <label class="col-sm-3 control-label">Filtered Entropy</label>
6956 <div class="filtered col-sm-9 form-control-static"></div>
6957 <label class="col-sm-3 control-label">Raw Binary</label>
6958 <div class="binary col-sm-9 form-control-static"></div>
6959 <label class="col-sm-3 control-label">Binary Checksum</label>
6960 <div class="checksum col-sm-9 form-control-static">&nbsp;</div>
6961 <label class="col-sm-3 control-label">Word Indexes</label>
6962 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6963 <label class="col-sm-3 control-label">Mnemonic Length</label>
6964 <div class="col-sm-9">
6965 <select class="mnemonic-length form-control">
6966 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6967 <option value="12">12 <span>Words</span></option>
6968 <option value="15">15 <span>Words</option>
6969 <option value="18">18 <span>Words</span></option>
6970 <option value="21">21 <span>Words</span></option>
6971 <option value="24">24 <span>Words</span></option>
6972 </select>
6973 </div>
6974 </div>
6975 <div class="col-sm-3">
6976 <p>Valid entropy values include:</p>
6977 <ul>
6978 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6979 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6980 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6981 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6982 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6983 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6984 </ul>
6985 </div>
6986 </div>
6987 </div>
6988 <div class="form-group">
6989 <div class="col-sm-2"></div>
6990 <div class="col-sm-10 checkbox">
6991 <label>
6992 <input type="checkbox" class="use-entropy">
6993 <span>Show entropy details</span>
6994 </label>
6995 </div>
6996 </div>
6997 <div class="form-group">
6998 <label class="col-sm-2 control-label">Mnemonic Language</label>
6999 <div class="col-sm-10 languages">
7000 <div class="form-control no-border">
7001 <a href="#english">English</a>
7002 <a href="#japanese" title="Japanese">日本語</a>
7003 <a href="#spanish" title="Spanish">Español</a>
7004 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7005 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7006 <a href="#french" title="French">Français</a>
7007 <a href="#italian" title="Italian">Italiano</a>
7008 <a href="#korean" title="Korean">한국어</a>
7009 </div>
7010 </div>
7011 </div>
7012 <div class="form-group">
7013 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7014 <div class="col-sm-10">
7015 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7016 </div>
7017 </div>
7018 <div class="form-group">
7019 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7020 <div class="col-sm-10">
7021 <textarea id="passphrase" class="passphrase form-control"></textarea>
7022 </div>
7023 </div>
7024 <div class="form-group">
7025 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7026 <div class="col-sm-10">
7027 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7028 </div>
7029 </div>
7030 <div class="form-group">
7031 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7032 <div class="col-sm-10">
7033 <select id="network-phrase" class="network form-control">
7034 <!-- populated by javascript -->
7035 </select>
7036 </div>
7037 </div>
7038 <div class="form-group">
7039 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7040 <div class="col-sm-10">
7041 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7042 </div>
7043 </div>
7044 <div class="form-group litecoin-ltub-container hidden">
7045 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7046 <div class="col-sm-10 checkbox">
7047 <label>
7048 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7049 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7050 </label>
7051 </div>
7052 </div>
7053 </form>
7054 </div>
7055 </div>
7056
7057 <hr>
7058
7059 <div class="row">
7060 <div class="col-md-12">
7061 <h2>Derivation Path</h2>
7062 <ul class="derivation-type nav nav-tabs" role="tablist">
7063 <li id="bip32-tab">
7064 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7065 </li>
7066 <li id="bip44-tab" class="active">
7067 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7068 </li>
7069 <li id="bip49-tab">
7070 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7071 </li>
7072 <li id="bip84-tab">
7073 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7074 </li>
7075 <li id="bip141-tab">
7076 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7077 </li>
7078 </ul>
7079 <div class="derivation-type tab-content">
7080 <div id="bip44" class="tab-pane active">
7081 <form class="form-horizontal" role="form">
7082 <br>
7083 <div class="col-sm-2"></div>
7084 <div class="col-sm-10">
7085 <p>
7086 For more info see the
7087 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7088 </p>
7089 </div>
7090 <div class="form-group">
7091 <label for="purpose" class="col-sm-2 control-label">
7092 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7093 </label>
7094 <div class="col-sm-10">
7095 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7096 </div>
7097 </div>
7098 <div class="form-group">
7099 <label for="coin" class="col-sm-2 control-label">
7100 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7101 </label>
7102 <div class="col-sm-10">
7103 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7104 </div>
7105 </div>
7106 <div class="form-group">
7107 <label for="account" class="col-sm-2 control-label">
7108 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7109 </label>
7110 <div class="col-sm-10">
7111 <input id="account" type="text" class="account form-control" value="0">
7112 </div>
7113 </div>
7114 <div class="form-group">
7115 <label for="change" class="col-sm-2 control-label">
7116 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7117 </label>
7118 <div class="col-sm-10">
7119 <input id="change" type="text" class="change form-control" value="0">
7120 </div>
7121 </div>
7122 <div class="form-group">
7123 <label class="col-sm-2 control-label">
7124 </label>
7125 <div class="col-sm-10">
7126 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7127 </div>
7128 </div>
7129 <div class="form-group">
7130 <label for="account-xprv" class="col-sm-2 control-label">
7131 <span>Account Extended Private Key</span>
7132 </label>
7133 <div class="col-sm-10">
7134 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7135 </div>
7136 </div>
7137 <div class="form-group">
7138 <label for="account-xpub" class="col-sm-2 control-label">
7139 <span>Account Extended Public Key</span>
7140 </label>
7141 <div class="col-sm-10">
7142 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7143 </div>
7144 </div>
7145 <div class="form-group">
7146 <label class="col-sm-2 control-label">
7147 </label>
7148 <div class="col-sm-10">
7149 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7150 </div>
7151 </div>
7152 <div class="form-group">
7153 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7154 <div class="col-sm-10">
7155 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7156 </div>
7157 </div>
7158 </form>
7159 </div>
7160 <div id="bip32" class="tab-pane">
7161 <form class="form-horizontal" role="form">
7162 <br>
7163 <div class="col-sm-2"></div>
7164 <div class="col-sm-10">
7165 <p>
7166 For more info see the
7167 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7168 </p>
7169 </div>
7170 <div class="form-group">
7171 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7172 <div class="col-sm-10">
7173 <select id="bip32-client" class="client form-control">
7174 <option value="custom">Custom derivation path</option>
7175 <!-- populated by javascript -->
7176 </select>
7177 </div>
7178 </div>
7179 <div class="form-group">
7180 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7181 <div class="col-sm-10">
7182 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7183 </div>
7184 </div>
7185 <div class="form-group">
7186 <div class="col-sm-2"></div>
7187 <label class="col-sm-10">
7188 <input class="hardened-addresses" type="checkbox">
7189 <span>Use hardened addresses</span>
7190 </label>
7191 </div>
7192 <div class="form-group">
7193 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7194 <div class="col-sm-10">
7195 <p class="form-control no-border">
7196 Use path <code>m/0'/0'</code> with hardened addresses.
7197 </p>
7198 <p class="form-control no-border">
7199 For more info see the
7200 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7201 </p>
7202 </div>
7203 </div>
7204 <div class="form-group">
7205 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7206 <div class="col-sm-10">
7207 <p class="form-control no-border">
7208 <span>Use path <code>m/0'/0</code>.</span>
7209 </p>
7210 <p class="form-control no-border">
7211 <span>For more info see</span>
7212 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7213 </p>
7214 </div>
7215 </div>
7216 <div class="form-group">
7217 <label class="col-sm-2 control-label">Block Explorers</label>
7218 <div class="col-sm-10">
7219 <p class="form-control no-border">
7220 <span>Use path <code>m/44'/0'/0'</code>.</span>
7221 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7222 </p>
7223 <p class="form-control no-border">
7224 <span>Can be used with</span>:
7225 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7226 </p>
7227 </div>
7228 </div>
7229 </form>
7230 </div>
7231 <div id="bip49" class="tab-pane">
7232 <form class="form-horizontal" role="form">
7233 <br>
7234 <div class="unavailable hidden">
7235 <div class="form-group">
7236 <div class="col-sm-2"></div>
7237 <div class="col-sm-10">
7238 <p>BIP49 is unavailable for this coin.</p>
7239 </div>
7240 </div>
7241 </div>
7242 <div class="available">
7243 <div class="col-sm-2"></div>
7244 <div class="col-sm-10">
7245 <p>
7246 For more info see the
7247 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7248 </p>
7249 </div>
7250 <div class="form-group">
7251 <label for="purpose" class="col-sm-2 control-label">
7252 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7253 </label>
7254 <div class="col-sm-10">
7255 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7256 </div>
7257 </div>
7258 <div class="form-group">
7259 <label for="coin" class="col-sm-2 control-label">
7260 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7261 </label>
7262 <div class="col-sm-10">
7263 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7264 </div>
7265 </div>
7266 <div class="form-group">
7267 <label for="account" class="col-sm-2 control-label">
7268 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7269 </label>
7270 <div class="col-sm-10">
7271 <input id="account" type="text" class="account form-control" value="0">
7272 </div>
7273 </div>
7274 <div class="form-group">
7275 <label for="change" class="col-sm-2 control-label">
7276 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7277 </label>
7278 <div class="col-sm-10">
7279 <input id="change" type="text" class="change form-control" value="0">
7280 </div>
7281 </div>
7282 <div class="form-group">
7283 <label class="col-sm-2 control-label">
7284 </label>
7285 <div class="col-sm-10">
7286 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7287 </div>
7288 </div>
7289 <div class="form-group">
7290 <label for="account-xprv" class="col-sm-2 control-label">
7291 <span>Account Extended Private Key</span>
7292 </label>
7293 <div class="col-sm-10">
7294 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7295 </div>
7296 </div>
7297 <div class="form-group">
7298 <label for="account-xpub" class="col-sm-2 control-label">
7299 <span>Account Extended Public Key</span>
7300 </label>
7301 <div class="col-sm-10">
7302 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7303 </div>
7304 </div>
7305 <div class="form-group">
7306 <label class="col-sm-2 control-label">
7307 </label>
7308 <div class="col-sm-10">
7309 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7310 </div>
7311 </div>
7312 <div class="form-group">
7313 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7314 <div class="col-sm-10">
7315 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7316 </div>
7317 </div>
7318 </div>
7319 </form>
7320 </div>
7321 <div id="bip141" class="tab-pane">
7322 <form class="form-horizontal" role="form">
7323 <br>
7324 <div class="unavailable hidden">
7325 <div class="form-group">
7326 <div class="col-sm-2"></div>
7327 <div class="col-sm-10">
7328 <p>BIP141 is unavailable for this coin.</p>
7329 </div>
7330 </div>
7331 </div>
7332 <div class="available">
7333 <div class="col-sm-2"></div>
7334 <div class="col-sm-10">
7335 <p>
7336 For more info see the
7337 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7338 </p>
7339 </div>
7340 <div class="form-group">
7341 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7342 <div class="col-sm-10">
7343 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7344 </div>
7345 </div>
7346 <div class="form-group">
7347 <label class="col-sm-2 control-label">Script Semantics</label>
7348 <div class="col-sm-10">
7349 <select class="form-control bip141-semantics">
7350 <option value="p2wpkh">P2WPKH</option>
7351 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7352 </select>
7353 </div>
7354 </div>
7355 </div>
7356 </form>
7357 </div>
7358 <div id="bip84" class="tab-pane">
7359 <form class="form-horizontal" role="form">
7360 <br>
7361 <div class="col-sm-2"></div>
7362 <div class="col-sm-10">
7363 <p>
7364 For more info see the
7365 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7366 </p>
7367 </div>
7368 <div class="form-group">
7369 <label for="purpose" class="col-sm-2 control-label">
7370 Purpose
7371 </label>
7372 <div class="col-sm-10">
7373 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7374 </div>
7375 </div>
7376 <div class="form-group">
7377 <label for="coin" class="col-sm-2 control-label">
7378 Coin
7379 </label>
7380 <div class="col-sm-10">
7381 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7382 </div>
7383 </div>
7384 <div class="form-group">
7385 <label for="account" class="col-sm-2 control-label">
7386 Account
7387 </label>
7388 <div class="col-sm-10">
7389 <input id="account" type="text" class="account form-control" value="0">
7390 </div>
7391 </div>
7392 <div class="form-group">
7393 <label for="change" class="col-sm-2 control-label">
7394 External / Internal
7395 </label>
7396 <div class="col-sm-10">
7397 <input id="change" type="text" class="change form-control" value="0">
7398 </div>
7399 </div>
7400 <div class="form-group">
7401 <label class="col-sm-2 control-label">
7402 </label>
7403 <div class="col-sm-10">
7404 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7405 </div>
7406 </div>
7407 <div class="form-group">
7408 <label for="account-xprv" class="col-sm-2 control-label">
7409 <span>Account Extended Private Key</span>
7410 </label>
7411 <div class="col-sm-10">
7412 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7413 </div>
7414 </div>
7415 <div class="form-group">
7416 <label for="account-xpub" class="col-sm-2 control-label">
7417 <span>Account Extended Public Key</span>
7418 </label>
7419 <div class="col-sm-10">
7420 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7421 </div>
7422 </div>
7423 <div class="form-group">
7424 <label class="col-sm-2 control-label">
7425 </label>
7426 <div class="col-sm-10">
7427 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7428 </div>
7429 </div>
7430 <div class="form-group">
7431 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7432 <div class="col-sm-10">
7433 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7434 </div>
7435 </div>
7436 </form>
7437 </div>
7438 </div>
7439 <form class="form-horizontal" role="form">
7440 <div class="form-group">
7441 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7442 <div class="col-sm-10">
7443 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7444 </div>
7445 </div>
7446 <div class="form-group">
7447 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7448 <div class="col-sm-10">
7449 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7450 </div>
7451 </div>
7452 </form>
7453 </div>
7454 </div>
7455
7456 <hr>
7457
7458 <div class="row">
7459 <div class="col-md-12">
7460 <h2>Derived Addresses</h2>
7461 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7462 </div>
7463 <div class="col-md-12 use-bitpay-addresses-container hidden">
7464 <div class="checkbox">
7465 <label>
7466 <input type="checkbox" class="use-bitpay-addresses">
7467 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7468 </label>
7469 </div>
7470 </div>
7471 <div class="col-md-12">
7472 <div class="checkbox">
7473 <label>
7474 <input type="checkbox" class="use-bip38">
7475 <span>Encrypt private keys using BIP38 and this password:</span>
7476 </label>
7477 <input class="bip38-password">
7478 <span>Enabling BIP38 means each key will take take several minutes to generate.</span>
7479 </div>
7480 </div>
7481 <ul class="addresses-type nav nav-tabs" role="tablist">
7482 <li id="table-tab" class="active">
7483 <a href="#table" role="tab" data-toggle="tab">Table</a>
7484 </li>
7485 <li id="csv-tab">
7486 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7487 </li>
7488 </ul>
7489 <div class="addresses-type tab-content">
7490 <div id="table" class="tab-pane active">
7491 <div class="col-md-12">
7492 <table class="table table-striped">
7493 <thead>
7494 <th>
7495 <div class="input-group">
7496 <span>Path</span>&nbsp;&nbsp;
7497 <button class="index-toggle">Toggle</button>
7498 </div>
7499 </th>
7500 <th>
7501 <div class="input-group">
7502 <span>Address</span>&nbsp;&nbsp;
7503 <button class="address-toggle">Toggle</button>
7504 </div>
7505 </th>
7506 <th>
7507 <div class="input-group">
7508 <span>Public Key</span>&nbsp;&nbsp;
7509 <button class="public-key-toggle">Toggle</button>
7510 </div>
7511 </th>
7512 <th>
7513 <div class="input-group">
7514 <span>Private Key</span>&nbsp;&nbsp;
7515 <button class="private-key-toggle">Toggle</button>
7516 </div>
7517 </th>
7518 </thead>
7519 <tbody class="addresses monospace">
7520 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7521 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7522 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7523 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7524 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7525 </tbody>
7526 </table>
7527 </div>
7528 </div>
7529 <div id="csv" class="tab-pane">
7530 <div class="col-md-12">
7531 <textarea class="csv form-control" rows="25" readonly></textarea>
7532 </div>
7533 </div>
7534 </div>
7535 </div>
7536 <span>Show</span>
7537 <input type="number" class="rows-to-add" value="20">
7538 <button class="more">more rows</button>
7539 <span>starting from index</span>
7540 <input type="number" class="more-rows-start-index">
7541 <span>(leave blank to generate from next index)</span>
7542
7543 <hr>
7544
7545 <div class="row">
7546 <div class="col-md-12">
7547 <h2>More info</h2>
7548 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7549 <p>
7550 Read more at the
7551 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7552 </p>
7553 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7554 <p>
7555 Read more at the
7556 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7557 </p>
7558 <p>
7559 See the demo at
7560 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7561 </p>
7562 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7563 <p>
7564 Read more at the
7565 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7566 </p>
7567 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7568 <p>
7569 Read more at the
7570 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7571 </p>
7572 <h3>Private Keys</h3>
7573 <p>
7574 <span>
7575 Use private keys at
7576 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7577 </span>
7578 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7579 </p>
7580 <h3 id="entropy-notes">Entropy</h3>
7581 <p>
7582 <span>Entropy values should not include the BIP39 checksum. This is automatically added by the tool.</span>
7583 </p>
7584 <p>
7585 <span>
7586 Entropy values must be sourced from a
7587 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7588 </span>
7589 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7590 <span>
7591 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7592 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7593 random enough for the needs of this tool.
7594 </span>
7595 </p>
7596 <p>
7597 <strong><span>Do not store entropy.</span></strong>
7598 </p>
7599 <p>
7600 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7601 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7602 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7603 </p>
7604 <p>
7605 <span>
7606 The random mnemonic generator on this page uses a
7607 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7608 </span>
7609 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7610 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7611 <span>In that case you might choose to use your own source of entropy.</span>
7612 </p>
7613 <p>
7614 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7615 </p>
7616 <h3>License</h3>
7617 <p>
7618 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7619 </span>
7620 </p>
7621 <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>
7622 </div>
7623 </div>
7624
7625 <hr>
7626
7627 <div class="row">
7628 <div class="col-md-12">
7629 <h2>Alternative Tools</h2>
7630 <p>This tool is interoperable with any BIP39 wallet.</p>
7631 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7632 <p>
7633 <a href="https://bip32jp.github.io/english/">
7634 https://bip32jp.github.io/english/
7635 </a>
7636 </p>
7637 </div>
7638 </div>
7639
7640 <hr>
7641
7642 <div class="row">
7643 <div class="col-md-12">
7644
7645 <h2>Offline Usage</h2>
7646
7647 <p>
7648 You can use this tool without having to be online.
7649 </p>
7650 <p>
7651 In your browser, select file save-as, and save this page
7652 as a file.
7653 </p>
7654 <p>
7655 Double-click that file to open it in a browser
7656 on any offline computer.
7657 </p>
7658 <p>
7659 <span>Alternatively, download the file from the repository</span>
7660 -
7661 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7662 </p>
7663
7664 </div>
7665 </div>
7666
7667 <hr>
7668
7669 <div class="row">
7670 <div class="col-md-12">
7671
7672 <h2>This project is 100% open-source code</h2>
7673
7674 <p>
7675 <span>Get the source code from the repository</span>
7676 -
7677 <a href="https://github.com/iancoleman/bip39" target="_blank">
7678 https://github.com/iancoleman/bip39
7679 </a>
7680 </p>
7681
7682 <h3>Libraries</h3>
7683
7684 <p>
7685 <span>BitcoinJS - </span>
7686 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7687 https://github.com/bitcoinjs/bitcoinjs-lib
7688 </a>
7689 </p>
7690
7691 <p>
7692 <span>jsBIP39 - </span>
7693 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7694 https://github.com/iancoleman/jsbip39
7695 </a>
7696 </p>
7697
7698 <p>
7699 <span>sjcl - </span>
7700 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7701 https://github.com/bitwiseshiftleft/sjcl
7702 </a>
7703 </p>
7704
7705 <p>
7706 <span>jQuery - </span>
7707 <a href="https://jquery.com/" target="_blank">
7708 https://jquery.com/
7709 </a>
7710 </p>
7711
7712 <p>
7713 <span>Twitter Bootstrap - </span>
7714 <a href="http://getbootstrap.com/" target="_blank">
7715 http://getbootstrap.com/
7716 </a>
7717 </p>
7718
7719 </div>
7720 </div>
7721
7722 </div>
7723
7724 <div class="qr-container hidden">
7725 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7726 <div class="qr-hint bg-primary">Click field to show QR</div>
7727 <div class="qr-hider hidden">
7728 <div class="qr-image"></div>
7729 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7730 </div>
7731 </div>
7732
7733 <div class="feedback-container">
7734 <div class="feedback">Loading...</div>
7735 </div>
7736
7737 <script type="text/template" id="address-row-template">
7738 <tr>
7739 <td class="index"><span></span></td>
7740 <td class="address"><span data-show-qr></span></td>
7741 <td class="pubkey"><span data-show-qr></span></td>
7742 <td class="privkey"><span data-show-qr></span></td>
7743 </tr>
7744 </script>
7745 <script>// From
7746 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7747 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7748 // but is not required in any modern browsers.
7749 // For more information, see
7750 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7751
7752 //----------------------------------------------------------------------
7753 //
7754 // ECMAScript 2015 Polyfills
7755 //
7756 //----------------------------------------------------------------------
7757
7758 (function (global) {
7759 "use strict";
7760
7761 // Set this to always override native implementations, for testing
7762 // the polyfill in browsers with partial/full ES2015 support.
7763 var OVERRIDE_NATIVE_FOR_TESTING = false;
7764
7765 var undefined = (void 0); // Paranoia
7766
7767 // Helpers
7768
7769 function strict(o) {
7770 return o === global ? undefined : o;
7771 }
7772
7773 function hook(o, p, f) {
7774 var op = o[p];
7775 console.assert(typeof op === 'function', 'Hooking a non-function');
7776 o[p] = function() {
7777 var o = strict(this);
7778 var r = f.apply(o, arguments);
7779 return r !== undefined ? r : op.apply(o, arguments);
7780 };
7781 }
7782
7783 function isSymbol(s) {
7784 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7785 }
7786
7787 function getPropertyDescriptor(target, name) {
7788 var desc = Object.getOwnPropertyDescriptor(target, name);
7789 var proto = Object.getPrototypeOf(target);
7790 while (!desc && proto) {
7791 desc = Object.getOwnPropertyDescriptor(proto, name);
7792 proto = Object.getPrototypeOf(proto);
7793 }
7794 return desc;
7795 }
7796
7797 var enqueue = (function(nativePromise, nativeSetImmediate) {
7798 if (nativePromise)
7799 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7800 if (nativeSetImmediate)
7801 return function(job) { nativeSetImmediate(job); };
7802 return function(job) { setTimeout(job, 0); };
7803 }(global['Promise'], global['setImmediate']));
7804
7805 function define(o, p, v, override) {
7806 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7807 return;
7808
7809 if (typeof v === 'function') {
7810 // Sanity check that functions are appropriately named (where possible)
7811 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7812 Object.defineProperty(o, p, {
7813 value: v,
7814 configurable: true,
7815 enumerable: false,
7816 writable: true
7817 });
7818 } else {
7819 Object.defineProperty(o, p, {
7820 value: v,
7821 configurable: false,
7822 enumerable: false,
7823 writable: false
7824 });
7825 }
7826 }
7827
7828 function set_internal(o, p, v) {
7829 Object.defineProperty(o, p, {
7830 value: v,
7831 configurable: false,
7832 enumerable: false,
7833 writable: true
7834 });
7835 }
7836
7837 // Snapshot intrinsic functions
7838 var $isNaN = global.isNaN,
7839 $parseInt = global.parseInt,
7840 $parseFloat = global.parseFloat;
7841
7842 var E = Math.E,
7843 LOG10E = Math.LOG10E,
7844 LOG2E = Math.LOG2E,
7845 abs = Math.abs,
7846 ceil = Math.ceil,
7847 exp = Math.exp,
7848 floor = Math.floor,
7849 log = Math.log,
7850 max = Math.max,
7851 min = Math.min,
7852 pow = Math.pow,
7853 random = Math.random,
7854 sqrt = Math.sqrt;
7855
7856 var orig_match = String.prototype.match,
7857 orig_replace = String.prototype.replace,
7858 orig_search = String.prototype.search,
7859 orig_split = String.prototype.split;
7860
7861 // These are used for implementing the polyfills, but not exported.
7862
7863 // Inspired by https://gist.github.com/1638059
7864 /** @constructor */
7865 function EphemeronTable() {
7866 var secretKey = ObjectCreate(null);
7867
7868 function conceal(o) {
7869 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7870 Object.defineProperty(o, 'valueOf', {
7871 value: (function(secretKey) {
7872 return function (k) {
7873 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7874 };
7875 }(secretKey)),
7876 configurable: true,
7877 writeable: true,
7878 enumerable: false
7879 });
7880 return secrets;
7881 }
7882
7883 function reveal(o) {
7884 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7885 return v === o ? null : v;
7886 }
7887
7888 return {
7889 clear: function() {
7890 secretKey = ObjectCreate(null);
7891 },
7892 remove: function(key) {
7893 var secrets = reveal(key);
7894 if (secrets && HasOwnProperty(secrets, 'value')) {
7895 delete secrets.value;
7896 return true;
7897 }
7898 return false;
7899 },
7900 get: function(key, defaultValue) {
7901 var secrets = reveal(key);
7902 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7903 },
7904 has: function(key) {
7905 var secrets = reveal(key);
7906 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7907 },
7908 set: function(key, value) {
7909 var secrets = reveal(key) || conceal(key);
7910 secrets.value = value;
7911 }
7912 };
7913 }
7914
7915 var empty = Object.create(null);
7916
7917 //----------------------------------------------------------------------
7918 //
7919 // ECMAScript 2015
7920 // http://www.ecma-international.org/ecma-262/6.0/
7921 //
7922 //----------------------------------------------------------------------
7923
7924 // ---------------------------------------
7925 // 19.4 Symbol Objects
7926 // ---------------------------------------
7927
7928 // NOTE: Symbols are defined here - out of spec order - since we need the
7929 // properties and prototype to be populated for other polyfills.
7930
7931 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7932
7933 var symbolForKey;
7934 (function() {
7935 var secret = Object.create(null);
7936 var symbolMap = {};
7937 symbolForKey = function(k) {
7938 return symbolMap[k];
7939 };
7940
7941 var GlobalSymbolRegistry = [];
7942
7943 function unique(bits) {
7944 return Array(bits + 1).join('x').replace(/x/g, function() {
7945 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7946 });
7947 }
7948
7949 // 19.4.1 The Symbol Constructor
7950 // 19.4.1.1 Symbol ( description=undefined )
7951 function Symbol(description) {
7952 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7953 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7954
7955 var descString = description === undefined ? undefined : String(description);
7956
7957 set_internal(this, '[[SymbolData]]', unique(128));
7958 set_internal(this, '[[Description]]', descString);
7959
7960 symbolMap[this] = this;
7961 return this;
7962 }
7963
7964 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7965 global.Symbol = Symbol;
7966
7967 // 19.4.2 Properties of the Symbol Constructor
7968
7969 // 19.4.2.1 Symbol.for (key)
7970 define(Symbol, 'for', function for_(key) {
7971 var stringKey = String(key);
7972 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7973 var e = GlobalSymbolRegistry[i];
7974 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7975 }
7976 var newSymbol = Symbol(key);
7977 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7978 return newSymbol;
7979 });
7980
7981 // 19.4.2.2 Symbol.hasInstance
7982 // 19.4.2.3 Symbol.isConcatSpreadable
7983
7984 // 19.4.2.4 Symbol.iterator
7985 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7986
7987 // 19.4.2.5 Symbol.keyFor (sym)
7988 define(Symbol, 'keyFor', function keyFor(sym) {
7989 if (!(sym instanceof Symbol)) throw TypeError();
7990 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7991 var e = GlobalSymbolRegistry[i];
7992 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
7993 }
7994 return undefined;
7995 });
7996
7997 // 19.4.2.6 Symbol.match
7998 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
7999
8000 // 19.4.2.7 Symbol.prototype
8001
8002 // 19.4.2.8 Symbol.replace
8003 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
8004
8005 // 19.4.2.9 Symbol.search
8006 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8007
8008 // 19.4.2.10 Symbol.species
8009
8010 // 19.4.2.11 Symbol.search
8011 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8012
8013 // 19.4.2.12 Symbol.toPrimitive
8014
8015 // 19.4.2.13 Symbol.toStringTag
8016 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8017
8018 // 19.4.2.14 Symbol.unscopables
8019
8020 // 19.4.3 Properties of the Symbol Prototype Object
8021 // 19.4.3.1 Symbol.prototype.constructor
8022
8023 // 19.4.3.2 Symbol.prototype.toString ( )
8024 Object.defineProperty(Symbol.prototype, 'toString', {
8025 value: function toString() {
8026 var s = strict(this);
8027 var desc = s['[[Description]]'];
8028 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8029 },
8030 configurable: true, writeable: true, enumerable: false });
8031
8032 // 19.4.3.3 Symbol.prototype.valueOf ( )
8033 Object.defineProperty(Symbol.prototype, 'valueOf', {
8034 value: function valueOf() {
8035 // To prevent automatic string conversion:
8036 throw TypeError();
8037
8038 // Spec has approximately the following:
8039 //var s = strict(this);
8040 //if (Type(s) === 'symbol') return s;
8041 //if (Type(s) !== 'object') throw TypeError();
8042 //if (!('[[SymbolData]]' in s)) throw TypeError();
8043 //return s['[[SymbolData]]'];
8044 },
8045 configurable: true, writeable: true, enumerable: false });
8046
8047 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8048 // (Done later to polyfill partial implementations)
8049
8050 // 19.4.4 Properties of Symbol Instances
8051 }());
8052
8053 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8054
8055 // Defined here so that other prototypes can reference it
8056 // 25.1.2 The %IteratorPrototype% Object
8057 var $IteratorPrototype$ = {};
8058
8059 //----------------------------------------
8060 // 6 ECMAScript Data Types and Values
8061 //----------------------------------------
8062
8063 // 6.1 ECMAScript Language Types
8064
8065 // "Type(x)" is used as shorthand for "the type of x"...
8066 function Type(v) {
8067 switch (typeof v) {
8068 case 'undefined': return 'undefined';
8069 case 'boolean': return 'boolean';
8070 case 'number': return 'number';
8071 case 'string': return 'string';
8072 case 'symbol': return 'symbol';
8073 default:
8074 if (v === null) return 'null';
8075 if (v instanceof global.Symbol) return 'symbol';
8076 return 'object';
8077 }
8078 }
8079
8080 // 6.1.5.1 Well-Known Symbols
8081 var $$iterator = global.Symbol.iterator,
8082 $$match = global.Symbol.match,
8083 $$replace = global.Symbol.replace,
8084 $$search = global.Symbol.search,
8085 $$split = global.Symbol.split,
8086 $$toStringTag = global.Symbol.toStringTag;
8087
8088 //----------------------------------------
8089 // 7 Abstract Operations
8090 //----------------------------------------
8091
8092 //----------------------------------------
8093 // 7.1 Type Conversion
8094 //----------------------------------------
8095
8096 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8097 // just use valueOf()
8098
8099 // 7.1.2 ToBoolean ( argument )
8100 // just use Boolean()
8101
8102 // 7.1.3 ToNumber ( argument )
8103 // just use Number()
8104
8105 // 7.1.4 ToInteger ( argument )
8106 function ToInteger(n) {
8107 n = Number(n);
8108 if ($isNaN(n)) return 0;
8109 if (n === 0 || n === Infinity || n === -Infinity) return n;
8110 return ((n < 0) ? -1 : 1) * floor(abs(n));
8111 }
8112
8113 // 7.1.5 ToInt32 ( argument )
8114 function ToInt32(v) { return v >> 0; }
8115
8116 // 7.1.6 ToUint32 ( argument )
8117 function ToUint32(v) { return v >>> 0; }
8118
8119 // 7.1.7 ToInt16 ( argument )
8120 function ToInt16(v) { return (v << 16) >> 16; }
8121
8122 // 7.1.8 ToUint16 ( argument )
8123 function ToUint16(v) { return v & 0xFFFF; }
8124
8125 // 7.1.9 ToInt8 ( argument )
8126 function ToInt8(v) { return (v << 24) >> 24; }
8127
8128 // 7.1.10 ToUint8 ( argument )
8129 function ToUint8(v) { return v & 0xFF; }
8130
8131 // 7.1.11 ToUint8Clamp ( argument )
8132 function ToUint8Clamp(argument) {
8133 var number = Number(argument);
8134 if ($isNaN(number)) return 0;
8135 if (number <= 0) return 0;
8136 if (number >= 255) return 255;
8137 var f = floor(number);
8138 if ((f + 0.5) < number) return f + 1;
8139 if (number < (f + 0.5)) return f;
8140 if (f % 2) return f + 1;
8141 return f;
8142 }
8143
8144 // 7.1.12 ToString ( argument )
8145 // just use String()
8146
8147 // 7.1.13 ToObject ( argument )
8148 function ToObject(v) {
8149 if (v === null || v === undefined) throw TypeError();
8150 return Object(v);
8151 }
8152
8153 // 7.1.14 ToPropertyKey ( argument )
8154 function ToPropertyKey(v) {
8155 return String(v);
8156 }
8157
8158 // 7.1.15 ToLength ( argument )
8159 function ToLength(v) {
8160 var len = ToInteger(v);
8161 if (len <= 0) return 0;
8162 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8163 return min(len, 0x20000000000000 - 1); // 2^53-1
8164 }
8165
8166 // 7.1.16 CanonicalNumericIndexString ( argument )
8167
8168 //----------------------------------------
8169 // 7.2 Testing and Comparison Operations
8170 //----------------------------------------
8171
8172 // 7.2.1 RequireObjectCoercible ( argument )
8173 // 7.2.2 IsArray ( argument )
8174
8175 // 7.2.3 IsCallable ( argument )
8176 function IsCallable(o) { return typeof o === 'function'; }
8177
8178 // 7.2.4 IsConstructor ( argument )
8179 function IsConstructor(o) {
8180 // Hacks for Safari 7 TypedArray XXXConstructor objects
8181 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8182 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8183 // TODO: Can this be improved on?
8184 return typeof o === 'function';
8185 }
8186
8187 // 7.2.5 IsExtensible (O)
8188 // 7.2.6 IsInteger ( argument )
8189
8190 // 7.2.7 IsPropertyKey ( argument )
8191 function IsPropertyKey(argument) {
8192 if (Type(argument) === 'string') return true;
8193 if (Type(argument) === 'symbol') return true;
8194 return false;
8195 }
8196
8197 // 7.2.8 IsRegExp ( argument )
8198 // 7.2.5 IsConstructor ( argument )
8199
8200 // 7.2.9 SameValue(x, y)
8201 function SameValue(x, y) {
8202 if (typeof x !== typeof y) return false;
8203 switch (typeof x) {
8204 case 'undefined':
8205 return true;
8206 case 'number':
8207 if (x !== x && y !== y) return true;
8208 if (x === 0 && y === 0) return 1/x === 1/y;
8209 return x === y;
8210 case 'boolean':
8211 case 'string':
8212 case 'object':
8213 default:
8214 return x === y;
8215 }
8216 }
8217
8218 // 7.2.10 SameValueZero(x, y)
8219 function SameValueZero(x, y) {
8220 if (typeof x !== typeof y) return false;
8221 switch (typeof x) {
8222 case 'undefined':
8223 return true;
8224 case 'number':
8225 if (x !== x && y !== y) return true;
8226 return x === y;
8227 case 'boolean':
8228 case 'string':
8229 case 'object':
8230 default:
8231 return x === y;
8232 }
8233 }
8234
8235 //----------------------------------------
8236 // 7.3 Operations on Objects
8237 //----------------------------------------
8238
8239 // 7.3.1 Get (O, P)
8240 // - just use o.p or o[p]
8241
8242 // 7.3.2 GetV (V, P)
8243 function GetV(v, p) {
8244 var o = ToObject(v);
8245 return o[p];
8246 }
8247
8248 // 7.3.3 Set (O, P, V, Throw)
8249 // - just use o.p = v or o[p] = v
8250
8251
8252
8253
8254 // 7.3.9 GetMethod (O, P)
8255 function GetMethod(o, p) {
8256 var func = GetV(o, p);
8257 if (func === undefined || func === null) return undefined;
8258 if (!IsCallable(func)) throw TypeError();
8259 return func;
8260 }
8261
8262 // 7.3.10 HasProperty (O, P)
8263 function HasProperty(o, p) {
8264 while (o) {
8265 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8266 if (Type(o) !== 'object') return false;
8267 o = Object.getPrototypeOf(o);
8268 }
8269 return false;
8270 }
8271
8272 // 7.3.11 HasOwnProperty (O, P)
8273 function HasOwnProperty(o, p) {
8274 return Object.prototype.hasOwnProperty.call(o, p);
8275 }
8276
8277 //----------------------------------------
8278 // 7.4 Operations on Iterator Objects
8279 //----------------------------------------
8280
8281 // 7.4.1 GetIterator ( obj, method )
8282 function GetIterator(obj, method) {
8283 if (arguments.length < 2)
8284 method = GetMethod(obj, $$iterator);
8285 var iterator = method.call(obj);
8286 if (Type(iterator) !== 'object') throw TypeError();
8287 return iterator;
8288 }
8289
8290 // 7.4.2 IteratorNext ( iterator, value )
8291 function IteratorNext(iterator, value) {
8292 if (arguments.length < 2)
8293 var result = iterator.next();
8294 else
8295 result = iterator.next(value);
8296 if (Type(result) !== 'object') throw TypeError();
8297 return result;
8298 }
8299
8300 // 7.4.3 IteratorComplete ( iterResult )
8301 function IteratorComplete(iterResult) {
8302 console.assert(Type(iterResult) === 'object');
8303 return Boolean(iterResult.done);
8304 }
8305
8306 // 7.4.4 IteratorValue ( iterResult )
8307 function IteratorValue(iterResult) {
8308 console.assert(Type(iterResult) === 'object');
8309 return iterResult.value;
8310 }
8311
8312 // 7.4.5 IteratorStep ( iterator )
8313 function IteratorStep( iterator, value ) {
8314 var result = IteratorNext(iterator, value);
8315 var done = result['done'];
8316 if (Boolean(done) === true) return false;
8317 return result;
8318 }
8319
8320 // 7.4.6 IteratorClose( iterator, completion )
8321 function IteratorClose( iterator, completion ) {
8322 console.assert(Type(iterator) === 'object');
8323 var _return = GetMethod(iterator, 'return');
8324 if (_return === undefined) return completion;
8325 try {
8326 var innerResult = _return[iterator]();
8327 } catch (result) {
8328 // TODO: If completion.[[type]] is throw, return completion
8329 return result;
8330 }
8331 if (Type(innerResult) !== 'object') throw TypeError();
8332 return completion;
8333 }
8334
8335 // 7.4.7 CreateIterResultObject (value, done)
8336 function CreateIterResultObject(value, done) {
8337 console.assert(Type(done) === 'boolean');
8338 var obj = {};
8339 obj["value"] = value;
8340 obj["done"] = done;
8341 return obj;
8342 }
8343
8344 // 7.4.8 CreateListIterator (list)
8345 // 7.4.8.1 ListIterator next( )
8346 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8347 // 7.4.9.1 CompoundIterator next( )
8348
8349 //----------------------------------------
8350 // 8 Executable Code and Execution Contexts
8351 //----------------------------------------
8352
8353 //----------------------------------------
8354 // 8.4 Jobs and Job Queues
8355 //----------------------------------------
8356
8357 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8358 function EnqueueJob(queueName, job, args) {
8359 var fn = function() { job.apply(undefined, args); };
8360 enqueue(fn);
8361 }
8362
8363 // 8.4.2 NextJob result
8364 function NextJob(result) {
8365 // no-op
8366 }
8367
8368 //----------------------------------------
8369 // 9 Ordinary and Exotic Objects Behaviors
8370 //----------------------------------------
8371
8372 // 9.1.11 [[Enumerate]] ()
8373 function Enumerate(obj) {
8374 var e = [];
8375 if (Object(obj) !== obj) return e;
8376 var visited = new Set;
8377 while (obj !== null) {
8378 Object.getOwnPropertyNames(obj).forEach(function(name) {
8379 if (!visited.has(name)) {
8380 var desc = Object.getOwnPropertyDescriptor(obj, name);
8381 if (desc) {
8382 visited.add(name);
8383 if (desc.enumerable) e.push(name);
8384 }
8385 }
8386 });
8387 obj = Object.getPrototypeOf(obj);
8388 }
8389 return e[$$iterator]();
8390 }
8391
8392 // 9.1.12 [[OwnPropertyKeys]] ( )
8393 function OwnPropertyKeys(o) {
8394 return Object.getOwnPropertyNames(o);
8395 }
8396
8397 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8398 function ObjectCreate(proto, internalSlotsList) {
8399 return Object.create(proto, internalSlotsList);
8400 }
8401
8402 // ---------------------------------------
8403 // 19 Fundamental Objects
8404 // ---------------------------------------
8405
8406 // ---------------------------------------
8407 // 19.1 Object Objects
8408 // ---------------------------------------
8409
8410 // 19.1.1 The Object Constructor
8411 // 19.1.1.1 Object ( [ value ] )
8412 // 19.1.2 Properties of the Object Constructor
8413 // 19.1.2.1 Object.assign ( target, ...sources )
8414 define(
8415 Object, 'assign',
8416 function assign(target, /*...*/sources) {
8417 var to = ToObject(target);
8418 if (arguments.length < 2) return to;
8419
8420 var sourcesIndex = 1;
8421 while (sourcesIndex < arguments.length) {
8422 var nextSource = arguments[sourcesIndex++];
8423 if (nextSource === undefined || nextSource === null) {
8424 var keys = [];
8425 } else {
8426 var from = ToObject(nextSource);
8427 keys = OwnPropertyKeys(from);
8428 }
8429 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8430 var nextKey = keys[keysIndex];
8431 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8432 if (desc !== undefined && desc.enumerable) {
8433 var propValue = from[nextKey];
8434 to[nextKey] = propValue;
8435 }
8436 }
8437 }
8438 return to;
8439 });
8440
8441 // 19.1.2.2 Object.create ( O [ , Properties ] )
8442 // 19.1.2.3 Object.defineProperties ( O, Properties )
8443 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8444 // 19.1.2.5 Object.freeze ( O )
8445 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8446
8447 (function() {
8448 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8449 $getOwnPropertyNames = Object.getOwnPropertyNames,
8450 $keys = Object.keys,
8451 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8452
8453 function isStringKey(k) { return !symbolForKey(k); }
8454
8455 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8456 define(
8457 Object, 'getOwnPropertyNames',
8458 function getOwnPropertyNames(o) {
8459 if (Object.prototype.toString.call(o) === '[object Window]') {
8460 // Workaround for cross-realm calling by IE itself.
8461 // https://github.com/inexorabletash/polyfill/issues/96
8462 try {
8463 return $getOwnPropertyNames(o).filter(isStringKey);
8464 } catch (_) {
8465 return $window_names.slice();
8466 }
8467 }
8468 return $getOwnPropertyNames(o).filter(isStringKey);
8469 }, !nativeSymbols);
8470
8471 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8472 define(
8473 Object, 'getOwnPropertySymbols',
8474 function getOwnPropertySymbols(o) {
8475 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8476 }, !nativeSymbols);
8477
8478 // 19.1.2.14 Object.keys ( O )
8479 define(
8480 Object, 'keys',
8481 function keys(o) {
8482 return $keys(o).filter(isStringKey);
8483 }, !nativeSymbols);
8484 }());
8485
8486 // 19.1.2.9 Object.getPrototypeOf ( O )
8487 // 19.1.2.10 Object.is ( value1, value2 )
8488 define(
8489 Object, 'is',
8490 function is(value1, value2) {
8491 return SameValue(value1, value2);
8492 });
8493
8494 // 19.1.2.11 Object.isExtensible ( O )
8495 // 19.1.2.12 Object.isFrozen ( O )
8496 // 19.1.2.13 Object.isSealed ( O )
8497
8498 // 19.1.2.14 Object.keys ( O )
8499 // see above
8500
8501 // 19.1.2.15 Object.preventExtensions ( O )
8502 // 19.1.2.16 Object.prototype
8503 // 19.1.2.17 Object.seal ( O )
8504
8505 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8506 define(
8507 Object, 'setPrototypeOf',
8508 function setPrototypeOf(o, proto) {
8509 if (Type(o) !== 'object') throw TypeError();
8510 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8511 o.__proto__ = proto;
8512 return o;
8513 }
8514 );
8515
8516 // 19.1.3 Properties of the Object Prototype Object
8517 // 19.1.3.1 Object.prototype.constructor
8518 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8519 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8520 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8521 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8522 // 19.1.3.6 Object.prototype.toString ( )
8523 hook(Object.prototype, 'toString',
8524 function() {
8525 var o = strict(this);
8526 if (o === Object(o) && $$toStringTag in o) {
8527 return '[object ' + o[$$toStringTag] + ']';
8528 }
8529 return undefined;
8530 });
8531
8532 // 19.1.3.7 Object.prototype.valueOf ( )
8533 // 19.1.4 Properties of Object Instances
8534
8535 // ---------------------------------------
8536 // 19.2 Function Objects
8537 // ---------------------------------------
8538
8539 // 19.2.1 The Function Constructor
8540 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8541 // 19.2.2 Properties of the Function Constructor
8542 // 19.2.2.1 Function.length
8543 // 19.2.2.2 Function.prototype
8544 // 19.2.3 Properties of the Function Prototype Object
8545 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8546 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8547 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8548 // 19.2.3.4 Function.prototype.constructor
8549 // 19.2.3.5 Function.prototype.toString ( )
8550 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8551 // 19.2.4 Function Instances
8552 // 19.2.4.1 length
8553 // 19.2.4.2 name
8554 // 19.2.4.3 prototype
8555
8556 // (No polyfillable changes from ES5)
8557
8558 // ---------------------------------------
8559 // 19.3 Boolean Objects
8560 // ---------------------------------------
8561
8562 // 19.3.1 The Boolean Constructor
8563 // 19.3.1.1 Boolean ( value )
8564 // 19.3.2 Properties of the Boolean Constructor
8565 // 19.3.2.1 Boolean.prototype
8566 // 19.3.3 Properties of the Boolean Prototype Object
8567 // 19.3.3.1 Boolean.prototype.constructor
8568 // 19.3.3.2 Boolean.prototype.toString ( )
8569 // 19.3.3.3 Boolean.prototype.valueOf ( )
8570 // 19.3.4 Properties of Boolean Instances
8571
8572 // (No polyfillable changes from ES5)
8573
8574 // ---------------------------------------
8575 // 19.4 Symbol Objects
8576 // ---------------------------------------
8577
8578 // Moved earlier in this script, so that other polyfills can depend on them.
8579
8580 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8581 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8582
8583 // ---------------------------------------
8584 // 19.5 Error Objects
8585 // ---------------------------------------
8586
8587 // 19.5.1 The Error Constructor
8588 // 19.5.1.1 Error ( message )
8589 // 19.5.1.2 new Error( ...argumentsList )
8590 // 19.5.2 Properties of the Error Constructor
8591 // 19.5.2.1 Error.prototype
8592 // 19.5.3 Properties of the Error Prototype Object
8593 // 19.5.3.1 Error.prototype.constructor
8594 // 19.5.3.2 Error.prototype.message
8595 // 19.5.3.3 Error.prototype.name
8596 // 19.5.3.4 Error.prototype.toString ( )
8597 // 19.5.4 Properties of Error Instances
8598 // 19.5.5 Native Error Types Used in This Standard
8599 // 19.5.5.1 EvalError
8600 // 19.5.5.2 RangeError
8601 // 19.5.5.3 ReferenceError
8602 // 19.5.5.4 SyntaxError
8603 // 19.5.5.5 TypeError
8604 // 19.5.5.6 URIError
8605 // 19.5.6 NativeError Object Structure
8606 // 19.5.6.1 NativeError Constructors
8607 // 19.5.6.1.1 NativeError ( message )
8608 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8609 // 19.5.6.2 Properties of the NativeError Constructors
8610 // 19.5.6.2.1 NativeError.prototype
8611 // 19.5.6.3 Properties of the NativeError Prototype Objects
8612 // 19.5.6.4 Properties of NativeError Instances
8613
8614 // (No polyfillable changes from ES5)
8615
8616 // ---------------------------------------
8617 // 20 Numbers and Dates
8618 // ---------------------------------------
8619
8620 // ---------------------------------------
8621 // 20.1 Number Objects
8622 // ---------------------------------------
8623
8624 // 20.1.1 The Number Constructor
8625 // 20.1.1.1 Number ( [ value ] )
8626 // 20.1.1.2 new Number ( ...argumentsList )
8627 // 20.1.2 Properties of the Number Constructor
8628
8629 // 20.1.2.1 Number.EPSILON
8630 define(
8631 Number, 'EPSILON',
8632 (function () {
8633 var next, result;
8634 for (next = 1; 1 + next !== 1; next = next / 2)
8635 result = next;
8636 return result;
8637 }()));
8638
8639 // 20.1.2.2 Number.isFinite ( number )
8640 define(
8641 Number, 'isFinite',
8642 function isFinite(number) {
8643 if (Type(number) !== 'number') return false;
8644 if (number !== number || number === +Infinity || number === -Infinity) return false;
8645 return true;
8646 });
8647
8648 // 20.1.2.3 Number.isInteger ( number )
8649 define(
8650 Number, 'isInteger',
8651 function isInteger(number) {
8652 if (Type(number) !== 'number') return false;
8653 if (number !== number || number === +Infinity || number === -Infinity) return false;
8654 var integer = ToInteger(number);
8655 if (integer !== number) return false;
8656 return true;
8657 });
8658
8659 // 20.1.2.4 Number.isNaN ( number )
8660 define(
8661 Number, 'isNaN',
8662 function isNaN(number) {
8663 if (Type(number) !== 'number') return false;
8664 if (number !== number) return true;
8665 return false;
8666 });
8667
8668 // 20.1.2.5 Number.isSafeInteger ( number )
8669 define(
8670 Number, 'isSafeInteger',
8671 function isSafeInteger(number) {
8672 if (Type(number) !== 'number') return false;
8673 if (number !== number || number === +Infinity || number === -Infinity) return false;
8674 var integer = ToInteger(number);
8675 if (integer !== number) return false;
8676 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8677 return true;
8678 return false;
8679 });
8680
8681 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8682 define(
8683 Number, 'MAX_SAFE_INTEGER',
8684 9007199254740991); // 2^53-1
8685
8686 // 20.1.2.7 Number.MAX_VALUE
8687
8688 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8689 define(
8690 Number, 'MIN_SAFE_INTEGER',
8691 -9007199254740991); // -2^53+1
8692
8693 // 20.1.2.9 Number.MIN_VALUE
8694 // 20.1.2.10 Number.NaN
8695 // 20.1.2.11 Number.NEGATIVE_INFINITY
8696
8697 // 20.1.2.12 Number.parseFloat ( string )
8698 define(Number, 'parseFloat', $parseFloat);
8699
8700 // 20.1.2.13 Number.parseInt ( string, radix )
8701 define(Number, 'parseInt', $parseInt);
8702
8703 // 20.1.2.14 Number.POSITIVE_INFINITY
8704 // 20.1.2.15 Number.prototype
8705
8706 // 20.1.3 Properties of the Number Prototype Object
8707 // 20.1.3.1 Number.prototype.constructor
8708 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8709 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8710 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8711 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8712 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8713 // 20.1.3.7 Number.prototype.valueOf ( )
8714 // 20.1.4 Properties of Number Instances
8715
8716 // ---------------------------------------
8717 // 20.2 The Math Object
8718 // ---------------------------------------
8719
8720 // 20.2.1 Value Properties of the Math Object
8721 // 20.2.1.1 Math.E
8722 // 20.2.1.2 Math.LN10
8723 // 20.2.1.3 Math.LN2
8724 // 20.2.1.4 Math.LOG10E
8725 // 20.2.1.5 Math.LOG2E
8726 // 20.2.1.6 Math.PI
8727 // 20.2.1.7 Math.SQRT1_2
8728 // 20.2.1.8 Math.SQRT2
8729
8730 // 20.2.1.9 Math [ @@toStringTag ]
8731 define(Math, $$toStringTag, 'Math');
8732
8733 // 20.2.2 Function Properties of the Math Object
8734 // 20.2.2.1 Math.abs ( x )
8735 // 20.2.2.2 Math.acos ( x )
8736
8737 // 20.2.2.3 Math.acosh(x)
8738 define(
8739 Math, 'acosh',
8740 function acosh(x) {
8741 x = Number(x);
8742 return log(x + sqrt(x * x - 1));
8743 });
8744
8745 // 20.2.2.4 Math.asin ( x )
8746
8747 // 20.2.2.5 Math.asinh( x )
8748 define(
8749 Math, 'asinh',
8750 function asinh(x) {
8751 x = Number(x);
8752 if (SameValue(x, -0)) {
8753 return x;
8754 }
8755 var s = sqrt(x * x + 1);
8756 return (s === -x) ? log(0) : log(x + s);
8757 });
8758
8759 // 20.2.2.6 Math.atan ( x )
8760
8761 // 20.2.2.7 Math.atanh( x )
8762 define(
8763 Math, 'atanh',
8764 function atanh(x) {
8765 x = Number(x);
8766 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8767 });
8768
8769 // 20.2.2.8 Math.atan2 ( y, x )
8770
8771 // 20.2.2.9 Math.cbrt ( x )
8772 define(
8773 Math, 'cbrt',
8774 function cbrt(x) {
8775 x = Number(x);
8776 if ($isNaN(x/x)) {
8777 return x;
8778 }
8779 var r = pow(abs(x), 1/3);
8780 var t = x/r/r;
8781 return r + (r * (t-r) / (2*r + t));
8782 });
8783
8784 // 20.2.2.10 Math.ceil ( x )
8785
8786 // 20.2.2.11 Math.clz32 ( x )
8787 define(
8788 Math, 'clz32',
8789 function clz32(x) {
8790 function clz8(x) {
8791 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8792 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8793 }
8794 x = ToUint32(x);
8795 return x & 0xff000000 ? clz8(x >> 24) :
8796 x & 0xff0000 ? clz8(x >> 16) + 8 :
8797 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8798 });
8799
8800
8801
8802 // 20.2.2.12 Math.cos ( x )
8803
8804 // 20.2.2.13 Math.cosh ( x )
8805 define(
8806 Math, 'cosh',
8807 function cosh(x) {
8808 x = Number(x);
8809 return (pow(E, x) + pow(E, -x)) / 2;
8810 });
8811
8812 // 20.2.2.14 Math.exp ( x )
8813
8814 // 20.2.2.15 Math.expm1 ( x )
8815 define(
8816 Math, 'expm1',
8817 function expm1(x) {
8818 x = Number(x);
8819 // from: http://www.johndcook.com/cpp_log1p.html
8820 if (SameValue(x, -0)) {
8821 return -0;
8822 } else if (abs(x) < 1e-5) {
8823 return x + 0.5 * x * x; // two terms of Taylor expansion
8824 } else {
8825 return exp(x) - 1;
8826 }
8827 });
8828
8829 // 20.2.2.16 Math.floor ( x )
8830
8831 // 20.2.2.17 Math.fround ( x )
8832 define(
8833 Math, 'fround',
8834 function fround(x) {
8835 if ($isNaN(x)) {
8836 return NaN;
8837 }
8838 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8839 return x;
8840 }
8841 return (new Float32Array([x]))[0];
8842 });
8843
8844 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8845 define(
8846 Math, 'hypot',
8847 function hypot() {
8848 var values = [];
8849 var m = 0, sawNaN = false;
8850 for (var i = 0; i < arguments.length; ++i) {
8851 var n = abs(Number(arguments[i]));
8852 if (n === Infinity) return n;
8853 if (n !== n) sawNaN = true;
8854 if (n > m) m = n;
8855 values[i] = n;
8856 }
8857 if (sawNaN) return NaN;
8858 if (m === 0) return +0;
8859 var sum = +0;
8860 for (i = 0; i < values.length; ++i) {
8861 var r = values[i] / m;
8862 sum = sum + r * r;
8863 }
8864 return m * sqrt(sum);
8865 });
8866
8867 // 20.2.2.19 Math.imul ( x, y )
8868 define(
8869 Math, 'imul',
8870 function imul(x, y) {
8871 var a = ToUint32(x);
8872 var b = ToUint32(y);
8873 // (slow but accurate)
8874 var ah = (a >>> 16) & 0xffff;
8875 var al = a & 0xffff;
8876 var bh = (b >>> 16) & 0xffff;
8877 var bl = b & 0xffff;
8878 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8879 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8880 );
8881
8882 // 20.2.2.20 Math.log ( x )
8883
8884 // 20.2.2.21 Math.log1p ( x )
8885 define(
8886 Math, 'log1p',
8887 function log1p(x) {
8888 x = Number(x);
8889 // from: http://www.johndcook.com/cpp_expm1.html
8890 if (x < -1) {
8891 return NaN;
8892 } else if (SameValue(x, -0)) {
8893 return -0;
8894 } else if (abs(x) > 1e-4) {
8895 return log(1 + x);
8896 } else {
8897 return (-0.5 * x + 1) * x;
8898 }
8899 });
8900
8901 // 20.2.2.22 Math.log10 ( x )
8902 define(
8903 Math, 'log10',
8904 function log10(x) {
8905 x = Number(x);
8906 return log(x) * LOG10E;
8907 });
8908
8909 // 20.2.2.23 Math.log2 ( x )
8910 define(
8911 Math, 'log2',
8912 function log2(x) {
8913 x = Number(x);
8914 return log(x) * LOG2E;
8915 });
8916
8917 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8918 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8919 // 20.2.2.26 Math.pow ( x, y )
8920 // 20.2.2.27 Math.random ( )
8921 // 20.2.2.28 Math.round ( x )
8922
8923 // 20.2.2.29 Math.sign(x)
8924 define(
8925 Math, 'sign',
8926 function sign(x) {
8927 x = Number(x);
8928 return x < 0 ? -1 : x > 0 ? 1 : x;
8929 });
8930
8931 // 20.2.2.30 Math.sin ( x )
8932
8933 // 20.2.2.31 Math.sinh( x )
8934 define(
8935 Math, 'sinh',
8936 function sinh(x) {
8937 x = Number(x);
8938 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8939 });
8940
8941 // 20.2.2.32 Math.sqrt ( x )
8942 // 20.2.2.33 Math.tan ( x )
8943
8944 // 20.2.2.34 Math.tanh ( x )
8945 define(
8946 Math, 'tanh',
8947 function tanh(x) {
8948 x = Number(x);
8949 var n = pow(E, 2 * x) - 1,
8950 d = pow(E, 2 * x) + 1;
8951 if (SameValue(x, -0))
8952 return x;
8953 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8954 });
8955
8956 // 20.2.2.35 Math.trunc ( x )
8957 define(
8958 Math, 'trunc',
8959 function trunc(x) {
8960 x = Number(x);
8961 return $isNaN(x) ? NaN :
8962 x < 0 ? ceil(x) : floor(x);
8963 });
8964
8965 // ---------------------------------------
8966 // 20.3 Date Objects
8967 // ---------------------------------------
8968
8969 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8970 // 20.3.1.1 Time Values and Time Range
8971 // 20.3.1.2 Day Number and Time within Day
8972 // 20.3.1.3 Year Number
8973 // 20.3.1.4 Month Number
8974 // 20.3.1.5 Date Number
8975 // 20.3.1.6 Week Day
8976 // 20.3.1.7 Local Time Zone Adjustment
8977 // 20.3.1.8 Daylight Saving Time Adjustment
8978 // 20.3.1.9 Local Time
8979 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8980 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8981 // 20.3.1.12 MakeDay (year, month, date)
8982 // 20.3.1.13 MakeDate (day, time)
8983 // 20.3.1.14 TimeClip (time)
8984 // 20.3.1.15 Date Time String Format
8985 // 20.3.1.15.1 Extended years
8986 // 20.3.2 The Date Constructor
8987 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8988 // 20.3.2.2 Date ( value )
8989 // 20.3.2.3 Date ( )
8990 // 20.3.3 Properties of the Date Constructor
8991 // 20.3.3.1 Date.now ( )
8992 // 20.3.3.2 Date.parse (string)
8993 // 20.3.3.3 Date.prototype
8994 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8995 // 20.3.4 Properties of the Date Prototype Object
8996 // 20.3.4.1 Date.prototype.constructor
8997 // 20.3.4.2 Date.prototype.getDate ( )
8998 // 20.3.4.3 Date.prototype.getDay ( )
8999 // 20.3.4.4 Date.prototype.getFullYear ( )
9000 // 20.3.4.5 Date.prototype.getHours ( )
9001 // 20.3.4.6 Date.prototype.getMilliseconds ( )
9002 // 20.3.4.7 Date.prototype.getMinutes ( )
9003 // 20.3.4.8 Date.prototype.getMonth ( )
9004 // 20.3.4.9 Date.prototype.getSeconds ( )
9005 // 20.3.4.10 Date.prototype.getTime ( )
9006 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9007 // 20.3.4.12 Date.prototype.getUTCDate ( )
9008 // 20.3.4.13 Date.prototype.getUTCDay ( )
9009 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9010 // 20.3.4.15 Date.prototype.getUTCHours ( )
9011 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9012 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9013 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9014 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9015 // 20.3.4.20 Date.prototype.setDate ( date )
9016 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9017 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9018 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9019 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9020 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9021 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9022 // 20.3.4.27 Date.prototype.setTime ( time )
9023 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9024 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9025 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9026 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9027 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9028 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9029 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9030 // 20.3.4.35 Date.prototype.toDateString ( )
9031 // 20.3.4.36 Date.prototype.toISOString ( )
9032 // 20.3.4.37 Date.prototype.toJSON ( key )
9033 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9034 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9035 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9036 // 20.3.4.41 Date.prototype.toString ( )
9037 // 20.3.4.42 Date.prototype.toTimeString ( )
9038 // 20.3.4.43 Date.prototype.toUTCString ( )
9039 // 20.3.4.44 Date.prototype.valueOf ( )
9040 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9041 // 20.3.5 Properties of Date Instances
9042
9043 // (No polyfillable changes from ES5)
9044
9045 // ---------------------------------------
9046 // 21 Text Processing
9047 // ---------------------------------------
9048
9049 var string_regexp_dispatch = (function() {
9050 var faux = {}, secret = Symbol();
9051 faux[Symbol.match] = function() { return secret; };
9052 return ("").match(faux) === secret;
9053 }());
9054
9055 // 21.1 String Objects
9056 // 21.1.1 The String Constructor
9057 // 21.1.1.1 String ( value )
9058 // 21.1.2 Properties of the String Constructor
9059 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9060
9061 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9062 define(
9063 String, 'fromCodePoint',
9064 function fromCodePoint(/*...codePoints*/) {
9065 var codePoints = arguments,
9066 length = codePoints.length,
9067 elements = [],
9068 nextIndex = 0;
9069 while (nextIndex < length) {
9070 var next = codePoints[nextIndex];
9071 var nextCP = Number(next);
9072 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9073 nextCP < 0 || nextCP > 0x10FFFF) {
9074 throw RangeError('Invalid code point ' + nextCP);
9075 }
9076 if (nextCP < 0x10000) {
9077 elements.push(String.fromCharCode(nextCP));
9078 } else {
9079 nextCP -= 0x10000;
9080 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9081 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9082 }
9083 nextIndex += 1;
9084 }
9085 return elements.join('');
9086 });
9087
9088 // 21.1.2.3 String.prototype
9089
9090 // 21.1.2.4 String.raw ( template , ...substitutions )
9091 define(
9092 String, 'raw',
9093 function raw(template /*, ...substitutions*/) {
9094 var substitutions = [].slice.call(arguments, 1);
9095
9096 var cooked = Object(template);
9097 var rawValue = cooked['raw'];
9098 var raw = Object(rawValue);
9099 var len = raw['length'];
9100 var literalSegments = ToLength(len);
9101 if (literalSegments <= 0) return '';
9102 var stringElements = [];
9103 var nextIndex = 0;
9104 while (true) {
9105 var next = raw[nextIndex];
9106 var nextSeg = String(next);
9107 stringElements.push(nextSeg);
9108 if (nextIndex + 1 === literalSegments)
9109 return stringElements.join('');
9110 next = substitutions[nextIndex];
9111 var nextSub = String(next);
9112 stringElements.push(nextSub);
9113 nextIndex = nextIndex + 1;
9114 }
9115 });
9116
9117 // See https://githib.com/inexorabletash/uate for a more useful version.
9118
9119 // 21.1.3 Properties of the String Prototype Object
9120 // 21.1.3.1 String.prototype.charAt ( pos )
9121 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9122
9123 // 21.1.3.3 String.prototype.codePointAt ( pos )
9124 define(
9125 String.prototype, 'codePointAt',
9126 function codePointAt(pos) {
9127 var o = strict(this);
9128 var s = String(o);
9129 var position = ToInteger(pos);
9130 var size = s.length;
9131 if (position < 0 || position >= size) return undefined;
9132 var first = s.charCodeAt(position);
9133 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9134 var second = s.charCodeAt(position + 1);
9135 if (second < 0xDC00 || second > 0xDFFF) return first;
9136 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9137 });
9138
9139 // 21.1.3.4 String.prototype.concat ( ...args )
9140 // 21.1.3.5 String.prototype.constructor
9141
9142 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9143 define(
9144 String.prototype, 'endsWith',
9145 function endsWith(searchString) {
9146 var endPosition = arguments[1];
9147
9148 var o = strict(this);
9149 var s = String(o);
9150 var searchStr = String(searchString);
9151 var len = s.length;
9152 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9153 var end = min(max(pos, 0), len);
9154 var searchLength = searchStr.length;
9155 var start = end - searchLength;
9156 if (start < 0) return false;
9157 if (s.substring(start, start + searchLength) === searchStr) return true;
9158 return false;
9159 });
9160
9161 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9162 define(
9163 String.prototype, 'includes',
9164 function includes(searchString) {
9165 var position = arguments[1];
9166
9167 var o = strict(this);
9168 var s = String(o);
9169 var searchStr = String(searchString);
9170 var pos = ToInteger(position);
9171 var len = s.length;
9172 var start = min(max(pos, 0), len);
9173 return s.indexOf(searchStr, start) !== -1;
9174 });
9175
9176 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9177 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9178 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9179 // 21.1.3.11 String.prototype.match ( regexp )
9180 define(
9181 String.prototype, 'match',
9182 function match(regexp) {
9183 var o = strict(this);
9184 var s = String(o);
9185 if (HasProperty(regexp, $$match)) var rx = regexp;
9186 else rx = new RegExp(regexp);
9187 return rx[$$match](s);
9188 }, !string_regexp_dispatch);
9189
9190 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9191
9192 // Not practical due to table sizes; if needed, pull in:
9193 // https://github.com/walling/unorm/
9194
9195 // 21.1.3.13 String.prototype.repeat ( count )
9196 define(
9197 String.prototype, 'repeat',
9198 function repeat(count) {
9199 var o = strict(this);
9200 var s = String(o);
9201 var n = ToInteger(count);
9202 if (n < 0) throw RangeError();
9203 if (n === Infinity) throw RangeError();
9204 var t = new Array(n + 1).join(s);
9205 return t;
9206 });
9207
9208 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9209 define(
9210 String.prototype, 'replace',
9211 function replace(searchValue, replaceValue) {
9212 var o = strict(this);
9213 if (HasProperty(searchValue, $$replace))
9214 return searchValue[$$replace](o, replaceValue);
9215 return orig_replace.call(o, searchValue, replaceValue);
9216 }, !string_regexp_dispatch);
9217
9218 // 21.1.3.15 String.prototype.search ( regexp )
9219 define(
9220 String.prototype, 'search',
9221 function search(regexp) {
9222 var o = strict(this);
9223 var string = String(o);
9224 if (HasProperty(regexp, $$search)) var rx = regexp;
9225 else rx = new RegExp(regexp);
9226 return rx[$$search](string);
9227 }, !string_regexp_dispatch);
9228
9229 // 21.1.3.16 String.prototype.slice ( start, end )
9230 // 21.1.3.17 String.prototype.split ( separator, limit )
9231 define(
9232 String.prototype, 'split',
9233 function split(separator, limit) {
9234 var o = strict(this);
9235 if (HasProperty(separator, $$split))
9236 return separator[$$split](o, limit);
9237 return orig_split.call(o, separator, limit);
9238 }, !string_regexp_dispatch);
9239
9240 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9241 define(
9242 String.prototype, 'startsWith',
9243 function startsWith(searchString) {
9244 var position = arguments[1];
9245
9246 var o = strict(this);
9247 var s = String(o);
9248 var searchStr = String(searchString);
9249 var pos = ToInteger(position);
9250 var len = s.length;
9251 var start = min(max(pos, 0), len);
9252 var searchLength = searchStr.length;
9253 if (searchLength + start > len) return false;
9254 if (s.substring(start, start + searchLength) === searchStr) return true;
9255 return false;
9256 });
9257
9258 // 21.1.3.19 String.prototype.substring ( start, end )
9259 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9260 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9261 // 21.1.3.22 String.prototype.toLowerCase ( )
9262 // 21.1.3.23 String.prototype.toString ( )
9263 // 21.1.3.24 String.prototype.toUpperCase ( )
9264 // 21.1.3.25 String.prototype.trim ( )
9265 // 21.1.3.26 String.prototype.valueOf ( )
9266
9267 // 21.1.3.27 String.prototype [ @@iterator ]( )
9268 define(
9269 String.prototype, $$iterator,
9270 function entries() {
9271 return CreateStringIterator(this, 'value');
9272 });
9273
9274 // 21.1.4 Properties of String Instances
9275 // 21.1.4.1 length
9276
9277 // 21.1.5 String Iterator Objects
9278 /** @constructor */
9279 function StringIterator() {}
9280
9281 // 21.1.5.1 CreateStringIterator Abstract Operation
9282 function CreateStringIterator(string, kind) {
9283 var s = String(string);
9284 var iterator = new StringIterator;
9285 set_internal(iterator, '[[IteratedString]]', s);
9286 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9287 set_internal(iterator, '[[StringIterationKind]]', kind);
9288 return iterator;
9289 }
9290
9291 // 21.1.5.2 The %StringIteratorPrototype% Object
9292 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9293 StringIterator.prototype = $StringIteratorPrototype$;
9294
9295 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9296 define(
9297 $StringIteratorPrototype$, 'next',
9298 function next() {
9299 var o = ToObject(this);
9300 var s = String(o['[[IteratedString]]']),
9301 index = o['[[StringIteratorNextIndex]]'],
9302 len = s.length;
9303 if (index >= len) {
9304 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9305 return CreateIterResultObject(undefined, true);
9306 }
9307 var cp = s.codePointAt(index);
9308 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9309 return CreateIterResultObject(String.fromCodePoint(cp), false);
9310 });
9311
9312 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9313 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9314
9315 // 21.1.5.3 Properties of String Iterator Instances
9316
9317 // ---------------------------------------
9318 // 21.2 RegExp (Regular Expression) Objects
9319 // ---------------------------------------
9320
9321 // 21.2.1 Patterns
9322 // 21.2.2 Pattern Semantics
9323 // 21.2.2.1 Notation
9324 // 21.2.2.2 Pattern
9325 // 21.2.2.3 Disjunction
9326 // 21.2.2.4 Alternative
9327 // 21.2.2.5 Term
9328 // 21.2.2.6 Assertion
9329 // 21.2.2.7 Quantifier
9330 // 21.2.2.8 Atom
9331 // 21.2.2.9 AtomEscape
9332 // 21.2.2.10 CharacterEscape
9333 // 21.2.2.11 DecimalEscape
9334 // 21.2.2.12 CharacterClassEscape
9335 // 21.2.2.13 CharacterClass
9336 // 21.2.2.14 ClassRanges
9337 // 21.2.2.15 NonemptyClassRanges
9338 // 21.2.2.16 NonemptyClassRangesNoDash
9339 // 21.2.2.17 ClassAtom
9340 // 21.2.2.18 ClassAtomNoDash
9341 // 21.2.2.19 ClassEscape
9342 // 21.2.3 The RegExp Constructor
9343 // 21.2.3.1 RegExp ( pattern, flags )
9344 // 21.2.3.2 new RegExp( ...argumentsList )
9345 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9346 // 21.2.4 Properties of the RegExp Constructor
9347 // 21.2.4.1 RegExp.prototype
9348 // 21.2.5 Properties of the RegExp Prototype Object
9349 // 21.2.5.1 RegExp.prototype.constructor
9350 // 21.2.5.2 RegExp.prototype.exec ( string )
9351
9352 // 21.2.5.3 get RegExp.prototype.flags
9353 if (!('flags' in RegExp.prototype)) {
9354 Object.defineProperty(
9355 RegExp.prototype, 'flags', {
9356 get: function() {
9357 var s = String(this);
9358 return s.substring(s.lastIndexOf('/') + 1);
9359 }
9360 });
9361 }
9362
9363 // 21.2.5.4 get RegExp.prototype.global
9364 // 21.2.5.5 get RegExp.prototype.ignoreCase
9365
9366 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9367 define(RegExp.prototype, $$match, function(string) {
9368 var o = strict(this);
9369 return orig_match.call(string, o);
9370 });
9371
9372 // 21.2.5.7 get RegExp.prototype.multiline
9373
9374 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9375 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9376 var o = strict(this);
9377 return orig_replace.call(string, o, replaceValue);
9378 });
9379
9380 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9381 define(RegExp.prototype, $$search, function(string) {
9382 var o = strict(this);
9383 return orig_search.call(string, o);
9384 });
9385
9386 // 21.2.5.10 get RegExp.prototype.source
9387
9388 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9389 define(RegExp.prototype, $$split, function(string, limit) {
9390 var o = strict(this);
9391 return orig_split.call(string, o, limit);
9392 });
9393
9394 // 21.2.5.12 get RegExp.prototype.sticky
9395 // 21.2.5.13 RegExp.prototype.test( S )
9396 // 21.2.5.14 RegExp.prototype.toString ( )
9397 // 21.2.5.15 get RegExp.prototype.unicode
9398
9399 // 21.2.6 Properties of RegExp Instances
9400 // 21.2.6.1 lastIndex
9401
9402 // (No polyfillable changes from ES5)
9403
9404 // ---------------------------------------
9405 // 22 Indexed Collections
9406 // ---------------------------------------
9407
9408 // ---------------------------------------
9409 // 22.1 Array Objects
9410 // ---------------------------------------
9411
9412 // 22.1.1 The Array Constructor
9413 // 22.1.1.1 Array ( )
9414 // 22.1.1.2 Array (len)
9415 // 22.1.1.3 Array (...items )
9416
9417 // 22.1.2 Properties of the Array Constructor
9418
9419 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9420 define(
9421 Array, 'from',
9422 function from(items) {
9423 var mapfn = arguments[1];
9424 var thisArg = arguments[2];
9425
9426 var c = strict(this);
9427 if (mapfn === undefined) {
9428 var mapping = false;
9429 } else {
9430 if (!IsCallable(mapfn)) throw TypeError();
9431 var t = thisArg;
9432 mapping = true;
9433 }
9434 var usingIterator = GetMethod(items, $$iterator);
9435 if (usingIterator !== undefined) {
9436 if (IsConstructor(c)) {
9437 var a = new c();
9438 } else {
9439 a = new Array(0);
9440 }
9441 var iterator = GetIterator(items, usingIterator);
9442 var k = 0;
9443 while (true) {
9444 var next = IteratorStep(iterator);
9445 if (next === false) {
9446 a.length = k;
9447 return a;
9448 }
9449 var nextValue = IteratorValue(next);
9450 if (mapping)
9451 var mappedValue = mapfn.call(t, nextValue);
9452 else
9453 mappedValue = nextValue;
9454 a[k] = mappedValue;
9455 k += 1;
9456 }
9457 }
9458 var arrayLike = ToObject(items);
9459 var lenValue = arrayLike.length;
9460 var len = ToLength(lenValue);
9461 if (IsConstructor(c)) {
9462 a = new c(len);
9463 } else {
9464 a = new Array(len);
9465 }
9466 k = 0;
9467 while (k < len) {
9468 var kValue = arrayLike[k];
9469 if (mapping)
9470 mappedValue = mapfn.call(t, kValue, k);
9471 else
9472 mappedValue = kValue;
9473 a[k] = mappedValue;
9474 k += 1;
9475 }
9476 a.length = len;
9477 return a;
9478 });
9479
9480 // 22.1.2.2 Array.isArray ( arg )
9481
9482 // 22.1.2.3 Array.of ( ...items )
9483 define(
9484 Array, 'of',
9485 function of() {
9486 var items = arguments;
9487
9488 var lenValue = items.length;
9489 var len = ToUint32(lenValue);
9490 var c = strict(this), a;
9491 if (IsConstructor(c)) {
9492 a = new c(len);
9493 a = ToObject(a);
9494 } else {
9495 a = new Array(len);
9496 }
9497 var k = 0;
9498 while (k < len) {
9499 a[k] = items[k];
9500 k += 1;
9501 }
9502 a.length = len;
9503 return a;
9504 });
9505
9506 // 22.1.2.4 Array.prototype
9507 // 22.1.2.5 get Array [ @@species ]
9508 // 22.1.3 Properties of the Array Prototype Object
9509 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9510 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9511 // 22.1.3.2 Array.prototype.constructor
9512 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9513 define(
9514 Array.prototype, 'copyWithin',
9515 function copyWithin(target, start/*, end*/) {
9516 var end = arguments[2];
9517
9518 var o = ToObject(this);
9519 var lenVal = o.length;
9520 var len = ToLength(lenVal);
9521 len = max(len, 0);
9522 var relativeTarget = ToInteger(target);
9523 var to;
9524 if (relativeTarget < 0)
9525 to = max(len + relativeTarget, 0);
9526 else
9527 to = min(relativeTarget, len);
9528 var relativeStart = ToInteger(start);
9529 var from;
9530 if (relativeStart < 0)
9531 from = max(len + relativeStart, 0);
9532 else
9533 from = min(relativeStart, len);
9534 var relativeEnd;
9535 if (end === undefined)
9536 relativeEnd = len;
9537 else
9538 relativeEnd = ToInteger(end);
9539 var final;
9540 if (relativeEnd < 0)
9541 final = max(len + relativeEnd, 0);
9542 else
9543 final = min(relativeEnd, len);
9544 var count = min(final - from, len - to);
9545 var direction;
9546 if (from < to && to < from + count) {
9547 direction = -1;
9548 from = from + count - 1;
9549 to = to + count - 1;
9550 } else {
9551 direction = 1;
9552 }
9553 while (count > 0) {
9554 var fromKey = String(from);
9555 var toKey = String(to);
9556 var fromPresent = HasProperty(o, fromKey);
9557 if (fromPresent) {
9558 var fromVal = o[fromKey];
9559 o[toKey] = fromVal;
9560 } else {
9561 delete o[toKey];
9562 }
9563 from = from + direction;
9564 to = to + direction;
9565 count = count - 1;
9566 }
9567 return o;
9568 });
9569
9570 // 22.1.3.4 Array.prototype.entries ( )
9571 var nativeArrayIteratorMethods =
9572 ('entries' in Array.prototype && 'next' in [].entries());
9573
9574 define(
9575 Array.prototype, 'entries',
9576 function entries() {
9577 return CreateArrayIterator(this, 'key+value');
9578 }, !nativeArrayIteratorMethods);
9579
9580 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9581
9582 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9583 define(
9584 Array.prototype, 'fill',
9585 function fill(value/*, start, end*/) {
9586 var start = arguments[1],
9587 end = arguments[2];
9588
9589 var o = ToObject(this);
9590 var lenVal = o.length;
9591 var len = ToLength(lenVal);
9592 len = max(len, 0);
9593 var relativeStart = ToInteger(start);
9594 var k;
9595 if (relativeStart < 0)
9596 k = max((len + relativeStart), 0);
9597 else
9598 k = min(relativeStart, len);
9599 var relativeEnd;
9600 if (end === undefined)
9601 relativeEnd = len;
9602 else
9603 relativeEnd = ToInteger(end);
9604 var final;
9605 if (relativeEnd < 0)
9606 final = max((len + relativeEnd), 0);
9607 else
9608 final = min(relativeEnd, len);
9609 while (k < final) {
9610 var pk = String(k);
9611 o[pk] = value;
9612 k += 1;
9613 }
9614 return o;
9615 });
9616
9617 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9618
9619 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9620 define(
9621 Array.prototype, 'find',
9622 function find(predicate) {
9623 var o = ToObject(this);
9624 var lenValue = o.length;
9625 var len = ToInteger(lenValue);
9626 if (!IsCallable(predicate)) throw TypeError();
9627 var t = arguments.length > 1 ? arguments[1] : undefined;
9628 var k = 0;
9629 while (k < len) {
9630 var pk = String(k);
9631 var kPresent = HasProperty(o, pk);
9632 if (kPresent) {
9633 var kValue = o[pk];
9634 var testResult = predicate.call(t, kValue, k, o);
9635 if (Boolean(testResult)) {
9636 return kValue;
9637 }
9638 }
9639 ++k;
9640 }
9641 return undefined;
9642 });
9643
9644 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9645 define(
9646 Array.prototype, 'findIndex',
9647 function findIndex(predicate) {
9648 var o = ToObject(this);
9649 var lenValue = o.length;
9650 var len = ToLength(lenValue);
9651 if (!IsCallable(predicate)) throw TypeError();
9652 var t = arguments.length > 1 ? arguments[1] : undefined;
9653 var k = 0;
9654 while (k < len) {
9655 var pk = String(k);
9656 var kPresent = HasProperty(o, pk);
9657 if (kPresent) {
9658 var kValue = o[pk];
9659 var testResult = predicate.call(t, kValue, k, o);
9660 if (Boolean(testResult)) {
9661 return k;
9662 }
9663 }
9664 ++k;
9665 }
9666 return -1;
9667 });
9668
9669 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9670 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9671 // 22.1.3.12 Array.prototype.join (separator)
9672
9673 // 22.1.3.13 Array.prototype.keys ( )
9674 define(
9675 Array.prototype, 'keys',
9676 function keys() {
9677 return CreateArrayIterator(this, 'key');
9678 }, !nativeArrayIteratorMethods);
9679
9680 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9681 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9682 // 22.1.3.16 Array.prototype.pop ( )
9683 // 22.1.3.17 Array.prototype.push ( ...items )
9684 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9685 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9686 // 22.1.3.20 Array.prototype.reverse ( )
9687 // 22.1.3.21 Array.prototype.shift ( )
9688 // 22.1.3.22 Array.prototype.slice (start, end)
9689 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9690 // 22.1.3.24 Array.prototype.sort (comparefn)
9691 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9692 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9693 // 22.1.3.27 Array.prototype.toString ( )
9694 // 22.1.3.28 Array.prototype.unshift ( ...items )
9695
9696 // 22.1.3.29 Array.prototype.values ( )
9697 define(
9698 Array.prototype, 'values',
9699 function values() {
9700 return CreateArrayIterator(this, 'value');
9701 }, !nativeArrayIteratorMethods);
9702
9703 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9704 define(
9705 Array.prototype, $$iterator,
9706 Array.prototype.values
9707 );
9708
9709 // 22.1.3.31 Array.prototype [ @@unscopables ]
9710 // 22.1.4 Properties of Array Instances
9711 // 22.1.4.1 length
9712
9713 // 22.1.5 Array Iterator Objects
9714 function ArrayIterator() {}
9715
9716 // 22.1.5.1 CreateArrayIterator Abstract Operation
9717 function CreateArrayIterator(array, kind) {
9718 var o = ToObject(array);
9719 var iterator = new ArrayIterator;
9720 set_internal(iterator, '[[IteratedObject]]', o);
9721 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9722 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9723 return iterator;
9724 }
9725
9726 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9727 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9728 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9729
9730 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9731 define(
9732 $ArrayIteratorPrototype$, 'next',
9733 function next() {
9734 var o = strict(this);
9735 if (Type(o) !== 'object') throw TypeError();
9736 var a = o['[[IteratedObject]]'],
9737 index = o['[[ArrayIteratorNextIndex]]'],
9738 itemKind = o['[[ArrayIterationKind]]'],
9739 lenValue = a.length,
9740 len = ToUint32(lenValue),
9741 elementKey,
9742 elementValue;
9743 if (itemKind.indexOf('sparse') !== -1) {
9744 var found = false;
9745 while (!found && index < len) {
9746 elementKey = String(index);
9747 found = HasProperty(a, elementKey);
9748 if (!found) {
9749 index += 1;
9750 }
9751 }
9752 }
9753 if (index >= len) {
9754 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9755 return CreateIterResultObject(undefined, true);
9756 }
9757 elementKey = index;
9758 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9759 if (itemKind.indexOf('value') !== -1)
9760 elementValue = a[elementKey];
9761 if (itemKind.indexOf('key+value') !== -1)
9762 return CreateIterResultObject([elementKey, elementValue], false);
9763 if (itemKind.indexOf('key') !== -1)
9764 return CreateIterResultObject(elementKey, false);
9765 if (itemKind === 'value')
9766 return CreateIterResultObject(elementValue, false);
9767 throw Error('Internal error');
9768 });
9769
9770 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9771 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9772
9773 // 22.1.5.3 Properties of Array Iterator Instances
9774
9775
9776 // ---------------------------------------
9777 // 22.2 TypedArray Objects
9778 // ---------------------------------------
9779
9780 // See typedarray.js for TypedArray polyfill
9781
9782 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9783 'Int16Array', 'Uint16Array',
9784 'Int32Array', 'Uint32Array',
9785 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9786 if (!($TypedArrayName$ in global))
9787 return;
9788 var $TypedArray$ = global[$TypedArrayName$];
9789
9790 // 22.2.1 The %TypedArray% Intrinsic Object
9791 // 22.2.1.1 %TypedArray% ( length )
9792 // 22.2.1.2 %TypedArray% ( typedArray )
9793 // 22.2.1.3 %TypedArray% ( object )
9794 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9795 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9796 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9797
9798 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9799 define(
9800 $TypedArray$, 'from',
9801 function from(source) {
9802 var mapfn = arguments[1];
9803 var thisArg = arguments[2];
9804
9805 var c = strict(this);
9806 if (!IsConstructor(c)) throw TypeError();
9807 if (mapfn === undefined) {
9808 var mapping = false;
9809 } else {
9810 if (IsCallable(mapfn)) throw TypeError();
9811 var t = thisArg;
9812 mapping = true;
9813 }
9814 var usingIterator = GetMethod(source, $$iterator);
9815 if (usingIterator !== undefined) {
9816 var iterator = GetIterator(source, usingIterator);
9817 var values = [];
9818 var next = true;
9819 while (next !== false) {
9820 next = IteratorStep(iterator);
9821 if (next !== false) {
9822 var nextValue = IteratorValue(next);
9823 values.push(nextValue);
9824 }
9825 }
9826 var len = values.length;
9827 var newObj = new c(len);
9828 var k = 0;
9829 while (k < len) {
9830 var kValue = values.shift();
9831 if (mapping) {
9832 var mappedValue = mapfn.call(t, kValue);
9833 } else {
9834 mappedValue = kValue;
9835 }
9836 newObj[k] = mappedValue;
9837 ++k;
9838 }
9839 console.assert(values.length === 0);
9840 return newObj;
9841 }
9842 var arrayLike = ToObject(source);
9843 var lenValue = arrayLike.length;
9844 len = ToLength(lenValue);
9845 newObj = new c(len);
9846 k = 0;
9847 while (k < len) {
9848 kValue = arrayLike[k];
9849 if (mapping) {
9850 mappedValue = mapfn.call(t, kValue, k);
9851 } else {
9852 mappedValue = kValue;
9853 }
9854 newObj[k] = mappedValue;
9855 ++k;
9856 }
9857 return newObj;
9858 });
9859
9860 // 22.2.2.2 %TypedArray%.of ( ...items )
9861 define(
9862 $TypedArray$, 'of',
9863 function of() {
9864 var items = arguments;
9865
9866 var len = items.length;
9867 var c = strict(this);
9868 var newObj = new c(len);
9869 var k = 0;
9870 while (k < len) {
9871 newObj[k] = items[k];
9872 ++k;
9873 }
9874 return newObj;
9875 });
9876
9877 // 22.2.2.3 %TypedArray%.prototype
9878 // 22.2.2.4 get %TypedArray% [ @@species ]
9879 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9880 // 22.2.3.1 get %TypedArray%.prototype.buffer
9881 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9882 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9883 // 22.2.3.4 %TypedArray%.prototype.constructor
9884
9885 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9886 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9887
9888 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9889 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9890
9891 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9892 define($TypedArray$.prototype, 'every', Array.prototype.every);
9893
9894 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9895 define(
9896 $TypedArray$.prototype, 'fill',
9897 //Array.prototype.fill // Doesn't work in Safari 7
9898 function fill(value/*, start, end*/) {
9899 var start = arguments[1],
9900 end = arguments[2];
9901
9902 var o = ToObject(this);
9903 var lenVal = o.length;
9904 var len = ToLength(lenVal);
9905 len = max(len, 0);
9906 var relativeStart = ToInteger(start);
9907 var k;
9908 if (relativeStart < 0) k = max((len + relativeStart), 0);
9909 else k = min(relativeStart, len);
9910 var relativeEnd;
9911 if (end === undefined) relativeEnd = len;
9912 else relativeEnd = ToInteger(end);
9913 var final;
9914 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9915 else final = min(relativeEnd, len);
9916 while (k < final) {
9917 var pk = String(k);
9918 o[pk] = value;
9919 k += 1;
9920 }
9921 return o;
9922 });
9923
9924 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9925 define(
9926 $TypedArray$.prototype, 'filter',
9927 function filter(callbackfn) {
9928 var thisArg = arguments[1];
9929
9930 var o = ToObject(this);
9931 var lenVal = o.length;
9932 var len = ToLength(lenVal);
9933 if (!IsCallable(callbackfn)) throw TypeError();
9934 var t = thisArg;
9935 var c = o.constructor;
9936 var kept = [];
9937 var k = 0;
9938 var captured = 0;
9939 while (k < len) {
9940 var kValue = o[k];
9941 var selected = callbackfn.call(t, kValue, k, o);
9942 if (selected) {
9943 kept.push(kValue);
9944 ++captured;
9945 }
9946 ++k;
9947 }
9948 var a = new c(captured);
9949 var n = 0;
9950 for (var i = 0; i < kept.length; ++i) {
9951 var e = kept[i];
9952 a[n] = e;
9953 ++n;
9954 }
9955 return a;
9956 });
9957
9958 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9959 define($TypedArray$.prototype, 'find', Array.prototype.find);
9960
9961 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9962 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9963
9964 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9965 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9966
9967 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9968 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9969
9970 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9971 define($TypedArray$.prototype, 'join', Array.prototype.join);
9972
9973 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9974 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9975
9976 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9977 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9978
9979 // 22.2.3.17 get %TypedArray%.prototype.length
9980
9981 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9982 define(
9983 $TypedArray$.prototype, 'map',
9984 function map(callbackfn) {
9985 var thisArg = arguments[1];
9986
9987 var o = ToObject(this);
9988 var lenValue = o.length;
9989 var len = ToLength(lenValue);
9990 if (!IsCallable(callbackfn)) throw TypeError();
9991 var t = thisArg;
9992 var a = undefined;
9993 var c = o.constructor;
9994 if (IsConstructor(c))
9995 a = new c(len);
9996 if (a === undefined)
9997 a = new Array(len);
9998 var k = 0;
9999 while (k < len) {
10000 var kPresent = HasProperty(o, k);
10001 if (kPresent) {
10002 var kValue = o[k];
10003 var mappedValue = callbackfn.call(t, kValue, k, o);
10004 a[k] = mappedValue;
10005 }
10006 ++k;
10007 }
10008 return a;
10009 });
10010
10011 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10012 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10013
10014 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10015 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10016
10017 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10018 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10019
10020 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10021 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10022 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10023
10024 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10025 define(
10026 $TypedArray$.prototype, 'slice',
10027 function slice(start, end) {
10028 var o = ToObject(this);
10029 var lenVal = o.length;
10030 var len = ToLength(lenVal);
10031 var relativeStart = ToInteger(start);
10032 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10033 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10034 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10035 var count = final - k;
10036 var c = o.constructor;
10037 if (IsConstructor(c)) {
10038 var a = new c(count);
10039 } else {
10040 throw TypeError();
10041 }
10042 var n = 0;
10043 while (k < final) {
10044 var kValue = o[k];
10045 a[n] = kValue;
10046 ++k;
10047 ++n;
10048 }
10049 return a;
10050 });
10051
10052 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10053 define($TypedArray$.prototype, 'some', Array.prototype.some);
10054
10055 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10056 define(
10057 $TypedArray$.prototype, 'sort',
10058 function sort() {
10059 var comparefn = arguments[0];
10060
10061 function sortCompare(x, y) {
10062 console.assert(Type(x) === 'number' && Type(y) === 'number');
10063 if (x !== x && y !== y) return +0;
10064 if (x !== x) return 1;
10065 if (y !== y) return -1;
10066 if (comparefn !== undefined) {
10067 return comparefn(x, y);
10068 }
10069 if (x < y) return -1;
10070 if (x > y) return 1;
10071 return +0;
10072 }
10073 return Array.prototype.sort.call(this, sortCompare);
10074 });
10075
10076 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10077 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10078 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10079
10080 // 22.2.3.29 %TypedArray%.prototype.values ( )
10081 define($TypedArray$.prototype, 'values', Array.prototype.values);
10082
10083 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10084 define(
10085 $TypedArray$.prototype, $$iterator,
10086 $TypedArray$.prototype.values
10087 );
10088
10089 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10090 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10091
10092 // 22.2.4 The TypedArray Constructors
10093 // 22.2.4.1TypedArray( ... argumentsList)
10094 // 22.2.5 Properties of the TypedArray Constructors
10095 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10096 // 22.2.5.2 TypedArray.prototype
10097 // 22.2.6 Properties of TypedArray Prototype Objects
10098 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10099 // 22.2.6.2 TypedArray.prototype.constructor
10100 // 22.2.7 Properties of TypedArray Instances
10101 });
10102
10103 // ---------------------------------------
10104 // 23 Keyed Collection
10105 // ---------------------------------------
10106
10107 // ---------------------------------------
10108 // 23.1 Map Objects
10109 // ---------------------------------------
10110
10111 (function() {
10112 // 23.1.1 The Map Constructor
10113
10114 // 23.1.1.1 Map ( [ iterable ] )
10115 /** @constructor */
10116 function Map(/*iterable*/) {
10117 var map = strict(this);
10118 var iterable = arguments[0];
10119
10120 if (Type(map) !== 'object') throw TypeError();
10121 if ('[[MapData]]' in map) throw TypeError();
10122
10123 if (iterable !== undefined) {
10124 var adder = map['set'];
10125 if (!IsCallable(adder)) throw TypeError();
10126 var iter = GetIterator(ToObject(iterable));
10127 }
10128 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10129 if (iter === undefined) return map;
10130 while (true) {
10131 var next = IteratorStep(iter);
10132 if (next === false)
10133 return map;
10134 var nextItem = IteratorValue(next);
10135 if (Type(nextItem) !== 'object') throw TypeError();
10136 var k = nextItem[0];
10137 var v = nextItem[1];
10138 adder.call(map, k, v);
10139 }
10140
10141 return map;
10142 }
10143
10144 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10145 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10146 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10147 (new global.Map([['a', 1]]).size !== 1))
10148 global.Map = Map;
10149
10150
10151 function MapDataIndexOf(mapData, key) {
10152 var i;
10153 if (key === key) return mapData.keys.indexOf(key);
10154 // Slow case for NaN
10155 for (i = 0; i < mapData.keys.length; i += 1)
10156 if (SameValueZero(mapData.keys[i], key)) return i;
10157 return -1;
10158 }
10159
10160 // 23.1.1.2 new Map ( ... argumentsList )
10161 // 23.1.2 Properties of the Map Constructor
10162 // 23.1.2.1 Map.prototype
10163 var $MapPrototype$ = {};
10164 Map.prototype = $MapPrototype$;
10165
10166 // 23.1.2.2 get Map [ @@species ]
10167
10168 // 23.1.3 Properties of the Map Prototype Object
10169 // 23.1.3.1 Map.prototype.clear ()
10170 define(
10171 Map.prototype, 'clear',
10172 function clear() {
10173 var m = strict(this);
10174 if (Type(m) !== 'object') throw TypeError();
10175 if (!('[[MapData]]' in m)) throw TypeError();
10176 if (m['[[MapData]]'] === undefined) throw TypeError();
10177 var entries = m['[[MapData]]'];
10178 entries.keys.length = 0;
10179 entries.values.length = 0;
10180 return undefined;
10181 });
10182
10183 // 23.1.3.2 Map.prototype.constructor
10184
10185 // 23.1.3.3 Map.prototype.delete ( key )
10186 define(
10187 Map.prototype, 'delete',
10188 function delete_(key) {
10189 var m = strict(this);
10190 if (Type(m) !== 'object') throw TypeError();
10191 if (!('[[MapData]]' in m)) throw TypeError();
10192 if (m['[[MapData]]'] === undefined) throw TypeError();
10193 var entries = m['[[MapData]]'];
10194 var i = MapDataIndexOf(entries, key);
10195 if (i < 0) return false;
10196 entries.keys[i] = empty;
10197 entries.values[i] = empty;
10198 return true;
10199 });
10200
10201 // 23.1.3.4 Map.prototype.entries ( )
10202 define(
10203 Map.prototype, 'entries',
10204 function entries() {
10205 var m = strict(this);
10206 if (Type(m) !== 'object') throw TypeError();
10207 return CreateMapIterator(m, 'key+value');
10208 });
10209
10210 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10211 define(
10212 Map.prototype, 'forEach',
10213 function forEach(callbackfn /*, thisArg*/) {
10214 var thisArg = arguments[1];
10215
10216 var m = strict(this);
10217 if (Type(m) !== 'object') throw TypeError();
10218 if (!('[[MapData]]' in m)) throw TypeError();
10219 if (m['[[MapData]]'] === undefined) throw TypeError();
10220 var entries = m['[[MapData]]'];
10221
10222 if (!IsCallable(callbackfn)) {
10223 throw TypeError('First argument to forEach is not callable.');
10224 }
10225 for (var i = 0; i < entries.keys.length; ++i) {
10226 if (entries.keys[i] !== empty) {
10227 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10228 }
10229 }
10230 return undefined;
10231 });
10232
10233 // 23.1.3.6 Map.prototype.get ( key )
10234 define(
10235 Map.prototype, 'get',
10236 function get(key) {
10237 var m = strict(this);
10238 if (Type(m) !== 'object') throw TypeError();
10239 if (!('[[MapData]]' in m)) throw TypeError();
10240 if (m['[[MapData]]'] === undefined) throw TypeError();
10241 var entries = m['[[MapData]]'];
10242 var i = MapDataIndexOf(entries, key);
10243 if (i >= 0) return entries.values[i];
10244 return undefined;
10245 });
10246
10247 // 23.1.3.7 Map.prototype.has ( key )
10248 define(
10249 Map.prototype, 'has',
10250 function has(key) {
10251 var m = strict(this);
10252 if (Type(m) !== 'object') throw TypeError();
10253 if (!('[[MapData]]' in m)) throw TypeError();
10254 if (m['[[MapData]]'] === undefined) throw TypeError();
10255 var entries = m['[[MapData]]'];
10256 if (MapDataIndexOf(entries, key) >= 0) return true;
10257 return false;
10258 });
10259
10260 // 23.1.3.8 Map.prototype.keys ( )
10261 define(
10262 Map.prototype, 'keys',
10263 function keys() {
10264 var m = strict(this);
10265 if (Type(m) !== 'object') throw TypeError();
10266 return CreateMapIterator(m, 'key');
10267 });
10268
10269 // 23.1.3.9 Map.prototype.set ( key , value )
10270 define(
10271 Map.prototype, 'set',
10272 function set(key, value) {
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 var i = MapDataIndexOf(entries, key);
10279 if (i < 0) i = entries.keys.length;
10280 if (SameValue(key, -0)) key = 0;
10281 entries.keys[i] = key;
10282 entries.values[i] = value;
10283 return m;
10284 });
10285
10286 // 23.1.3.10 get Map.prototype.size
10287 Object.defineProperty(
10288 Map.prototype, 'size', {
10289 get: function() {
10290 var m = strict(this);
10291 if (Type(m) !== 'object') throw TypeError();
10292 if (!('[[MapData]]' in m)) throw TypeError();
10293 if (m['[[MapData]]'] === undefined) throw TypeError();
10294 var entries = m['[[MapData]]'];
10295 var count = 0;
10296 for (var i = 0; i < entries.keys.length; ++i) {
10297 if (entries.keys[i] !== empty)
10298 count = count + 1;
10299 }
10300 return count;
10301 }
10302 });
10303
10304 // 23.1.3.11 Map.prototype.values ( )
10305 define(
10306 Map.prototype, 'values',
10307 function values() {
10308 var m = strict(this);
10309 if (Type(m) !== 'object') throw TypeError();
10310 return CreateMapIterator(m, 'value');
10311 });
10312
10313 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10314 define(
10315 Map.prototype, $$iterator,
10316 function() {
10317 var m = strict(this);
10318 if (Type(m) !== 'object') throw TypeError();
10319 return CreateMapIterator(m, 'key+value');
10320 });
10321
10322 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10323 define(global.Map.prototype, $$toStringTag, 'Map');
10324
10325 // 23.1.4 Properties of Map Instances
10326 // 23.1.5 Map Iterator Objects
10327
10328 /** @constructor */
10329 function MapIterator() {}
10330
10331 // 23.1.5.1 CreateMapIterator Abstract Operation
10332 function CreateMapIterator(map, kind) {
10333 if (Type(map) !== 'object') throw TypeError();
10334 if (!('[[MapData]]' in map)) throw TypeError();
10335 if (map['[[MapData]]'] === undefined) throw TypeError();
10336 var iterator = new MapIterator;
10337 set_internal(iterator, '[[Map]]', map);
10338 set_internal(iterator, '[[MapNextIndex]]', 0);
10339 set_internal(iterator, '[[MapIterationKind]]', kind);
10340 return iterator;
10341 }
10342
10343 // 23.1.5.2 The %MapIteratorPrototype% Object
10344 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10345 MapIterator.prototype = $MapIteratorPrototype$;
10346
10347 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10348 define(
10349 $MapIteratorPrototype$, 'next',
10350 function next() {
10351 var o = strict(this);
10352 if (Type(o) !== 'object') throw TypeError();
10353 var m = o['[[Map]]'],
10354 index = o['[[MapNextIndex]]'],
10355 itemKind = o['[[MapIterationKind]]'],
10356 entries = m['[[MapData]]'];
10357 while (index < entries.keys.length) {
10358 var e = {key: entries.keys[index], value: entries.values[index]};
10359 index = index += 1;
10360 set_internal(o, '[[MapNextIndex]]', index);
10361 if (e.key !== empty) {
10362 if (itemKind === 'key') {
10363 return CreateIterResultObject(e.key, false);
10364 } else if (itemKind === 'value') {
10365 return CreateIterResultObject(e.value, false);
10366 } else {
10367 return CreateIterResultObject([e.key, e.value], false);
10368 }
10369 }
10370 }
10371 return CreateIterResultObject(undefined, true);
10372 });
10373
10374 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10375 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10376
10377 // 23.1.5.3 Properties of Map Iterator Instances
10378 }());
10379
10380 // ---------------------------------------
10381 // 23.2 Set Objects
10382 // ---------------------------------------
10383
10384 (function() {
10385 // 23.2.1 The Set Constructor
10386 // 23.2.1.1 Set ( [ iterable ] )
10387
10388 /** @constructor */
10389 function Set(/*iterable*/) {
10390 var set = strict(this);
10391 var iterable = arguments[0];
10392
10393 if (Type(set) !== 'object') throw TypeError();
10394 if ('[[SetData]]' in set) throw TypeError();
10395
10396 if (iterable !== undefined) {
10397 var adder = set['add'];
10398 if (!IsCallable(adder)) throw TypeError();
10399 var iter = GetIterator(ToObject(iterable));
10400 }
10401 set_internal(set, '[[SetData]]', []);
10402 if (iter === undefined) return set;
10403 while (true) {
10404 var next = IteratorStep(iter);
10405 if (next === false)
10406 return set;
10407 var nextValue = IteratorValue(next);
10408 adder.call(set, nextValue);
10409 }
10410
10411 return set;
10412 }
10413
10414 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10415 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10416 (new global.Set([1]).size !== 1))
10417 global.Set = Set;
10418
10419 function SetDataIndexOf(setData, key) {
10420 var i;
10421 if (key === key)
10422 return setData.indexOf(key);
10423 // Slow case for NaN
10424 for (i = 0; i < setData.length; i += 1)
10425 if (SameValueZero(setData[i], key)) return i;
10426 return -1;
10427 }
10428
10429 // 23.2.1.2 new Set ( ...argumentsList )
10430 // 23.2.2 Properties of the Set Constructor
10431
10432 // 23.2.2.1 Set.prototype
10433 var $SetPrototype$ = {};
10434 Set.prototype = $SetPrototype$;
10435
10436 // 23.2.2.2 get Set [ @@species ]
10437 // 23.2.3 Properties of the Set Prototype Object
10438
10439 // 23.2.3.1 Set.prototype.add (value )
10440 define(
10441 Set.prototype, 'add',
10442 function add(value) {
10443 var s = strict(this);
10444 if (Type(s) !== 'object') throw TypeError();
10445 if (!('[[SetData]]' in s)) throw TypeError();
10446 if (s['[[SetData]]'] === undefined) throw TypeError();
10447 if (SameValue(value, -0)) value = 0;
10448 var entries = s['[[SetData]]'];
10449 var i = SetDataIndexOf(entries, value);
10450 if (i < 0) i = s['[[SetData]]'].length;
10451 s['[[SetData]]'][i] = value;
10452
10453 return s;
10454 });
10455
10456 // 23.2.3.2 Set.prototype.clear ()
10457 define(
10458 Set.prototype, 'clear',
10459 function clear() {
10460 var s = strict(this);
10461 if (Type(s) !== 'object') throw TypeError();
10462 if (!('[[SetData]]' in s)) throw TypeError();
10463 if (s['[[SetData]]'] === undefined) throw TypeError();
10464 var entries = s['[[SetData]]'];
10465 entries.length = 0;
10466 return undefined;
10467 });
10468
10469 // 23.2.3.3 Set.prototype.constructor
10470 // 23.2.3.4 Set.prototype.delete ( value )
10471 define(
10472 Set.prototype, 'delete',
10473 function delete_(value) {
10474 var s = strict(this);
10475 if (Type(s) !== 'object') throw TypeError();
10476 if (!('[[SetData]]' in s)) throw TypeError();
10477 if (s['[[SetData]]'] === undefined) throw TypeError();
10478 var entries = s['[[SetData]]'];
10479 var i = SetDataIndexOf(entries, value);
10480 if (i < 0) return false;
10481 entries[i] = empty;
10482 return true;
10483 });
10484
10485 // 23.2.3.5 Set.prototype.entries ( )
10486 define(
10487 Set.prototype, 'entries',
10488 function entries() {
10489 var s = strict(this);
10490 if (Type(s) !== 'object') throw TypeError();
10491 return CreateSetIterator(s, 'key+value');
10492 });
10493
10494 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10495 define(
10496 Set.prototype, 'forEach',
10497 function forEach(callbackfn/*, thisArg*/) {
10498 var thisArg = arguments[1];
10499
10500 var s = strict(this);
10501 if (Type(s) !== 'object') throw TypeError();
10502 if (!('[[SetData]]' in s)) throw TypeError();
10503 if (s['[[SetData]]'] === undefined) throw TypeError();
10504 var entries = s['[[SetData]]'];
10505
10506 if (!IsCallable(callbackfn)) {
10507 throw TypeError('First argument to forEach is not callable.');
10508 }
10509 for (var i = 0; i < entries.length; ++i) {
10510 if (entries[i] !== empty) {
10511 callbackfn.call(thisArg, entries[i], entries[i], s);
10512 }
10513 }
10514 });
10515
10516 // 23.2.3.7 Set.prototype.has ( value )
10517 define(
10518 Set.prototype, 'has',
10519 function has(key) {
10520 var s = strict(this);
10521 if (Type(s) !== 'object') throw TypeError();
10522 if (!('[[SetData]]' in s)) throw TypeError();
10523 if (s['[[SetData]]'] === undefined) throw TypeError();
10524 var entries = s['[[SetData]]'];
10525 return SetDataIndexOf(entries, key) !== -1;
10526 });
10527
10528 // 23.2.3.8 Set.prototype.keys ( )
10529 // See Set.prototype.values
10530
10531 // 23.2.3.9 get Set.prototype.size
10532 Object.defineProperty(
10533 Set.prototype, 'size', {
10534 get: function() {
10535 var s = strict(this);
10536 if (Type(s) !== 'object') throw TypeError();
10537 if (!('[[SetData]]' in s)) throw TypeError();
10538 if (s['[[SetData]]'] === undefined) throw TypeError();
10539 var entries = s['[[SetData]]'];
10540 var count = 0;
10541 for (var i = 0; i < entries.length; ++i) {
10542 if (entries[i] !== empty)
10543 count = count + 1;
10544 }
10545 return count;
10546 }
10547 });
10548
10549 // 23.2.3.10 Set.prototype.values ( )
10550 define(
10551 Set.prototype, 'values',
10552 function values() {
10553 var s = strict(this);
10554 if (Type(s) !== 'object') throw TypeError();
10555 return CreateSetIterator(s, 'value');
10556 });
10557 // NOTE: function name is still 'values':
10558 Set.prototype.keys = Set.prototype.values;
10559
10560 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10561 define(
10562 Set.prototype, $$iterator,
10563 function() {
10564 var s = strict(this);
10565 if (Type(s) !== 'object') throw TypeError();
10566 return CreateSetIterator(s);
10567 });
10568
10569 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10570 define(global.Set.prototype, $$toStringTag, 'Set');
10571
10572 // 23.2.4 Properties of Set Instances
10573 // 23.2.5 Set Iterator Objects
10574 /** @constructor */
10575 function SetIterator() {}
10576
10577 // 23.2.5.1 CreateSetIterator Abstract Operation
10578 function CreateSetIterator(set, kind) {
10579 if (Type(set) !== 'object') throw TypeError();
10580 if (!('[[SetData]]' in set)) throw TypeError();
10581 if (set['[[SetData]]'] === undefined) throw TypeError();
10582 var iterator = new SetIterator;
10583 set_internal(iterator, '[[IteratedSet]]', set);
10584 set_internal(iterator, '[[SetNextIndex]]', 0);
10585 set_internal(iterator, '[[SetIterationKind]]', kind);
10586 return iterator;
10587 }
10588
10589 // 23.2.5.2 The %SetIteratorPrototype% Object
10590 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10591 SetIterator.prototype = $SetIteratorPrototype$;
10592
10593 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10594 define(
10595 $SetIteratorPrototype$, 'next',
10596 function next() {
10597 var o = strict(this);
10598 if (Type(o) !== 'object') throw TypeError();
10599 var s = o['[[IteratedSet]]'],
10600 index = o['[[SetNextIndex]]'],
10601 itemKind = o['[[SetIterationKind]]'],
10602 entries = s['[[SetData]]'];
10603 while (index < entries.length) {
10604 var e = entries[index];
10605 index = index += 1;
10606 set_internal(o, '[[SetNextIndex]]', index);
10607 if (e !== empty) {
10608 if (itemKind === 'key+value')
10609 return CreateIterResultObject([e, e], false);
10610 return CreateIterResultObject(e, false);
10611 }
10612 }
10613 return CreateIterResultObject(undefined, true);
10614 });
10615
10616 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10617 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10618
10619 // 23.2.5.3 Properties of Set Iterator Instances
10620
10621 }());
10622
10623 // ---------------------------------------
10624 // 23.3 WeakMap Objects
10625 // ---------------------------------------
10626
10627 (function() {
10628 // 23.3.1 The WeakMap Constructor
10629 // 23.3.1.1 WeakMap ( [ iterable ] )
10630 /** @constructor */
10631 function WeakMap(/*iterable*/) {
10632 var map = strict(this);
10633 var iterable = arguments[0];
10634
10635 if (Type(map) !== 'object') throw TypeError();
10636 if ('[[WeakMapData]]' in map) throw TypeError();
10637
10638 if (iterable !== undefined) {
10639 var adder = map['set'];
10640 if (!IsCallable(adder)) throw TypeError();
10641 var iter = GetIterator(ToObject(iterable));
10642 }
10643 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10644 if (iter === undefined) return map;
10645 while (true) {
10646 var next = IteratorStep(iter);
10647 if (next === false)
10648 return map;
10649 var nextValue = IteratorValue(next);
10650 if (Type(nextValue) !== 'object') throw TypeError();
10651 var k = nextValue[0];
10652 var v = nextValue[1];
10653 adder.call(map, k, v);
10654 }
10655
10656 return map;
10657 }
10658
10659 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10660 global.WeakMap = WeakMap;
10661
10662 // 23.3.2 Properties of the WeakMap Constructor
10663 // 23.3.2.1 WeakMap.prototype
10664 var $WeakMapPrototype$ = {};
10665 WeakMap.prototype = $WeakMapPrototype$;
10666
10667
10668
10669 // 23.3.2.2 WeakMap[ @@create ] ( )
10670 // 23.3.3 Properties of the WeakMap Prototype Object
10671
10672 // 23.3.3.1 WeakMap.prototype.constructor
10673
10674 // 23.3.3.2 WeakMap.prototype.delete ( key )
10675 define(
10676 WeakMap.prototype, 'delete',
10677 function delete_(key) {
10678 var M = strict(this);
10679 if (Type(M) !== 'object') throw TypeError();
10680 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10681 if (Type(key) !== 'object') throw TypeError('Expected object');
10682 return M['[[WeakMapData]]'].remove(key);
10683 });
10684
10685 // 23.3.3.3 WeakMap.prototype.get ( key )
10686 define(
10687 WeakMap.prototype, 'get',
10688 function get(key, defaultValue) {
10689 var M = strict(this);
10690 if (Type(M) !== 'object') throw TypeError();
10691 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10692 if (Type(key) !== 'object') throw TypeError('Expected object');
10693 return M['[[WeakMapData]]'].get(key, defaultValue);
10694 });
10695
10696 // 23.3.3.4 WeakMap.prototype.has ( key )
10697 define(
10698 WeakMap.prototype, 'has',
10699 function has(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]]'].has(key);
10705 });
10706
10707 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10708 define(
10709 WeakMap.prototype, 'set',
10710 function set(key, value) {
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 M['[[WeakMapData]]'].set(key, value);
10716 return M;
10717 });
10718
10719 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10720 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10721
10722 // 23.3.4 Properties of WeakMap Instances
10723
10724 // Polyfills for incomplete native implementations:
10725 (function() {
10726 var wm = new global.WeakMap();
10727 var orig = global.WeakMap.prototype.set;
10728 define(global.WeakMap.prototype, 'set', function set() {
10729 orig.apply(this, arguments);
10730 return this;
10731 }, wm.set({}, 0) !== wm);
10732 }());
10733 }());
10734
10735 // ---------------------------------------
10736 // 23.4 WeakSet Objects
10737 // ---------------------------------------
10738
10739 (function() {
10740 // 23.4.1 The WeakSet Constructor
10741 // 23.4.1.1 WeakSet ( [ iterable ] )
10742 /** @constructor */
10743 function WeakSet(/*iterable*/) {
10744 var set = strict(this);
10745 var iterable = arguments[0];
10746
10747 if (Type(set) !== 'object') throw TypeError();
10748 if ('[[WeakSetData]]' in set) throw TypeError();
10749
10750 if (iterable !== undefined) {
10751 var adder = set['add'];
10752 if (!IsCallable(adder)) throw TypeError();
10753 var iter = GetIterator(ToObject(iterable));
10754 }
10755 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10756 if (iter === undefined) return set;
10757 while (true) {
10758 var next = IteratorStep(iter);
10759 if (next === false)
10760 return set;
10761 var nextValue = IteratorValue(next);
10762 adder.call(set, nextValue);
10763 }
10764
10765 return set;
10766 }
10767
10768 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10769 global.WeakSet = WeakSet;
10770
10771 // 23.4.2 Properties of the WeakSet Constructor
10772 // 23.4.2.1 WeakSet.prototype
10773 var $WeakSetPrototype$ = {};
10774 WeakSet.prototype = $WeakSetPrototype$;
10775
10776 // 23.4.3 Properties of the WeakSet Prototype Object
10777 // 23.4.3.1 WeakSet.prototype.add (value )
10778 define(
10779 WeakSet.prototype, 'add',
10780 function add(value) {
10781 var S = strict(this);
10782 if (Type(S) !== 'object') throw TypeError();
10783 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10784 if (Type(value) !== 'object') throw TypeError('Expected object');
10785 S['[[WeakSetData]]'].set(value, true);
10786 return S;
10787 });
10788
10789 // 23.4.3.2 WeakSet.prototype.constructor
10790 // 23.4.3.3 WeakSet.prototype.delete ( value )
10791 define(
10792 WeakSet.prototype, 'delete',
10793 function delete_(value) {
10794 var S = strict(this);
10795 if (Type(S) !== 'object') throw TypeError();
10796 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10797 if (Type(value) !== 'object') throw TypeError('Expected object');
10798 return S['[[WeakSetData]]'].remove(value);
10799 });
10800
10801 // 23.4.3.4 WeakSet.prototype.has ( value )
10802 define(
10803 WeakSet.prototype, 'has',
10804 function has(key) {
10805 var S = strict(this);
10806 if (Type(S) !== 'object') throw TypeError();
10807 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10808 if (Type(key) !== 'object') throw TypeError('Expected object');
10809 return S['[[WeakSetData]]'].has(key);
10810 });
10811
10812 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10813 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10814
10815 // 23.4.4 Properties of WeakSet Instances
10816
10817 // Polyfills for incomplete native implementations:
10818 (function() {
10819 var ws = new global.WeakSet();
10820 var orig = global.WeakSet.prototype.add;
10821 define(global.WeakSet.prototype, 'add', function add() {
10822 orig.apply(this, arguments);
10823 return this;
10824 }, ws.add({}) !== ws);
10825 }());
10826 }());
10827
10828 // ---------------------------------------
10829 // 24 Structured Data
10830 // ---------------------------------------
10831
10832 // ---------------------------------------
10833 // 24.1 ArrayBuffer Objects
10834 // ---------------------------------------
10835
10836 // See typedarray.js for TypedArray polyfill
10837
10838 (function() {
10839 if (!('ArrayBuffer' in global))
10840 return;
10841
10842 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10843 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10844 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10845 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10846 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10847 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10848 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10849 // 24.1.2 The ArrayBuffer Constructor
10850 // 24.1.2.1 ArrayBuffer( length )
10851 // 24.1.3 Properties of the ArrayBuffer Constructor
10852
10853 // 24.1.3.1 ArrayBuffer.isView ( arg )
10854 define(
10855 ArrayBuffer, 'isView',
10856 function isView(arg) {
10857 if (Type(arg) !== 'object') return false;
10858 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10859 return false;
10860 });
10861
10862 // 24.1.3.2 ArrayBuffer.prototype
10863 // 24.1.3.3 get ArrayBuffer [ @@species ]
10864 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10865 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10866 // 24.1.4.2 ArrayBuffer.prototype.constructor
10867 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10868
10869 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10870 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10871
10872 // 24.1.5 Properties of the ArrayBuffer Instances
10873 }());
10874
10875 // ---------------------------------------
10876 // 24.2 DataView Objects
10877 // ---------------------------------------
10878
10879 // See typedarray.js for TypedArray polyfill
10880
10881 (function() {
10882 if (!('DataView' in global))
10883 return;
10884
10885 // 24.2.1 Abstract Operations For DataView Objects
10886 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10887 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10888 // 24.2.2 The DataView Constructor
10889 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10890 // 24.2.3 Properties of the DataView Constructor
10891 // 24.2.3.1 DataView.prototype
10892 // 24.2.4 Properties of the DataView Prototype Object
10893 // 24.2.4.1 get DataView.prototype.buffer
10894 // 24.2.4.2 get DataView.prototype.byteLength
10895 // 24.2.4.3 get DataView.prototype.byteOffset
10896 // 24.2.4.4 DataView.prototype.constructor
10897 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10898 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10899 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10900 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10901 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10902 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10903 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10904 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10905 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10906 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10907 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10908 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10909 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10910 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10911 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10912 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10913
10914 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10915 define(DataView.prototype, $$toStringTag, 'DataView');
10916
10917 // 24.2.5 Properties of DataView Instances
10918 }());
10919
10920 // ---------------------------------------
10921 // 24.3 The JSON Object
10922 // ---------------------------------------
10923
10924 // 24.3.1 JSON.parse ( text [ , reviver ] )
10925 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10926 // 24.3.3 JSON [ @@toStringTag ]
10927 define(JSON, $$toStringTag, 'JSON');
10928
10929 // ---------------------------------------
10930 // 25.1 Iteration
10931 // ---------------------------------------
10932
10933 // 25.1.1 Common Iteration Interfaces
10934 // 25.1.1.1 The Iterable Interface
10935 // 25.1.1.2 The Iterator Interface
10936 // 25.1.1.3 The IteratorResult Interface
10937
10938 // 25.1.2 The %IteratorPrototype% Object
10939 // Defined earlier, so other prototypes can reference it.
10940 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10941 define($IteratorPrototype$, $$iterator, function() {
10942 return this;
10943 });
10944
10945
10946 // ---------------------------------------
10947 // 25.4 Promise Objects
10948 // ---------------------------------------
10949
10950 (function() {
10951 // 25.4 Promise Objects
10952
10953 // 25.4.1 Promise Abstract Operations
10954
10955 // 25.4.1.1 PromiseCapability Records
10956 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10957
10958 function IfAbruptRejectPromise(value, capability) {
10959 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10960 return capability['[[Promise]]'];
10961 }
10962
10963 // 25.4.1.2 PromiseReaction Records
10964
10965 // 25.4.1.3 CreateResolvingFunctions ( promise )
10966
10967 function CreateResolvingFunctions(promise) {
10968 var alreadyResolved = {'[[value]]': false};
10969 var resolve = PromiseResolveFunction();
10970 set_internal(resolve, '[[Promise]]', promise);
10971 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10972 var reject = PromiseRejectFunction();
10973 set_internal(reject, '[[Promise]]', promise);
10974 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10975 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10976 }
10977
10978 // 25.4.1.3.1 Promise Reject Functions
10979
10980 function PromiseRejectFunction() {
10981 var F = function(reason) {
10982 console.assert(Type(F['[[Promise]]']) === 'object');
10983 var promise = F['[[Promise]]'];
10984 var alreadyResolved = F['[[AlreadyResolved]]'];
10985 if (alreadyResolved['[[value]]']) return undefined;
10986 set_internal(alreadyResolved, '[[value]]', true);
10987 return RejectPromise(promise, reason);
10988 };
10989 return F;
10990 }
10991
10992 // 25.4.1.3.2 Promise Resolve Functions
10993
10994 function PromiseResolveFunction() {
10995 var F = function(resolution) {
10996 console.assert(Type(F['[[Promise]]']) === 'object');
10997 var promise = F['[[Promise]]'];
10998 var alreadyResolved = F['[[AlreadyResolved]]'];
10999 if (alreadyResolved['[[value]]']) return undefined;
11000 set_internal(alreadyResolved, '[[value]]', true);
11001
11002 if (SameValue(resolution, promise)) {
11003 var selfResolutionError = TypeError();
11004 return RejectPromise(promise, selfResolutionError);
11005 }
11006 if (Type(resolution) !== 'object')
11007 return FulfillPromise(promise, resolution);
11008 try {
11009 var then = resolution['then'];
11010 } catch(then) {
11011 return RejectPromise(promise, then);
11012 }
11013 if (!IsCallable(then))
11014 return FulfillPromise(promise, resolution);
11015 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11016 return undefined;
11017 };
11018 return F;
11019 }
11020
11021 // 25.4.1.4 FulfillPromise ( promise, value )
11022
11023 function FulfillPromise(promise, value) {
11024 console.assert(promise['[[PromiseState]]'] === 'pending');
11025 var reactions = promise['[[PromiseFulfillReactions]]'];
11026 set_internal(promise, '[[PromiseResult]]', value);
11027 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11028 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11029 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11030 return TriggerPromiseReactions(reactions, value);
11031 }
11032
11033 // 25.4.1.5 NewPromiseCapability ( C )
11034
11035 function NewPromiseCapability(c) {
11036 // To keep Promise hermetic, this doesn't look much like the spec.
11037 return CreatePromiseCapabilityRecord(undefined, c);
11038 }
11039
11040 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11041
11042 function CreatePromiseCapabilityRecord(promise, constructor) {
11043 // To keep Promise hermetic, this doesn't look much like the spec.
11044 console.assert(IsConstructor(constructor));
11045 var promiseCapability = {};
11046 set_internal(promiseCapability, '[[Promise]]', promise);
11047 set_internal(promiseCapability, '[[Resolve]]', undefined);
11048 set_internal(promiseCapability, '[[Reject]]', undefined);
11049 var executor = GetCapabilitiesExecutor();
11050 set_internal(executor, '[[Capability]]', promiseCapability);
11051
11052 // NOTE: Differs from spec; object is constructed here
11053 var constructorResult = promise = new constructor(executor);
11054 set_internal(promiseCapability, '[[Promise]]', promise);
11055
11056 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11057 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11058 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11059 return promiseCapability;
11060 }
11061
11062 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11063
11064 function GetCapabilitiesExecutor() {
11065 var F = function(resolve, reject) {
11066 console.assert(F['[[Capability]]']);
11067 var promiseCapability = F['[[Capability]]'];
11068 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11069 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11070 set_internal(promiseCapability, '[[Resolve]]', resolve);
11071 set_internal(promiseCapability, '[[Reject]]', reject);
11072 return undefined;
11073 };
11074 return F;
11075 }
11076
11077 // 25.4.1.6 IsPromise ( x )
11078
11079 function IsPromise(x) {
11080 if (Type(x) !== 'object') return false;
11081 if (!('[[PromiseState]]' in x)) return false;
11082 if (x['[[PromiseState]]'] === undefined) return false;
11083 return true;
11084 }
11085
11086 // 25.4.1.7 RejectPromise ( promise, reason )
11087
11088 function RejectPromise(promise, reason) {
11089 console.assert(promise['[[PromiseState]]'] === 'pending');
11090 var reactions = promise['[[PromiseRejectReactions]]'];
11091 set_internal(promise, '[[PromiseResult]]', reason);
11092 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11093 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11094 set_internal(promise, '[[PromiseState]]', 'rejected');
11095 return TriggerPromiseReactions(reactions, reason);
11096 }
11097
11098 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11099
11100 function TriggerPromiseReactions(reactions, argument) {
11101 for (var i = 0, len = reactions.length; i < len; ++i)
11102 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11103 return undefined;
11104 }
11105
11106 // 25.4.2 Promise Jobs
11107
11108 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11109
11110 function PromiseReactionJob(reaction, argument) {
11111 var promiseCapability = reaction['[[Capabilities]]'];
11112 var handler = reaction['[[Handler]]'];
11113 var handlerResult, status;
11114 try {
11115 if (handler === 'Identity') handlerResult = argument;
11116 else if (handler === 'Thrower') throw argument;
11117 else handlerResult = handler.call(undefined, argument);
11118 } catch (handlerResult) {
11119 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11120 NextJob(status); return;
11121 }
11122 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11123 NextJob(status);
11124 }
11125
11126 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11127
11128 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11129 // SPEC BUG: promise vs. promiseToResolve
11130 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11131 try {
11132 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11133 resolvingFunctions['[[Reject]]']);
11134 } catch (thenCallResult) {
11135 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11136 NextJob(status); return;
11137 }
11138 NextJob(thenCallResult);
11139 }
11140
11141 // 25.4.3 The Promise Constructor
11142
11143 // 25.4.3.1 Promise ( executor )
11144
11145 function Promise(executor) {
11146 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11147 Object.defineProperty(this, '[[PromiseState]]', config);
11148 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11149 Object.defineProperty(this, '[[PromiseResult]]', config);
11150 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11151 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11152
11153 var promise = this;
11154 if (Type(promise) !== 'object') throw new TypeError();
11155 if (!('[[PromiseState]]' in promise)) throw TypeError();
11156 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11157 if (!IsCallable(executor)) throw TypeError();
11158
11159 set_internal(promise, '[[PromiseConstructor]]', Promise);
11160
11161 return InitializePromise(promise, executor);
11162 }
11163
11164 // 25.4.3.1.1 InitializePromise ( promise, executor )
11165
11166 function InitializePromise(promise, executor) {
11167 console.assert('[[PromiseState]]' in promise);
11168 console.assert(IsCallable(executor));
11169 set_internal(promise, '[[PromiseState]]', 'pending');
11170 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11171 set_internal(promise, '[[PromiseRejectReactions]]', []);
11172 var resolvingFunctions = CreateResolvingFunctions(promise);
11173 try {
11174 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11175 resolvingFunctions['[[Reject]]']);
11176 } catch (completion) {
11177 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11178 }
11179 return promise;
11180 }
11181
11182 // 25.4.4 Properties of the Promise Constructor
11183 // 25.4.4.1 Promise.all ( iterable )
11184
11185 define(Promise, 'all', function all(iterable) {
11186 var c = strict(this);
11187 var promiseCapability = NewPromiseCapability(c);
11188 try {
11189 var iterator = GetIterator(iterable);
11190 } catch (value) {
11191 promiseCapability['[[Reject]]'].call(undefined, value);
11192 return promiseCapability['[[Promise]]'];
11193 }
11194 var values = [];
11195 var remainingElementsCount = { value: 1 };
11196 var index = 0;
11197 while (true) {
11198 try {
11199 var next = IteratorStep(iterator);
11200 } catch (value) {
11201 promiseCapability['[[Reject]]'].call(undefined, value);
11202 return promiseCapability['[[Promise]]'];
11203 }
11204 if (!next) {
11205 remainingElementsCount.value -= 1;
11206 if (remainingElementsCount.value === 0) {
11207 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11208
11209
11210 }
11211 return promiseCapability['[[Promise]]'];
11212 }
11213 try {
11214 var nextValue = IteratorValue(next);
11215 } catch (value) {
11216 promiseCapability['[[Reject]]'].call(undefined, value);
11217 return promiseCapability['[[Promise]]'];
11218 }
11219 try {
11220 var nextPromise = c.resolve(nextValue);
11221 } catch (value) {
11222 promiseCapability['[[Reject]]'].call(undefined, value);
11223 return promiseCapability['[[Promise]]'];
11224 }
11225 var resolveElement = PromiseAllResolveElementFunction();
11226 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11227 set_internal(resolveElement, '[[Index]]', index);
11228 set_internal(resolveElement, '[[Values]]', values);
11229 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11230 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11231 remainingElementsCount.value += 1;
11232 try {
11233 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11234 } catch (value) {
11235 promiseCapability['[[Reject]]'].call(undefined, value);
11236 return promiseCapability['[[Promise]]'];
11237 }
11238 index += 1;
11239 }
11240 });
11241
11242 // 25.4.4.1.1 Promise.all Resolve Element Functions
11243
11244 function PromiseAllResolveElementFunction() {
11245 var F = function(x) {
11246 var alreadyCalled = F['[[AlreadyCalled]]'];
11247 if (alreadyCalled.value) return undefined;
11248 alreadyCalled.value = true;
11249 var index = F['[[Index]]'];
11250 var values = F['[[Values]]'];
11251 var promiseCapability = F['[[Capabilities]]'];
11252 var remainingElementsCount = F['[[RemainingElements]]'];
11253 try {
11254 values[index] = x;
11255 } catch (result) {
11256 promiseCapability['[[Reject]]'].call(undefined, result);
11257 return promiseCapability['[[Promise]]'];
11258 }
11259 remainingElementsCount.value -= 1;
11260 if (remainingElementsCount.value === 0)
11261 return promiseCapability['[[Resolve]]'].call(undefined, values);
11262 return undefined;
11263 };
11264 return F;
11265 }
11266
11267 // 25.4.4.2 Promise.prototype
11268
11269 Promise.prototype = {};
11270
11271 // 25.4.4.3 Promise.race ( iterable )
11272
11273 define(Promise, 'race', function race(iterable) {
11274 var c = strict(this);
11275 var promiseCapability = NewPromiseCapability(c);
11276 try {
11277 var iterator = GetIterator(iterable);
11278 } catch (value) {
11279 promiseCapability['[[Reject]]'].call(undefined, value);
11280 return promiseCapability['[[Promise]]'];
11281 }
11282 while (true) {
11283 try {
11284 var next = IteratorStep(iterator);
11285 } catch (value) {
11286 promiseCapability['[[Reject]]'].call(undefined, value);
11287 return promiseCapability['[[Promise]]'];
11288 }
11289 if (!next) return promiseCapability['[[Promise]]'];
11290 try {
11291 var nextValue = IteratorValue(next);
11292 } catch (value) {
11293 promiseCapability['[[Reject]]'].call(undefined, value);
11294 return promiseCapability['[[Promise]]'];
11295 }
11296 try {
11297 var nextPromise = c.resolve(nextValue);
11298 } catch (value) {
11299 promiseCapability['[[Reject]]'].call(undefined, value);
11300 return promiseCapability['[[Promise]]'];
11301 }
11302 try {
11303 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11304 } catch (value) {
11305 promiseCapability['[[Reject]]'].call(undefined, value);
11306 return promiseCapability['[[Promise]]'];
11307 }
11308 }
11309 });
11310
11311 // 25.4.4.4 Promise.reject ( r )
11312
11313 define(Promise, 'reject', function reject(r) {
11314 var c = strict(this);
11315 var promiseCapability = NewPromiseCapability(c);
11316 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11317 return promiseCapability['[[Promise]]'];
11318 });
11319
11320 // 25.4.4.5 Promise.resolve ( x )
11321
11322 define(Promise, 'resolve', function resolve(x) {
11323 var c = strict(this);
11324 if (IsPromise(x)) {
11325 var constructor = x['[[PromiseConstructor]]'];
11326 if (SameValue(constructor, c)) return x;
11327 }
11328 var promiseCapability = NewPromiseCapability(c);
11329 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11330 return promiseCapability['[[Promise]]'];
11331 });
11332
11333 // 25.4.4.6 Promise [ @@create ] ( )
11334 // 25.4.4.6.1 AllocatePromise ( constructor )
11335 // 25.4.5 Properties of the Promise Prototype Object
11336 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11337
11338 define(Promise.prototype, 'catch', function catch_(onRejected) {
11339 var promise = this;
11340 return promise.then(undefined, onRejected);
11341 });
11342
11343 // 25.4.5.2 Promise.prototype.constructor
11344
11345 Promise.prototype.constructor = Promise;
11346
11347 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11348
11349 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11350 var promise = this;
11351 if (!IsPromise(promise)) throw TypeError();
11352 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11353 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11354 var c = promise.constructor;
11355 var promiseCapability = NewPromiseCapability(c);
11356 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11357 '[[Handler]]': onFulfilled };
11358 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11359 '[[Handler]]': onRejected };
11360 if (promise['[[PromiseState]]'] === 'pending') {
11361 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11362 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11363 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11364 var value = promise['[[PromiseResult]]'];
11365 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11366 } else if (promise['[[PromiseState]]'] === 'rejected') {
11367 var reason = promise['[[PromiseResult]]'];
11368 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11369 }
11370 return promiseCapability['[[Promise]]'];
11371 });
11372
11373 // 25.4.6 Properties of Promise Instances
11374
11375 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11376 global.Promise = Promise;
11377
11378 // Patch early Promise.cast vs. Promise.resolve implementations
11379 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11380 }());
11381
11382 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11383 define(Promise.prototype, $$toStringTag, 'Promise');
11384
11385 // ---------------------------------------
11386 // 26 Reflection
11387 // ---------------------------------------
11388
11389 (function() {
11390 // 26.1 The Reflect Object
11391 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11392 global.Reflect = {};
11393
11394 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11395 define(
11396 Reflect, 'apply',
11397 function apply(target, thisArgument, argumentsList) {
11398 if (!IsCallable(target)) throw TypeError();
11399 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11400 });
11401
11402 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11403 define(
11404 Reflect, 'construct',
11405 function construct(target, argumentsList) {
11406 return __cons(target, argumentsList);
11407 });
11408
11409 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11410 define(
11411 Reflect, 'defineProperty',
11412 function defineProperty(target, propertyKey, attributes) {
11413 try {
11414 Object.defineProperty(target, propertyKey, attributes);
11415 return true;
11416 } catch (_) {
11417 return false;
11418 }
11419 });
11420
11421 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11422 define(
11423 Reflect, 'deleteProperty',
11424 function deleteProperty(target,name) {
11425 try {
11426 delete target[name];
11427 return !HasOwnProperty(target, name);
11428 } catch (_) {
11429 return false;
11430 }
11431 });
11432
11433 // 26.1.5 Reflect.enumerate ( target )
11434 define(
11435 Reflect, 'enumerate',
11436 function enumerate(target) {
11437 target = ToObject(target);
11438 var iterator = Enumerate(target);
11439 return iterator;
11440 });
11441
11442 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11443 define(
11444 Reflect, 'get',
11445 function get(target, name, receiver) {
11446 target = ToObject(target);
11447 name = String(name);
11448 receiver = (receiver === undefined) ? target : ToObject(receiver);
11449 var desc = getPropertyDescriptor(target, name);
11450 if (desc && 'get' in desc)
11451 return Function.prototype.call.call(desc['get'], receiver);
11452 return target[name];
11453 });
11454
11455 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11456 define(
11457 Reflect, 'getOwnPropertyDescriptor',
11458 Object.getOwnPropertyDescriptor);
11459
11460 // 26.1.8 Reflect.getPrototypeOf ( target )
11461 define(
11462 Reflect, 'getPrototypeOf',
11463 Object.getPrototypeOf);
11464
11465 // 26.1.9 Reflect.has ( target, propertyKey )
11466 define(
11467 Reflect, 'has',
11468 function has(target,name) {
11469 return String(name) in ToObject(target);
11470 });
11471
11472 // 26.1.10 Reflect.isExtensible (target)
11473 define(
11474 Reflect, 'isExtensible',
11475 Object.isExtensible);
11476
11477 // 26.1.11 Reflect.ownKeys ( target )
11478 define(
11479 Reflect, 'ownKeys',
11480 function ownKeys(target) {
11481 var obj = ToObject(target);
11482 return Object.getOwnPropertyNames(obj);
11483 });
11484
11485 // 26.1.12 Reflect.preventExtensions ( target )
11486 define(
11487 Reflect, 'preventExtensions',
11488 function preventExtensions(target) {
11489 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11490 });
11491
11492 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11493 define(
11494 Reflect, 'set',
11495 function set(target, name, value, receiver) {
11496 target = ToObject(target);
11497 name = String(name);
11498 receiver = (receiver === undefined) ? target : ToObject(receiver);
11499 var desc = getPropertyDescriptor(target, name);
11500 try {
11501 if (desc && 'set' in desc)
11502 Function.prototype.call.call(desc['set'], receiver, value);
11503 else
11504 target[name] = value;
11505 return true;
11506 } catch (_) {
11507 return false;
11508 }
11509 });
11510
11511 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11512 define(
11513 Reflect, 'setPrototypeOf',
11514 function setPrototypeOf(target, proto) {
11515 try {
11516 target.__proto__ = proto;
11517 return Reflect.getPrototypeOf(target) === proto;
11518 } catch(_) {
11519 return false;
11520 }
11521 });
11522
11523 }());
11524
11525 // ---------------------------------------
11526 // 26.2 Proxy Objects
11527 // ---------------------------------------
11528
11529 // Not polyfillable.
11530
11531 }(self));
11532
11533 // This helper is defined outside the main scope so that the use of
11534 // 'eval' does not taint the scope for minifiers.
11535 function __cons(t, a) {
11536 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11537 }
11538 </script>
11539 <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){
11540 'use strict'
11541
11542 exports.byteLength = byteLength
11543 exports.toByteArray = toByteArray
11544 exports.fromByteArray = fromByteArray
11545
11546 var lookup = []
11547 var revLookup = []
11548 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11549
11550 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11551 for (var i = 0, len = code.length; i < len; ++i) {
11552 lookup[i] = code[i]
11553 revLookup[code.charCodeAt(i)] = i
11554 }
11555
11556 revLookup['-'.charCodeAt(0)] = 62
11557 revLookup['_'.charCodeAt(0)] = 63
11558
11559 function placeHoldersCount (b64) {
11560 var len = b64.length
11561 if (len % 4 > 0) {
11562 throw new Error('Invalid string. Length must be a multiple of 4')
11563 }
11564
11565 // the number of equal signs (place holders)
11566 // if there are two placeholders, than the two characters before it
11567 // represent one byte
11568 // if there is only one, then the three characters before it represent 2 bytes
11569 // this is just a cheap hack to not do indexOf twice
11570 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11571 }
11572
11573 function byteLength (b64) {
11574 // base64 is 4/3 + up to two characters of the original data
11575 return b64.length * 3 / 4 - placeHoldersCount(b64)
11576 }
11577
11578 function toByteArray (b64) {
11579 var i, j, l, tmp, placeHolders, arr
11580 var len = b64.length
11581 placeHolders = placeHoldersCount(b64)
11582
11583 arr = new Arr(len * 3 / 4 - placeHolders)
11584
11585 // if there are placeholders, only get up to the last complete 4 chars
11586 l = placeHolders > 0 ? len - 4 : len
11587
11588 var L = 0
11589
11590 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11591 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11592 arr[L++] = (tmp >> 16) & 0xFF
11593 arr[L++] = (tmp >> 8) & 0xFF
11594 arr[L++] = tmp & 0xFF
11595 }
11596
11597 if (placeHolders === 2) {
11598 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11599 arr[L++] = tmp & 0xFF
11600 } else if (placeHolders === 1) {
11601 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11602 arr[L++] = (tmp >> 8) & 0xFF
11603 arr[L++] = tmp & 0xFF
11604 }
11605
11606 return arr
11607 }
11608
11609 function tripletToBase64 (num) {
11610 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11611 }
11612
11613 function encodeChunk (uint8, start, end) {
11614 var tmp
11615 var output = []
11616 for (var i = start; i < end; i += 3) {
11617 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11618 output.push(tripletToBase64(tmp))
11619 }
11620 return output.join('')
11621 }
11622
11623 function fromByteArray (uint8) {
11624 var tmp
11625 var len = uint8.length
11626 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11627 var output = ''
11628 var parts = []
11629 var maxChunkLength = 16383 // must be multiple of 3
11630
11631 // go through the array every three bytes, we'll deal with trailing stuff later
11632 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11633 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11634 }
11635
11636 // pad the end with zeros, but make sure to not forget the extra bytes
11637 if (extraBytes === 1) {
11638 tmp = uint8[len - 1]
11639 output += lookup[tmp >> 2]
11640 output += lookup[(tmp << 4) & 0x3F]
11641 output += '=='
11642 } else if (extraBytes === 2) {
11643 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11644 output += lookup[tmp >> 10]
11645 output += lookup[(tmp >> 4) & 0x3F]
11646 output += lookup[(tmp << 2) & 0x3F]
11647 output += '='
11648 }
11649
11650 parts.push(output)
11651
11652 return parts.join('')
11653 }
11654
11655 },{}],2:[function(require,module,exports){
11656 /*!
11657 * The buffer module from node.js, for the browser.
11658 *
11659 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11660 * @license MIT
11661 */
11662 /* eslint-disable no-proto */
11663
11664 'use strict'
11665
11666 var base64 = require('base64-js')
11667 var ieee754 = require('ieee754')
11668
11669 exports.Buffer = Buffer
11670 exports.SlowBuffer = SlowBuffer
11671 exports.INSPECT_MAX_BYTES = 50
11672
11673 var K_MAX_LENGTH = 0x7fffffff
11674 exports.kMaxLength = K_MAX_LENGTH
11675
11676 /**
11677 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11678 * === true Use Uint8Array implementation (fastest)
11679 * === false Print warning and recommend using `buffer` v4.x which has an Object
11680 * implementation (most compatible, even IE6)
11681 *
11682 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11683 * Opera 11.6+, iOS 4.2+.
11684 *
11685 * We report that the browser does not support typed arrays if the are not subclassable
11686 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11687 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11688 * for __proto__ and has a buggy typed array implementation.
11689 */
11690 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11691
11692 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11693 typeof console.error === 'function') {
11694 console.error(
11695 'This browser lacks typed array (Uint8Array) support which is required by ' +
11696 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11697 )
11698 }
11699
11700 function typedArraySupport () {
11701 // Can typed array instances can be augmented?
11702 try {
11703 var arr = new Uint8Array(1)
11704 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11705 return arr.foo() === 42
11706 } catch (e) {
11707 return false
11708 }
11709 }
11710
11711 function createBuffer (length) {
11712 if (length > K_MAX_LENGTH) {
11713 throw new RangeError('Invalid typed array length')
11714 }
11715 // Return an augmented `Uint8Array` instance
11716 var buf = new Uint8Array(length)
11717 buf.__proto__ = Buffer.prototype
11718 return buf
11719 }
11720
11721 /**
11722 * The Buffer constructor returns instances of `Uint8Array` that have their
11723 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11724 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11725 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11726 * returns a single octet.
11727 *
11728 * The `Uint8Array` prototype remains unmodified.
11729 */
11730
11731 function Buffer (arg, encodingOrOffset, length) {
11732 // Common case.
11733 if (typeof arg === 'number') {
11734 if (typeof encodingOrOffset === 'string') {
11735 throw new Error(
11736 'If encoding is specified then the first argument must be a string'
11737 )
11738 }
11739 return allocUnsafe(arg)
11740 }
11741 return from(arg, encodingOrOffset, length)
11742 }
11743
11744 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11745 if (typeof Symbol !== 'undefined' && Symbol.species &&
11746 Buffer[Symbol.species] === Buffer) {
11747 Object.defineProperty(Buffer, Symbol.species, {
11748 value: null,
11749 configurable: true,
11750 enumerable: false,
11751 writable: false
11752 })
11753 }
11754
11755 Buffer.poolSize = 8192 // not used by this implementation
11756
11757 function from (value, encodingOrOffset, length) {
11758 if (typeof value === 'number') {
11759 throw new TypeError('"value" argument must not be a number')
11760 }
11761
11762 if (value instanceof ArrayBuffer) {
11763 return fromArrayBuffer(value, encodingOrOffset, length)
11764 }
11765
11766 if (typeof value === 'string') {
11767 return fromString(value, encodingOrOffset)
11768 }
11769
11770 return fromObject(value)
11771 }
11772
11773 /**
11774 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11775 * if value is a number.
11776 * Buffer.from(str[, encoding])
11777 * Buffer.from(array)
11778 * Buffer.from(buffer)
11779 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11780 **/
11781 Buffer.from = function (value, encodingOrOffset, length) {
11782 return from(value, encodingOrOffset, length)
11783 }
11784
11785 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11786 // https://github.com/feross/buffer/pull/148
11787 Buffer.prototype.__proto__ = Uint8Array.prototype
11788 Buffer.__proto__ = Uint8Array
11789
11790 function assertSize (size) {
11791 if (typeof size !== 'number') {
11792 throw new TypeError('"size" argument must be a number')
11793 } else if (size < 0) {
11794 throw new RangeError('"size" argument must not be negative')
11795 }
11796 }
11797
11798 function alloc (size, fill, encoding) {
11799 assertSize(size)
11800 if (size <= 0) {
11801 return createBuffer(size)
11802 }
11803 if (fill !== undefined) {
11804 // Only pay attention to encoding if it's a string. This
11805 // prevents accidentally sending in a number that would
11806 // be interpretted as a start offset.
11807 return typeof encoding === 'string'
11808 ? createBuffer(size).fill(fill, encoding)
11809 : createBuffer(size).fill(fill)
11810 }
11811 return createBuffer(size)
11812 }
11813
11814 /**
11815 * Creates a new filled Buffer instance.
11816 * alloc(size[, fill[, encoding]])
11817 **/
11818 Buffer.alloc = function (size, fill, encoding) {
11819 return alloc(size, fill, encoding)
11820 }
11821
11822 function allocUnsafe (size) {
11823 assertSize(size)
11824 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11825 }
11826
11827 /**
11828 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11829 * */
11830 Buffer.allocUnsafe = function (size) {
11831 return allocUnsafe(size)
11832 }
11833 /**
11834 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11835 */
11836 Buffer.allocUnsafeSlow = function (size) {
11837 return allocUnsafe(size)
11838 }
11839
11840 function fromString (string, encoding) {
11841 if (typeof encoding !== 'string' || encoding === '') {
11842 encoding = 'utf8'
11843 }
11844
11845 if (!Buffer.isEncoding(encoding)) {
11846 throw new TypeError('"encoding" must be a valid string encoding')
11847 }
11848
11849 var length = byteLength(string, encoding) | 0
11850 var buf = createBuffer(length)
11851
11852 var actual = buf.write(string, encoding)
11853
11854 if (actual !== length) {
11855 // Writing a hex string, for example, that contains invalid characters will
11856 // cause everything after the first invalid character to be ignored. (e.g.
11857 // 'abxxcd' will be treated as 'ab')
11858 buf = buf.slice(0, actual)
11859 }
11860
11861 return buf
11862 }
11863
11864 function fromArrayLike (array) {
11865 var length = array.length < 0 ? 0 : checked(array.length) | 0
11866 var buf = createBuffer(length)
11867 for (var i = 0; i < length; i += 1) {
11868 buf[i] = array[i] & 255
11869 }
11870 return buf
11871 }
11872
11873 function fromArrayBuffer (array, byteOffset, length) {
11874 if (byteOffset < 0 || array.byteLength < byteOffset) {
11875 throw new RangeError('\'offset\' is out of bounds')
11876 }
11877
11878 if (array.byteLength < byteOffset + (length || 0)) {
11879 throw new RangeError('\'length\' is out of bounds')
11880 }
11881
11882 var buf
11883 if (byteOffset === undefined && length === undefined) {
11884 buf = new Uint8Array(array)
11885 } else if (length === undefined) {
11886 buf = new Uint8Array(array, byteOffset)
11887 } else {
11888 buf = new Uint8Array(array, byteOffset, length)
11889 }
11890
11891 // Return an augmented `Uint8Array` instance
11892 buf.__proto__ = Buffer.prototype
11893 return buf
11894 }
11895
11896 function fromObject (obj) {
11897 if (Buffer.isBuffer(obj)) {
11898 var len = checked(obj.length) | 0
11899 var buf = createBuffer(len)
11900
11901 if (buf.length === 0) {
11902 return buf
11903 }
11904
11905 obj.copy(buf, 0, 0, len)
11906 return buf
11907 }
11908
11909 if (obj) {
11910 if (isArrayBufferView(obj) || 'length' in obj) {
11911 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11912 return createBuffer(0)
11913 }
11914 return fromArrayLike(obj)
11915 }
11916
11917 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11918 return fromArrayLike(obj.data)
11919 }
11920 }
11921
11922 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11923 }
11924
11925 function checked (length) {
11926 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11927 // length is NaN (which is otherwise coerced to zero.)
11928 if (length >= K_MAX_LENGTH) {
11929 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11930 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11931 }
11932 return length | 0
11933 }
11934
11935 function SlowBuffer (length) {
11936 if (+length != length) { // eslint-disable-line eqeqeq
11937 length = 0
11938 }
11939 return Buffer.alloc(+length)
11940 }
11941
11942 Buffer.isBuffer = function isBuffer (b) {
11943 return b != null && b._isBuffer === true
11944 }
11945
11946 Buffer.compare = function compare (a, b) {
11947 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11948 throw new TypeError('Arguments must be Buffers')
11949 }
11950
11951 if (a === b) return 0
11952
11953 var x = a.length
11954 var y = b.length
11955
11956 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11957 if (a[i] !== b[i]) {
11958 x = a[i]
11959 y = b[i]
11960 break
11961 }
11962 }
11963
11964 if (x < y) return -1
11965 if (y < x) return 1
11966 return 0
11967 }
11968
11969 Buffer.isEncoding = function isEncoding (encoding) {
11970 switch (String(encoding).toLowerCase()) {
11971 case 'hex':
11972 case 'utf8':
11973 case 'utf-8':
11974 case 'ascii':
11975 case 'latin1':
11976 case 'binary':
11977 case 'base64':
11978 case 'ucs2':
11979 case 'ucs-2':
11980 case 'utf16le':
11981 case 'utf-16le':
11982 return true
11983 default:
11984 return false
11985 }
11986 }
11987
11988 Buffer.concat = function concat (list, length) {
11989 if (!Array.isArray(list)) {
11990 throw new TypeError('"list" argument must be an Array of Buffers')
11991 }
11992
11993 if (list.length === 0) {
11994 return Buffer.alloc(0)
11995 }
11996
11997 var i
11998 if (length === undefined) {
11999 length = 0
12000 for (i = 0; i < list.length; ++i) {
12001 length += list[i].length
12002 }
12003 }
12004
12005 var buffer = Buffer.allocUnsafe(length)
12006 var pos = 0
12007 for (i = 0; i < list.length; ++i) {
12008 var buf = list[i]
12009 if (!Buffer.isBuffer(buf)) {
12010 throw new TypeError('"list" argument must be an Array of Buffers')
12011 }
12012 buf.copy(buffer, pos)
12013 pos += buf.length
12014 }
12015 return buffer
12016 }
12017
12018 function byteLength (string, encoding) {
12019 if (Buffer.isBuffer(string)) {
12020 return string.length
12021 }
12022 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12023 return string.byteLength
12024 }
12025 if (typeof string !== 'string') {
12026 string = '' + string
12027 }
12028
12029 var len = string.length
12030 if (len === 0) return 0
12031
12032 // Use a for loop to avoid recursion
12033 var loweredCase = false
12034 for (;;) {
12035 switch (encoding) {
12036 case 'ascii':
12037 case 'latin1':
12038 case 'binary':
12039 return len
12040 case 'utf8':
12041 case 'utf-8':
12042 case undefined:
12043 return utf8ToBytes(string).length
12044 case 'ucs2':
12045 case 'ucs-2':
12046 case 'utf16le':
12047 case 'utf-16le':
12048 return len * 2
12049 case 'hex':
12050 return len >>> 1
12051 case 'base64':
12052 return base64ToBytes(string).length
12053 default:
12054 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12055 encoding = ('' + encoding).toLowerCase()
12056 loweredCase = true
12057 }
12058 }
12059 }
12060 Buffer.byteLength = byteLength
12061
12062 function slowToString (encoding, start, end) {
12063 var loweredCase = false
12064
12065 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12066 // property of a typed array.
12067
12068 // This behaves neither like String nor Uint8Array in that we set start/end
12069 // to their upper/lower bounds if the value passed is out of range.
12070 // undefined is handled specially as per ECMA-262 6th Edition,
12071 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12072 if (start === undefined || start < 0) {
12073 start = 0
12074 }
12075 // Return early if start > this.length. Done here to prevent potential uint32
12076 // coercion fail below.
12077 if (start > this.length) {
12078 return ''
12079 }
12080
12081 if (end === undefined || end > this.length) {
12082 end = this.length
12083 }
12084
12085 if (end <= 0) {
12086 return ''
12087 }
12088
12089 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12090 end >>>= 0
12091 start >>>= 0
12092
12093 if (end <= start) {
12094 return ''
12095 }
12096
12097 if (!encoding) encoding = 'utf8'
12098
12099 while (true) {
12100 switch (encoding) {
12101 case 'hex':
12102 return hexSlice(this, start, end)
12103
12104 case 'utf8':
12105 case 'utf-8':
12106 return utf8Slice(this, start, end)
12107
12108 case 'ascii':
12109 return asciiSlice(this, start, end)
12110
12111 case 'latin1':
12112 case 'binary':
12113 return latin1Slice(this, start, end)
12114
12115 case 'base64':
12116 return base64Slice(this, start, end)
12117
12118 case 'ucs2':
12119 case 'ucs-2':
12120 case 'utf16le':
12121 case 'utf-16le':
12122 return utf16leSlice(this, start, end)
12123
12124 default:
12125 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12126 encoding = (encoding + '').toLowerCase()
12127 loweredCase = true
12128 }
12129 }
12130 }
12131
12132 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12133 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12134 // reliably in a browserify context because there could be multiple different
12135 // copies of the 'buffer' package in use. This method works even for Buffer
12136 // instances that were created from another copy of the `buffer` package.
12137 // See: https://github.com/feross/buffer/issues/154
12138 Buffer.prototype._isBuffer = true
12139
12140 function swap (b, n, m) {
12141 var i = b[n]
12142 b[n] = b[m]
12143 b[m] = i
12144 }
12145
12146 Buffer.prototype.swap16 = function swap16 () {
12147 var len = this.length
12148 if (len % 2 !== 0) {
12149 throw new RangeError('Buffer size must be a multiple of 16-bits')
12150 }
12151 for (var i = 0; i < len; i += 2) {
12152 swap(this, i, i + 1)
12153 }
12154 return this
12155 }
12156
12157 Buffer.prototype.swap32 = function swap32 () {
12158 var len = this.length
12159 if (len % 4 !== 0) {
12160 throw new RangeError('Buffer size must be a multiple of 32-bits')
12161 }
12162 for (var i = 0; i < len; i += 4) {
12163 swap(this, i, i + 3)
12164 swap(this, i + 1, i + 2)
12165 }
12166 return this
12167 }
12168
12169 Buffer.prototype.swap64 = function swap64 () {
12170 var len = this.length
12171 if (len % 8 !== 0) {
12172 throw new RangeError('Buffer size must be a multiple of 64-bits')
12173 }
12174 for (var i = 0; i < len; i += 8) {
12175 swap(this, i, i + 7)
12176 swap(this, i + 1, i + 6)
12177 swap(this, i + 2, i + 5)
12178 swap(this, i + 3, i + 4)
12179 }
12180 return this
12181 }
12182
12183 Buffer.prototype.toString = function toString () {
12184 var length = this.length
12185 if (length === 0) return ''
12186 if (arguments.length === 0) return utf8Slice(this, 0, length)
12187 return slowToString.apply(this, arguments)
12188 }
12189
12190 Buffer.prototype.equals = function equals (b) {
12191 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12192 if (this === b) return true
12193 return Buffer.compare(this, b) === 0
12194 }
12195
12196 Buffer.prototype.inspect = function inspect () {
12197 var str = ''
12198 var max = exports.INSPECT_MAX_BYTES
12199 if (this.length > 0) {
12200 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12201 if (this.length > max) str += ' ... '
12202 }
12203 return '<Buffer ' + str + '>'
12204 }
12205
12206 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12207 if (!Buffer.isBuffer(target)) {
12208 throw new TypeError('Argument must be a Buffer')
12209 }
12210
12211 if (start === undefined) {
12212 start = 0
12213 }
12214 if (end === undefined) {
12215 end = target ? target.length : 0
12216 }
12217 if (thisStart === undefined) {
12218 thisStart = 0
12219 }
12220 if (thisEnd === undefined) {
12221 thisEnd = this.length
12222 }
12223
12224 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12225 throw new RangeError('out of range index')
12226 }
12227
12228 if (thisStart >= thisEnd && start >= end) {
12229 return 0
12230 }
12231 if (thisStart >= thisEnd) {
12232 return -1
12233 }
12234 if (start >= end) {
12235 return 1
12236 }
12237
12238 start >>>= 0
12239 end >>>= 0
12240 thisStart >>>= 0
12241 thisEnd >>>= 0
12242
12243 if (this === target) return 0
12244
12245 var x = thisEnd - thisStart
12246 var y = end - start
12247 var len = Math.min(x, y)
12248
12249 var thisCopy = this.slice(thisStart, thisEnd)
12250 var targetCopy = target.slice(start, end)
12251
12252 for (var i = 0; i < len; ++i) {
12253 if (thisCopy[i] !== targetCopy[i]) {
12254 x = thisCopy[i]
12255 y = targetCopy[i]
12256 break
12257 }
12258 }
12259
12260 if (x < y) return -1
12261 if (y < x) return 1
12262 return 0
12263 }
12264
12265 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12266 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12267 //
12268 // Arguments:
12269 // - buffer - a Buffer to search
12270 // - val - a string, Buffer, or number
12271 // - byteOffset - an index into `buffer`; will be clamped to an int32
12272 // - encoding - an optional encoding, relevant is val is a string
12273 // - dir - true for indexOf, false for lastIndexOf
12274 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12275 // Empty buffer means no match
12276 if (buffer.length === 0) return -1
12277
12278 // Normalize byteOffset
12279 if (typeof byteOffset === 'string') {
12280 encoding = byteOffset
12281 byteOffset = 0
12282 } else if (byteOffset > 0x7fffffff) {
12283 byteOffset = 0x7fffffff
12284 } else if (byteOffset < -0x80000000) {
12285 byteOffset = -0x80000000
12286 }
12287 byteOffset = +byteOffset // Coerce to Number.
12288 if (numberIsNaN(byteOffset)) {
12289 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12290 byteOffset = dir ? 0 : (buffer.length - 1)
12291 }
12292
12293 // Normalize byteOffset: negative offsets start from the end of the buffer
12294 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12295 if (byteOffset >= buffer.length) {
12296 if (dir) return -1
12297 else byteOffset = buffer.length - 1
12298 } else if (byteOffset < 0) {
12299 if (dir) byteOffset = 0
12300 else return -1
12301 }
12302
12303 // Normalize val
12304 if (typeof val === 'string') {
12305 val = Buffer.from(val, encoding)
12306 }
12307
12308 // Finally, search either indexOf (if dir is true) or lastIndexOf
12309 if (Buffer.isBuffer(val)) {
12310 // Special case: looking for empty string/buffer always fails
12311 if (val.length === 0) {
12312 return -1
12313 }
12314 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12315 } else if (typeof val === 'number') {
12316 val = val & 0xFF // Search for a byte value [0-255]
12317 if (typeof Uint8Array.prototype.indexOf === 'function') {
12318 if (dir) {
12319 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12320 } else {
12321 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12322 }
12323 }
12324 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12325 }
12326
12327 throw new TypeError('val must be string, number or Buffer')
12328 }
12329
12330 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12331 var indexSize = 1
12332 var arrLength = arr.length
12333 var valLength = val.length
12334
12335 if (encoding !== undefined) {
12336 encoding = String(encoding).toLowerCase()
12337 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12338 encoding === 'utf16le' || encoding === 'utf-16le') {
12339 if (arr.length < 2 || val.length < 2) {
12340 return -1
12341 }
12342 indexSize = 2
12343 arrLength /= 2
12344 valLength /= 2
12345 byteOffset /= 2
12346 }
12347 }
12348
12349 function read (buf, i) {
12350 if (indexSize === 1) {
12351 return buf[i]
12352 } else {
12353 return buf.readUInt16BE(i * indexSize)
12354 }
12355 }
12356
12357 var i
12358 if (dir) {
12359 var foundIndex = -1
12360 for (i = byteOffset; i < arrLength; i++) {
12361 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12362 if (foundIndex === -1) foundIndex = i
12363 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12364 } else {
12365 if (foundIndex !== -1) i -= i - foundIndex
12366 foundIndex = -1
12367 }
12368 }
12369 } else {
12370 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12371 for (i = byteOffset; i >= 0; i--) {
12372 var found = true
12373 for (var j = 0; j < valLength; j++) {
12374 if (read(arr, i + j) !== read(val, j)) {
12375 found = false
12376 break
12377 }
12378 }
12379 if (found) return i
12380 }
12381 }
12382
12383 return -1
12384 }
12385
12386 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12387 return this.indexOf(val, byteOffset, encoding) !== -1
12388 }
12389
12390 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12391 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12392 }
12393
12394 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12395 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12396 }
12397
12398 function hexWrite (buf, string, offset, length) {
12399 offset = Number(offset) || 0
12400 var remaining = buf.length - offset
12401 if (!length) {
12402 length = remaining
12403 } else {
12404 length = Number(length)
12405 if (length > remaining) {
12406 length = remaining
12407 }
12408 }
12409
12410 // must be an even number of digits
12411 var strLen = string.length
12412 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12413
12414 if (length > strLen / 2) {
12415 length = strLen / 2
12416 }
12417 for (var i = 0; i < length; ++i) {
12418 var parsed = parseInt(string.substr(i * 2, 2), 16)
12419 if (numberIsNaN(parsed)) return i
12420 buf[offset + i] = parsed
12421 }
12422 return i
12423 }
12424
12425 function utf8Write (buf, string, offset, length) {
12426 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12427 }
12428
12429 function asciiWrite (buf, string, offset, length) {
12430 return blitBuffer(asciiToBytes(string), buf, offset, length)
12431 }
12432
12433 function latin1Write (buf, string, offset, length) {
12434 return asciiWrite(buf, string, offset, length)
12435 }
12436
12437 function base64Write (buf, string, offset, length) {
12438 return blitBuffer(base64ToBytes(string), buf, offset, length)
12439 }
12440
12441 function ucs2Write (buf, string, offset, length) {
12442 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12443 }
12444
12445 Buffer.prototype.write = function write (string, offset, length, encoding) {
12446 // Buffer#write(string)
12447 if (offset === undefined) {
12448 encoding = 'utf8'
12449 length = this.length
12450 offset = 0
12451 // Buffer#write(string, encoding)
12452 } else if (length === undefined && typeof offset === 'string') {
12453 encoding = offset
12454 length = this.length
12455 offset = 0
12456 // Buffer#write(string, offset[, length][, encoding])
12457 } else if (isFinite(offset)) {
12458 offset = offset >>> 0
12459 if (isFinite(length)) {
12460 length = length >>> 0
12461 if (encoding === undefined) encoding = 'utf8'
12462 } else {
12463 encoding = length
12464 length = undefined
12465 }
12466 } else {
12467 throw new Error(
12468 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12469 )
12470 }
12471
12472 var remaining = this.length - offset
12473 if (length === undefined || length > remaining) length = remaining
12474
12475 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12476 throw new RangeError('Attempt to write outside buffer bounds')
12477 }
12478
12479 if (!encoding) encoding = 'utf8'
12480
12481 var loweredCase = false
12482 for (;;) {
12483 switch (encoding) {
12484 case 'hex':
12485 return hexWrite(this, string, offset, length)
12486
12487 case 'utf8':
12488 case 'utf-8':
12489 return utf8Write(this, string, offset, length)
12490
12491 case 'ascii':
12492 return asciiWrite(this, string, offset, length)
12493
12494 case 'latin1':
12495 case 'binary':
12496 return latin1Write(this, string, offset, length)
12497
12498 case 'base64':
12499 // Warning: maxLength not taken into account in base64Write
12500 return base64Write(this, string, offset, length)
12501
12502 case 'ucs2':
12503 case 'ucs-2':
12504 case 'utf16le':
12505 case 'utf-16le':
12506 return ucs2Write(this, string, offset, length)
12507
12508 default:
12509 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12510 encoding = ('' + encoding).toLowerCase()
12511 loweredCase = true
12512 }
12513 }
12514 }
12515
12516 Buffer.prototype.toJSON = function toJSON () {
12517 return {
12518 type: 'Buffer',
12519 data: Array.prototype.slice.call(this._arr || this, 0)
12520 }
12521 }
12522
12523 function base64Slice (buf, start, end) {
12524 if (start === 0 && end === buf.length) {
12525 return base64.fromByteArray(buf)
12526 } else {
12527 return base64.fromByteArray(buf.slice(start, end))
12528 }
12529 }
12530
12531 function utf8Slice (buf, start, end) {
12532 end = Math.min(buf.length, end)
12533 var res = []
12534
12535 var i = start
12536 while (i < end) {
12537 var firstByte = buf[i]
12538 var codePoint = null
12539 var bytesPerSequence = (firstByte > 0xEF) ? 4
12540 : (firstByte > 0xDF) ? 3
12541 : (firstByte > 0xBF) ? 2
12542 : 1
12543
12544 if (i + bytesPerSequence <= end) {
12545 var secondByte, thirdByte, fourthByte, tempCodePoint
12546
12547 switch (bytesPerSequence) {
12548 case 1:
12549 if (firstByte < 0x80) {
12550 codePoint = firstByte
12551 }
12552 break
12553 case 2:
12554 secondByte = buf[i + 1]
12555 if ((secondByte & 0xC0) === 0x80) {
12556 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12557 if (tempCodePoint > 0x7F) {
12558 codePoint = tempCodePoint
12559 }
12560 }
12561 break
12562 case 3:
12563 secondByte = buf[i + 1]
12564 thirdByte = buf[i + 2]
12565 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12566 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12567 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12568 codePoint = tempCodePoint
12569 }
12570 }
12571 break
12572 case 4:
12573 secondByte = buf[i + 1]
12574 thirdByte = buf[i + 2]
12575 fourthByte = buf[i + 3]
12576 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12577 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12578 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12579 codePoint = tempCodePoint
12580 }
12581 }
12582 }
12583 }
12584
12585 if (codePoint === null) {
12586 // we did not generate a valid codePoint so insert a
12587 // replacement char (U+FFFD) and advance only 1 byte
12588 codePoint = 0xFFFD
12589 bytesPerSequence = 1
12590 } else if (codePoint > 0xFFFF) {
12591 // encode to utf16 (surrogate pair dance)
12592 codePoint -= 0x10000
12593 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12594 codePoint = 0xDC00 | codePoint & 0x3FF
12595 }
12596
12597 res.push(codePoint)
12598 i += bytesPerSequence
12599 }
12600
12601 return decodeCodePointsArray(res)
12602 }
12603
12604 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12605 // the lowest limit is Chrome, with 0x10000 args.
12606 // We go 1 magnitude less, for safety
12607 var MAX_ARGUMENTS_LENGTH = 0x1000
12608
12609 function decodeCodePointsArray (codePoints) {
12610 var len = codePoints.length
12611 if (len <= MAX_ARGUMENTS_LENGTH) {
12612 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12613 }
12614
12615 // Decode in chunks to avoid "call stack size exceeded".
12616 var res = ''
12617 var i = 0
12618 while (i < len) {
12619 res += String.fromCharCode.apply(
12620 String,
12621 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12622 )
12623 }
12624 return res
12625 }
12626
12627 function asciiSlice (buf, start, end) {
12628 var ret = ''
12629 end = Math.min(buf.length, end)
12630
12631 for (var i = start; i < end; ++i) {
12632 ret += String.fromCharCode(buf[i] & 0x7F)
12633 }
12634 return ret
12635 }
12636
12637 function latin1Slice (buf, start, end) {
12638 var ret = ''
12639 end = Math.min(buf.length, end)
12640
12641 for (var i = start; i < end; ++i) {
12642 ret += String.fromCharCode(buf[i])
12643 }
12644 return ret
12645 }
12646
12647 function hexSlice (buf, start, end) {
12648 var len = buf.length
12649
12650 if (!start || start < 0) start = 0
12651 if (!end || end < 0 || end > len) end = len
12652
12653 var out = ''
12654 for (var i = start; i < end; ++i) {
12655 out += toHex(buf[i])
12656 }
12657 return out
12658 }
12659
12660 function utf16leSlice (buf, start, end) {
12661 var bytes = buf.slice(start, end)
12662 var res = ''
12663 for (var i = 0; i < bytes.length; i += 2) {
12664 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12665 }
12666 return res
12667 }
12668
12669 Buffer.prototype.slice = function slice (start, end) {
12670 var len = this.length
12671 start = ~~start
12672 end = end === undefined ? len : ~~end
12673
12674 if (start < 0) {
12675 start += len
12676 if (start < 0) start = 0
12677 } else if (start > len) {
12678 start = len
12679 }
12680
12681 if (end < 0) {
12682 end += len
12683 if (end < 0) end = 0
12684 } else if (end > len) {
12685 end = len
12686 }
12687
12688 if (end < start) end = start
12689
12690 var newBuf = this.subarray(start, end)
12691 // Return an augmented `Uint8Array` instance
12692 newBuf.__proto__ = Buffer.prototype
12693 return newBuf
12694 }
12695
12696 /*
12697 * Need to make sure that buffer isn't trying to write out of bounds.
12698 */
12699 function checkOffset (offset, ext, length) {
12700 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12701 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12702 }
12703
12704 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12705 offset = offset >>> 0
12706 byteLength = byteLength >>> 0
12707 if (!noAssert) checkOffset(offset, byteLength, this.length)
12708
12709 var val = this[offset]
12710 var mul = 1
12711 var i = 0
12712 while (++i < byteLength && (mul *= 0x100)) {
12713 val += this[offset + i] * mul
12714 }
12715
12716 return val
12717 }
12718
12719 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12720 offset = offset >>> 0
12721 byteLength = byteLength >>> 0
12722 if (!noAssert) {
12723 checkOffset(offset, byteLength, this.length)
12724 }
12725
12726 var val = this[offset + --byteLength]
12727 var mul = 1
12728 while (byteLength > 0 && (mul *= 0x100)) {
12729 val += this[offset + --byteLength] * mul
12730 }
12731
12732 return val
12733 }
12734
12735 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12736 offset = offset >>> 0
12737 if (!noAssert) checkOffset(offset, 1, this.length)
12738 return this[offset]
12739 }
12740
12741 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12742 offset = offset >>> 0
12743 if (!noAssert) checkOffset(offset, 2, this.length)
12744 return this[offset] | (this[offset + 1] << 8)
12745 }
12746
12747 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12748 offset = offset >>> 0
12749 if (!noAssert) checkOffset(offset, 2, this.length)
12750 return (this[offset] << 8) | this[offset + 1]
12751 }
12752
12753 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12754 offset = offset >>> 0
12755 if (!noAssert) checkOffset(offset, 4, this.length)
12756
12757 return ((this[offset]) |
12758 (this[offset + 1] << 8) |
12759 (this[offset + 2] << 16)) +
12760 (this[offset + 3] * 0x1000000)
12761 }
12762
12763 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12764 offset = offset >>> 0
12765 if (!noAssert) checkOffset(offset, 4, this.length)
12766
12767 return (this[offset] * 0x1000000) +
12768 ((this[offset + 1] << 16) |
12769 (this[offset + 2] << 8) |
12770 this[offset + 3])
12771 }
12772
12773 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12774 offset = offset >>> 0
12775 byteLength = byteLength >>> 0
12776 if (!noAssert) checkOffset(offset, byteLength, this.length)
12777
12778 var val = this[offset]
12779 var mul = 1
12780 var i = 0
12781 while (++i < byteLength && (mul *= 0x100)) {
12782 val += this[offset + i] * mul
12783 }
12784 mul *= 0x80
12785
12786 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12787
12788 return val
12789 }
12790
12791 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12792 offset = offset >>> 0
12793 byteLength = byteLength >>> 0
12794 if (!noAssert) checkOffset(offset, byteLength, this.length)
12795
12796 var i = byteLength
12797 var mul = 1
12798 var val = this[offset + --i]
12799 while (i > 0 && (mul *= 0x100)) {
12800 val += this[offset + --i] * mul
12801 }
12802 mul *= 0x80
12803
12804 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12805
12806 return val
12807 }
12808
12809 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12810 offset = offset >>> 0
12811 if (!noAssert) checkOffset(offset, 1, this.length)
12812 if (!(this[offset] & 0x80)) return (this[offset])
12813 return ((0xff - this[offset] + 1) * -1)
12814 }
12815
12816 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12817 offset = offset >>> 0
12818 if (!noAssert) checkOffset(offset, 2, this.length)
12819 var val = this[offset] | (this[offset + 1] << 8)
12820 return (val & 0x8000) ? val | 0xFFFF0000 : val
12821 }
12822
12823 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12824 offset = offset >>> 0
12825 if (!noAssert) checkOffset(offset, 2, this.length)
12826 var val = this[offset + 1] | (this[offset] << 8)
12827 return (val & 0x8000) ? val | 0xFFFF0000 : val
12828 }
12829
12830 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12831 offset = offset >>> 0
12832 if (!noAssert) checkOffset(offset, 4, this.length)
12833
12834 return (this[offset]) |
12835 (this[offset + 1] << 8) |
12836 (this[offset + 2] << 16) |
12837 (this[offset + 3] << 24)
12838 }
12839
12840 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12841 offset = offset >>> 0
12842 if (!noAssert) checkOffset(offset, 4, this.length)
12843
12844 return (this[offset] << 24) |
12845 (this[offset + 1] << 16) |
12846 (this[offset + 2] << 8) |
12847 (this[offset + 3])
12848 }
12849
12850 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12851 offset = offset >>> 0
12852 if (!noAssert) checkOffset(offset, 4, this.length)
12853 return ieee754.read(this, offset, true, 23, 4)
12854 }
12855
12856 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12857 offset = offset >>> 0
12858 if (!noAssert) checkOffset(offset, 4, this.length)
12859 return ieee754.read(this, offset, false, 23, 4)
12860 }
12861
12862 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12863 offset = offset >>> 0
12864 if (!noAssert) checkOffset(offset, 8, this.length)
12865 return ieee754.read(this, offset, true, 52, 8)
12866 }
12867
12868 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12869 offset = offset >>> 0
12870 if (!noAssert) checkOffset(offset, 8, this.length)
12871 return ieee754.read(this, offset, false, 52, 8)
12872 }
12873
12874 function checkInt (buf, value, offset, ext, max, min) {
12875 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12876 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12877 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12878 }
12879
12880 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12881 value = +value
12882 offset = offset >>> 0
12883 byteLength = byteLength >>> 0
12884 if (!noAssert) {
12885 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12886 checkInt(this, value, offset, byteLength, maxBytes, 0)
12887 }
12888
12889 var mul = 1
12890 var i = 0
12891 this[offset] = value & 0xFF
12892 while (++i < byteLength && (mul *= 0x100)) {
12893 this[offset + i] = (value / mul) & 0xFF
12894 }
12895
12896 return offset + byteLength
12897 }
12898
12899 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12900 value = +value
12901 offset = offset >>> 0
12902 byteLength = byteLength >>> 0
12903 if (!noAssert) {
12904 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12905 checkInt(this, value, offset, byteLength, maxBytes, 0)
12906 }
12907
12908 var i = byteLength - 1
12909 var mul = 1
12910 this[offset + i] = value & 0xFF
12911 while (--i >= 0 && (mul *= 0x100)) {
12912 this[offset + i] = (value / mul) & 0xFF
12913 }
12914
12915 return offset + byteLength
12916 }
12917
12918 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12919 value = +value
12920 offset = offset >>> 0
12921 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12922 this[offset] = (value & 0xff)
12923 return offset + 1
12924 }
12925
12926 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12927 value = +value
12928 offset = offset >>> 0
12929 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12930 this[offset] = (value & 0xff)
12931 this[offset + 1] = (value >>> 8)
12932 return offset + 2
12933 }
12934
12935 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12936 value = +value
12937 offset = offset >>> 0
12938 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12939 this[offset] = (value >>> 8)
12940 this[offset + 1] = (value & 0xff)
12941 return offset + 2
12942 }
12943
12944 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12945 value = +value
12946 offset = offset >>> 0
12947 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12948 this[offset + 3] = (value >>> 24)
12949 this[offset + 2] = (value >>> 16)
12950 this[offset + 1] = (value >>> 8)
12951 this[offset] = (value & 0xff)
12952 return offset + 4
12953 }
12954
12955 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12956 value = +value
12957 offset = offset >>> 0
12958 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12959 this[offset] = (value >>> 24)
12960 this[offset + 1] = (value >>> 16)
12961 this[offset + 2] = (value >>> 8)
12962 this[offset + 3] = (value & 0xff)
12963 return offset + 4
12964 }
12965
12966 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12967 value = +value
12968 offset = offset >>> 0
12969 if (!noAssert) {
12970 var limit = Math.pow(2, (8 * byteLength) - 1)
12971
12972 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12973 }
12974
12975 var i = 0
12976 var mul = 1
12977 var sub = 0
12978 this[offset] = value & 0xFF
12979 while (++i < byteLength && (mul *= 0x100)) {
12980 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12981 sub = 1
12982 }
12983 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12984 }
12985
12986 return offset + byteLength
12987 }
12988
12989 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
12990 value = +value
12991 offset = offset >>> 0
12992 if (!noAssert) {
12993 var limit = Math.pow(2, (8 * byteLength) - 1)
12994
12995 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12996 }
12997
12998 var i = byteLength - 1
12999 var mul = 1
13000 var sub = 0
13001 this[offset + i] = value & 0xFF
13002 while (--i >= 0 && (mul *= 0x100)) {
13003 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
13004 sub = 1
13005 }
13006 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13007 }
13008
13009 return offset + byteLength
13010 }
13011
13012 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13013 value = +value
13014 offset = offset >>> 0
13015 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13016 if (value < 0) value = 0xff + value + 1
13017 this[offset] = (value & 0xff)
13018 return offset + 1
13019 }
13020
13021 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13022 value = +value
13023 offset = offset >>> 0
13024 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13025 this[offset] = (value & 0xff)
13026 this[offset + 1] = (value >>> 8)
13027 return offset + 2
13028 }
13029
13030 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13031 value = +value
13032 offset = offset >>> 0
13033 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13034 this[offset] = (value >>> 8)
13035 this[offset + 1] = (value & 0xff)
13036 return offset + 2
13037 }
13038
13039 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13040 value = +value
13041 offset = offset >>> 0
13042 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13043 this[offset] = (value & 0xff)
13044 this[offset + 1] = (value >>> 8)
13045 this[offset + 2] = (value >>> 16)
13046 this[offset + 3] = (value >>> 24)
13047 return offset + 4
13048 }
13049
13050 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13051 value = +value
13052 offset = offset >>> 0
13053 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13054 if (value < 0) value = 0xffffffff + value + 1
13055 this[offset] = (value >>> 24)
13056 this[offset + 1] = (value >>> 16)
13057 this[offset + 2] = (value >>> 8)
13058 this[offset + 3] = (value & 0xff)
13059 return offset + 4
13060 }
13061
13062 function checkIEEE754 (buf, value, offset, ext, max, min) {
13063 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13064 if (offset < 0) throw new RangeError('Index out of range')
13065 }
13066
13067 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13068 value = +value
13069 offset = offset >>> 0
13070 if (!noAssert) {
13071 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13072 }
13073 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13074 return offset + 4
13075 }
13076
13077 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13078 return writeFloat(this, value, offset, true, noAssert)
13079 }
13080
13081 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13082 return writeFloat(this, value, offset, false, noAssert)
13083 }
13084
13085 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13086 value = +value
13087 offset = offset >>> 0
13088 if (!noAssert) {
13089 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13090 }
13091 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13092 return offset + 8
13093 }
13094
13095 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13096 return writeDouble(this, value, offset, true, noAssert)
13097 }
13098
13099 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13100 return writeDouble(this, value, offset, false, noAssert)
13101 }
13102
13103 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13104 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13105 if (!start) start = 0
13106 if (!end && end !== 0) end = this.length
13107 if (targetStart >= target.length) targetStart = target.length
13108 if (!targetStart) targetStart = 0
13109 if (end > 0 && end < start) end = start
13110
13111 // Copy 0 bytes; we're done
13112 if (end === start) return 0
13113 if (target.length === 0 || this.length === 0) return 0
13114
13115 // Fatal error conditions
13116 if (targetStart < 0) {
13117 throw new RangeError('targetStart out of bounds')
13118 }
13119 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13120 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13121
13122 // Are we oob?
13123 if (end > this.length) end = this.length
13124 if (target.length - targetStart < end - start) {
13125 end = target.length - targetStart + start
13126 }
13127
13128 var len = end - start
13129 var i
13130
13131 if (this === target && start < targetStart && targetStart < end) {
13132 // descending copy from end
13133 for (i = len - 1; i >= 0; --i) {
13134 target[i + targetStart] = this[i + start]
13135 }
13136 } else if (len < 1000) {
13137 // ascending copy from start
13138 for (i = 0; i < len; ++i) {
13139 target[i + targetStart] = this[i + start]
13140 }
13141 } else {
13142 Uint8Array.prototype.set.call(
13143 target,
13144 this.subarray(start, start + len),
13145 targetStart
13146 )
13147 }
13148
13149 return len
13150 }
13151
13152 // Usage:
13153 // buffer.fill(number[, offset[, end]])
13154 // buffer.fill(buffer[, offset[, end]])
13155 // buffer.fill(string[, offset[, end]][, encoding])
13156 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13157 // Handle string cases:
13158 if (typeof val === 'string') {
13159 if (typeof start === 'string') {
13160 encoding = start
13161 start = 0
13162 end = this.length
13163 } else if (typeof end === 'string') {
13164 encoding = end
13165 end = this.length
13166 }
13167 if (val.length === 1) {
13168 var code = val.charCodeAt(0)
13169 if (code < 256) {
13170 val = code
13171 }
13172 }
13173 if (encoding !== undefined && typeof encoding !== 'string') {
13174 throw new TypeError('encoding must be a string')
13175 }
13176 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13177 throw new TypeError('Unknown encoding: ' + encoding)
13178 }
13179 } else if (typeof val === 'number') {
13180 val = val & 255
13181 }
13182
13183 // Invalid ranges are not set to a default, so can range check early.
13184 if (start < 0 || this.length < start || this.length < end) {
13185 throw new RangeError('Out of range index')
13186 }
13187
13188 if (end <= start) {
13189 return this
13190 }
13191
13192 start = start >>> 0
13193 end = end === undefined ? this.length : end >>> 0
13194
13195 if (!val) val = 0
13196
13197 var i
13198 if (typeof val === 'number') {
13199 for (i = start; i < end; ++i) {
13200 this[i] = val
13201 }
13202 } else {
13203 var bytes = Buffer.isBuffer(val)
13204 ? val
13205 : new Buffer(val, encoding)
13206 var len = bytes.length
13207 for (i = 0; i < end - start; ++i) {
13208 this[i + start] = bytes[i % len]
13209 }
13210 }
13211
13212 return this
13213 }
13214
13215 // HELPER FUNCTIONS
13216 // ================
13217
13218 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13219
13220 function base64clean (str) {
13221 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13222 str = str.trim().replace(INVALID_BASE64_RE, '')
13223 // Node converts strings with length < 2 to ''
13224 if (str.length < 2) return ''
13225 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13226 while (str.length % 4 !== 0) {
13227 str = str + '='
13228 }
13229 return str
13230 }
13231
13232 function toHex (n) {
13233 if (n < 16) return '0' + n.toString(16)
13234 return n.toString(16)
13235 }
13236
13237 function utf8ToBytes (string, units) {
13238 units = units || Infinity
13239 var codePoint
13240 var length = string.length
13241 var leadSurrogate = null
13242 var bytes = []
13243
13244 for (var i = 0; i < length; ++i) {
13245 codePoint = string.charCodeAt(i)
13246
13247 // is surrogate component
13248 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13249 // last char was a lead
13250 if (!leadSurrogate) {
13251 // no lead yet
13252 if (codePoint > 0xDBFF) {
13253 // unexpected trail
13254 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13255 continue
13256 } else if (i + 1 === length) {
13257 // unpaired lead
13258 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13259 continue
13260 }
13261
13262 // valid lead
13263 leadSurrogate = codePoint
13264
13265 continue
13266 }
13267
13268 // 2 leads in a row
13269 if (codePoint < 0xDC00) {
13270 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13271 leadSurrogate = codePoint
13272 continue
13273 }
13274
13275 // valid surrogate pair
13276 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13277 } else if (leadSurrogate) {
13278 // valid bmp char, but last char was a lead
13279 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13280 }
13281
13282 leadSurrogate = null
13283
13284 // encode utf8
13285 if (codePoint < 0x80) {
13286 if ((units -= 1) < 0) break
13287 bytes.push(codePoint)
13288 } else if (codePoint < 0x800) {
13289 if ((units -= 2) < 0) break
13290 bytes.push(
13291 codePoint >> 0x6 | 0xC0,
13292 codePoint & 0x3F | 0x80
13293 )
13294 } else if (codePoint < 0x10000) {
13295 if ((units -= 3) < 0) break
13296 bytes.push(
13297 codePoint >> 0xC | 0xE0,
13298 codePoint >> 0x6 & 0x3F | 0x80,
13299 codePoint & 0x3F | 0x80
13300 )
13301 } else if (codePoint < 0x110000) {
13302 if ((units -= 4) < 0) break
13303 bytes.push(
13304 codePoint >> 0x12 | 0xF0,
13305 codePoint >> 0xC & 0x3F | 0x80,
13306 codePoint >> 0x6 & 0x3F | 0x80,
13307 codePoint & 0x3F | 0x80
13308 )
13309 } else {
13310 throw new Error('Invalid code point')
13311 }
13312 }
13313
13314 return bytes
13315 }
13316
13317 function asciiToBytes (str) {
13318 var byteArray = []
13319 for (var i = 0; i < str.length; ++i) {
13320 // Node's code seems to be doing this and not & 0x7F..
13321 byteArray.push(str.charCodeAt(i) & 0xFF)
13322 }
13323 return byteArray
13324 }
13325
13326 function utf16leToBytes (str, units) {
13327 var c, hi, lo
13328 var byteArray = []
13329 for (var i = 0; i < str.length; ++i) {
13330 if ((units -= 2) < 0) break
13331
13332 c = str.charCodeAt(i)
13333 hi = c >> 8
13334 lo = c % 256
13335 byteArray.push(lo)
13336 byteArray.push(hi)
13337 }
13338
13339 return byteArray
13340 }
13341
13342 function base64ToBytes (str) {
13343 return base64.toByteArray(base64clean(str))
13344 }
13345
13346 function blitBuffer (src, dst, offset, length) {
13347 for (var i = 0; i < length; ++i) {
13348 if ((i + offset >= dst.length) || (i >= src.length)) break
13349 dst[i + offset] = src[i]
13350 }
13351 return i
13352 }
13353
13354 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13355 function isArrayBufferView (obj) {
13356 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13357 }
13358
13359 function numberIsNaN (obj) {
13360 return obj !== obj // eslint-disable-line no-self-compare
13361 }
13362
13363 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13364 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13365 var e, m
13366 var eLen = nBytes * 8 - mLen - 1
13367 var eMax = (1 << eLen) - 1
13368 var eBias = eMax >> 1
13369 var nBits = -7
13370 var i = isLE ? (nBytes - 1) : 0
13371 var d = isLE ? -1 : 1
13372 var s = buffer[offset + i]
13373
13374 i += d
13375
13376 e = s & ((1 << (-nBits)) - 1)
13377 s >>= (-nBits)
13378 nBits += eLen
13379 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13380
13381 m = e & ((1 << (-nBits)) - 1)
13382 e >>= (-nBits)
13383 nBits += mLen
13384 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13385
13386 if (e === 0) {
13387 e = 1 - eBias
13388 } else if (e === eMax) {
13389 return m ? NaN : ((s ? -1 : 1) * Infinity)
13390 } else {
13391 m = m + Math.pow(2, mLen)
13392 e = e - eBias
13393 }
13394 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13395 }
13396
13397 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13398 var e, m, c
13399 var eLen = nBytes * 8 - mLen - 1
13400 var eMax = (1 << eLen) - 1
13401 var eBias = eMax >> 1
13402 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13403 var i = isLE ? 0 : (nBytes - 1)
13404 var d = isLE ? 1 : -1
13405 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13406
13407 value = Math.abs(value)
13408
13409 if (isNaN(value) || value === Infinity) {
13410 m = isNaN(value) ? 1 : 0
13411 e = eMax
13412 } else {
13413 e = Math.floor(Math.log(value) / Math.LN2)
13414 if (value * (c = Math.pow(2, -e)) < 1) {
13415 e--
13416 c *= 2
13417 }
13418 if (e + eBias >= 1) {
13419 value += rt / c
13420 } else {
13421 value += rt * Math.pow(2, 1 - eBias)
13422 }
13423 if (value * c >= 2) {
13424 e++
13425 c /= 2
13426 }
13427
13428 if (e + eBias >= eMax) {
13429 m = 0
13430 e = eMax
13431 } else if (e + eBias >= 1) {
13432 m = (value * c - 1) * Math.pow(2, mLen)
13433 e = e + eBias
13434 } else {
13435 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13436 e = 0
13437 }
13438 }
13439
13440 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13441
13442 e = (e << mLen) | m
13443 eLen += mLen
13444 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13445
13446 buffer[offset + i - d] |= s * 128
13447 }
13448
13449 },{}],4:[function(require,module,exports){
13450 window.basex = require('base-x')
13451 },{"base-x":5}],5:[function(require,module,exports){
13452 // base-x encoding
13453 // Forked from https://github.com/cryptocoinjs/bs58
13454 // Originally written by Mike Hearn for BitcoinJ
13455 // Copyright (c) 2011 Google Inc
13456 // Ported to JavaScript by Stefan Thomas
13457 // Merged Buffer refactorings from base58-native by Stephen Pair
13458 // Copyright (c) 2013 BitPay Inc
13459
13460 var Buffer = require('safe-buffer').Buffer
13461
13462 module.exports = function base (ALPHABET) {
13463 var ALPHABET_MAP = {}
13464 var BASE = ALPHABET.length
13465 var LEADER = ALPHABET.charAt(0)
13466
13467 // pre-compute lookup table
13468 for (var z = 0; z < ALPHABET.length; z++) {
13469 var x = ALPHABET.charAt(z)
13470
13471 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13472 ALPHABET_MAP[x] = z
13473 }
13474
13475 function encode (source) {
13476 if (source.length === 0) return ''
13477
13478 var digits = [0]
13479 for (var i = 0; i < source.length; ++i) {
13480 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13481 carry += digits[j] << 8
13482 digits[j] = carry % BASE
13483 carry = (carry / BASE) | 0
13484 }
13485
13486 while (carry > 0) {
13487 digits.push(carry % BASE)
13488 carry = (carry / BASE) | 0
13489 }
13490 }
13491
13492 var string = ''
13493
13494 // deal with leading zeros
13495 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13496 // convert digits to a string
13497 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13498
13499 return string
13500 }
13501
13502 function decodeUnsafe (string) {
13503 if (string.length === 0) return Buffer.allocUnsafe(0)
13504
13505 var bytes = [0]
13506 for (var i = 0; i < string.length; i++) {
13507 var value = ALPHABET_MAP[string[i]]
13508 if (value === undefined) return
13509
13510 for (var j = 0, carry = value; j < bytes.length; ++j) {
13511 carry += bytes[j] * BASE
13512 bytes[j] = carry & 0xff
13513 carry >>= 8
13514 }
13515
13516 while (carry > 0) {
13517 bytes.push(carry & 0xff)
13518 carry >>= 8
13519 }
13520 }
13521
13522 // deal with leading zeros
13523 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13524 bytes.push(0)
13525 }
13526
13527 return Buffer.from(bytes.reverse())
13528 }
13529
13530 function decode (string) {
13531 var buffer = decodeUnsafe(string)
13532 if (buffer) return buffer
13533
13534 throw new Error('Non-base' + BASE + ' character')
13535 }
13536
13537 return {
13538 encode: encode,
13539 decodeUnsafe: decodeUnsafe,
13540 decode: decode
13541 }
13542 }
13543
13544 },{"safe-buffer":6}],6:[function(require,module,exports){
13545 module.exports = require('buffer')
13546
13547 },{"buffer":2}]},{},[4])(4)
13548 });</script>
13549 <script>// Polyfill for NFKD normalization
13550 // See https://github.com/walling/unorm
13551
13552 (function (root) {
13553 "use strict";
13554
13555 /***** unorm.js *****/
13556
13557 /*
13558 * UnicodeNormalizer 1.0.0
13559 * Copyright (c) 2008 Matsuza
13560 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13561 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13562 * $Rev: 13309 $
13563 */
13564
13565 var DEFAULT_FEATURE = [null, 0, {}];
13566 var CACHE_THRESHOLD = 10;
13567 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13568 var NCount = VCount * TCount; // 588
13569 var SCount = LCount * NCount; // 11172
13570
13571 var UChar = function(cp, feature){
13572 this.codepoint = cp;
13573 this.feature = feature;
13574 };
13575
13576 // Strategies
13577 var cache = {};
13578 var cacheCounter = [];
13579 for (var i = 0; i <= 0xFF; ++i){
13580 cacheCounter[i] = 0;
13581 }
13582
13583 function fromCache(next, cp, needFeature){
13584 var ret = cache[cp];
13585 if(!ret){
13586 ret = next(cp, needFeature);
13587 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13588 cache[cp] = ret;
13589 }
13590 }
13591 return ret;
13592 }
13593
13594 function fromData(next, cp, needFeature){
13595 var hash = cp & 0xFF00;
13596 var dunit = UChar.udata[hash] || {};
13597 var f = dunit[cp];
13598 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13599 }
13600 function fromCpOnly(next, cp, needFeature){
13601 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13602 }
13603 function fromRuleBasedJamo(next, cp, needFeature){
13604 var j;
13605 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13606 return next(cp, needFeature);
13607 }
13608 if(LBase <= cp && cp < LBase + LCount){
13609 var c = {};
13610 var base = (cp - LBase) * VCount;
13611 for (j = 0; j < VCount; ++j){
13612 c[VBase + j] = SBase + TCount * (j + base);
13613 }
13614 return new UChar(cp, [,,c]);
13615 }
13616
13617 var SIndex = cp - SBase;
13618 var TIndex = SIndex % TCount;
13619 var feature = [];
13620 if(TIndex !== 0){
13621 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13622 } else {
13623 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13624 feature[2] = {};
13625 for (j = 1; j < TCount; ++j){
13626 feature[2][TBase + j] = cp + j;
13627 }
13628 }
13629 return new UChar(cp, feature);
13630 }
13631 function fromCpFilter(next, cp, needFeature){
13632 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13633 }
13634
13635 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13636
13637 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13638 return function (cp, needFeature) {
13639 return strategy(next, cp, needFeature);
13640 };
13641 }, null);
13642
13643 UChar.isHighSurrogate = function(cp){
13644 return cp >= 0xD800 && cp <= 0xDBFF;
13645 };
13646 UChar.isLowSurrogate = function(cp){
13647 return cp >= 0xDC00 && cp <= 0xDFFF;
13648 };
13649
13650 UChar.prototype.prepFeature = function(){
13651 if(!this.feature){
13652 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13653 }
13654 };
13655
13656 UChar.prototype.toString = function(){
13657 if(this.codepoint < 0x10000){
13658 return String.fromCharCode(this.codepoint);
13659 } else {
13660 var x = this.codepoint - 0x10000;
13661 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13662 }
13663 };
13664
13665 UChar.prototype.getDecomp = function(){
13666 this.prepFeature();
13667 return this.feature[0] || null;
13668 };
13669
13670 UChar.prototype.isCompatibility = function(){
13671 this.prepFeature();
13672 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13673 };
13674 UChar.prototype.isExclude = function(){
13675 this.prepFeature();
13676 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13677 };
13678 UChar.prototype.getCanonicalClass = function(){
13679 this.prepFeature();
13680 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13681 };
13682 UChar.prototype.getComposite = function(following){
13683 this.prepFeature();
13684 if(!this.feature[2]){
13685 return null;
13686 }
13687 var cp = this.feature[2][following.codepoint];
13688 return cp ? UChar.fromCharCode(cp) : null;
13689 };
13690
13691 var UCharIterator = function(str){
13692 this.str = str;
13693 this.cursor = 0;
13694 };
13695 UCharIterator.prototype.next = function(){
13696 if(!!this.str && this.cursor < this.str.length){
13697 var cp = this.str.charCodeAt(this.cursor++);
13698 var d;
13699 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13700 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13701 ++this.cursor;
13702 }
13703 return UChar.fromCharCode(cp);
13704 } else {
13705 this.str = null;
13706 return null;
13707 }
13708 };
13709
13710 var RecursDecompIterator = function(it, cano){
13711 this.it = it;
13712 this.canonical = cano;
13713 this.resBuf = [];
13714 };
13715
13716 RecursDecompIterator.prototype.next = function(){
13717 function recursiveDecomp(cano, uchar){
13718 var decomp = uchar.getDecomp();
13719 if(!!decomp && !(cano && uchar.isCompatibility())){
13720 var ret = [];
13721 for(var i = 0; i < decomp.length; ++i){
13722 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13723 ret = ret.concat(a);
13724 }
13725 return ret;
13726 } else {
13727 return [uchar];
13728 }
13729 }
13730 if(this.resBuf.length === 0){
13731 var uchar = this.it.next();
13732 if(!uchar){
13733 return null;
13734 }
13735 this.resBuf = recursiveDecomp(this.canonical, uchar);
13736 }
13737 return this.resBuf.shift();
13738 };
13739
13740 var DecompIterator = function(it){
13741 this.it = it;
13742 this.resBuf = [];
13743 };
13744
13745 DecompIterator.prototype.next = function(){
13746 var cc;
13747 if(this.resBuf.length === 0){
13748 do{
13749 var uchar = this.it.next();
13750 if(!uchar){
13751 break;
13752 }
13753 cc = uchar.getCanonicalClass();
13754 var inspt = this.resBuf.length;
13755 if(cc !== 0){
13756 for(; inspt > 0; --inspt){
13757 var uchar2 = this.resBuf[inspt - 1];
13758 var cc2 = uchar2.getCanonicalClass();
13759 if(cc2 <= cc){
13760 break;
13761 }
13762 }
13763 }
13764 this.resBuf.splice(inspt, 0, uchar);
13765 } while(cc !== 0);
13766 }
13767 return this.resBuf.shift();
13768 };
13769
13770 var CompIterator = function(it){
13771 this.it = it;
13772 this.procBuf = [];
13773 this.resBuf = [];
13774 this.lastClass = null;
13775 };
13776
13777 CompIterator.prototype.next = function(){
13778 while(this.resBuf.length === 0){
13779 var uchar = this.it.next();
13780 if(!uchar){
13781 this.resBuf = this.procBuf;
13782 this.procBuf = [];
13783 break;
13784 }
13785 if(this.procBuf.length === 0){
13786 this.lastClass = uchar.getCanonicalClass();
13787 this.procBuf.push(uchar);
13788 } else {
13789 var starter = this.procBuf[0];
13790 var composite = starter.getComposite(uchar);
13791 var cc = uchar.getCanonicalClass();
13792 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13793 this.procBuf[0] = composite;
13794 } else {
13795 if(cc === 0){
13796 this.resBuf = this.procBuf;
13797 this.procBuf = [];
13798 }
13799 this.lastClass = cc;
13800 this.procBuf.push(uchar);
13801 }
13802 }
13803 }
13804 return this.resBuf.shift();
13805 };
13806
13807 var createIterator = function(mode, str){
13808 switch(mode){
13809 case "NFD":
13810 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13811 case "NFKD":
13812 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13813 case "NFC":
13814 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13815 case "NFKC":
13816 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13817 }
13818 throw mode + " is invalid";
13819 };
13820 var normalize = function(mode, str){
13821 var it = createIterator(mode, str);
13822 var ret = "";
13823 var uchar;
13824 while(!!(uchar = it.next())){
13825 ret += uchar.toString();
13826 }
13827 return ret;
13828 };
13829
13830 /* API functions */
13831 function nfd(str){
13832 return normalize("NFD", str);
13833 }
13834
13835 function nfkd(str){
13836 return normalize("NFKD", str);
13837 }
13838
13839 function nfc(str){
13840 return normalize("NFC", str);
13841 }
13842
13843 function nfkc(str){
13844 return normalize("NFKC", str);
13845 }
13846
13847 /* Unicode data */
13848 UChar.udata={
13849 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]]},
13850 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]},
13851 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]},
13852 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]},
13853 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]]},
13854 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]},
13855 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]},
13856 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]},
13857 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]},
13858 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]},
13859 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]},
13860 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]},
13861 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]},
13862 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]]},
13863 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]},
13864 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]},
13865 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]},
13866 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]},
13867 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13868 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]},
13869 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13870 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13871 5632:{71231:[,9],71350:[,9],71351:[,7]},
13872 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13873 6144:{6313:[,228]},
13874 6400:{6457:[,222],6458:[,230],6459:[,220]},
13875 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]},
13876 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]},
13877 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]},
13878 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]},
13879 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]]},
13880 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}]},
13881 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]},
13882 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}]},
13883 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]]},
13884 8960:{9001:[[12296]],9002:[[12297]]},
13885 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]},
13886 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]},
13887 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13888 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]},
13889 11776:{11935:[[27597],256],12019:[[40863],256]},
13890 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]},
13891 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]},
13892 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]},
13893 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]},
13894 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]},
13895 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13896 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13897 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]},
13898 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13899 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]},
13900 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13901 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13902 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13903 48128:{113822:[,1]},
13904 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]},
13905 53760:{119362:[,230],119363:[,230],119364:[,230]},
13906 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]},
13907 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]},
13908 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]},
13909 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]},
13910 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13911 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]},
13912 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]},
13913 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]},
13914 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]]},
13915 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]]},
13916 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]]},
13917 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]},
13918 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]},
13919 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]},
13920 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]},
13921 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]}
13922
13923 };
13924
13925 /***** Module to export */
13926 var unorm = {
13927 nfc: nfc,
13928 nfd: nfd,
13929 nfkc: nfkc,
13930 nfkd: nfkd
13931 };
13932
13933 /*globals module:true,define:true*/
13934
13935 // CommonJS
13936 if (typeof module === "object") {
13937 module.exports = unorm;
13938
13939 // AMD
13940 } else if (typeof define === "function" && define.amd) {
13941 define("unorm", function () {
13942 return unorm;
13943 });
13944
13945 // Global
13946 } else {
13947 root.unorm = unorm;
13948 }
13949
13950 /***** Export as shim for String::normalize method *****/
13951 /*
13952 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13953
13954 21.1.3.12 String.prototype.normalize(form="NFC")
13955 When the normalize method is called with one argument form, the following steps are taken:
13956
13957 1. Let O be CheckObjectCoercible(this value).
13958 2. Let S be ToString(O).
13959 3. ReturnIfAbrupt(S).
13960 4. If form is not provided or undefined let form be "NFC".
13961 5. Let f be ToString(form).
13962 6. ReturnIfAbrupt(f).
13963 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13964 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.
13965 9. Return ns.
13966
13967 The length property of the normalize method is 0.
13968
13969 *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.
13970 */
13971 unorm.shimApplied = false;
13972
13973 if (!String.prototype.normalize) {
13974 String.prototype.normalize = function(form) {
13975 var str = "" + this;
13976 form = form === undefined ? "NFC" : form;
13977
13978 if (form === "NFC") {
13979 return unorm.nfc(str);
13980 } else if (form === "NFD") {
13981 return unorm.nfd(str);
13982 } else if (form === "NFKC") {
13983 return unorm.nfkc(str);
13984 } else if (form === "NFKD") {
13985 return unorm.nfkd(str);
13986 } else {
13987 throw new RangeError("Invalid normalization form: " + form);
13988 }
13989 };
13990
13991 unorm.shimApplied = true;
13992 }
13993 }(this));
13994 </script>
13995 <script>/*!
13996 * jQuery JavaScript Library v3.2.1
13997 * https://jquery.com/
13998 *
13999 * Includes Sizzle.js
14000 * https://sizzlejs.com/
14001 *
14002 * Copyright JS Foundation and other contributors
14003 * Released under the MIT license
14004 * https://jquery.org/license
14005 *
14006 * Date: 2017-03-20T18:59Z
14007 */
14008 ( function( global, factory ) {
14009
14010 "use strict";
14011
14012 if ( typeof module === "object" && typeof module.exports === "object" ) {
14013
14014 // For CommonJS and CommonJS-like environments where a proper `window`
14015 // is present, execute the factory and get jQuery.
14016 // For environments that do not have a `window` with a `document`
14017 // (such as Node.js), expose a factory as module.exports.
14018 // This accentuates the need for the creation of a real `window`.
14019 // e.g. var jQuery = require("jquery")(window);
14020 // See ticket #14549 for more info.
14021 module.exports = global.document ?
14022 factory( global, true ) :
14023 function( w ) {
14024 if ( !w.document ) {
14025 throw new Error( "jQuery requires a window with a document" );
14026 }
14027 return factory( w );
14028 };
14029 } else {
14030 factory( global );
14031 }
14032
14033 // Pass this if window is not defined yet
14034 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14035
14036 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14037 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14038 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14039 // enough that all such attempts are guarded in a try block.
14040 "use strict";
14041
14042 var arr = [];
14043
14044 var document = window.document;
14045
14046 var getProto = Object.getPrototypeOf;
14047
14048 var slice = arr.slice;
14049
14050 var concat = arr.concat;
14051
14052 var push = arr.push;
14053
14054 var indexOf = arr.indexOf;
14055
14056 var class2type = {};
14057
14058 var toString = class2type.toString;
14059
14060 var hasOwn = class2type.hasOwnProperty;
14061
14062 var fnToString = hasOwn.toString;
14063
14064 var ObjectFunctionString = fnToString.call( Object );
14065
14066 var support = {};
14067
14068
14069
14070 function DOMEval( code, doc ) {
14071 doc = doc || document;
14072
14073 var script = doc.createElement( "script" );
14074
14075 script.text = code;
14076 doc.head.appendChild( script ).parentNode.removeChild( script );
14077 }
14078 /* global Symbol */
14079 // Defining this global in .eslintrc.json would create a danger of using the global
14080 // unguarded in another place, it seems safer to define global only for this module
14081
14082
14083
14084 var
14085 version = "3.2.1",
14086
14087 // Define a local copy of jQuery
14088 jQuery = function( selector, context ) {
14089
14090 // The jQuery object is actually just the init constructor 'enhanced'
14091 // Need init if jQuery is called (just allow error to be thrown if not included)
14092 return new jQuery.fn.init( selector, context );
14093 },
14094
14095 // Support: Android <=4.0 only
14096 // Make sure we trim BOM and NBSP
14097 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14098
14099 // Matches dashed string for camelizing
14100 rmsPrefix = /^-ms-/,
14101 rdashAlpha = /-([a-z])/g,
14102
14103 // Used by jQuery.camelCase as callback to replace()
14104 fcamelCase = function( all, letter ) {
14105 return letter.toUpperCase();
14106 };
14107
14108 jQuery.fn = jQuery.prototype = {
14109
14110 // The current version of jQuery being used
14111 jquery: version,
14112
14113 constructor: jQuery,
14114
14115 // The default length of a jQuery object is 0
14116 length: 0,
14117
14118 toArray: function() {
14119 return slice.call( this );
14120 },
14121
14122 // Get the Nth element in the matched element set OR
14123 // Get the whole matched element set as a clean array
14124 get: function( num ) {
14125
14126 // Return all the elements in a clean array
14127 if ( num == null ) {
14128 return slice.call( this );
14129 }
14130
14131 // Return just the one element from the set
14132 return num < 0 ? this[ num + this.length ] : this[ num ];
14133 },
14134
14135 // Take an array of elements and push it onto the stack
14136 // (returning the new matched element set)
14137 pushStack: function( elems ) {
14138
14139 // Build a new jQuery matched element set
14140 var ret = jQuery.merge( this.constructor(), elems );
14141
14142 // Add the old object onto the stack (as a reference)
14143 ret.prevObject = this;
14144
14145 // Return the newly-formed element set
14146 return ret;
14147 },
14148
14149 // Execute a callback for every element in the matched set.
14150 each: function( callback ) {
14151 return jQuery.each( this, callback );
14152 },
14153
14154 map: function( callback ) {
14155 return this.pushStack( jQuery.map( this, function( elem, i ) {
14156 return callback.call( elem, i, elem );
14157 } ) );
14158 },
14159
14160 slice: function() {
14161 return this.pushStack( slice.apply( this, arguments ) );
14162 },
14163
14164 first: function() {
14165 return this.eq( 0 );
14166 },
14167
14168 last: function() {
14169 return this.eq( -1 );
14170 },
14171
14172 eq: function( i ) {
14173 var len = this.length,
14174 j = +i + ( i < 0 ? len : 0 );
14175 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14176 },
14177
14178 end: function() {
14179 return this.prevObject || this.constructor();
14180 },
14181
14182 // For internal use only.
14183 // Behaves like an Array's method, not like a jQuery method.
14184 push: push,
14185 sort: arr.sort,
14186 splice: arr.splice
14187 };
14188
14189 jQuery.extend = jQuery.fn.extend = function() {
14190 var options, name, src, copy, copyIsArray, clone,
14191 target = arguments[ 0 ] || {},
14192 i = 1,
14193 length = arguments.length,
14194 deep = false;
14195
14196 // Handle a deep copy situation
14197 if ( typeof target === "boolean" ) {
14198 deep = target;
14199
14200 // Skip the boolean and the target
14201 target = arguments[ i ] || {};
14202 i++;
14203 }
14204
14205 // Handle case when target is a string or something (possible in deep copy)
14206 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14207 target = {};
14208 }
14209
14210 // Extend jQuery itself if only one argument is passed
14211 if ( i === length ) {
14212 target = this;
14213 i--;
14214 }
14215
14216 for ( ; i < length; i++ ) {
14217
14218 // Only deal with non-null/undefined values
14219 if ( ( options = arguments[ i ] ) != null ) {
14220
14221 // Extend the base object
14222 for ( name in options ) {
14223 src = target[ name ];
14224 copy = options[ name ];
14225
14226 // Prevent never-ending loop
14227 if ( target === copy ) {
14228 continue;
14229 }
14230
14231 // Recurse if we're merging plain objects or arrays
14232 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14233 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14234
14235 if ( copyIsArray ) {
14236 copyIsArray = false;
14237 clone = src && Array.isArray( src ) ? src : [];
14238
14239 } else {
14240 clone = src && jQuery.isPlainObject( src ) ? src : {};
14241 }
14242
14243 // Never move original objects, clone them
14244 target[ name ] = jQuery.extend( deep, clone, copy );
14245
14246 // Don't bring in undefined values
14247 } else if ( copy !== undefined ) {
14248 target[ name ] = copy;
14249 }
14250 }
14251 }
14252 }
14253
14254 // Return the modified object
14255 return target;
14256 };
14257
14258 jQuery.extend( {
14259
14260 // Unique for each copy of jQuery on the page
14261 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14262
14263 // Assume jQuery is ready without the ready module
14264 isReady: true,
14265
14266 error: function( msg ) {
14267 throw new Error( msg );
14268 },
14269
14270 noop: function() {},
14271
14272 isFunction: function( obj ) {
14273 return jQuery.type( obj ) === "function";
14274 },
14275
14276 isWindow: function( obj ) {
14277 return obj != null && obj === obj.window;
14278 },
14279
14280 isNumeric: function( obj ) {
14281
14282 // As of jQuery 3.0, isNumeric is limited to
14283 // strings and numbers (primitives or objects)
14284 // that can be coerced to finite numbers (gh-2662)
14285 var type = jQuery.type( obj );
14286 return ( type === "number" || type === "string" ) &&
14287
14288 // parseFloat NaNs numeric-cast false positives ("")
14289 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14290 // subtraction forces infinities to NaN
14291 !isNaN( obj - parseFloat( obj ) );
14292 },
14293
14294 isPlainObject: function( obj ) {
14295 var proto, Ctor;
14296
14297 // Detect obvious negatives
14298 // Use toString instead of jQuery.type to catch host objects
14299 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14300 return false;
14301 }
14302
14303 proto = getProto( obj );
14304
14305 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14306 if ( !proto ) {
14307 return true;
14308 }
14309
14310 // Objects with prototype are plain iff they were constructed by a global Object function
14311 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14312 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14313 },
14314
14315 isEmptyObject: function( obj ) {
14316
14317 /* eslint-disable no-unused-vars */
14318 // See https://github.com/eslint/eslint/issues/6125
14319 var name;
14320
14321 for ( name in obj ) {
14322 return false;
14323 }
14324 return true;
14325 },
14326
14327 type: function( obj ) {
14328 if ( obj == null ) {
14329 return obj + "";
14330 }
14331
14332 // Support: Android <=2.3 only (functionish RegExp)
14333 return typeof obj === "object" || typeof obj === "function" ?
14334 class2type[ toString.call( obj ) ] || "object" :
14335 typeof obj;
14336 },
14337
14338 // Evaluates a script in a global context
14339 globalEval: function( code ) {
14340 DOMEval( code );
14341 },
14342
14343 // Convert dashed to camelCase; used by the css and data modules
14344 // Support: IE <=9 - 11, Edge 12 - 13
14345 // Microsoft forgot to hump their vendor prefix (#9572)
14346 camelCase: function( string ) {
14347 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14348 },
14349
14350 each: function( obj, callback ) {
14351 var length, i = 0;
14352
14353 if ( isArrayLike( obj ) ) {
14354 length = obj.length;
14355 for ( ; i < length; i++ ) {
14356 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14357 break;
14358 }
14359 }
14360 } else {
14361 for ( i in obj ) {
14362 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14363 break;
14364 }
14365 }
14366 }
14367
14368 return obj;
14369 },
14370
14371 // Support: Android <=4.0 only
14372 trim: function( text ) {
14373 return text == null ?
14374 "" :
14375 ( text + "" ).replace( rtrim, "" );
14376 },
14377
14378 // results is for internal usage only
14379 makeArray: function( arr, results ) {
14380 var ret = results || [];
14381
14382 if ( arr != null ) {
14383 if ( isArrayLike( Object( arr ) ) ) {
14384 jQuery.merge( ret,
14385 typeof arr === "string" ?
14386 [ arr ] : arr
14387 );
14388 } else {
14389 push.call( ret, arr );
14390 }
14391 }
14392
14393 return ret;
14394 },
14395
14396 inArray: function( elem, arr, i ) {
14397 return arr == null ? -1 : indexOf.call( arr, elem, i );
14398 },
14399
14400 // Support: Android <=4.0 only, PhantomJS 1 only
14401 // push.apply(_, arraylike) throws on ancient WebKit
14402 merge: function( first, second ) {
14403 var len = +second.length,
14404 j = 0,
14405 i = first.length;
14406
14407 for ( ; j < len; j++ ) {
14408 first[ i++ ] = second[ j ];
14409 }
14410
14411 first.length = i;
14412
14413 return first;
14414 },
14415
14416 grep: function( elems, callback, invert ) {
14417 var callbackInverse,
14418 matches = [],
14419 i = 0,
14420 length = elems.length,
14421 callbackExpect = !invert;
14422
14423 // Go through the array, only saving the items
14424 // that pass the validator function
14425 for ( ; i < length; i++ ) {
14426 callbackInverse = !callback( elems[ i ], i );
14427 if ( callbackInverse !== callbackExpect ) {
14428 matches.push( elems[ i ] );
14429 }
14430 }
14431
14432 return matches;
14433 },
14434
14435 // arg is for internal usage only
14436 map: function( elems, callback, arg ) {
14437 var length, value,
14438 i = 0,
14439 ret = [];
14440
14441 // Go through the array, translating each of the items to their new values
14442 if ( isArrayLike( elems ) ) {
14443 length = elems.length;
14444 for ( ; i < length; i++ ) {
14445 value = callback( elems[ i ], i, arg );
14446
14447 if ( value != null ) {
14448 ret.push( value );
14449 }
14450 }
14451
14452 // Go through every key on the object,
14453 } else {
14454 for ( i in elems ) {
14455 value = callback( elems[ i ], i, arg );
14456
14457 if ( value != null ) {
14458 ret.push( value );
14459 }
14460 }
14461 }
14462
14463 // Flatten any nested arrays
14464 return concat.apply( [], ret );
14465 },
14466
14467 // A global GUID counter for objects
14468 guid: 1,
14469
14470 // Bind a function to a context, optionally partially applying any
14471 // arguments.
14472 proxy: function( fn, context ) {
14473 var tmp, args, proxy;
14474
14475 if ( typeof context === "string" ) {
14476 tmp = fn[ context ];
14477 context = fn;
14478 fn = tmp;
14479 }
14480
14481 // Quick check to determine if target is callable, in the spec
14482 // this throws a TypeError, but we will just return undefined.
14483 if ( !jQuery.isFunction( fn ) ) {
14484 return undefined;
14485 }
14486
14487 // Simulated bind
14488 args = slice.call( arguments, 2 );
14489 proxy = function() {
14490 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14491 };
14492
14493 // Set the guid of unique handler to the same of original handler, so it can be removed
14494 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14495
14496 return proxy;
14497 },
14498
14499 now: Date.now,
14500
14501 // jQuery.support is not used in Core but other projects attach their
14502 // properties to it so it needs to exist.
14503 support: support
14504 } );
14505
14506 if ( typeof Symbol === "function" ) {
14507 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14508 }
14509
14510 // Populate the class2type map
14511 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14512 function( i, name ) {
14513 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14514 } );
14515
14516 function isArrayLike( obj ) {
14517
14518 // Support: real iOS 8.2 only (not reproducible in simulator)
14519 // `in` check used to prevent JIT error (gh-2145)
14520 // hasOwn isn't used here due to false negatives
14521 // regarding Nodelist length in IE
14522 var length = !!obj && "length" in obj && obj.length,
14523 type = jQuery.type( obj );
14524
14525 if ( type === "function" || jQuery.isWindow( obj ) ) {
14526 return false;
14527 }
14528
14529 return type === "array" || length === 0 ||
14530 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14531 }
14532 var Sizzle =
14533 /*!
14534 * Sizzle CSS Selector Engine v2.3.3
14535 * https://sizzlejs.com/
14536 *
14537 * Copyright jQuery Foundation and other contributors
14538 * Released under the MIT license
14539 * http://jquery.org/license
14540 *
14541 * Date: 2016-08-08
14542 */
14543 (function( window ) {
14544
14545 var i,
14546 support,
14547 Expr,
14548 getText,
14549 isXML,
14550 tokenize,
14551 compile,
14552 select,
14553 outermostContext,
14554 sortInput,
14555 hasDuplicate,
14556
14557 // Local document vars
14558 setDocument,
14559 document,
14560 docElem,
14561 documentIsHTML,
14562 rbuggyQSA,
14563 rbuggyMatches,
14564 matches,
14565 contains,
14566
14567 // Instance-specific data
14568 expando = "sizzle" + 1 * new Date(),
14569 preferredDoc = window.document,
14570 dirruns = 0,
14571 done = 0,
14572 classCache = createCache(),
14573 tokenCache = createCache(),
14574 compilerCache = createCache(),
14575 sortOrder = function( a, b ) {
14576 if ( a === b ) {
14577 hasDuplicate = true;
14578 }
14579 return 0;
14580 },
14581
14582 // Instance methods
14583 hasOwn = ({}).hasOwnProperty,
14584 arr = [],
14585 pop = arr.pop,
14586 push_native = arr.push,
14587 push = arr.push,
14588 slice = arr.slice,
14589 // Use a stripped-down indexOf as it's faster than native
14590 // https://jsperf.com/thor-indexof-vs-for/5
14591 indexOf = function( list, elem ) {
14592 var i = 0,
14593 len = list.length;
14594 for ( ; i < len; i++ ) {
14595 if ( list[i] === elem ) {
14596 return i;
14597 }
14598 }
14599 return -1;
14600 },
14601
14602 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14603
14604 // Regular expressions
14605
14606 // http://www.w3.org/TR/css3-selectors/#whitespace
14607 whitespace = "[\\x20\\t\\r\\n\\f]",
14608
14609 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14610 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14611
14612 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14613 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14614 // Operator (capture 2)
14615 "*([*^$|!~]?=)" + whitespace +
14616 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14617 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14618 "*\\]",
14619
14620 pseudos = ":(" + identifier + ")(?:\\((" +
14621 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14622 // 1. quoted (capture 3; capture 4 or capture 5)
14623 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14624 // 2. simple (capture 6)
14625 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14626 // 3. anything else (capture 2)
14627 ".*" +
14628 ")\\)|)",
14629
14630 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14631 rwhitespace = new RegExp( whitespace + "+", "g" ),
14632 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14633
14634 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14635 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14636
14637 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14638
14639 rpseudo = new RegExp( pseudos ),
14640 ridentifier = new RegExp( "^" + identifier + "$" ),
14641
14642 matchExpr = {
14643 "ID": new RegExp( "^#(" + identifier + ")" ),
14644 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14645 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14646 "ATTR": new RegExp( "^" + attributes ),
14647 "PSEUDO": new RegExp( "^" + pseudos ),
14648 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14649 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14650 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14651 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14652 // For use in libraries implementing .is()
14653 // We use this for POS matching in `select`
14654 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14655 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14656 },
14657
14658 rinputs = /^(?:input|select|textarea|button)$/i,
14659 rheader = /^h\d$/i,
14660
14661 rnative = /^[^{]+\{\s*\[native \w/,
14662
14663 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14664 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14665
14666 rsibling = /[+~]/,
14667
14668 // CSS escapes
14669 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14670 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14671 funescape = function( _, escaped, escapedWhitespace ) {
14672 var high = "0x" + escaped - 0x10000;
14673 // NaN means non-codepoint
14674 // Support: Firefox<24
14675 // Workaround erroneous numeric interpretation of +"0x"
14676 return high !== high || escapedWhitespace ?
14677 escaped :
14678 high < 0 ?
14679 // BMP codepoint
14680 String.fromCharCode( high + 0x10000 ) :
14681 // Supplemental Plane codepoint (surrogate pair)
14682 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14683 },
14684
14685 // CSS string/identifier serialization
14686 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14687 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14688 fcssescape = function( ch, asCodePoint ) {
14689 if ( asCodePoint ) {
14690
14691 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14692 if ( ch === "\0" ) {
14693 return "\uFFFD";
14694 }
14695
14696 // Control characters and (dependent upon position) numbers get escaped as code points
14697 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14698 }
14699
14700 // Other potentially-special ASCII characters get backslash-escaped
14701 return "\\" + ch;
14702 },
14703
14704 // Used for iframes
14705 // See setDocument()
14706 // Removing the function wrapper causes a "Permission Denied"
14707 // error in IE
14708 unloadHandler = function() {
14709 setDocument();
14710 },
14711
14712 disabledAncestor = addCombinator(
14713 function( elem ) {
14714 return elem.disabled === true && ("form" in elem || "label" in elem);
14715 },
14716 { dir: "parentNode", next: "legend" }
14717 );
14718
14719 // Optimize for push.apply( _, NodeList )
14720 try {
14721 push.apply(
14722 (arr = slice.call( preferredDoc.childNodes )),
14723 preferredDoc.childNodes
14724 );
14725 // Support: Android<4.0
14726 // Detect silently failing push.apply
14727 arr[ preferredDoc.childNodes.length ].nodeType;
14728 } catch ( e ) {
14729 push = { apply: arr.length ?
14730
14731 // Leverage slice if possible
14732 function( target, els ) {
14733 push_native.apply( target, slice.call(els) );
14734 } :
14735
14736 // Support: IE<9
14737 // Otherwise append directly
14738 function( target, els ) {
14739 var j = target.length,
14740 i = 0;
14741 // Can't trust NodeList.length
14742 while ( (target[j++] = els[i++]) ) {}
14743 target.length = j - 1;
14744 }
14745 };
14746 }
14747
14748 function Sizzle( selector, context, results, seed ) {
14749 var m, i, elem, nid, match, groups, newSelector,
14750 newContext = context && context.ownerDocument,
14751
14752 // nodeType defaults to 9, since context defaults to document
14753 nodeType = context ? context.nodeType : 9;
14754
14755 results = results || [];
14756
14757 // Return early from calls with invalid selector or context
14758 if ( typeof selector !== "string" || !selector ||
14759 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14760
14761 return results;
14762 }
14763
14764 // Try to shortcut find operations (as opposed to filters) in HTML documents
14765 if ( !seed ) {
14766
14767 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14768 setDocument( context );
14769 }
14770 context = context || document;
14771
14772 if ( documentIsHTML ) {
14773
14774 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14775 // (excepting DocumentFragment context, where the methods don't exist)
14776 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14777
14778 // ID selector
14779 if ( (m = match[1]) ) {
14780
14781 // Document context
14782 if ( nodeType === 9 ) {
14783 if ( (elem = context.getElementById( m )) ) {
14784
14785 // Support: IE, Opera, Webkit
14786 // TODO: identify versions
14787 // getElementById can match elements by name instead of ID
14788 if ( elem.id === m ) {
14789 results.push( elem );
14790 return results;
14791 }
14792 } else {
14793 return results;
14794 }
14795
14796 // Element context
14797 } else {
14798
14799 // Support: IE, Opera, Webkit
14800 // TODO: identify versions
14801 // getElementById can match elements by name instead of ID
14802 if ( newContext && (elem = newContext.getElementById( m )) &&
14803 contains( context, elem ) &&
14804 elem.id === m ) {
14805
14806 results.push( elem );
14807 return results;
14808 }
14809 }
14810
14811 // Type selector
14812 } else if ( match[2] ) {
14813 push.apply( results, context.getElementsByTagName( selector ) );
14814 return results;
14815
14816 // Class selector
14817 } else if ( (m = match[3]) && support.getElementsByClassName &&
14818 context.getElementsByClassName ) {
14819
14820 push.apply( results, context.getElementsByClassName( m ) );
14821 return results;
14822 }
14823 }
14824
14825 // Take advantage of querySelectorAll
14826 if ( support.qsa &&
14827 !compilerCache[ selector + " " ] &&
14828 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14829
14830 if ( nodeType !== 1 ) {
14831 newContext = context;
14832 newSelector = selector;
14833
14834 // qSA looks outside Element context, which is not what we want
14835 // Thanks to Andrew Dupont for this workaround technique
14836 // Support: IE <=8
14837 // Exclude object elements
14838 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14839
14840 // Capture the context ID, setting it first if necessary
14841 if ( (nid = context.getAttribute( "id" )) ) {
14842 nid = nid.replace( rcssescape, fcssescape );
14843 } else {
14844 context.setAttribute( "id", (nid = expando) );
14845 }
14846
14847 // Prefix every selector in the list
14848 groups = tokenize( selector );
14849 i = groups.length;
14850 while ( i-- ) {
14851 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14852 }
14853 newSelector = groups.join( "," );
14854
14855 // Expand context for sibling selectors
14856 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14857 context;
14858 }
14859
14860 if ( newSelector ) {
14861 try {
14862 push.apply( results,
14863 newContext.querySelectorAll( newSelector )
14864 );
14865 return results;
14866 } catch ( qsaError ) {
14867 } finally {
14868 if ( nid === expando ) {
14869 context.removeAttribute( "id" );
14870 }
14871 }
14872 }
14873 }
14874 }
14875 }
14876
14877 // All others
14878 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14879 }
14880
14881 /**
14882 * Create key-value caches of limited size
14883 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14884 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14885 * deleting the oldest entry
14886 */
14887 function createCache() {
14888 var keys = [];
14889
14890 function cache( key, value ) {
14891 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14892 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14893 // Only keep the most recent entries
14894 delete cache[ keys.shift() ];
14895 }
14896 return (cache[ key + " " ] = value);
14897 }
14898 return cache;
14899 }
14900
14901 /**
14902 * Mark a function for special use by Sizzle
14903 * @param {Function} fn The function to mark
14904 */
14905 function markFunction( fn ) {
14906 fn[ expando ] = true;
14907 return fn;
14908 }
14909
14910 /**
14911 * Support testing using an element
14912 * @param {Function} fn Passed the created element and returns a boolean result
14913 */
14914 function assert( fn ) {
14915 var el = document.createElement("fieldset");
14916
14917 try {
14918 return !!fn( el );
14919 } catch (e) {
14920 return false;
14921 } finally {
14922 // Remove from its parent by default
14923 if ( el.parentNode ) {
14924 el.parentNode.removeChild( el );
14925 }
14926 // release memory in IE
14927 el = null;
14928 }
14929 }
14930
14931 /**
14932 * Adds the same handler for all of the specified attrs
14933 * @param {String} attrs Pipe-separated list of attributes
14934 * @param {Function} handler The method that will be applied
14935 */
14936 function addHandle( attrs, handler ) {
14937 var arr = attrs.split("|"),
14938 i = arr.length;
14939
14940 while ( i-- ) {
14941 Expr.attrHandle[ arr[i] ] = handler;
14942 }
14943 }
14944
14945 /**
14946 * Checks document order of two siblings
14947 * @param {Element} a
14948 * @param {Element} b
14949 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14950 */
14951 function siblingCheck( a, b ) {
14952 var cur = b && a,
14953 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14954 a.sourceIndex - b.sourceIndex;
14955
14956 // Use IE sourceIndex if available on both nodes
14957 if ( diff ) {
14958 return diff;
14959 }
14960
14961 // Check if b follows a
14962 if ( cur ) {
14963 while ( (cur = cur.nextSibling) ) {
14964 if ( cur === b ) {
14965 return -1;
14966 }
14967 }
14968 }
14969
14970 return a ? 1 : -1;
14971 }
14972
14973 /**
14974 * Returns a function to use in pseudos for input types
14975 * @param {String} type
14976 */
14977 function createInputPseudo( type ) {
14978 return function( elem ) {
14979 var name = elem.nodeName.toLowerCase();
14980 return name === "input" && elem.type === type;
14981 };
14982 }
14983
14984 /**
14985 * Returns a function to use in pseudos for buttons
14986 * @param {String} type
14987 */
14988 function createButtonPseudo( type ) {
14989 return function( elem ) {
14990 var name = elem.nodeName.toLowerCase();
14991 return (name === "input" || name === "button") && elem.type === type;
14992 };
14993 }
14994
14995 /**
14996 * Returns a function to use in pseudos for :enabled/:disabled
14997 * @param {Boolean} disabled true for :disabled; false for :enabled
14998 */
14999 function createDisabledPseudo( disabled ) {
15000
15001 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
15002 return function( elem ) {
15003
15004 // Only certain elements can match :enabled or :disabled
15005 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
15006 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
15007 if ( "form" in elem ) {
15008
15009 // Check for inherited disabledness on relevant non-disabled elements:
15010 // * listed form-associated elements in a disabled fieldset
15011 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15012 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15013 // * option elements in a disabled optgroup
15014 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15015 // All such elements have a "form" property.
15016 if ( elem.parentNode && elem.disabled === false ) {
15017
15018 // Option elements defer to a parent optgroup if present
15019 if ( "label" in elem ) {
15020 if ( "label" in elem.parentNode ) {
15021 return elem.parentNode.disabled === disabled;
15022 } else {
15023 return elem.disabled === disabled;
15024 }
15025 }
15026
15027 // Support: IE 6 - 11
15028 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15029 return elem.isDisabled === disabled ||
15030
15031 // Where there is no isDisabled, check manually
15032 /* jshint -W018 */
15033 elem.isDisabled !== !disabled &&
15034 disabledAncestor( elem ) === disabled;
15035 }
15036
15037 return elem.disabled === disabled;
15038
15039 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15040 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15041 // even exist on them, let alone have a boolean value.
15042 } else if ( "label" in elem ) {
15043 return elem.disabled === disabled;
15044 }
15045
15046 // Remaining elements are neither :enabled nor :disabled
15047 return false;
15048 };
15049 }
15050
15051 /**
15052 * Returns a function to use in pseudos for positionals
15053 * @param {Function} fn
15054 */
15055 function createPositionalPseudo( fn ) {
15056 return markFunction(function( argument ) {
15057 argument = +argument;
15058 return markFunction(function( seed, matches ) {
15059 var j,
15060 matchIndexes = fn( [], seed.length, argument ),
15061 i = matchIndexes.length;
15062
15063 // Match elements found at the specified indexes
15064 while ( i-- ) {
15065 if ( seed[ (j = matchIndexes[i]) ] ) {
15066 seed[j] = !(matches[j] = seed[j]);
15067 }
15068 }
15069 });
15070 });
15071 }
15072
15073 /**
15074 * Checks a node for validity as a Sizzle context
15075 * @param {Element|Object=} context
15076 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15077 */
15078 function testContext( context ) {
15079 return context && typeof context.getElementsByTagName !== "undefined" && context;
15080 }
15081
15082 // Expose support vars for convenience
15083 support = Sizzle.support = {};
15084
15085 /**
15086 * Detects XML nodes
15087 * @param {Element|Object} elem An element or a document
15088 * @returns {Boolean} True iff elem is a non-HTML XML node
15089 */
15090 isXML = Sizzle.isXML = function( elem ) {
15091 // documentElement is verified for cases where it doesn't yet exist
15092 // (such as loading iframes in IE - #4833)
15093 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15094 return documentElement ? documentElement.nodeName !== "HTML" : false;
15095 };
15096
15097 /**
15098 * Sets document-related variables once based on the current document
15099 * @param {Element|Object} [doc] An element or document object to use to set the document
15100 * @returns {Object} Returns the current document
15101 */
15102 setDocument = Sizzle.setDocument = function( node ) {
15103 var hasCompare, subWindow,
15104 doc = node ? node.ownerDocument || node : preferredDoc;
15105
15106 // Return early if doc is invalid or already selected
15107 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15108 return document;
15109 }
15110
15111 // Update global variables
15112 document = doc;
15113 docElem = document.documentElement;
15114 documentIsHTML = !isXML( document );
15115
15116 // Support: IE 9-11, Edge
15117 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15118 if ( preferredDoc !== document &&
15119 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15120
15121 // Support: IE 11, Edge
15122 if ( subWindow.addEventListener ) {
15123 subWindow.addEventListener( "unload", unloadHandler, false );
15124
15125 // Support: IE 9 - 10 only
15126 } else if ( subWindow.attachEvent ) {
15127 subWindow.attachEvent( "onunload", unloadHandler );
15128 }
15129 }
15130
15131 /* Attributes
15132 ---------------------------------------------------------------------- */
15133
15134 // Support: IE<8
15135 // Verify that getAttribute really returns attributes and not properties
15136 // (excepting IE8 booleans)
15137 support.attributes = assert(function( el ) {
15138 el.className = "i";
15139 return !el.getAttribute("className");
15140 });
15141
15142 /* getElement(s)By*
15143 ---------------------------------------------------------------------- */
15144
15145 // Check if getElementsByTagName("*") returns only elements
15146 support.getElementsByTagName = assert(function( el ) {
15147 el.appendChild( document.createComment("") );
15148 return !el.getElementsByTagName("*").length;
15149 });
15150
15151 // Support: IE<9
15152 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15153
15154 // Support: IE<10
15155 // Check if getElementById returns elements by name
15156 // The broken getElementById methods don't pick up programmatically-set names,
15157 // so use a roundabout getElementsByName test
15158 support.getById = assert(function( el ) {
15159 docElem.appendChild( el ).id = expando;
15160 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15161 });
15162
15163 // ID filter and find
15164 if ( support.getById ) {
15165 Expr.filter["ID"] = function( id ) {
15166 var attrId = id.replace( runescape, funescape );
15167 return function( elem ) {
15168 return elem.getAttribute("id") === attrId;
15169 };
15170 };
15171 Expr.find["ID"] = function( id, context ) {
15172 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15173 var elem = context.getElementById( id );
15174 return elem ? [ elem ] : [];
15175 }
15176 };
15177 } else {
15178 Expr.filter["ID"] = function( id ) {
15179 var attrId = id.replace( runescape, funescape );
15180 return function( elem ) {
15181 var node = typeof elem.getAttributeNode !== "undefined" &&
15182 elem.getAttributeNode("id");
15183 return node && node.value === attrId;
15184 };
15185 };
15186
15187 // Support: IE 6 - 7 only
15188 // getElementById is not reliable as a find shortcut
15189 Expr.find["ID"] = function( id, context ) {
15190 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15191 var node, i, elems,
15192 elem = context.getElementById( id );
15193
15194 if ( elem ) {
15195
15196 // Verify the id attribute
15197 node = elem.getAttributeNode("id");
15198 if ( node && node.value === id ) {
15199 return [ elem ];
15200 }
15201
15202 // Fall back on getElementsByName
15203 elems = context.getElementsByName( id );
15204 i = 0;
15205 while ( (elem = elems[i++]) ) {
15206 node = elem.getAttributeNode("id");
15207 if ( node && node.value === id ) {
15208 return [ elem ];
15209 }
15210 }
15211 }
15212
15213 return [];
15214 }
15215 };
15216 }
15217
15218 // Tag
15219 Expr.find["TAG"] = support.getElementsByTagName ?
15220 function( tag, context ) {
15221 if ( typeof context.getElementsByTagName !== "undefined" ) {
15222 return context.getElementsByTagName( tag );
15223
15224 // DocumentFragment nodes don't have gEBTN
15225 } else if ( support.qsa ) {
15226 return context.querySelectorAll( tag );
15227 }
15228 } :
15229
15230 function( tag, context ) {
15231 var elem,
15232 tmp = [],
15233 i = 0,
15234 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15235 results = context.getElementsByTagName( tag );
15236
15237 // Filter out possible comments
15238 if ( tag === "*" ) {
15239 while ( (elem = results[i++]) ) {
15240 if ( elem.nodeType === 1 ) {
15241 tmp.push( elem );
15242 }
15243 }
15244
15245 return tmp;
15246 }
15247 return results;
15248 };
15249
15250 // Class
15251 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15252 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15253 return context.getElementsByClassName( className );
15254 }
15255 };
15256
15257 /* QSA/matchesSelector
15258 ---------------------------------------------------------------------- */
15259
15260 // QSA and matchesSelector support
15261
15262 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15263 rbuggyMatches = [];
15264
15265 // qSa(:focus) reports false when true (Chrome 21)
15266 // We allow this because of a bug in IE8/9 that throws an error
15267 // whenever `document.activeElement` is accessed on an iframe
15268 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15269 // See https://bugs.jquery.com/ticket/13378
15270 rbuggyQSA = [];
15271
15272 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15273 // Build QSA regex
15274 // Regex strategy adopted from Diego Perini
15275 assert(function( el ) {
15276 // Select is set to empty string on purpose
15277 // This is to test IE's treatment of not explicitly
15278 // setting a boolean content attribute,
15279 // since its presence should be enough
15280 // https://bugs.jquery.com/ticket/12359
15281 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15282 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15283 "<option selected=''></option></select>";
15284
15285 // Support: IE8, Opera 11-12.16
15286 // Nothing should be selected when empty strings follow ^= or $= or *=
15287 // The test attribute must be unknown in Opera but "safe" for WinRT
15288 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15289 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15290 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15291 }
15292
15293 // Support: IE8
15294 // Boolean attributes and "value" are not treated correctly
15295 if ( !el.querySelectorAll("[selected]").length ) {
15296 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15297 }
15298
15299 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15300 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15301 rbuggyQSA.push("~=");
15302 }
15303
15304 // Webkit/Opera - :checked should return selected option elements
15305 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15306 // IE8 throws error here and will not see later tests
15307 if ( !el.querySelectorAll(":checked").length ) {
15308 rbuggyQSA.push(":checked");
15309 }
15310
15311 // Support: Safari 8+, iOS 8+
15312 // https://bugs.webkit.org/show_bug.cgi?id=136851
15313 // In-page `selector#id sibling-combinator selector` fails
15314 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15315 rbuggyQSA.push(".#.+[+~]");
15316 }
15317 });
15318
15319 assert(function( el ) {
15320 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15321 "<select disabled='disabled'><option/></select>";
15322
15323 // Support: Windows 8 Native Apps
15324 // The type and name attributes are restricted during .innerHTML assignment
15325 var input = document.createElement("input");
15326 input.setAttribute( "type", "hidden" );
15327 el.appendChild( input ).setAttribute( "name", "D" );
15328
15329 // Support: IE8
15330 // Enforce case-sensitivity of name attribute
15331 if ( el.querySelectorAll("[name=d]").length ) {
15332 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15333 }
15334
15335 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15336 // IE8 throws error here and will not see later tests
15337 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15338 rbuggyQSA.push( ":enabled", ":disabled" );
15339 }
15340
15341 // Support: IE9-11+
15342 // IE's :disabled selector does not pick up the children of disabled fieldsets
15343 docElem.appendChild( el ).disabled = true;
15344 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15345 rbuggyQSA.push( ":enabled", ":disabled" );
15346 }
15347
15348 // Opera 10-11 does not throw on post-comma invalid pseudos
15349 el.querySelectorAll("*,:x");
15350 rbuggyQSA.push(",.*:");
15351 });
15352 }
15353
15354 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15355 docElem.webkitMatchesSelector ||
15356 docElem.mozMatchesSelector ||
15357 docElem.oMatchesSelector ||
15358 docElem.msMatchesSelector) )) ) {
15359
15360 assert(function( el ) {
15361 // Check to see if it's possible to do matchesSelector
15362 // on a disconnected node (IE 9)
15363 support.disconnectedMatch = matches.call( el, "*" );
15364
15365 // This should fail with an exception
15366 // Gecko does not error, returns false instead
15367 matches.call( el, "[s!='']:x" );
15368 rbuggyMatches.push( "!=", pseudos );
15369 });
15370 }
15371
15372 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15373 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15374
15375 /* Contains
15376 ---------------------------------------------------------------------- */
15377 hasCompare = rnative.test( docElem.compareDocumentPosition );
15378
15379 // Element contains another
15380 // Purposefully self-exclusive
15381 // As in, an element does not contain itself
15382 contains = hasCompare || rnative.test( docElem.contains ) ?
15383 function( a, b ) {
15384 var adown = a.nodeType === 9 ? a.documentElement : a,
15385 bup = b && b.parentNode;
15386 return a === bup || !!( bup && bup.nodeType === 1 && (
15387 adown.contains ?
15388 adown.contains( bup ) :
15389 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15390 ));
15391 } :
15392 function( a, b ) {
15393 if ( b ) {
15394 while ( (b = b.parentNode) ) {
15395 if ( b === a ) {
15396 return true;
15397 }
15398 }
15399 }
15400 return false;
15401 };
15402
15403 /* Sorting
15404 ---------------------------------------------------------------------- */
15405
15406 // Document order sorting
15407 sortOrder = hasCompare ?
15408 function( a, b ) {
15409
15410 // Flag for duplicate removal
15411 if ( a === b ) {
15412 hasDuplicate = true;
15413 return 0;
15414 }
15415
15416 // Sort on method existence if only one input has compareDocumentPosition
15417 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15418 if ( compare ) {
15419 return compare;
15420 }
15421
15422 // Calculate position if both inputs belong to the same document
15423 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15424 a.compareDocumentPosition( b ) :
15425
15426 // Otherwise we know they are disconnected
15427 1;
15428
15429 // Disconnected nodes
15430 if ( compare & 1 ||
15431 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15432
15433 // Choose the first element that is related to our preferred document
15434 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15435 return -1;
15436 }
15437 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15438 return 1;
15439 }
15440
15441 // Maintain original order
15442 return sortInput ?
15443 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15444 0;
15445 }
15446
15447 return compare & 4 ? -1 : 1;
15448 } :
15449 function( a, b ) {
15450 // Exit early if the nodes are identical
15451 if ( a === b ) {
15452 hasDuplicate = true;
15453 return 0;
15454 }
15455
15456 var cur,
15457 i = 0,
15458 aup = a.parentNode,
15459 bup = b.parentNode,
15460 ap = [ a ],
15461 bp = [ b ];
15462
15463 // Parentless nodes are either documents or disconnected
15464 if ( !aup || !bup ) {
15465 return a === document ? -1 :
15466 b === document ? 1 :
15467 aup ? -1 :
15468 bup ? 1 :
15469 sortInput ?
15470 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15471 0;
15472
15473 // If the nodes are siblings, we can do a quick check
15474 } else if ( aup === bup ) {
15475 return siblingCheck( a, b );
15476 }
15477
15478 // Otherwise we need full lists of their ancestors for comparison
15479 cur = a;
15480 while ( (cur = cur.parentNode) ) {
15481 ap.unshift( cur );
15482 }
15483 cur = b;
15484 while ( (cur = cur.parentNode) ) {
15485 bp.unshift( cur );
15486 }
15487
15488 // Walk down the tree looking for a discrepancy
15489 while ( ap[i] === bp[i] ) {
15490 i++;
15491 }
15492
15493 return i ?
15494 // Do a sibling check if the nodes have a common ancestor
15495 siblingCheck( ap[i], bp[i] ) :
15496
15497 // Otherwise nodes in our document sort first
15498 ap[i] === preferredDoc ? -1 :
15499 bp[i] === preferredDoc ? 1 :
15500 0;
15501 };
15502
15503 return document;
15504 };
15505
15506 Sizzle.matches = function( expr, elements ) {
15507 return Sizzle( expr, null, null, elements );
15508 };
15509
15510 Sizzle.matchesSelector = function( elem, expr ) {
15511 // Set document vars if needed
15512 if ( ( elem.ownerDocument || elem ) !== document ) {
15513 setDocument( elem );
15514 }
15515
15516 // Make sure that attribute selectors are quoted
15517 expr = expr.replace( rattributeQuotes, "='$1']" );
15518
15519 if ( support.matchesSelector && documentIsHTML &&
15520 !compilerCache[ expr + " " ] &&
15521 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15522 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15523
15524 try {
15525 var ret = matches.call( elem, expr );
15526
15527 // IE 9's matchesSelector returns false on disconnected nodes
15528 if ( ret || support.disconnectedMatch ||
15529 // As well, disconnected nodes are said to be in a document
15530 // fragment in IE 9
15531 elem.document && elem.document.nodeType !== 11 ) {
15532 return ret;
15533 }
15534 } catch (e) {}
15535 }
15536
15537 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15538 };
15539
15540 Sizzle.contains = function( context, elem ) {
15541 // Set document vars if needed
15542 if ( ( context.ownerDocument || context ) !== document ) {
15543 setDocument( context );
15544 }
15545 return contains( context, elem );
15546 };
15547
15548 Sizzle.attr = function( elem, name ) {
15549 // Set document vars if needed
15550 if ( ( elem.ownerDocument || elem ) !== document ) {
15551 setDocument( elem );
15552 }
15553
15554 var fn = Expr.attrHandle[ name.toLowerCase() ],
15555 // Don't get fooled by Object.prototype properties (jQuery #13807)
15556 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15557 fn( elem, name, !documentIsHTML ) :
15558 undefined;
15559
15560 return val !== undefined ?
15561 val :
15562 support.attributes || !documentIsHTML ?
15563 elem.getAttribute( name ) :
15564 (val = elem.getAttributeNode(name)) && val.specified ?
15565 val.value :
15566 null;
15567 };
15568
15569 Sizzle.escape = function( sel ) {
15570 return (sel + "").replace( rcssescape, fcssescape );
15571 };
15572
15573 Sizzle.error = function( msg ) {
15574 throw new Error( "Syntax error, unrecognized expression: " + msg );
15575 };
15576
15577 /**
15578 * Document sorting and removing duplicates
15579 * @param {ArrayLike} results
15580 */
15581 Sizzle.uniqueSort = function( results ) {
15582 var elem,
15583 duplicates = [],
15584 j = 0,
15585 i = 0;
15586
15587 // Unless we *know* we can detect duplicates, assume their presence
15588 hasDuplicate = !support.detectDuplicates;
15589 sortInput = !support.sortStable && results.slice( 0 );
15590 results.sort( sortOrder );
15591
15592 if ( hasDuplicate ) {
15593 while ( (elem = results[i++]) ) {
15594 if ( elem === results[ i ] ) {
15595 j = duplicates.push( i );
15596 }
15597 }
15598 while ( j-- ) {
15599 results.splice( duplicates[ j ], 1 );
15600 }
15601 }
15602
15603 // Clear input after sorting to release objects
15604 // See https://github.com/jquery/sizzle/pull/225
15605 sortInput = null;
15606
15607 return results;
15608 };
15609
15610 /**
15611 * Utility function for retrieving the text value of an array of DOM nodes
15612 * @param {Array|Element} elem
15613 */
15614 getText = Sizzle.getText = function( elem ) {
15615 var node,
15616 ret = "",
15617 i = 0,
15618 nodeType = elem.nodeType;
15619
15620 if ( !nodeType ) {
15621 // If no nodeType, this is expected to be an array
15622 while ( (node = elem[i++]) ) {
15623 // Do not traverse comment nodes
15624 ret += getText( node );
15625 }
15626 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15627 // Use textContent for elements
15628 // innerText usage removed for consistency of new lines (jQuery #11153)
15629 if ( typeof elem.textContent === "string" ) {
15630 return elem.textContent;
15631 } else {
15632 // Traverse its children
15633 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15634 ret += getText( elem );
15635 }
15636 }
15637 } else if ( nodeType === 3 || nodeType === 4 ) {
15638 return elem.nodeValue;
15639 }
15640 // Do not include comment or processing instruction nodes
15641
15642 return ret;
15643 };
15644
15645 Expr = Sizzle.selectors = {
15646
15647 // Can be adjusted by the user
15648 cacheLength: 50,
15649
15650 createPseudo: markFunction,
15651
15652 match: matchExpr,
15653
15654 attrHandle: {},
15655
15656 find: {},
15657
15658 relative: {
15659 ">": { dir: "parentNode", first: true },
15660 " ": { dir: "parentNode" },
15661 "+": { dir: "previousSibling", first: true },
15662 "~": { dir: "previousSibling" }
15663 },
15664
15665 preFilter: {
15666 "ATTR": function( match ) {
15667 match[1] = match[1].replace( runescape, funescape );
15668
15669 // Move the given value to match[3] whether quoted or unquoted
15670 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15671
15672 if ( match[2] === "~=" ) {
15673 match[3] = " " + match[3] + " ";
15674 }
15675
15676 return match.slice( 0, 4 );
15677 },
15678
15679 "CHILD": function( match ) {
15680 /* matches from matchExpr["CHILD"]
15681 1 type (only|nth|...)
15682 2 what (child|of-type)
15683 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15684 4 xn-component of xn+y argument ([+-]?\d*n|)
15685 5 sign of xn-component
15686 6 x of xn-component
15687 7 sign of y-component
15688 8 y of y-component
15689 */
15690 match[1] = match[1].toLowerCase();
15691
15692 if ( match[1].slice( 0, 3 ) === "nth" ) {
15693 // nth-* requires argument
15694 if ( !match[3] ) {
15695 Sizzle.error( match[0] );
15696 }
15697
15698 // numeric x and y parameters for Expr.filter.CHILD
15699 // remember that false/true cast respectively to 0/1
15700 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15701 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15702
15703 // other types prohibit arguments
15704 } else if ( match[3] ) {
15705 Sizzle.error( match[0] );
15706 }
15707
15708 return match;
15709 },
15710
15711 "PSEUDO": function( match ) {
15712 var excess,
15713 unquoted = !match[6] && match[2];
15714
15715 if ( matchExpr["CHILD"].test( match[0] ) ) {
15716 return null;
15717 }
15718
15719 // Accept quoted arguments as-is
15720 if ( match[3] ) {
15721 match[2] = match[4] || match[5] || "";
15722
15723 // Strip excess characters from unquoted arguments
15724 } else if ( unquoted && rpseudo.test( unquoted ) &&
15725 // Get excess from tokenize (recursively)
15726 (excess = tokenize( unquoted, true )) &&
15727 // advance to the next closing parenthesis
15728 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15729
15730 // excess is a negative index
15731 match[0] = match[0].slice( 0, excess );
15732 match[2] = unquoted.slice( 0, excess );
15733 }
15734
15735 // Return only captures needed by the pseudo filter method (type and argument)
15736 return match.slice( 0, 3 );
15737 }
15738 },
15739
15740 filter: {
15741
15742 "TAG": function( nodeNameSelector ) {
15743 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15744 return nodeNameSelector === "*" ?
15745 function() { return true; } :
15746 function( elem ) {
15747 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15748 };
15749 },
15750
15751 "CLASS": function( className ) {
15752 var pattern = classCache[ className + " " ];
15753
15754 return pattern ||
15755 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15756 classCache( className, function( elem ) {
15757 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15758 });
15759 },
15760
15761 "ATTR": function( name, operator, check ) {
15762 return function( elem ) {
15763 var result = Sizzle.attr( elem, name );
15764
15765 if ( result == null ) {
15766 return operator === "!=";
15767 }
15768 if ( !operator ) {
15769 return true;
15770 }
15771
15772 result += "";
15773
15774 return operator === "=" ? result === check :
15775 operator === "!=" ? result !== check :
15776 operator === "^=" ? check && result.indexOf( check ) === 0 :
15777 operator === "*=" ? check && result.indexOf( check ) > -1 :
15778 operator === "$=" ? check && result.slice( -check.length ) === check :
15779 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15780 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15781 false;
15782 };
15783 },
15784
15785 "CHILD": function( type, what, argument, first, last ) {
15786 var simple = type.slice( 0, 3 ) !== "nth",
15787 forward = type.slice( -4 ) !== "last",
15788 ofType = what === "of-type";
15789
15790 return first === 1 && last === 0 ?
15791
15792 // Shortcut for :nth-*(n)
15793 function( elem ) {
15794 return !!elem.parentNode;
15795 } :
15796
15797 function( elem, context, xml ) {
15798 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15799 dir = simple !== forward ? "nextSibling" : "previousSibling",
15800 parent = elem.parentNode,
15801 name = ofType && elem.nodeName.toLowerCase(),
15802 useCache = !xml && !ofType,
15803 diff = false;
15804
15805 if ( parent ) {
15806
15807 // :(first|last|only)-(child|of-type)
15808 if ( simple ) {
15809 while ( dir ) {
15810 node = elem;
15811 while ( (node = node[ dir ]) ) {
15812 if ( ofType ?
15813 node.nodeName.toLowerCase() === name :
15814 node.nodeType === 1 ) {
15815
15816 return false;
15817 }
15818 }
15819 // Reverse direction for :only-* (if we haven't yet done so)
15820 start = dir = type === "only" && !start && "nextSibling";
15821 }
15822 return true;
15823 }
15824
15825 start = [ forward ? parent.firstChild : parent.lastChild ];
15826
15827 // non-xml :nth-child(...) stores cache data on `parent`
15828 if ( forward && useCache ) {
15829
15830 // Seek `elem` from a previously-cached index
15831
15832 // ...in a gzip-friendly way
15833 node = parent;
15834 outerCache = node[ expando ] || (node[ expando ] = {});
15835
15836 // Support: IE <9 only
15837 // Defend against cloned attroperties (jQuery gh-1709)
15838 uniqueCache = outerCache[ node.uniqueID ] ||
15839 (outerCache[ node.uniqueID ] = {});
15840
15841 cache = uniqueCache[ type ] || [];
15842 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15843 diff = nodeIndex && cache[ 2 ];
15844 node = nodeIndex && parent.childNodes[ nodeIndex ];
15845
15846 while ( (node = ++nodeIndex && node && node[ dir ] ||
15847
15848 // Fallback to seeking `elem` from the start
15849 (diff = nodeIndex = 0) || start.pop()) ) {
15850
15851 // When found, cache indexes on `parent` and break
15852 if ( node.nodeType === 1 && ++diff && node === elem ) {
15853 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15854 break;
15855 }
15856 }
15857
15858 } else {
15859 // Use previously-cached element index if available
15860 if ( useCache ) {
15861 // ...in a gzip-friendly way
15862 node = elem;
15863 outerCache = node[ expando ] || (node[ expando ] = {});
15864
15865 // Support: IE <9 only
15866 // Defend against cloned attroperties (jQuery gh-1709)
15867 uniqueCache = outerCache[ node.uniqueID ] ||
15868 (outerCache[ node.uniqueID ] = {});
15869
15870 cache = uniqueCache[ type ] || [];
15871 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15872 diff = nodeIndex;
15873 }
15874
15875 // xml :nth-child(...)
15876 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15877 if ( diff === false ) {
15878 // Use the same loop as above to seek `elem` from the start
15879 while ( (node = ++nodeIndex && node && node[ dir ] ||
15880 (diff = nodeIndex = 0) || start.pop()) ) {
15881
15882 if ( ( ofType ?
15883 node.nodeName.toLowerCase() === name :
15884 node.nodeType === 1 ) &&
15885 ++diff ) {
15886
15887 // Cache the index of each encountered element
15888 if ( useCache ) {
15889 outerCache = node[ expando ] || (node[ expando ] = {});
15890
15891 // Support: IE <9 only
15892 // Defend against cloned attroperties (jQuery gh-1709)
15893 uniqueCache = outerCache[ node.uniqueID ] ||
15894 (outerCache[ node.uniqueID ] = {});
15895
15896 uniqueCache[ type ] = [ dirruns, diff ];
15897 }
15898
15899 if ( node === elem ) {
15900 break;
15901 }
15902 }
15903 }
15904 }
15905 }
15906
15907 // Incorporate the offset, then check against cycle size
15908 diff -= last;
15909 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15910 }
15911 };
15912 },
15913
15914 "PSEUDO": function( pseudo, argument ) {
15915 // pseudo-class names are case-insensitive
15916 // http://www.w3.org/TR/selectors/#pseudo-classes
15917 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15918 // Remember that setFilters inherits from pseudos
15919 var args,
15920 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15921 Sizzle.error( "unsupported pseudo: " + pseudo );
15922
15923 // The user may use createPseudo to indicate that
15924 // arguments are needed to create the filter function
15925 // just as Sizzle does
15926 if ( fn[ expando ] ) {
15927 return fn( argument );
15928 }
15929
15930 // But maintain support for old signatures
15931 if ( fn.length > 1 ) {
15932 args = [ pseudo, pseudo, "", argument ];
15933 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15934 markFunction(function( seed, matches ) {
15935 var idx,
15936 matched = fn( seed, argument ),
15937 i = matched.length;
15938 while ( i-- ) {
15939 idx = indexOf( seed, matched[i] );
15940 seed[ idx ] = !( matches[ idx ] = matched[i] );
15941 }
15942 }) :
15943 function( elem ) {
15944 return fn( elem, 0, args );
15945 };
15946 }
15947
15948 return fn;
15949 }
15950 },
15951
15952 pseudos: {
15953 // Potentially complex pseudos
15954 "not": markFunction(function( selector ) {
15955 // Trim the selector passed to compile
15956 // to avoid treating leading and trailing
15957 // spaces as combinators
15958 var input = [],
15959 results = [],
15960 matcher = compile( selector.replace( rtrim, "$1" ) );
15961
15962 return matcher[ expando ] ?
15963 markFunction(function( seed, matches, context, xml ) {
15964 var elem,
15965 unmatched = matcher( seed, null, xml, [] ),
15966 i = seed.length;
15967
15968 // Match elements unmatched by `matcher`
15969 while ( i-- ) {
15970 if ( (elem = unmatched[i]) ) {
15971 seed[i] = !(matches[i] = elem);
15972 }
15973 }
15974 }) :
15975 function( elem, context, xml ) {
15976 input[0] = elem;
15977 matcher( input, null, xml, results );
15978 // Don't keep the element (issue #299)
15979 input[0] = null;
15980 return !results.pop();
15981 };
15982 }),
15983
15984 "has": markFunction(function( selector ) {
15985 return function( elem ) {
15986 return Sizzle( selector, elem ).length > 0;
15987 };
15988 }),
15989
15990 "contains": markFunction(function( text ) {
15991 text = text.replace( runescape, funescape );
15992 return function( elem ) {
15993 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
15994 };
15995 }),
15996
15997 // "Whether an element is represented by a :lang() selector
15998 // is based solely on the element's language value
15999 // being equal to the identifier C,
16000 // or beginning with the identifier C immediately followed by "-".
16001 // The matching of C against the element's language value is performed case-insensitively.
16002 // The identifier C does not have to be a valid language name."
16003 // http://www.w3.org/TR/selectors/#lang-pseudo
16004 "lang": markFunction( function( lang ) {
16005 // lang value must be a valid identifier
16006 if ( !ridentifier.test(lang || "") ) {
16007 Sizzle.error( "unsupported lang: " + lang );
16008 }
16009 lang = lang.replace( runescape, funescape ).toLowerCase();
16010 return function( elem ) {
16011 var elemLang;
16012 do {
16013 if ( (elemLang = documentIsHTML ?
16014 elem.lang :
16015 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16016
16017 elemLang = elemLang.toLowerCase();
16018 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16019 }
16020 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16021 return false;
16022 };
16023 }),
16024
16025 // Miscellaneous
16026 "target": function( elem ) {
16027 var hash = window.location && window.location.hash;
16028 return hash && hash.slice( 1 ) === elem.id;
16029 },
16030
16031 "root": function( elem ) {
16032 return elem === docElem;
16033 },
16034
16035 "focus": function( elem ) {
16036 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16037 },
16038
16039 // Boolean properties
16040 "enabled": createDisabledPseudo( false ),
16041 "disabled": createDisabledPseudo( true ),
16042
16043 "checked": function( elem ) {
16044 // In CSS3, :checked should return both checked and selected elements
16045 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16046 var nodeName = elem.nodeName.toLowerCase();
16047 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16048 },
16049
16050 "selected": function( elem ) {
16051 // Accessing this property makes selected-by-default
16052 // options in Safari work properly
16053 if ( elem.parentNode ) {
16054 elem.parentNode.selectedIndex;
16055 }
16056
16057 return elem.selected === true;
16058 },
16059
16060 // Contents
16061 "empty": function( elem ) {
16062 // http://www.w3.org/TR/selectors/#empty-pseudo
16063 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16064 // but not by others (comment: 8; processing instruction: 7; etc.)
16065 // nodeType < 6 works because attributes (2) do not appear as children
16066 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16067 if ( elem.nodeType < 6 ) {
16068 return false;
16069 }
16070 }
16071 return true;
16072 },
16073
16074 "parent": function( elem ) {
16075 return !Expr.pseudos["empty"]( elem );
16076 },
16077
16078 // Element/input types
16079 "header": function( elem ) {
16080 return rheader.test( elem.nodeName );
16081 },
16082
16083 "input": function( elem ) {
16084 return rinputs.test( elem.nodeName );
16085 },
16086
16087 "button": function( elem ) {
16088 var name = elem.nodeName.toLowerCase();
16089 return name === "input" && elem.type === "button" || name === "button";
16090 },
16091
16092 "text": function( elem ) {
16093 var attr;
16094 return elem.nodeName.toLowerCase() === "input" &&
16095 elem.type === "text" &&
16096
16097 // Support: IE<8
16098 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16099 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16100 },
16101
16102 // Position-in-collection
16103 "first": createPositionalPseudo(function() {
16104 return [ 0 ];
16105 }),
16106
16107 "last": createPositionalPseudo(function( matchIndexes, length ) {
16108 return [ length - 1 ];
16109 }),
16110
16111 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16112 return [ argument < 0 ? argument + length : argument ];
16113 }),
16114
16115 "even": createPositionalPseudo(function( matchIndexes, length ) {
16116 var i = 0;
16117 for ( ; i < length; i += 2 ) {
16118 matchIndexes.push( i );
16119 }
16120 return matchIndexes;
16121 }),
16122
16123 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16124 var i = 1;
16125 for ( ; i < length; i += 2 ) {
16126 matchIndexes.push( i );
16127 }
16128 return matchIndexes;
16129 }),
16130
16131 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16132 var i = argument < 0 ? argument + length : argument;
16133 for ( ; --i >= 0; ) {
16134 matchIndexes.push( i );
16135 }
16136 return matchIndexes;
16137 }),
16138
16139 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16140 var i = argument < 0 ? argument + length : argument;
16141 for ( ; ++i < length; ) {
16142 matchIndexes.push( i );
16143 }
16144 return matchIndexes;
16145 })
16146 }
16147 };
16148
16149 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16150
16151 // Add button/input type pseudos
16152 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16153 Expr.pseudos[ i ] = createInputPseudo( i );
16154 }
16155 for ( i in { submit: true, reset: true } ) {
16156 Expr.pseudos[ i ] = createButtonPseudo( i );
16157 }
16158
16159 // Easy API for creating new setFilters
16160 function setFilters() {}
16161 setFilters.prototype = Expr.filters = Expr.pseudos;
16162 Expr.setFilters = new setFilters();
16163
16164 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16165 var matched, match, tokens, type,
16166 soFar, groups, preFilters,
16167 cached = tokenCache[ selector + " " ];
16168
16169 if ( cached ) {
16170 return parseOnly ? 0 : cached.slice( 0 );
16171 }
16172
16173 soFar = selector;
16174 groups = [];
16175 preFilters = Expr.preFilter;
16176
16177 while ( soFar ) {
16178
16179 // Comma and first run
16180 if ( !matched || (match = rcomma.exec( soFar )) ) {
16181 if ( match ) {
16182 // Don't consume trailing commas as valid
16183 soFar = soFar.slice( match[0].length ) || soFar;
16184 }
16185 groups.push( (tokens = []) );
16186 }
16187
16188 matched = false;
16189
16190 // Combinators
16191 if ( (match = rcombinators.exec( soFar )) ) {
16192 matched = match.shift();
16193 tokens.push({
16194 value: matched,
16195 // Cast descendant combinators to space
16196 type: match[0].replace( rtrim, " " )
16197 });
16198 soFar = soFar.slice( matched.length );
16199 }
16200
16201 // Filters
16202 for ( type in Expr.filter ) {
16203 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16204 (match = preFilters[ type ]( match ))) ) {
16205 matched = match.shift();
16206 tokens.push({
16207 value: matched,
16208 type: type,
16209 matches: match
16210 });
16211 soFar = soFar.slice( matched.length );
16212 }
16213 }
16214
16215 if ( !matched ) {
16216 break;
16217 }
16218 }
16219
16220 // Return the length of the invalid excess
16221 // if we're just parsing
16222 // Otherwise, throw an error or return tokens
16223 return parseOnly ?
16224 soFar.length :
16225 soFar ?
16226 Sizzle.error( selector ) :
16227 // Cache the tokens
16228 tokenCache( selector, groups ).slice( 0 );
16229 };
16230
16231 function toSelector( tokens ) {
16232 var i = 0,
16233 len = tokens.length,
16234 selector = "";
16235 for ( ; i < len; i++ ) {
16236 selector += tokens[i].value;
16237 }
16238 return selector;
16239 }
16240
16241 function addCombinator( matcher, combinator, base ) {
16242 var dir = combinator.dir,
16243 skip = combinator.next,
16244 key = skip || dir,
16245 checkNonElements = base && key === "parentNode",
16246 doneName = done++;
16247
16248 return combinator.first ?
16249 // Check against closest ancestor/preceding element
16250 function( elem, context, xml ) {
16251 while ( (elem = elem[ dir ]) ) {
16252 if ( elem.nodeType === 1 || checkNonElements ) {
16253 return matcher( elem, context, xml );
16254 }
16255 }
16256 return false;
16257 } :
16258
16259 // Check against all ancestor/preceding elements
16260 function( elem, context, xml ) {
16261 var oldCache, uniqueCache, outerCache,
16262 newCache = [ dirruns, doneName ];
16263
16264 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16265 if ( xml ) {
16266 while ( (elem = elem[ dir ]) ) {
16267 if ( elem.nodeType === 1 || checkNonElements ) {
16268 if ( matcher( elem, context, xml ) ) {
16269 return true;
16270 }
16271 }
16272 }
16273 } else {
16274 while ( (elem = elem[ dir ]) ) {
16275 if ( elem.nodeType === 1 || checkNonElements ) {
16276 outerCache = elem[ expando ] || (elem[ expando ] = {});
16277
16278 // Support: IE <9 only
16279 // Defend against cloned attroperties (jQuery gh-1709)
16280 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16281
16282 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16283 elem = elem[ dir ] || elem;
16284 } else if ( (oldCache = uniqueCache[ key ]) &&
16285 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16286
16287 // Assign to newCache so results back-propagate to previous elements
16288 return (newCache[ 2 ] = oldCache[ 2 ]);
16289 } else {
16290 // Reuse newcache so results back-propagate to previous elements
16291 uniqueCache[ key ] = newCache;
16292
16293 // A match means we're done; a fail means we have to keep checking
16294 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16295 return true;
16296 }
16297 }
16298 }
16299 }
16300 }
16301 return false;
16302 };
16303 }
16304
16305 function elementMatcher( matchers ) {
16306 return matchers.length > 1 ?
16307 function( elem, context, xml ) {
16308 var i = matchers.length;
16309 while ( i-- ) {
16310 if ( !matchers[i]( elem, context, xml ) ) {
16311 return false;
16312 }
16313 }
16314 return true;
16315 } :
16316 matchers[0];
16317 }
16318
16319 function multipleContexts( selector, contexts, results ) {
16320 var i = 0,
16321 len = contexts.length;
16322 for ( ; i < len; i++ ) {
16323 Sizzle( selector, contexts[i], results );
16324 }
16325 return results;
16326 }
16327
16328 function condense( unmatched, map, filter, context, xml ) {
16329 var elem,
16330 newUnmatched = [],
16331 i = 0,
16332 len = unmatched.length,
16333 mapped = map != null;
16334
16335 for ( ; i < len; i++ ) {
16336 if ( (elem = unmatched[i]) ) {
16337 if ( !filter || filter( elem, context, xml ) ) {
16338 newUnmatched.push( elem );
16339 if ( mapped ) {
16340 map.push( i );
16341 }
16342 }
16343 }
16344 }
16345
16346 return newUnmatched;
16347 }
16348
16349 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16350 if ( postFilter && !postFilter[ expando ] ) {
16351 postFilter = setMatcher( postFilter );
16352 }
16353 if ( postFinder && !postFinder[ expando ] ) {
16354 postFinder = setMatcher( postFinder, postSelector );
16355 }
16356 return markFunction(function( seed, results, context, xml ) {
16357 var temp, i, elem,
16358 preMap = [],
16359 postMap = [],
16360 preexisting = results.length,
16361
16362 // Get initial elements from seed or context
16363 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16364
16365 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16366 matcherIn = preFilter && ( seed || !selector ) ?
16367 condense( elems, preMap, preFilter, context, xml ) :
16368 elems,
16369
16370 matcherOut = matcher ?
16371 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16372 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16373
16374 // ...intermediate processing is necessary
16375 [] :
16376
16377 // ...otherwise use results directly
16378 results :
16379 matcherIn;
16380
16381 // Find primary matches
16382 if ( matcher ) {
16383 matcher( matcherIn, matcherOut, context, xml );
16384 }
16385
16386 // Apply postFilter
16387 if ( postFilter ) {
16388 temp = condense( matcherOut, postMap );
16389 postFilter( temp, [], context, xml );
16390
16391 // Un-match failing elements by moving them back to matcherIn
16392 i = temp.length;
16393 while ( i-- ) {
16394 if ( (elem = temp[i]) ) {
16395 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16396 }
16397 }
16398 }
16399
16400 if ( seed ) {
16401 if ( postFinder || preFilter ) {
16402 if ( postFinder ) {
16403 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16404 temp = [];
16405 i = matcherOut.length;
16406 while ( i-- ) {
16407 if ( (elem = matcherOut[i]) ) {
16408 // Restore matcherIn since elem is not yet a final match
16409 temp.push( (matcherIn[i] = elem) );
16410 }
16411 }
16412 postFinder( null, (matcherOut = []), temp, xml );
16413 }
16414
16415 // Move matched elements from seed to results to keep them synchronized
16416 i = matcherOut.length;
16417 while ( i-- ) {
16418 if ( (elem = matcherOut[i]) &&
16419 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16420
16421 seed[temp] = !(results[temp] = elem);
16422 }
16423 }
16424 }
16425
16426 // Add elements to results, through postFinder if defined
16427 } else {
16428 matcherOut = condense(
16429 matcherOut === results ?
16430 matcherOut.splice( preexisting, matcherOut.length ) :
16431 matcherOut
16432 );
16433 if ( postFinder ) {
16434 postFinder( null, results, matcherOut, xml );
16435 } else {
16436 push.apply( results, matcherOut );
16437 }
16438 }
16439 });
16440 }
16441
16442 function matcherFromTokens( tokens ) {
16443 var checkContext, matcher, j,
16444 len = tokens.length,
16445 leadingRelative = Expr.relative[ tokens[0].type ],
16446 implicitRelative = leadingRelative || Expr.relative[" "],
16447 i = leadingRelative ? 1 : 0,
16448
16449 // The foundational matcher ensures that elements are reachable from top-level context(s)
16450 matchContext = addCombinator( function( elem ) {
16451 return elem === checkContext;
16452 }, implicitRelative, true ),
16453 matchAnyContext = addCombinator( function( elem ) {
16454 return indexOf( checkContext, elem ) > -1;
16455 }, implicitRelative, true ),
16456 matchers = [ function( elem, context, xml ) {
16457 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16458 (checkContext = context).nodeType ?
16459 matchContext( elem, context, xml ) :
16460 matchAnyContext( elem, context, xml ) );
16461 // Avoid hanging onto element (issue #299)
16462 checkContext = null;
16463 return ret;
16464 } ];
16465
16466 for ( ; i < len; i++ ) {
16467 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16468 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16469 } else {
16470 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16471
16472 // Return special upon seeing a positional matcher
16473 if ( matcher[ expando ] ) {
16474 // Find the next relative operator (if any) for proper handling
16475 j = ++i;
16476 for ( ; j < len; j++ ) {
16477 if ( Expr.relative[ tokens[j].type ] ) {
16478 break;
16479 }
16480 }
16481 return setMatcher(
16482 i > 1 && elementMatcher( matchers ),
16483 i > 1 && toSelector(
16484 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16485 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16486 ).replace( rtrim, "$1" ),
16487 matcher,
16488 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16489 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16490 j < len && toSelector( tokens )
16491 );
16492 }
16493 matchers.push( matcher );
16494 }
16495 }
16496
16497 return elementMatcher( matchers );
16498 }
16499
16500 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16501 var bySet = setMatchers.length > 0,
16502 byElement = elementMatchers.length > 0,
16503 superMatcher = function( seed, context, xml, results, outermost ) {
16504 var elem, j, matcher,
16505 matchedCount = 0,
16506 i = "0",
16507 unmatched = seed && [],
16508 setMatched = [],
16509 contextBackup = outermostContext,
16510 // We must always have either seed elements or outermost context
16511 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16512 // Use integer dirruns iff this is the outermost matcher
16513 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16514 len = elems.length;
16515
16516 if ( outermost ) {
16517 outermostContext = context === document || context || outermost;
16518 }
16519
16520 // Add elements passing elementMatchers directly to results
16521 // Support: IE<9, Safari
16522 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16523 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16524 if ( byElement && elem ) {
16525 j = 0;
16526 if ( !context && elem.ownerDocument !== document ) {
16527 setDocument( elem );
16528 xml = !documentIsHTML;
16529 }
16530 while ( (matcher = elementMatchers[j++]) ) {
16531 if ( matcher( elem, context || document, xml) ) {
16532 results.push( elem );
16533 break;
16534 }
16535 }
16536 if ( outermost ) {
16537 dirruns = dirrunsUnique;
16538 }
16539 }
16540
16541 // Track unmatched elements for set filters
16542 if ( bySet ) {
16543 // They will have gone through all possible matchers
16544 if ( (elem = !matcher && elem) ) {
16545 matchedCount--;
16546 }
16547
16548 // Lengthen the array for every element, matched or not
16549 if ( seed ) {
16550 unmatched.push( elem );
16551 }
16552 }
16553 }
16554
16555 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16556 // makes the latter nonnegative.
16557 matchedCount += i;
16558
16559 // Apply set filters to unmatched elements
16560 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16561 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16562 // no element matchers and no seed.
16563 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16564 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16565 // numerically zero.
16566 if ( bySet && i !== matchedCount ) {
16567 j = 0;
16568 while ( (matcher = setMatchers[j++]) ) {
16569 matcher( unmatched, setMatched, context, xml );
16570 }
16571
16572 if ( seed ) {
16573 // Reintegrate element matches to eliminate the need for sorting
16574 if ( matchedCount > 0 ) {
16575 while ( i-- ) {
16576 if ( !(unmatched[i] || setMatched[i]) ) {
16577 setMatched[i] = pop.call( results );
16578 }
16579 }
16580 }
16581
16582 // Discard index placeholder values to get only actual matches
16583 setMatched = condense( setMatched );
16584 }
16585
16586 // Add matches to results
16587 push.apply( results, setMatched );
16588
16589 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16590 if ( outermost && !seed && setMatched.length > 0 &&
16591 ( matchedCount + setMatchers.length ) > 1 ) {
16592
16593 Sizzle.uniqueSort( results );
16594 }
16595 }
16596
16597 // Override manipulation of globals by nested matchers
16598 if ( outermost ) {
16599 dirruns = dirrunsUnique;
16600 outermostContext = contextBackup;
16601 }
16602
16603 return unmatched;
16604 };
16605
16606 return bySet ?
16607 markFunction( superMatcher ) :
16608 superMatcher;
16609 }
16610
16611 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16612 var i,
16613 setMatchers = [],
16614 elementMatchers = [],
16615 cached = compilerCache[ selector + " " ];
16616
16617 if ( !cached ) {
16618 // Generate a function of recursive functions that can be used to check each element
16619 if ( !match ) {
16620 match = tokenize( selector );
16621 }
16622 i = match.length;
16623 while ( i-- ) {
16624 cached = matcherFromTokens( match[i] );
16625 if ( cached[ expando ] ) {
16626 setMatchers.push( cached );
16627 } else {
16628 elementMatchers.push( cached );
16629 }
16630 }
16631
16632 // Cache the compiled function
16633 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16634
16635 // Save selector and tokenization
16636 cached.selector = selector;
16637 }
16638 return cached;
16639 };
16640
16641 /**
16642 * A low-level selection function that works with Sizzle's compiled
16643 * selector functions
16644 * @param {String|Function} selector A selector or a pre-compiled
16645 * selector function built with Sizzle.compile
16646 * @param {Element} context
16647 * @param {Array} [results]
16648 * @param {Array} [seed] A set of elements to match against
16649 */
16650 select = Sizzle.select = function( selector, context, results, seed ) {
16651 var i, tokens, token, type, find,
16652 compiled = typeof selector === "function" && selector,
16653 match = !seed && tokenize( (selector = compiled.selector || selector) );
16654
16655 results = results || [];
16656
16657 // Try to minimize operations if there is only one selector in the list and no seed
16658 // (the latter of which guarantees us context)
16659 if ( match.length === 1 ) {
16660
16661 // Reduce context if the leading compound selector is an ID
16662 tokens = match[0] = match[0].slice( 0 );
16663 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16664 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16665
16666 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16667 if ( !context ) {
16668 return results;
16669
16670 // Precompiled matchers will still verify ancestry, so step up a level
16671 } else if ( compiled ) {
16672 context = context.parentNode;
16673 }
16674
16675 selector = selector.slice( tokens.shift().value.length );
16676 }
16677
16678 // Fetch a seed set for right-to-left matching
16679 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16680 while ( i-- ) {
16681 token = tokens[i];
16682
16683 // Abort if we hit a combinator
16684 if ( Expr.relative[ (type = token.type) ] ) {
16685 break;
16686 }
16687 if ( (find = Expr.find[ type ]) ) {
16688 // Search, expanding context for leading sibling combinators
16689 if ( (seed = find(
16690 token.matches[0].replace( runescape, funescape ),
16691 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16692 )) ) {
16693
16694 // If seed is empty or no tokens remain, we can return early
16695 tokens.splice( i, 1 );
16696 selector = seed.length && toSelector( tokens );
16697 if ( !selector ) {
16698 push.apply( results, seed );
16699 return results;
16700 }
16701
16702 break;
16703 }
16704 }
16705 }
16706 }
16707
16708 // Compile and execute a filtering function if one is not provided
16709 // Provide `match` to avoid retokenization if we modified the selector above
16710 ( compiled || compile( selector, match ) )(
16711 seed,
16712 context,
16713 !documentIsHTML,
16714 results,
16715 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16716 );
16717 return results;
16718 };
16719
16720 // One-time assignments
16721
16722 // Sort stability
16723 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16724
16725 // Support: Chrome 14-35+
16726 // Always assume duplicates if they aren't passed to the comparison function
16727 support.detectDuplicates = !!hasDuplicate;
16728
16729 // Initialize against the default document
16730 setDocument();
16731
16732 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16733 // Detached nodes confoundingly follow *each other*
16734 support.sortDetached = assert(function( el ) {
16735 // Should return 1, but returns 4 (following)
16736 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16737 });
16738
16739 // Support: IE<8
16740 // Prevent attribute/property "interpolation"
16741 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16742 if ( !assert(function( el ) {
16743 el.innerHTML = "<a href='#'></a>";
16744 return el.firstChild.getAttribute("href") === "#" ;
16745 }) ) {
16746 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16747 if ( !isXML ) {
16748 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16749 }
16750 });
16751 }
16752
16753 // Support: IE<9
16754 // Use defaultValue in place of getAttribute("value")
16755 if ( !support.attributes || !assert(function( el ) {
16756 el.innerHTML = "<input/>";
16757 el.firstChild.setAttribute( "value", "" );
16758 return el.firstChild.getAttribute( "value" ) === "";
16759 }) ) {
16760 addHandle( "value", function( elem, name, isXML ) {
16761 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16762 return elem.defaultValue;
16763 }
16764 });
16765 }
16766
16767 // Support: IE<9
16768 // Use getAttributeNode to fetch booleans when getAttribute lies
16769 if ( !assert(function( el ) {
16770 return el.getAttribute("disabled") == null;
16771 }) ) {
16772 addHandle( booleans, function( elem, name, isXML ) {
16773 var val;
16774 if ( !isXML ) {
16775 return elem[ name ] === true ? name.toLowerCase() :
16776 (val = elem.getAttributeNode( name )) && val.specified ?
16777 val.value :
16778 null;
16779 }
16780 });
16781 }
16782
16783 return Sizzle;
16784
16785 })( window );
16786
16787
16788
16789 jQuery.find = Sizzle;
16790 jQuery.expr = Sizzle.selectors;
16791
16792 // Deprecated
16793 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16794 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16795 jQuery.text = Sizzle.getText;
16796 jQuery.isXMLDoc = Sizzle.isXML;
16797 jQuery.contains = Sizzle.contains;
16798 jQuery.escapeSelector = Sizzle.escape;
16799
16800
16801
16802
16803 var dir = function( elem, dir, until ) {
16804 var matched = [],
16805 truncate = until !== undefined;
16806
16807 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16808 if ( elem.nodeType === 1 ) {
16809 if ( truncate && jQuery( elem ).is( until ) ) {
16810 break;
16811 }
16812 matched.push( elem );
16813 }
16814 }
16815 return matched;
16816 };
16817
16818
16819 var siblings = function( n, elem ) {
16820 var matched = [];
16821
16822 for ( ; n; n = n.nextSibling ) {
16823 if ( n.nodeType === 1 && n !== elem ) {
16824 matched.push( n );
16825 }
16826 }
16827
16828 return matched;
16829 };
16830
16831
16832 var rneedsContext = jQuery.expr.match.needsContext;
16833
16834
16835
16836 function nodeName( elem, name ) {
16837
16838 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16839
16840 };
16841 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16842
16843
16844
16845 var risSimple = /^.[^:#\[\.,]*$/;
16846
16847 // Implement the identical functionality for filter and not
16848 function winnow( elements, qualifier, not ) {
16849 if ( jQuery.isFunction( qualifier ) ) {
16850 return jQuery.grep( elements, function( elem, i ) {
16851 return !!qualifier.call( elem, i, elem ) !== not;
16852 } );
16853 }
16854
16855 // Single element
16856 if ( qualifier.nodeType ) {
16857 return jQuery.grep( elements, function( elem ) {
16858 return ( elem === qualifier ) !== not;
16859 } );
16860 }
16861
16862 // Arraylike of elements (jQuery, arguments, Array)
16863 if ( typeof qualifier !== "string" ) {
16864 return jQuery.grep( elements, function( elem ) {
16865 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16866 } );
16867 }
16868
16869 // Simple selector that can be filtered directly, removing non-Elements
16870 if ( risSimple.test( qualifier ) ) {
16871 return jQuery.filter( qualifier, elements, not );
16872 }
16873
16874 // Complex selector, compare the two sets, removing non-Elements
16875 qualifier = jQuery.filter( qualifier, elements );
16876 return jQuery.grep( elements, function( elem ) {
16877 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16878 } );
16879 }
16880
16881 jQuery.filter = function( expr, elems, not ) {
16882 var elem = elems[ 0 ];
16883
16884 if ( not ) {
16885 expr = ":not(" + expr + ")";
16886 }
16887
16888 if ( elems.length === 1 && elem.nodeType === 1 ) {
16889 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16890 }
16891
16892 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16893 return elem.nodeType === 1;
16894 } ) );
16895 };
16896
16897 jQuery.fn.extend( {
16898 find: function( selector ) {
16899 var i, ret,
16900 len = this.length,
16901 self = this;
16902
16903 if ( typeof selector !== "string" ) {
16904 return this.pushStack( jQuery( selector ).filter( function() {
16905 for ( i = 0; i < len; i++ ) {
16906 if ( jQuery.contains( self[ i ], this ) ) {
16907 return true;
16908 }
16909 }
16910 } ) );
16911 }
16912
16913 ret = this.pushStack( [] );
16914
16915 for ( i = 0; i < len; i++ ) {
16916 jQuery.find( selector, self[ i ], ret );
16917 }
16918
16919 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16920 },
16921 filter: function( selector ) {
16922 return this.pushStack( winnow( this, selector || [], false ) );
16923 },
16924 not: function( selector ) {
16925 return this.pushStack( winnow( this, selector || [], true ) );
16926 },
16927 is: function( selector ) {
16928 return !!winnow(
16929 this,
16930
16931 // If this is a positional/relative selector, check membership in the returned set
16932 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16933 typeof selector === "string" && rneedsContext.test( selector ) ?
16934 jQuery( selector ) :
16935 selector || [],
16936 false
16937 ).length;
16938 }
16939 } );
16940
16941
16942 // Initialize a jQuery object
16943
16944
16945 // A central reference to the root jQuery(document)
16946 var rootjQuery,
16947
16948 // A simple way to check for HTML strings
16949 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16950 // Strict HTML recognition (#11290: must start with <)
16951 // Shortcut simple #id case for speed
16952 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16953
16954 init = jQuery.fn.init = function( selector, context, root ) {
16955 var match, elem;
16956
16957 // HANDLE: $(""), $(null), $(undefined), $(false)
16958 if ( !selector ) {
16959 return this;
16960 }
16961
16962 // Method init() accepts an alternate rootjQuery
16963 // so migrate can support jQuery.sub (gh-2101)
16964 root = root || rootjQuery;
16965
16966 // Handle HTML strings
16967 if ( typeof selector === "string" ) {
16968 if ( selector[ 0 ] === "<" &&
16969 selector[ selector.length - 1 ] === ">" &&
16970 selector.length >= 3 ) {
16971
16972 // Assume that strings that start and end with <> are HTML and skip the regex check
16973 match = [ null, selector, null ];
16974
16975 } else {
16976 match = rquickExpr.exec( selector );
16977 }
16978
16979 // Match html or make sure no context is specified for #id
16980 if ( match && ( match[ 1 ] || !context ) ) {
16981
16982 // HANDLE: $(html) -> $(array)
16983 if ( match[ 1 ] ) {
16984 context = context instanceof jQuery ? context[ 0 ] : context;
16985
16986 // Option to run scripts is true for back-compat
16987 // Intentionally let the error be thrown if parseHTML is not present
16988 jQuery.merge( this, jQuery.parseHTML(
16989 match[ 1 ],
16990 context && context.nodeType ? context.ownerDocument || context : document,
16991 true
16992 ) );
16993
16994 // HANDLE: $(html, props)
16995 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
16996 for ( match in context ) {
16997
16998 // Properties of context are called as methods if possible
16999 if ( jQuery.isFunction( this[ match ] ) ) {
17000 this[ match ]( context[ match ] );
17001
17002 // ...and otherwise set as attributes
17003 } else {
17004 this.attr( match, context[ match ] );
17005 }
17006 }
17007 }
17008
17009 return this;
17010
17011 // HANDLE: $(#id)
17012 } else {
17013 elem = document.getElementById( match[ 2 ] );
17014
17015 if ( elem ) {
17016
17017 // Inject the element directly into the jQuery object
17018 this[ 0 ] = elem;
17019 this.length = 1;
17020 }
17021 return this;
17022 }
17023
17024 // HANDLE: $(expr, $(...))
17025 } else if ( !context || context.jquery ) {
17026 return ( context || root ).find( selector );
17027
17028 // HANDLE: $(expr, context)
17029 // (which is just equivalent to: $(context).find(expr)
17030 } else {
17031 return this.constructor( context ).find( selector );
17032 }
17033
17034 // HANDLE: $(DOMElement)
17035 } else if ( selector.nodeType ) {
17036 this[ 0 ] = selector;
17037 this.length = 1;
17038 return this;
17039
17040 // HANDLE: $(function)
17041 // Shortcut for document ready
17042 } else if ( jQuery.isFunction( selector ) ) {
17043 return root.ready !== undefined ?
17044 root.ready( selector ) :
17045
17046 // Execute immediately if ready is not present
17047 selector( jQuery );
17048 }
17049
17050 return jQuery.makeArray( selector, this );
17051 };
17052
17053 // Give the init function the jQuery prototype for later instantiation
17054 init.prototype = jQuery.fn;
17055
17056 // Initialize central reference
17057 rootjQuery = jQuery( document );
17058
17059
17060 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17061
17062 // Methods guaranteed to produce a unique set when starting from a unique set
17063 guaranteedUnique = {
17064 children: true,
17065 contents: true,
17066 next: true,
17067 prev: true
17068 };
17069
17070 jQuery.fn.extend( {
17071 has: function( target ) {
17072 var targets = jQuery( target, this ),
17073 l = targets.length;
17074
17075 return this.filter( function() {
17076 var i = 0;
17077 for ( ; i < l; i++ ) {
17078 if ( jQuery.contains( this, targets[ i ] ) ) {
17079 return true;
17080 }
17081 }
17082 } );
17083 },
17084
17085 closest: function( selectors, context ) {
17086 var cur,
17087 i = 0,
17088 l = this.length,
17089 matched = [],
17090 targets = typeof selectors !== "string" && jQuery( selectors );
17091
17092 // Positional selectors never match, since there's no _selection_ context
17093 if ( !rneedsContext.test( selectors ) ) {
17094 for ( ; i < l; i++ ) {
17095 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17096
17097 // Always skip document fragments
17098 if ( cur.nodeType < 11 && ( targets ?
17099 targets.index( cur ) > -1 :
17100
17101 // Don't pass non-elements to Sizzle
17102 cur.nodeType === 1 &&
17103 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17104
17105 matched.push( cur );
17106 break;
17107 }
17108 }
17109 }
17110 }
17111
17112 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17113 },
17114
17115 // Determine the position of an element within the set
17116 index: function( elem ) {
17117
17118 // No argument, return index in parent
17119 if ( !elem ) {
17120 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17121 }
17122
17123 // Index in selector
17124 if ( typeof elem === "string" ) {
17125 return indexOf.call( jQuery( elem ), this[ 0 ] );
17126 }
17127
17128 // Locate the position of the desired element
17129 return indexOf.call( this,
17130
17131 // If it receives a jQuery object, the first element is used
17132 elem.jquery ? elem[ 0 ] : elem
17133 );
17134 },
17135
17136 add: function( selector, context ) {
17137 return this.pushStack(
17138 jQuery.uniqueSort(
17139 jQuery.merge( this.get(), jQuery( selector, context ) )
17140 )
17141 );
17142 },
17143
17144 addBack: function( selector ) {
17145 return this.add( selector == null ?
17146 this.prevObject : this.prevObject.filter( selector )
17147 );
17148 }
17149 } );
17150
17151 function sibling( cur, dir ) {
17152 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17153 return cur;
17154 }
17155
17156 jQuery.each( {
17157 parent: function( elem ) {
17158 var parent = elem.parentNode;
17159 return parent && parent.nodeType !== 11 ? parent : null;
17160 },
17161 parents: function( elem ) {
17162 return dir( elem, "parentNode" );
17163 },
17164 parentsUntil: function( elem, i, until ) {
17165 return dir( elem, "parentNode", until );
17166 },
17167 next: function( elem ) {
17168 return sibling( elem, "nextSibling" );
17169 },
17170 prev: function( elem ) {
17171 return sibling( elem, "previousSibling" );
17172 },
17173 nextAll: function( elem ) {
17174 return dir( elem, "nextSibling" );
17175 },
17176 prevAll: function( elem ) {
17177 return dir( elem, "previousSibling" );
17178 },
17179 nextUntil: function( elem, i, until ) {
17180 return dir( elem, "nextSibling", until );
17181 },
17182 prevUntil: function( elem, i, until ) {
17183 return dir( elem, "previousSibling", until );
17184 },
17185 siblings: function( elem ) {
17186 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17187 },
17188 children: function( elem ) {
17189 return siblings( elem.firstChild );
17190 },
17191 contents: function( elem ) {
17192 if ( nodeName( elem, "iframe" ) ) {
17193 return elem.contentDocument;
17194 }
17195
17196 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17197 // Treat the template element as a regular one in browsers that
17198 // don't support it.
17199 if ( nodeName( elem, "template" ) ) {
17200 elem = elem.content || elem;
17201 }
17202
17203 return jQuery.merge( [], elem.childNodes );
17204 }
17205 }, function( name, fn ) {
17206 jQuery.fn[ name ] = function( until, selector ) {
17207 var matched = jQuery.map( this, fn, until );
17208
17209 if ( name.slice( -5 ) !== "Until" ) {
17210 selector = until;
17211 }
17212
17213 if ( selector && typeof selector === "string" ) {
17214 matched = jQuery.filter( selector, matched );
17215 }
17216
17217 if ( this.length > 1 ) {
17218
17219 // Remove duplicates
17220 if ( !guaranteedUnique[ name ] ) {
17221 jQuery.uniqueSort( matched );
17222 }
17223
17224 // Reverse order for parents* and prev-derivatives
17225 if ( rparentsprev.test( name ) ) {
17226 matched.reverse();
17227 }
17228 }
17229
17230 return this.pushStack( matched );
17231 };
17232 } );
17233 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17234
17235
17236
17237 // Convert String-formatted options into Object-formatted ones
17238 function createOptions( options ) {
17239 var object = {};
17240 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17241 object[ flag ] = true;
17242 } );
17243 return object;
17244 }
17245
17246 /*
17247 * Create a callback list using the following parameters:
17248 *
17249 * options: an optional list of space-separated options that will change how
17250 * the callback list behaves or a more traditional option object
17251 *
17252 * By default a callback list will act like an event callback list and can be
17253 * "fired" multiple times.
17254 *
17255 * Possible options:
17256 *
17257 * once: will ensure the callback list can only be fired once (like a Deferred)
17258 *
17259 * memory: will keep track of previous values and will call any callback added
17260 * after the list has been fired right away with the latest "memorized"
17261 * values (like a Deferred)
17262 *
17263 * unique: will ensure a callback can only be added once (no duplicate in the list)
17264 *
17265 * stopOnFalse: interrupt callings when a callback returns false
17266 *
17267 */
17268 jQuery.Callbacks = function( options ) {
17269
17270 // Convert options from String-formatted to Object-formatted if needed
17271 // (we check in cache first)
17272 options = typeof options === "string" ?
17273 createOptions( options ) :
17274 jQuery.extend( {}, options );
17275
17276 var // Flag to know if list is currently firing
17277 firing,
17278
17279 // Last fire value for non-forgettable lists
17280 memory,
17281
17282 // Flag to know if list was already fired
17283 fired,
17284
17285 // Flag to prevent firing
17286 locked,
17287
17288 // Actual callback list
17289 list = [],
17290
17291 // Queue of execution data for repeatable lists
17292 queue = [],
17293
17294 // Index of currently firing callback (modified by add/remove as needed)
17295 firingIndex = -1,
17296
17297 // Fire callbacks
17298 fire = function() {
17299
17300 // Enforce single-firing
17301 locked = locked || options.once;
17302
17303 // Execute callbacks for all pending executions,
17304 // respecting firingIndex overrides and runtime changes
17305 fired = firing = true;
17306 for ( ; queue.length; firingIndex = -1 ) {
17307 memory = queue.shift();
17308 while ( ++firingIndex < list.length ) {
17309
17310 // Run callback and check for early termination
17311 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17312 options.stopOnFalse ) {
17313
17314 // Jump to end and forget the data so .add doesn't re-fire
17315 firingIndex = list.length;
17316 memory = false;
17317 }
17318 }
17319 }
17320
17321 // Forget the data if we're done with it
17322 if ( !options.memory ) {
17323 memory = false;
17324 }
17325
17326 firing = false;
17327
17328 // Clean up if we're done firing for good
17329 if ( locked ) {
17330
17331 // Keep an empty list if we have data for future add calls
17332 if ( memory ) {
17333 list = [];
17334
17335 // Otherwise, this object is spent
17336 } else {
17337 list = "";
17338 }
17339 }
17340 },
17341
17342 // Actual Callbacks object
17343 self = {
17344
17345 // Add a callback or a collection of callbacks to the list
17346 add: function() {
17347 if ( list ) {
17348
17349 // If we have memory from a past run, we should fire after adding
17350 if ( memory && !firing ) {
17351 firingIndex = list.length - 1;
17352 queue.push( memory );
17353 }
17354
17355 ( function add( args ) {
17356 jQuery.each( args, function( _, arg ) {
17357 if ( jQuery.isFunction( arg ) ) {
17358 if ( !options.unique || !self.has( arg ) ) {
17359 list.push( arg );
17360 }
17361 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17362
17363 // Inspect recursively
17364 add( arg );
17365 }
17366 } );
17367 } )( arguments );
17368
17369 if ( memory && !firing ) {
17370 fire();
17371 }
17372 }
17373 return this;
17374 },
17375
17376 // Remove a callback from the list
17377 remove: function() {
17378 jQuery.each( arguments, function( _, arg ) {
17379 var index;
17380 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17381 list.splice( index, 1 );
17382
17383 // Handle firing indexes
17384 if ( index <= firingIndex ) {
17385 firingIndex--;
17386 }
17387 }
17388 } );
17389 return this;
17390 },
17391
17392 // Check if a given callback is in the list.
17393 // If no argument is given, return whether or not list has callbacks attached.
17394 has: function( fn ) {
17395 return fn ?
17396 jQuery.inArray( fn, list ) > -1 :
17397 list.length > 0;
17398 },
17399
17400 // Remove all callbacks from the list
17401 empty: function() {
17402 if ( list ) {
17403 list = [];
17404 }
17405 return this;
17406 },
17407
17408 // Disable .fire and .add
17409 // Abort any current/pending executions
17410 // Clear all callbacks and values
17411 disable: function() {
17412 locked = queue = [];
17413 list = memory = "";
17414 return this;
17415 },
17416 disabled: function() {
17417 return !list;
17418 },
17419
17420 // Disable .fire
17421 // Also disable .add unless we have memory (since it would have no effect)
17422 // Abort any pending executions
17423 lock: function() {
17424 locked = queue = [];
17425 if ( !memory && !firing ) {
17426 list = memory = "";
17427 }
17428 return this;
17429 },
17430 locked: function() {
17431 return !!locked;
17432 },
17433
17434 // Call all callbacks with the given context and arguments
17435 fireWith: function( context, args ) {
17436 if ( !locked ) {
17437 args = args || [];
17438 args = [ context, args.slice ? args.slice() : args ];
17439 queue.push( args );
17440 if ( !firing ) {
17441 fire();
17442 }
17443 }
17444 return this;
17445 },
17446
17447 // Call all the callbacks with the given arguments
17448 fire: function() {
17449 self.fireWith( this, arguments );
17450 return this;
17451 },
17452
17453 // To know if the callbacks have already been called at least once
17454 fired: function() {
17455 return !!fired;
17456 }
17457 };
17458
17459 return self;
17460 };
17461
17462
17463 function Identity( v ) {
17464 return v;
17465 }
17466 function Thrower( ex ) {
17467 throw ex;
17468 }
17469
17470 function adoptValue( value, resolve, reject, noValue ) {
17471 var method;
17472
17473 try {
17474
17475 // Check for promise aspect first to privilege synchronous behavior
17476 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17477 method.call( value ).done( resolve ).fail( reject );
17478
17479 // Other thenables
17480 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17481 method.call( value, resolve, reject );
17482
17483 // Other non-thenables
17484 } else {
17485
17486 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17487 // * false: [ value ].slice( 0 ) => resolve( value )
17488 // * true: [ value ].slice( 1 ) => resolve()
17489 resolve.apply( undefined, [ value ].slice( noValue ) );
17490 }
17491
17492 // For Promises/A+, convert exceptions into rejections
17493 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17494 // Deferred#then to conditionally suppress rejection.
17495 } catch ( value ) {
17496
17497 // Support: Android 4.0 only
17498 // Strict mode functions invoked without .call/.apply get global-object context
17499 reject.apply( undefined, [ value ] );
17500 }
17501 }
17502
17503 jQuery.extend( {
17504
17505 Deferred: function( func ) {
17506 var tuples = [
17507
17508 // action, add listener, callbacks,
17509 // ... .then handlers, argument index, [final state]
17510 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17511 jQuery.Callbacks( "memory" ), 2 ],
17512 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17513 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17514 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17515 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17516 ],
17517 state = "pending",
17518 promise = {
17519 state: function() {
17520 return state;
17521 },
17522 always: function() {
17523 deferred.done( arguments ).fail( arguments );
17524 return this;
17525 },
17526 "catch": function( fn ) {
17527 return promise.then( null, fn );
17528 },
17529
17530 // Keep pipe for back-compat
17531 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17532 var fns = arguments;
17533
17534 return jQuery.Deferred( function( newDefer ) {
17535 jQuery.each( tuples, function( i, tuple ) {
17536
17537 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17538 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17539
17540 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17541 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17542 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17543 deferred[ tuple[ 1 ] ]( function() {
17544 var returned = fn && fn.apply( this, arguments );
17545 if ( returned && jQuery.isFunction( returned.promise ) ) {
17546 returned.promise()
17547 .progress( newDefer.notify )
17548 .done( newDefer.resolve )
17549 .fail( newDefer.reject );
17550 } else {
17551 newDefer[ tuple[ 0 ] + "With" ](
17552 this,
17553 fn ? [ returned ] : arguments
17554 );
17555 }
17556 } );
17557 } );
17558 fns = null;
17559 } ).promise();
17560 },
17561 then: function( onFulfilled, onRejected, onProgress ) {
17562 var maxDepth = 0;
17563 function resolve( depth, deferred, handler, special ) {
17564 return function() {
17565 var that = this,
17566 args = arguments,
17567 mightThrow = function() {
17568 var returned, then;
17569
17570 // Support: Promises/A+ section 2.3.3.3.3
17571 // https://promisesaplus.com/#point-59
17572 // Ignore double-resolution attempts
17573 if ( depth < maxDepth ) {
17574 return;
17575 }
17576
17577 returned = handler.apply( that, args );
17578
17579 // Support: Promises/A+ section 2.3.1
17580 // https://promisesaplus.com/#point-48
17581 if ( returned === deferred.promise() ) {
17582 throw new TypeError( "Thenable self-resolution" );
17583 }
17584
17585 // Support: Promises/A+ sections 2.3.3.1, 3.5
17586 // https://promisesaplus.com/#point-54
17587 // https://promisesaplus.com/#point-75
17588 // Retrieve `then` only once
17589 then = returned &&
17590
17591 // Support: Promises/A+ section 2.3.4
17592 // https://promisesaplus.com/#point-64
17593 // Only check objects and functions for thenability
17594 ( typeof returned === "object" ||
17595 typeof returned === "function" ) &&
17596 returned.then;
17597
17598 // Handle a returned thenable
17599 if ( jQuery.isFunction( then ) ) {
17600
17601 // Special processors (notify) just wait for resolution
17602 if ( special ) {
17603 then.call(
17604 returned,
17605 resolve( maxDepth, deferred, Identity, special ),
17606 resolve( maxDepth, deferred, Thrower, special )
17607 );
17608
17609 // Normal processors (resolve) also hook into progress
17610 } else {
17611
17612 // ...and disregard older resolution values
17613 maxDepth++;
17614
17615 then.call(
17616 returned,
17617 resolve( maxDepth, deferred, Identity, special ),
17618 resolve( maxDepth, deferred, Thrower, special ),
17619 resolve( maxDepth, deferred, Identity,
17620 deferred.notifyWith )
17621 );
17622 }
17623
17624 // Handle all other returned values
17625 } else {
17626
17627 // Only substitute handlers pass on context
17628 // and multiple values (non-spec behavior)
17629 if ( handler !== Identity ) {
17630 that = undefined;
17631 args = [ returned ];
17632 }
17633
17634 // Process the value(s)
17635 // Default process is resolve
17636 ( special || deferred.resolveWith )( that, args );
17637 }
17638 },
17639
17640 // Only normal processors (resolve) catch and reject exceptions
17641 process = special ?
17642 mightThrow :
17643 function() {
17644 try {
17645 mightThrow();
17646 } catch ( e ) {
17647
17648 if ( jQuery.Deferred.exceptionHook ) {
17649 jQuery.Deferred.exceptionHook( e,
17650 process.stackTrace );
17651 }
17652
17653 // Support: Promises/A+ section 2.3.3.3.4.1
17654 // https://promisesaplus.com/#point-61
17655 // Ignore post-resolution exceptions
17656 if ( depth + 1 >= maxDepth ) {
17657
17658 // Only substitute handlers pass on context
17659 // and multiple values (non-spec behavior)
17660 if ( handler !== Thrower ) {
17661 that = undefined;
17662 args = [ e ];
17663 }
17664
17665 deferred.rejectWith( that, args );
17666 }
17667 }
17668 };
17669
17670 // Support: Promises/A+ section 2.3.3.3.1
17671 // https://promisesaplus.com/#point-57
17672 // Re-resolve promises immediately to dodge false rejection from
17673 // subsequent errors
17674 if ( depth ) {
17675 process();
17676 } else {
17677
17678 // Call an optional hook to record the stack, in case of exception
17679 // since it's otherwise lost when execution goes async
17680 if ( jQuery.Deferred.getStackHook ) {
17681 process.stackTrace = jQuery.Deferred.getStackHook();
17682 }
17683 window.setTimeout( process );
17684 }
17685 };
17686 }
17687
17688 return jQuery.Deferred( function( newDefer ) {
17689
17690 // progress_handlers.add( ... )
17691 tuples[ 0 ][ 3 ].add(
17692 resolve(
17693 0,
17694 newDefer,
17695 jQuery.isFunction( onProgress ) ?
17696 onProgress :
17697 Identity,
17698 newDefer.notifyWith
17699 )
17700 );
17701
17702 // fulfilled_handlers.add( ... )
17703 tuples[ 1 ][ 3 ].add(
17704 resolve(
17705 0,
17706 newDefer,
17707 jQuery.isFunction( onFulfilled ) ?
17708 onFulfilled :
17709 Identity
17710 )
17711 );
17712
17713 // rejected_handlers.add( ... )
17714 tuples[ 2 ][ 3 ].add(
17715 resolve(
17716 0,
17717 newDefer,
17718 jQuery.isFunction( onRejected ) ?
17719 onRejected :
17720 Thrower
17721 )
17722 );
17723 } ).promise();
17724 },
17725
17726 // Get a promise for this deferred
17727 // If obj is provided, the promise aspect is added to the object
17728 promise: function( obj ) {
17729 return obj != null ? jQuery.extend( obj, promise ) : promise;
17730 }
17731 },
17732 deferred = {};
17733
17734 // Add list-specific methods
17735 jQuery.each( tuples, function( i, tuple ) {
17736 var list = tuple[ 2 ],
17737 stateString = tuple[ 5 ];
17738
17739 // promise.progress = list.add
17740 // promise.done = list.add
17741 // promise.fail = list.add
17742 promise[ tuple[ 1 ] ] = list.add;
17743
17744 // Handle state
17745 if ( stateString ) {
17746 list.add(
17747 function() {
17748
17749 // state = "resolved" (i.e., fulfilled)
17750 // state = "rejected"
17751 state = stateString;
17752 },
17753
17754 // rejected_callbacks.disable
17755 // fulfilled_callbacks.disable
17756 tuples[ 3 - i ][ 2 ].disable,
17757
17758 // progress_callbacks.lock
17759 tuples[ 0 ][ 2 ].lock
17760 );
17761 }
17762
17763 // progress_handlers.fire
17764 // fulfilled_handlers.fire
17765 // rejected_handlers.fire
17766 list.add( tuple[ 3 ].fire );
17767
17768 // deferred.notify = function() { deferred.notifyWith(...) }
17769 // deferred.resolve = function() { deferred.resolveWith(...) }
17770 // deferred.reject = function() { deferred.rejectWith(...) }
17771 deferred[ tuple[ 0 ] ] = function() {
17772 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17773 return this;
17774 };
17775
17776 // deferred.notifyWith = list.fireWith
17777 // deferred.resolveWith = list.fireWith
17778 // deferred.rejectWith = list.fireWith
17779 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17780 } );
17781
17782 // Make the deferred a promise
17783 promise.promise( deferred );
17784
17785 // Call given func if any
17786 if ( func ) {
17787 func.call( deferred, deferred );
17788 }
17789
17790 // All done!
17791 return deferred;
17792 },
17793
17794 // Deferred helper
17795 when: function( singleValue ) {
17796 var
17797
17798 // count of uncompleted subordinates
17799 remaining = arguments.length,
17800
17801 // count of unprocessed arguments
17802 i = remaining,
17803
17804 // subordinate fulfillment data
17805 resolveContexts = Array( i ),
17806 resolveValues = slice.call( arguments ),
17807
17808 // the master Deferred
17809 master = jQuery.Deferred(),
17810
17811 // subordinate callback factory
17812 updateFunc = function( i ) {
17813 return function( value ) {
17814 resolveContexts[ i ] = this;
17815 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17816 if ( !( --remaining ) ) {
17817 master.resolveWith( resolveContexts, resolveValues );
17818 }
17819 };
17820 };
17821
17822 // Single- and empty arguments are adopted like Promise.resolve
17823 if ( remaining <= 1 ) {
17824 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17825 !remaining );
17826
17827 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17828 if ( master.state() === "pending" ||
17829 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17830
17831 return master.then();
17832 }
17833 }
17834
17835 // Multiple arguments are aggregated like Promise.all array elements
17836 while ( i-- ) {
17837 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17838 }
17839
17840 return master.promise();
17841 }
17842 } );
17843
17844
17845 // These usually indicate a programmer mistake during development,
17846 // warn about them ASAP rather than swallowing them by default.
17847 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17848
17849 jQuery.Deferred.exceptionHook = function( error, stack ) {
17850
17851 // Support: IE 8 - 9 only
17852 // Console exists when dev tools are open, which can happen at any time
17853 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17854 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17855 }
17856 };
17857
17858
17859
17860
17861 jQuery.readyException = function( error ) {
17862 window.setTimeout( function() {
17863 throw error;
17864 } );
17865 };
17866
17867
17868
17869
17870 // The deferred used on DOM ready
17871 var readyList = jQuery.Deferred();
17872
17873 jQuery.fn.ready = function( fn ) {
17874
17875 readyList
17876 .then( fn )
17877
17878 // Wrap jQuery.readyException in a function so that the lookup
17879 // happens at the time of error handling instead of callback
17880 // registration.
17881 .catch( function( error ) {
17882 jQuery.readyException( error );
17883 } );
17884
17885 return this;
17886 };
17887
17888 jQuery.extend( {
17889
17890 // Is the DOM ready to be used? Set to true once it occurs.
17891 isReady: false,
17892
17893 // A counter to track how many items to wait for before
17894 // the ready event fires. See #6781
17895 readyWait: 1,
17896
17897 // Handle when the DOM is ready
17898 ready: function( wait ) {
17899
17900 // Abort if there are pending holds or we're already ready
17901 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17902 return;
17903 }
17904
17905 // Remember that the DOM is ready
17906 jQuery.isReady = true;
17907
17908 // If a normal DOM Ready event fired, decrement, and wait if need be
17909 if ( wait !== true && --jQuery.readyWait > 0 ) {
17910 return;
17911 }
17912
17913 // If there are functions bound, to execute
17914 readyList.resolveWith( document, [ jQuery ] );
17915 }
17916 } );
17917
17918 jQuery.ready.then = readyList.then;
17919
17920 // The ready event handler and self cleanup method
17921 function completed() {
17922 document.removeEventListener( "DOMContentLoaded", completed );
17923 window.removeEventListener( "load", completed );
17924 jQuery.ready();
17925 }
17926
17927 // Catch cases where $(document).ready() is called
17928 // after the browser event has already occurred.
17929 // Support: IE <=9 - 10 only
17930 // Older IE sometimes signals "interactive" too soon
17931 if ( document.readyState === "complete" ||
17932 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17933
17934 // Handle it asynchronously to allow scripts the opportunity to delay ready
17935 window.setTimeout( jQuery.ready );
17936
17937 } else {
17938
17939 // Use the handy event callback
17940 document.addEventListener( "DOMContentLoaded", completed );
17941
17942 // A fallback to window.onload, that will always work
17943 window.addEventListener( "load", completed );
17944 }
17945
17946
17947
17948
17949 // Multifunctional method to get and set values of a collection
17950 // The value/s can optionally be executed if it's a function
17951 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17952 var i = 0,
17953 len = elems.length,
17954 bulk = key == null;
17955
17956 // Sets many values
17957 if ( jQuery.type( key ) === "object" ) {
17958 chainable = true;
17959 for ( i in key ) {
17960 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17961 }
17962
17963 // Sets one value
17964 } else if ( value !== undefined ) {
17965 chainable = true;
17966
17967 if ( !jQuery.isFunction( value ) ) {
17968 raw = true;
17969 }
17970
17971 if ( bulk ) {
17972
17973 // Bulk operations run against the entire set
17974 if ( raw ) {
17975 fn.call( elems, value );
17976 fn = null;
17977
17978 // ...except when executing function values
17979 } else {
17980 bulk = fn;
17981 fn = function( elem, key, value ) {
17982 return bulk.call( jQuery( elem ), value );
17983 };
17984 }
17985 }
17986
17987 if ( fn ) {
17988 for ( ; i < len; i++ ) {
17989 fn(
17990 elems[ i ], key, raw ?
17991 value :
17992 value.call( elems[ i ], i, fn( elems[ i ], key ) )
17993 );
17994 }
17995 }
17996 }
17997
17998 if ( chainable ) {
17999 return elems;
18000 }
18001
18002 // Gets
18003 if ( bulk ) {
18004 return fn.call( elems );
18005 }
18006
18007 return len ? fn( elems[ 0 ], key ) : emptyGet;
18008 };
18009 var acceptData = function( owner ) {
18010
18011 // Accepts only:
18012 // - Node
18013 // - Node.ELEMENT_NODE
18014 // - Node.DOCUMENT_NODE
18015 // - Object
18016 // - Any
18017 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18018 };
18019
18020
18021
18022
18023 function Data() {
18024 this.expando = jQuery.expando + Data.uid++;
18025 }
18026
18027 Data.uid = 1;
18028
18029 Data.prototype = {
18030
18031 cache: function( owner ) {
18032
18033 // Check if the owner object already has a cache
18034 var value = owner[ this.expando ];
18035
18036 // If not, create one
18037 if ( !value ) {
18038 value = {};
18039
18040 // We can accept data for non-element nodes in modern browsers,
18041 // but we should not, see #8335.
18042 // Always return an empty object.
18043 if ( acceptData( owner ) ) {
18044
18045 // If it is a node unlikely to be stringify-ed or looped over
18046 // use plain assignment
18047 if ( owner.nodeType ) {
18048 owner[ this.expando ] = value;
18049
18050 // Otherwise secure it in a non-enumerable property
18051 // configurable must be true to allow the property to be
18052 // deleted when data is removed
18053 } else {
18054 Object.defineProperty( owner, this.expando, {
18055 value: value,
18056 configurable: true
18057 } );
18058 }
18059 }
18060 }
18061
18062 return value;
18063 },
18064 set: function( owner, data, value ) {
18065 var prop,
18066 cache = this.cache( owner );
18067
18068 // Handle: [ owner, key, value ] args
18069 // Always use camelCase key (gh-2257)
18070 if ( typeof data === "string" ) {
18071 cache[ jQuery.camelCase( data ) ] = value;
18072
18073 // Handle: [ owner, { properties } ] args
18074 } else {
18075
18076 // Copy the properties one-by-one to the cache object
18077 for ( prop in data ) {
18078 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18079 }
18080 }
18081 return cache;
18082 },
18083 get: function( owner, key ) {
18084 return key === undefined ?
18085 this.cache( owner ) :
18086
18087 // Always use camelCase key (gh-2257)
18088 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18089 },
18090 access: function( owner, key, value ) {
18091
18092 // In cases where either:
18093 //
18094 // 1. No key was specified
18095 // 2. A string key was specified, but no value provided
18096 //
18097 // Take the "read" path and allow the get method to determine
18098 // which value to return, respectively either:
18099 //
18100 // 1. The entire cache object
18101 // 2. The data stored at the key
18102 //
18103 if ( key === undefined ||
18104 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18105
18106 return this.get( owner, key );
18107 }
18108
18109 // When the key is not a string, or both a key and value
18110 // are specified, set or extend (existing objects) with either:
18111 //
18112 // 1. An object of properties
18113 // 2. A key and value
18114 //
18115 this.set( owner, key, value );
18116
18117 // Since the "set" path can have two possible entry points
18118 // return the expected data based on which path was taken[*]
18119 return value !== undefined ? value : key;
18120 },
18121 remove: function( owner, key ) {
18122 var i,
18123 cache = owner[ this.expando ];
18124
18125 if ( cache === undefined ) {
18126 return;
18127 }
18128
18129 if ( key !== undefined ) {
18130
18131 // Support array or space separated string of keys
18132 if ( Array.isArray( key ) ) {
18133
18134 // If key is an array of keys...
18135 // We always set camelCase keys, so remove that.
18136 key = key.map( jQuery.camelCase );
18137 } else {
18138 key = jQuery.camelCase( key );
18139
18140 // If a key with the spaces exists, use it.
18141 // Otherwise, create an array by matching non-whitespace
18142 key = key in cache ?
18143 [ key ] :
18144 ( key.match( rnothtmlwhite ) || [] );
18145 }
18146
18147 i = key.length;
18148
18149 while ( i-- ) {
18150 delete cache[ key[ i ] ];
18151 }
18152 }
18153
18154 // Remove the expando if there's no more data
18155 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18156
18157 // Support: Chrome <=35 - 45
18158 // Webkit & Blink performance suffers when deleting properties
18159 // from DOM nodes, so set to undefined instead
18160 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18161 if ( owner.nodeType ) {
18162 owner[ this.expando ] = undefined;
18163 } else {
18164 delete owner[ this.expando ];
18165 }
18166 }
18167 },
18168 hasData: function( owner ) {
18169 var cache = owner[ this.expando ];
18170 return cache !== undefined && !jQuery.isEmptyObject( cache );
18171 }
18172 };
18173 var dataPriv = new Data();
18174
18175 var dataUser = new Data();
18176
18177
18178
18179 // Implementation Summary
18180 //
18181 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18182 // 2. Improve the module's maintainability by reducing the storage
18183 // paths to a single mechanism.
18184 // 3. Use the same single mechanism to support "private" and "user" data.
18185 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18186 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18187 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18188
18189 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18190 rmultiDash = /[A-Z]/g;
18191
18192 function getData( data ) {
18193 if ( data === "true" ) {
18194 return true;
18195 }
18196
18197 if ( data === "false" ) {
18198 return false;
18199 }
18200
18201 if ( data === "null" ) {
18202 return null;
18203 }
18204
18205 // Only convert to a number if it doesn't change the string
18206 if ( data === +data + "" ) {
18207 return +data;
18208 }
18209
18210 if ( rbrace.test( data ) ) {
18211 return JSON.parse( data );
18212 }
18213
18214 return data;
18215 }
18216
18217 function dataAttr( elem, key, data ) {
18218 var name;
18219
18220 // If nothing was found internally, try to fetch any
18221 // data from the HTML5 data-* attribute
18222 if ( data === undefined && elem.nodeType === 1 ) {
18223 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18224 data = elem.getAttribute( name );
18225
18226 if ( typeof data === "string" ) {
18227 try {
18228 data = getData( data );
18229 } catch ( e ) {}
18230
18231 // Make sure we set the data so it isn't changed later
18232 dataUser.set( elem, key, data );
18233 } else {
18234 data = undefined;
18235 }
18236 }
18237 return data;
18238 }
18239
18240 jQuery.extend( {
18241 hasData: function( elem ) {
18242 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18243 },
18244
18245 data: function( elem, name, data ) {
18246 return dataUser.access( elem, name, data );
18247 },
18248
18249 removeData: function( elem, name ) {
18250 dataUser.remove( elem, name );
18251 },
18252
18253 // TODO: Now that all calls to _data and _removeData have been replaced
18254 // with direct calls to dataPriv methods, these can be deprecated.
18255 _data: function( elem, name, data ) {
18256 return dataPriv.access( elem, name, data );
18257 },
18258
18259 _removeData: function( elem, name ) {
18260 dataPriv.remove( elem, name );
18261 }
18262 } );
18263
18264 jQuery.fn.extend( {
18265 data: function( key, value ) {
18266 var i, name, data,
18267 elem = this[ 0 ],
18268 attrs = elem && elem.attributes;
18269
18270 // Gets all values
18271 if ( key === undefined ) {
18272 if ( this.length ) {
18273 data = dataUser.get( elem );
18274
18275 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18276 i = attrs.length;
18277 while ( i-- ) {
18278
18279 // Support: IE 11 only
18280 // The attrs elements can be null (#14894)
18281 if ( attrs[ i ] ) {
18282 name = attrs[ i ].name;
18283 if ( name.indexOf( "data-" ) === 0 ) {
18284 name = jQuery.camelCase( name.slice( 5 ) );
18285 dataAttr( elem, name, data[ name ] );
18286 }
18287 }
18288 }
18289 dataPriv.set( elem, "hasDataAttrs", true );
18290 }
18291 }
18292
18293 return data;
18294 }
18295
18296 // Sets multiple values
18297 if ( typeof key === "object" ) {
18298 return this.each( function() {
18299 dataUser.set( this, key );
18300 } );
18301 }
18302
18303 return access( this, function( value ) {
18304 var data;
18305
18306 // The calling jQuery object (element matches) is not empty
18307 // (and therefore has an element appears at this[ 0 ]) and the
18308 // `value` parameter was not undefined. An empty jQuery object
18309 // will result in `undefined` for elem = this[ 0 ] which will
18310 // throw an exception if an attempt to read a data cache is made.
18311 if ( elem && value === undefined ) {
18312
18313 // Attempt to get data from the cache
18314 // The key will always be camelCased in Data
18315 data = dataUser.get( elem, key );
18316 if ( data !== undefined ) {
18317 return data;
18318 }
18319
18320 // Attempt to "discover" the data in
18321 // HTML5 custom data-* attrs
18322 data = dataAttr( elem, key );
18323 if ( data !== undefined ) {
18324 return data;
18325 }
18326
18327 // We tried really hard, but the data doesn't exist.
18328 return;
18329 }
18330
18331 // Set the data...
18332 this.each( function() {
18333
18334 // We always store the camelCased key
18335 dataUser.set( this, key, value );
18336 } );
18337 }, null, value, arguments.length > 1, null, true );
18338 },
18339
18340 removeData: function( key ) {
18341 return this.each( function() {
18342 dataUser.remove( this, key );
18343 } );
18344 }
18345 } );
18346
18347
18348 jQuery.extend( {
18349 queue: function( elem, type, data ) {
18350 var queue;
18351
18352 if ( elem ) {
18353 type = ( type || "fx" ) + "queue";
18354 queue = dataPriv.get( elem, type );
18355
18356 // Speed up dequeue by getting out quickly if this is just a lookup
18357 if ( data ) {
18358 if ( !queue || Array.isArray( data ) ) {
18359 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18360 } else {
18361 queue.push( data );
18362 }
18363 }
18364 return queue || [];
18365 }
18366 },
18367
18368 dequeue: function( elem, type ) {
18369 type = type || "fx";
18370
18371 var queue = jQuery.queue( elem, type ),
18372 startLength = queue.length,
18373 fn = queue.shift(),
18374 hooks = jQuery._queueHooks( elem, type ),
18375 next = function() {
18376 jQuery.dequeue( elem, type );
18377 };
18378
18379 // If the fx queue is dequeued, always remove the progress sentinel
18380 if ( fn === "inprogress" ) {
18381 fn = queue.shift();
18382 startLength--;
18383 }
18384
18385 if ( fn ) {
18386
18387 // Add a progress sentinel to prevent the fx queue from being
18388 // automatically dequeued
18389 if ( type === "fx" ) {
18390 queue.unshift( "inprogress" );
18391 }
18392
18393 // Clear up the last queue stop function
18394 delete hooks.stop;
18395 fn.call( elem, next, hooks );
18396 }
18397
18398 if ( !startLength && hooks ) {
18399 hooks.empty.fire();
18400 }
18401 },
18402
18403 // Not public - generate a queueHooks object, or return the current one
18404 _queueHooks: function( elem, type ) {
18405 var key = type + "queueHooks";
18406 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18407 empty: jQuery.Callbacks( "once memory" ).add( function() {
18408 dataPriv.remove( elem, [ type + "queue", key ] );
18409 } )
18410 } );
18411 }
18412 } );
18413
18414 jQuery.fn.extend( {
18415 queue: function( type, data ) {
18416 var setter = 2;
18417
18418 if ( typeof type !== "string" ) {
18419 data = type;
18420 type = "fx";
18421 setter--;
18422 }
18423
18424 if ( arguments.length < setter ) {
18425 return jQuery.queue( this[ 0 ], type );
18426 }
18427
18428 return data === undefined ?
18429 this :
18430 this.each( function() {
18431 var queue = jQuery.queue( this, type, data );
18432
18433 // Ensure a hooks for this queue
18434 jQuery._queueHooks( this, type );
18435
18436 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18437 jQuery.dequeue( this, type );
18438 }
18439 } );
18440 },
18441 dequeue: function( type ) {
18442 return this.each( function() {
18443 jQuery.dequeue( this, type );
18444 } );
18445 },
18446 clearQueue: function( type ) {
18447 return this.queue( type || "fx", [] );
18448 },
18449
18450 // Get a promise resolved when queues of a certain type
18451 // are emptied (fx is the type by default)
18452 promise: function( type, obj ) {
18453 var tmp,
18454 count = 1,
18455 defer = jQuery.Deferred(),
18456 elements = this,
18457 i = this.length,
18458 resolve = function() {
18459 if ( !( --count ) ) {
18460 defer.resolveWith( elements, [ elements ] );
18461 }
18462 };
18463
18464 if ( typeof type !== "string" ) {
18465 obj = type;
18466 type = undefined;
18467 }
18468 type = type || "fx";
18469
18470 while ( i-- ) {
18471 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18472 if ( tmp && tmp.empty ) {
18473 count++;
18474 tmp.empty.add( resolve );
18475 }
18476 }
18477 resolve();
18478 return defer.promise( obj );
18479 }
18480 } );
18481 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18482
18483 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18484
18485
18486 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18487
18488 var isHiddenWithinTree = function( elem, el ) {
18489
18490 // isHiddenWithinTree might be called from jQuery#filter function;
18491 // in that case, element will be second argument
18492 elem = el || elem;
18493
18494 // Inline style trumps all
18495 return elem.style.display === "none" ||
18496 elem.style.display === "" &&
18497
18498 // Otherwise, check computed style
18499 // Support: Firefox <=43 - 45
18500 // Disconnected elements can have computed display: none, so first confirm that elem is
18501 // in the document.
18502 jQuery.contains( elem.ownerDocument, elem ) &&
18503
18504 jQuery.css( elem, "display" ) === "none";
18505 };
18506
18507 var swap = function( elem, options, callback, args ) {
18508 var ret, name,
18509 old = {};
18510
18511 // Remember the old values, and insert the new ones
18512 for ( name in options ) {
18513 old[ name ] = elem.style[ name ];
18514 elem.style[ name ] = options[ name ];
18515 }
18516
18517 ret = callback.apply( elem, args || [] );
18518
18519 // Revert the old values
18520 for ( name in options ) {
18521 elem.style[ name ] = old[ name ];
18522 }
18523
18524 return ret;
18525 };
18526
18527
18528
18529
18530 function adjustCSS( elem, prop, valueParts, tween ) {
18531 var adjusted,
18532 scale = 1,
18533 maxIterations = 20,
18534 currentValue = tween ?
18535 function() {
18536 return tween.cur();
18537 } :
18538 function() {
18539 return jQuery.css( elem, prop, "" );
18540 },
18541 initial = currentValue(),
18542 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18543
18544 // Starting value computation is required for potential unit mismatches
18545 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18546 rcssNum.exec( jQuery.css( elem, prop ) );
18547
18548 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18549
18550 // Trust units reported by jQuery.css
18551 unit = unit || initialInUnit[ 3 ];
18552
18553 // Make sure we update the tween properties later on
18554 valueParts = valueParts || [];
18555
18556 // Iteratively approximate from a nonzero starting point
18557 initialInUnit = +initial || 1;
18558
18559 do {
18560
18561 // If previous iteration zeroed out, double until we get *something*.
18562 // Use string for doubling so we don't accidentally see scale as unchanged below
18563 scale = scale || ".5";
18564
18565 // Adjust and apply
18566 initialInUnit = initialInUnit / scale;
18567 jQuery.style( elem, prop, initialInUnit + unit );
18568
18569 // Update scale, tolerating zero or NaN from tween.cur()
18570 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18571 } while (
18572 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18573 );
18574 }
18575
18576 if ( valueParts ) {
18577 initialInUnit = +initialInUnit || +initial || 0;
18578
18579 // Apply relative offset (+=/-=) if specified
18580 adjusted = valueParts[ 1 ] ?
18581 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18582 +valueParts[ 2 ];
18583 if ( tween ) {
18584 tween.unit = unit;
18585 tween.start = initialInUnit;
18586 tween.end = adjusted;
18587 }
18588 }
18589 return adjusted;
18590 }
18591
18592
18593 var defaultDisplayMap = {};
18594
18595 function getDefaultDisplay( elem ) {
18596 var temp,
18597 doc = elem.ownerDocument,
18598 nodeName = elem.nodeName,
18599 display = defaultDisplayMap[ nodeName ];
18600
18601 if ( display ) {
18602 return display;
18603 }
18604
18605 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18606 display = jQuery.css( temp, "display" );
18607
18608 temp.parentNode.removeChild( temp );
18609
18610 if ( display === "none" ) {
18611 display = "block";
18612 }
18613 defaultDisplayMap[ nodeName ] = display;
18614
18615 return display;
18616 }
18617
18618 function showHide( elements, show ) {
18619 var display, elem,
18620 values = [],
18621 index = 0,
18622 length = elements.length;
18623
18624 // Determine new display value for elements that need to change
18625 for ( ; index < length; index++ ) {
18626 elem = elements[ index ];
18627 if ( !elem.style ) {
18628 continue;
18629 }
18630
18631 display = elem.style.display;
18632 if ( show ) {
18633
18634 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18635 // check is required in this first loop unless we have a nonempty display value (either
18636 // inline or about-to-be-restored)
18637 if ( display === "none" ) {
18638 values[ index ] = dataPriv.get( elem, "display" ) || null;
18639 if ( !values[ index ] ) {
18640 elem.style.display = "";
18641 }
18642 }
18643 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18644 values[ index ] = getDefaultDisplay( elem );
18645 }
18646 } else {
18647 if ( display !== "none" ) {
18648 values[ index ] = "none";
18649
18650 // Remember what we're overwriting
18651 dataPriv.set( elem, "display", display );
18652 }
18653 }
18654 }
18655
18656 // Set the display of the elements in a second loop to avoid constant reflow
18657 for ( index = 0; index < length; index++ ) {
18658 if ( values[ index ] != null ) {
18659 elements[ index ].style.display = values[ index ];
18660 }
18661 }
18662
18663 return elements;
18664 }
18665
18666 jQuery.fn.extend( {
18667 show: function() {
18668 return showHide( this, true );
18669 },
18670 hide: function() {
18671 return showHide( this );
18672 },
18673 toggle: function( state ) {
18674 if ( typeof state === "boolean" ) {
18675 return state ? this.show() : this.hide();
18676 }
18677
18678 return this.each( function() {
18679 if ( isHiddenWithinTree( this ) ) {
18680 jQuery( this ).show();
18681 } else {
18682 jQuery( this ).hide();
18683 }
18684 } );
18685 }
18686 } );
18687 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18688
18689 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18690
18691 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18692
18693
18694
18695 // We have to close these tags to support XHTML (#13200)
18696 var wrapMap = {
18697
18698 // Support: IE <=9 only
18699 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18700
18701 // XHTML parsers do not magically insert elements in the
18702 // same way that tag soup parsers do. So we cannot shorten
18703 // this by omitting <tbody> or other required elements.
18704 thead: [ 1, "<table>", "</table>" ],
18705 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18706 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18707 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18708
18709 _default: [ 0, "", "" ]
18710 };
18711
18712 // Support: IE <=9 only
18713 wrapMap.optgroup = wrapMap.option;
18714
18715 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18716 wrapMap.th = wrapMap.td;
18717
18718
18719 function getAll( context, tag ) {
18720
18721 // Support: IE <=9 - 11 only
18722 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18723 var ret;
18724
18725 if ( typeof context.getElementsByTagName !== "undefined" ) {
18726 ret = context.getElementsByTagName( tag || "*" );
18727
18728 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18729 ret = context.querySelectorAll( tag || "*" );
18730
18731 } else {
18732 ret = [];
18733 }
18734
18735 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18736 return jQuery.merge( [ context ], ret );
18737 }
18738
18739 return ret;
18740 }
18741
18742
18743 // Mark scripts as having already been evaluated
18744 function setGlobalEval( elems, refElements ) {
18745 var i = 0,
18746 l = elems.length;
18747
18748 for ( ; i < l; i++ ) {
18749 dataPriv.set(
18750 elems[ i ],
18751 "globalEval",
18752 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18753 );
18754 }
18755 }
18756
18757
18758 var rhtml = /<|&#?\w+;/;
18759
18760 function buildFragment( elems, context, scripts, selection, ignored ) {
18761 var elem, tmp, tag, wrap, contains, j,
18762 fragment = context.createDocumentFragment(),
18763 nodes = [],
18764 i = 0,
18765 l = elems.length;
18766
18767 for ( ; i < l; i++ ) {
18768 elem = elems[ i ];
18769
18770 if ( elem || elem === 0 ) {
18771
18772 // Add nodes directly
18773 if ( jQuery.type( elem ) === "object" ) {
18774
18775 // Support: Android <=4.0 only, PhantomJS 1 only
18776 // push.apply(_, arraylike) throws on ancient WebKit
18777 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18778
18779 // Convert non-html into a text node
18780 } else if ( !rhtml.test( elem ) ) {
18781 nodes.push( context.createTextNode( elem ) );
18782
18783 // Convert html into DOM nodes
18784 } else {
18785 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18786
18787 // Deserialize a standard representation
18788 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18789 wrap = wrapMap[ tag ] || wrapMap._default;
18790 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18791
18792 // Descend through wrappers to the right content
18793 j = wrap[ 0 ];
18794 while ( j-- ) {
18795 tmp = tmp.lastChild;
18796 }
18797
18798 // Support: Android <=4.0 only, PhantomJS 1 only
18799 // push.apply(_, arraylike) throws on ancient WebKit
18800 jQuery.merge( nodes, tmp.childNodes );
18801
18802 // Remember the top-level container
18803 tmp = fragment.firstChild;
18804
18805 // Ensure the created nodes are orphaned (#12392)
18806 tmp.textContent = "";
18807 }
18808 }
18809 }
18810
18811 // Remove wrapper from fragment
18812 fragment.textContent = "";
18813
18814 i = 0;
18815 while ( ( elem = nodes[ i++ ] ) ) {
18816
18817 // Skip elements already in the context collection (trac-4087)
18818 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18819 if ( ignored ) {
18820 ignored.push( elem );
18821 }
18822 continue;
18823 }
18824
18825 contains = jQuery.contains( elem.ownerDocument, elem );
18826
18827 // Append to fragment
18828 tmp = getAll( fragment.appendChild( elem ), "script" );
18829
18830 // Preserve script evaluation history
18831 if ( contains ) {
18832 setGlobalEval( tmp );
18833 }
18834
18835 // Capture executables
18836 if ( scripts ) {
18837 j = 0;
18838 while ( ( elem = tmp[ j++ ] ) ) {
18839 if ( rscriptType.test( elem.type || "" ) ) {
18840 scripts.push( elem );
18841 }
18842 }
18843 }
18844 }
18845
18846 return fragment;
18847 }
18848
18849
18850 ( function() {
18851 var fragment = document.createDocumentFragment(),
18852 div = fragment.appendChild( document.createElement( "div" ) ),
18853 input = document.createElement( "input" );
18854
18855 // Support: Android 4.0 - 4.3 only
18856 // Check state lost if the name is set (#11217)
18857 // Support: Windows Web Apps (WWA)
18858 // `name` and `type` must use .setAttribute for WWA (#14901)
18859 input.setAttribute( "type", "radio" );
18860 input.setAttribute( "checked", "checked" );
18861 input.setAttribute( "name", "t" );
18862
18863 div.appendChild( input );
18864
18865 // Support: Android <=4.1 only
18866 // Older WebKit doesn't clone checked state correctly in fragments
18867 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18868
18869 // Support: IE <=11 only
18870 // Make sure textarea (and checkbox) defaultValue is properly cloned
18871 div.innerHTML = "<textarea>x</textarea>";
18872 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18873 } )();
18874 var documentElement = document.documentElement;
18875
18876
18877
18878 var
18879 rkeyEvent = /^key/,
18880 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18881 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18882
18883 function returnTrue() {
18884 return true;
18885 }
18886
18887 function returnFalse() {
18888 return false;
18889 }
18890
18891 // Support: IE <=9 only
18892 // See #13393 for more info
18893 function safeActiveElement() {
18894 try {
18895 return document.activeElement;
18896 } catch ( err ) { }
18897 }
18898
18899 function on( elem, types, selector, data, fn, one ) {
18900 var origFn, type;
18901
18902 // Types can be a map of types/handlers
18903 if ( typeof types === "object" ) {
18904
18905 // ( types-Object, selector, data )
18906 if ( typeof selector !== "string" ) {
18907
18908 // ( types-Object, data )
18909 data = data || selector;
18910 selector = undefined;
18911 }
18912 for ( type in types ) {
18913 on( elem, type, selector, data, types[ type ], one );
18914 }
18915 return elem;
18916 }
18917
18918 if ( data == null && fn == null ) {
18919
18920 // ( types, fn )
18921 fn = selector;
18922 data = selector = undefined;
18923 } else if ( fn == null ) {
18924 if ( typeof selector === "string" ) {
18925
18926 // ( types, selector, fn )
18927 fn = data;
18928 data = undefined;
18929 } else {
18930
18931 // ( types, data, fn )
18932 fn = data;
18933 data = selector;
18934 selector = undefined;
18935 }
18936 }
18937 if ( fn === false ) {
18938 fn = returnFalse;
18939 } else if ( !fn ) {
18940 return elem;
18941 }
18942
18943 if ( one === 1 ) {
18944 origFn = fn;
18945 fn = function( event ) {
18946
18947 // Can use an empty set, since event contains the info
18948 jQuery().off( event );
18949 return origFn.apply( this, arguments );
18950 };
18951
18952 // Use same guid so caller can remove using origFn
18953 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18954 }
18955 return elem.each( function() {
18956 jQuery.event.add( this, types, fn, data, selector );
18957 } );
18958 }
18959
18960 /*
18961 * Helper functions for managing events -- not part of the public interface.
18962 * Props to Dean Edwards' addEvent library for many of the ideas.
18963 */
18964 jQuery.event = {
18965
18966 global: {},
18967
18968 add: function( elem, types, handler, data, selector ) {
18969
18970 var handleObjIn, eventHandle, tmp,
18971 events, t, handleObj,
18972 special, handlers, type, namespaces, origType,
18973 elemData = dataPriv.get( elem );
18974
18975 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18976 if ( !elemData ) {
18977 return;
18978 }
18979
18980 // Caller can pass in an object of custom data in lieu of the handler
18981 if ( handler.handler ) {
18982 handleObjIn = handler;
18983 handler = handleObjIn.handler;
18984 selector = handleObjIn.selector;
18985 }
18986
18987 // Ensure that invalid selectors throw exceptions at attach time
18988 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18989 if ( selector ) {
18990 jQuery.find.matchesSelector( documentElement, selector );
18991 }
18992
18993 // Make sure that the handler has a unique ID, used to find/remove it later
18994 if ( !handler.guid ) {
18995 handler.guid = jQuery.guid++;
18996 }
18997
18998 // Init the element's event structure and main handler, if this is the first
18999 if ( !( events = elemData.events ) ) {
19000 events = elemData.events = {};
19001 }
19002 if ( !( eventHandle = elemData.handle ) ) {
19003 eventHandle = elemData.handle = function( e ) {
19004
19005 // Discard the second event of a jQuery.event.trigger() and
19006 // when an event is called after a page has unloaded
19007 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
19008 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19009 };
19010 }
19011
19012 // Handle multiple events separated by a space
19013 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19014 t = types.length;
19015 while ( t-- ) {
19016 tmp = rtypenamespace.exec( types[ t ] ) || [];
19017 type = origType = tmp[ 1 ];
19018 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19019
19020 // There *must* be a type, no attaching namespace-only handlers
19021 if ( !type ) {
19022 continue;
19023 }
19024
19025 // If event changes its type, use the special event handlers for the changed type
19026 special = jQuery.event.special[ type ] || {};
19027
19028 // If selector defined, determine special event api type, otherwise given type
19029 type = ( selector ? special.delegateType : special.bindType ) || type;
19030
19031 // Update special based on newly reset type
19032 special = jQuery.event.special[ type ] || {};
19033
19034 // handleObj is passed to all event handlers
19035 handleObj = jQuery.extend( {
19036 type: type,
19037 origType: origType,
19038 data: data,
19039 handler: handler,
19040 guid: handler.guid,
19041 selector: selector,
19042 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19043 namespace: namespaces.join( "." )
19044 }, handleObjIn );
19045
19046 // Init the event handler queue if we're the first
19047 if ( !( handlers = events[ type ] ) ) {
19048 handlers = events[ type ] = [];
19049 handlers.delegateCount = 0;
19050
19051 // Only use addEventListener if the special events handler returns false
19052 if ( !special.setup ||
19053 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19054
19055 if ( elem.addEventListener ) {
19056 elem.addEventListener( type, eventHandle );
19057 }
19058 }
19059 }
19060
19061 if ( special.add ) {
19062 special.add.call( elem, handleObj );
19063
19064 if ( !handleObj.handler.guid ) {
19065 handleObj.handler.guid = handler.guid;
19066 }
19067 }
19068
19069 // Add to the element's handler list, delegates in front
19070 if ( selector ) {
19071 handlers.splice( handlers.delegateCount++, 0, handleObj );
19072 } else {
19073 handlers.push( handleObj );
19074 }
19075
19076 // Keep track of which events have ever been used, for event optimization
19077 jQuery.event.global[ type ] = true;
19078 }
19079
19080 },
19081
19082 // Detach an event or set of events from an element
19083 remove: function( elem, types, handler, selector, mappedTypes ) {
19084
19085 var j, origCount, tmp,
19086 events, t, handleObj,
19087 special, handlers, type, namespaces, origType,
19088 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19089
19090 if ( !elemData || !( events = elemData.events ) ) {
19091 return;
19092 }
19093
19094 // Once for each type.namespace in types; type may be omitted
19095 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19096 t = types.length;
19097 while ( t-- ) {
19098 tmp = rtypenamespace.exec( types[ t ] ) || [];
19099 type = origType = tmp[ 1 ];
19100 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19101
19102 // Unbind all events (on this namespace, if provided) for the element
19103 if ( !type ) {
19104 for ( type in events ) {
19105 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19106 }
19107 continue;
19108 }
19109
19110 special = jQuery.event.special[ type ] || {};
19111 type = ( selector ? special.delegateType : special.bindType ) || type;
19112 handlers = events[ type ] || [];
19113 tmp = tmp[ 2 ] &&
19114 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19115
19116 // Remove matching events
19117 origCount = j = handlers.length;
19118 while ( j-- ) {
19119 handleObj = handlers[ j ];
19120
19121 if ( ( mappedTypes || origType === handleObj.origType ) &&
19122 ( !handler || handler.guid === handleObj.guid ) &&
19123 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19124 ( !selector || selector === handleObj.selector ||
19125 selector === "**" && handleObj.selector ) ) {
19126 handlers.splice( j, 1 );
19127
19128 if ( handleObj.selector ) {
19129 handlers.delegateCount--;
19130 }
19131 if ( special.remove ) {
19132 special.remove.call( elem, handleObj );
19133 }
19134 }
19135 }
19136
19137 // Remove generic event handler if we removed something and no more handlers exist
19138 // (avoids potential for endless recursion during removal of special event handlers)
19139 if ( origCount && !handlers.length ) {
19140 if ( !special.teardown ||
19141 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19142
19143 jQuery.removeEvent( elem, type, elemData.handle );
19144 }
19145
19146 delete events[ type ];
19147 }
19148 }
19149
19150 // Remove data and the expando if it's no longer used
19151 if ( jQuery.isEmptyObject( events ) ) {
19152 dataPriv.remove( elem, "handle events" );
19153 }
19154 },
19155
19156 dispatch: function( nativeEvent ) {
19157
19158 // Make a writable jQuery.Event from the native event object
19159 var event = jQuery.event.fix( nativeEvent );
19160
19161 var i, j, ret, matched, handleObj, handlerQueue,
19162 args = new Array( arguments.length ),
19163 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19164 special = jQuery.event.special[ event.type ] || {};
19165
19166 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19167 args[ 0 ] = event;
19168
19169 for ( i = 1; i < arguments.length; i++ ) {
19170 args[ i ] = arguments[ i ];
19171 }
19172
19173 event.delegateTarget = this;
19174
19175 // Call the preDispatch hook for the mapped type, and let it bail if desired
19176 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19177 return;
19178 }
19179
19180 // Determine handlers
19181 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19182
19183 // Run delegates first; they may want to stop propagation beneath us
19184 i = 0;
19185 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19186 event.currentTarget = matched.elem;
19187
19188 j = 0;
19189 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19190 !event.isImmediatePropagationStopped() ) {
19191
19192 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19193 // a subset or equal to those in the bound event (both can have no namespace).
19194 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19195
19196 event.handleObj = handleObj;
19197 event.data = handleObj.data;
19198
19199 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19200 handleObj.handler ).apply( matched.elem, args );
19201
19202 if ( ret !== undefined ) {
19203 if ( ( event.result = ret ) === false ) {
19204 event.preventDefault();
19205 event.stopPropagation();
19206 }
19207 }
19208 }
19209 }
19210 }
19211
19212 // Call the postDispatch hook for the mapped type
19213 if ( special.postDispatch ) {
19214 special.postDispatch.call( this, event );
19215 }
19216
19217 return event.result;
19218 },
19219
19220 handlers: function( event, handlers ) {
19221 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19222 handlerQueue = [],
19223 delegateCount = handlers.delegateCount,
19224 cur = event.target;
19225
19226 // Find delegate handlers
19227 if ( delegateCount &&
19228
19229 // Support: IE <=9
19230 // Black-hole SVG <use> instance trees (trac-13180)
19231 cur.nodeType &&
19232
19233 // Support: Firefox <=42
19234 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19235 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19236 // Support: IE 11 only
19237 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19238 !( event.type === "click" && event.button >= 1 ) ) {
19239
19240 for ( ; cur !== this; cur = cur.parentNode || this ) {
19241
19242 // Don't check non-elements (#13208)
19243 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19244 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19245 matchedHandlers = [];
19246 matchedSelectors = {};
19247 for ( i = 0; i < delegateCount; i++ ) {
19248 handleObj = handlers[ i ];
19249
19250 // Don't conflict with Object.prototype properties (#13203)
19251 sel = handleObj.selector + " ";
19252
19253 if ( matchedSelectors[ sel ] === undefined ) {
19254 matchedSelectors[ sel ] = handleObj.needsContext ?
19255 jQuery( sel, this ).index( cur ) > -1 :
19256 jQuery.find( sel, this, null, [ cur ] ).length;
19257 }
19258 if ( matchedSelectors[ sel ] ) {
19259 matchedHandlers.push( handleObj );
19260 }
19261 }
19262 if ( matchedHandlers.length ) {
19263 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19264 }
19265 }
19266 }
19267 }
19268
19269 // Add the remaining (directly-bound) handlers
19270 cur = this;
19271 if ( delegateCount < handlers.length ) {
19272 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19273 }
19274
19275 return handlerQueue;
19276 },
19277
19278 addProp: function( name, hook ) {
19279 Object.defineProperty( jQuery.Event.prototype, name, {
19280 enumerable: true,
19281 configurable: true,
19282
19283 get: jQuery.isFunction( hook ) ?
19284 function() {
19285 if ( this.originalEvent ) {
19286 return hook( this.originalEvent );
19287 }
19288 } :
19289 function() {
19290 if ( this.originalEvent ) {
19291 return this.originalEvent[ name ];
19292 }
19293 },
19294
19295 set: function( value ) {
19296 Object.defineProperty( this, name, {
19297 enumerable: true,
19298 configurable: true,
19299 writable: true,
19300 value: value
19301 } );
19302 }
19303 } );
19304 },
19305
19306 fix: function( originalEvent ) {
19307 return originalEvent[ jQuery.expando ] ?
19308 originalEvent :
19309 new jQuery.Event( originalEvent );
19310 },
19311
19312 special: {
19313 load: {
19314
19315 // Prevent triggered image.load events from bubbling to window.load
19316 noBubble: true
19317 },
19318 focus: {
19319
19320 // Fire native event if possible so blur/focus sequence is correct
19321 trigger: function() {
19322 if ( this !== safeActiveElement() && this.focus ) {
19323 this.focus();
19324 return false;
19325 }
19326 },
19327 delegateType: "focusin"
19328 },
19329 blur: {
19330 trigger: function() {
19331 if ( this === safeActiveElement() && this.blur ) {
19332 this.blur();
19333 return false;
19334 }
19335 },
19336 delegateType: "focusout"
19337 },
19338 click: {
19339
19340 // For checkbox, fire native event so checked state will be right
19341 trigger: function() {
19342 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19343 this.click();
19344 return false;
19345 }
19346 },
19347
19348 // For cross-browser consistency, don't fire native .click() on links
19349 _default: function( event ) {
19350 return nodeName( event.target, "a" );
19351 }
19352 },
19353
19354 beforeunload: {
19355 postDispatch: function( event ) {
19356
19357 // Support: Firefox 20+
19358 // Firefox doesn't alert if the returnValue field is not set.
19359 if ( event.result !== undefined && event.originalEvent ) {
19360 event.originalEvent.returnValue = event.result;
19361 }
19362 }
19363 }
19364 }
19365 };
19366
19367 jQuery.removeEvent = function( elem, type, handle ) {
19368
19369 // This "if" is needed for plain objects
19370 if ( elem.removeEventListener ) {
19371 elem.removeEventListener( type, handle );
19372 }
19373 };
19374
19375 jQuery.Event = function( src, props ) {
19376
19377 // Allow instantiation without the 'new' keyword
19378 if ( !( this instanceof jQuery.Event ) ) {
19379 return new jQuery.Event( src, props );
19380 }
19381
19382 // Event object
19383 if ( src && src.type ) {
19384 this.originalEvent = src;
19385 this.type = src.type;
19386
19387 // Events bubbling up the document may have been marked as prevented
19388 // by a handler lower down the tree; reflect the correct value.
19389 this.isDefaultPrevented = src.defaultPrevented ||
19390 src.defaultPrevented === undefined &&
19391
19392 // Support: Android <=2.3 only
19393 src.returnValue === false ?
19394 returnTrue :
19395 returnFalse;
19396
19397 // Create target properties
19398 // Support: Safari <=6 - 7 only
19399 // Target should not be a text node (#504, #13143)
19400 this.target = ( src.target && src.target.nodeType === 3 ) ?
19401 src.target.parentNode :
19402 src.target;
19403
19404 this.currentTarget = src.currentTarget;
19405 this.relatedTarget = src.relatedTarget;
19406
19407 // Event type
19408 } else {
19409 this.type = src;
19410 }
19411
19412 // Put explicitly provided properties onto the event object
19413 if ( props ) {
19414 jQuery.extend( this, props );
19415 }
19416
19417 // Create a timestamp if incoming event doesn't have one
19418 this.timeStamp = src && src.timeStamp || jQuery.now();
19419
19420 // Mark it as fixed
19421 this[ jQuery.expando ] = true;
19422 };
19423
19424 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19425 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19426 jQuery.Event.prototype = {
19427 constructor: jQuery.Event,
19428 isDefaultPrevented: returnFalse,
19429 isPropagationStopped: returnFalse,
19430 isImmediatePropagationStopped: returnFalse,
19431 isSimulated: false,
19432
19433 preventDefault: function() {
19434 var e = this.originalEvent;
19435
19436 this.isDefaultPrevented = returnTrue;
19437
19438 if ( e && !this.isSimulated ) {
19439 e.preventDefault();
19440 }
19441 },
19442 stopPropagation: function() {
19443 var e = this.originalEvent;
19444
19445 this.isPropagationStopped = returnTrue;
19446
19447 if ( e && !this.isSimulated ) {
19448 e.stopPropagation();
19449 }
19450 },
19451 stopImmediatePropagation: function() {
19452 var e = this.originalEvent;
19453
19454 this.isImmediatePropagationStopped = returnTrue;
19455
19456 if ( e && !this.isSimulated ) {
19457 e.stopImmediatePropagation();
19458 }
19459
19460 this.stopPropagation();
19461 }
19462 };
19463
19464 // Includes all common event props including KeyEvent and MouseEvent specific props
19465 jQuery.each( {
19466 altKey: true,
19467 bubbles: true,
19468 cancelable: true,
19469 changedTouches: true,
19470 ctrlKey: true,
19471 detail: true,
19472 eventPhase: true,
19473 metaKey: true,
19474 pageX: true,
19475 pageY: true,
19476 shiftKey: true,
19477 view: true,
19478 "char": true,
19479 charCode: true,
19480 key: true,
19481 keyCode: true,
19482 button: true,
19483 buttons: true,
19484 clientX: true,
19485 clientY: true,
19486 offsetX: true,
19487 offsetY: true,
19488 pointerId: true,
19489 pointerType: true,
19490 screenX: true,
19491 screenY: true,
19492 targetTouches: true,
19493 toElement: true,
19494 touches: true,
19495
19496 which: function( event ) {
19497 var button = event.button;
19498
19499 // Add which for key events
19500 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19501 return event.charCode != null ? event.charCode : event.keyCode;
19502 }
19503
19504 // Add which for click: 1 === left; 2 === middle; 3 === right
19505 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19506 if ( button & 1 ) {
19507 return 1;
19508 }
19509
19510 if ( button & 2 ) {
19511 return 3;
19512 }
19513
19514 if ( button & 4 ) {
19515 return 2;
19516 }
19517
19518 return 0;
19519 }
19520
19521 return event.which;
19522 }
19523 }, jQuery.event.addProp );
19524
19525 // Create mouseenter/leave events using mouseover/out and event-time checks
19526 // so that event delegation works in jQuery.
19527 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19528 //
19529 // Support: Safari 7 only
19530 // Safari sends mouseenter too often; see:
19531 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19532 // for the description of the bug (it existed in older Chrome versions as well).
19533 jQuery.each( {
19534 mouseenter: "mouseover",
19535 mouseleave: "mouseout",
19536 pointerenter: "pointerover",
19537 pointerleave: "pointerout"
19538 }, function( orig, fix ) {
19539 jQuery.event.special[ orig ] = {
19540 delegateType: fix,
19541 bindType: fix,
19542
19543 handle: function( event ) {
19544 var ret,
19545 target = this,
19546 related = event.relatedTarget,
19547 handleObj = event.handleObj;
19548
19549 // For mouseenter/leave call the handler if related is outside the target.
19550 // NB: No relatedTarget if the mouse left/entered the browser window
19551 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19552 event.type = handleObj.origType;
19553 ret = handleObj.handler.apply( this, arguments );
19554 event.type = fix;
19555 }
19556 return ret;
19557 }
19558 };
19559 } );
19560
19561 jQuery.fn.extend( {
19562
19563 on: function( types, selector, data, fn ) {
19564 return on( this, types, selector, data, fn );
19565 },
19566 one: function( types, selector, data, fn ) {
19567 return on( this, types, selector, data, fn, 1 );
19568 },
19569 off: function( types, selector, fn ) {
19570 var handleObj, type;
19571 if ( types && types.preventDefault && types.handleObj ) {
19572
19573 // ( event ) dispatched jQuery.Event
19574 handleObj = types.handleObj;
19575 jQuery( types.delegateTarget ).off(
19576 handleObj.namespace ?
19577 handleObj.origType + "." + handleObj.namespace :
19578 handleObj.origType,
19579 handleObj.selector,
19580 handleObj.handler
19581 );
19582 return this;
19583 }
19584 if ( typeof types === "object" ) {
19585
19586 // ( types-object [, selector] )
19587 for ( type in types ) {
19588 this.off( type, selector, types[ type ] );
19589 }
19590 return this;
19591 }
19592 if ( selector === false || typeof selector === "function" ) {
19593
19594 // ( types [, fn] )
19595 fn = selector;
19596 selector = undefined;
19597 }
19598 if ( fn === false ) {
19599 fn = returnFalse;
19600 }
19601 return this.each( function() {
19602 jQuery.event.remove( this, types, fn, selector );
19603 } );
19604 }
19605 } );
19606
19607
19608 var
19609
19610 /* eslint-disable max-len */
19611
19612 // See https://github.com/eslint/eslint/issues/3229
19613 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19614
19615 /* eslint-enable */
19616
19617 // Support: IE <=10 - 11, Edge 12 - 13
19618 // In IE/Edge using regex groups here causes severe slowdowns.
19619 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19620 rnoInnerhtml = /<script|<style|<link/i,
19621
19622 // checked="checked" or checked
19623 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19624 rscriptTypeMasked = /^true\/(.*)/,
19625 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19626
19627 // Prefer a tbody over its parent table for containing new rows
19628 function manipulationTarget( elem, content ) {
19629 if ( nodeName( elem, "table" ) &&
19630 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19631
19632 return jQuery( ">tbody", elem )[ 0 ] || elem;
19633 }
19634
19635 return elem;
19636 }
19637
19638 // Replace/restore the type attribute of script elements for safe DOM manipulation
19639 function disableScript( elem ) {
19640 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19641 return elem;
19642 }
19643 function restoreScript( elem ) {
19644 var match = rscriptTypeMasked.exec( elem.type );
19645
19646 if ( match ) {
19647 elem.type = match[ 1 ];
19648 } else {
19649 elem.removeAttribute( "type" );
19650 }
19651
19652 return elem;
19653 }
19654
19655 function cloneCopyEvent( src, dest ) {
19656 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19657
19658 if ( dest.nodeType !== 1 ) {
19659 return;
19660 }
19661
19662 // 1. Copy private data: events, handlers, etc.
19663 if ( dataPriv.hasData( src ) ) {
19664 pdataOld = dataPriv.access( src );
19665 pdataCur = dataPriv.set( dest, pdataOld );
19666 events = pdataOld.events;
19667
19668 if ( events ) {
19669 delete pdataCur.handle;
19670 pdataCur.events = {};
19671
19672 for ( type in events ) {
19673 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19674 jQuery.event.add( dest, type, events[ type ][ i ] );
19675 }
19676 }
19677 }
19678 }
19679
19680 // 2. Copy user data
19681 if ( dataUser.hasData( src ) ) {
19682 udataOld = dataUser.access( src );
19683 udataCur = jQuery.extend( {}, udataOld );
19684
19685 dataUser.set( dest, udataCur );
19686 }
19687 }
19688
19689 // Fix IE bugs, see support tests
19690 function fixInput( src, dest ) {
19691 var nodeName = dest.nodeName.toLowerCase();
19692
19693 // Fails to persist the checked state of a cloned checkbox or radio button.
19694 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19695 dest.checked = src.checked;
19696
19697 // Fails to return the selected option to the default selected state when cloning options
19698 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19699 dest.defaultValue = src.defaultValue;
19700 }
19701 }
19702
19703 function domManip( collection, args, callback, ignored ) {
19704
19705 // Flatten any nested arrays
19706 args = concat.apply( [], args );
19707
19708 var fragment, first, scripts, hasScripts, node, doc,
19709 i = 0,
19710 l = collection.length,
19711 iNoClone = l - 1,
19712 value = args[ 0 ],
19713 isFunction = jQuery.isFunction( value );
19714
19715 // We can't cloneNode fragments that contain checked, in WebKit
19716 if ( isFunction ||
19717 ( l > 1 && typeof value === "string" &&
19718 !support.checkClone && rchecked.test( value ) ) ) {
19719 return collection.each( function( index ) {
19720 var self = collection.eq( index );
19721 if ( isFunction ) {
19722 args[ 0 ] = value.call( this, index, self.html() );
19723 }
19724 domManip( self, args, callback, ignored );
19725 } );
19726 }
19727
19728 if ( l ) {
19729 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19730 first = fragment.firstChild;
19731
19732 if ( fragment.childNodes.length === 1 ) {
19733 fragment = first;
19734 }
19735
19736 // Require either new content or an interest in ignored elements to invoke the callback
19737 if ( first || ignored ) {
19738 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19739 hasScripts = scripts.length;
19740
19741 // Use the original fragment for the last item
19742 // instead of the first because it can end up
19743 // being emptied incorrectly in certain situations (#8070).
19744 for ( ; i < l; i++ ) {
19745 node = fragment;
19746
19747 if ( i !== iNoClone ) {
19748 node = jQuery.clone( node, true, true );
19749
19750 // Keep references to cloned scripts for later restoration
19751 if ( hasScripts ) {
19752
19753 // Support: Android <=4.0 only, PhantomJS 1 only
19754 // push.apply(_, arraylike) throws on ancient WebKit
19755 jQuery.merge( scripts, getAll( node, "script" ) );
19756 }
19757 }
19758
19759 callback.call( collection[ i ], node, i );
19760 }
19761
19762 if ( hasScripts ) {
19763 doc = scripts[ scripts.length - 1 ].ownerDocument;
19764
19765 // Reenable scripts
19766 jQuery.map( scripts, restoreScript );
19767
19768 // Evaluate executable scripts on first document insertion
19769 for ( i = 0; i < hasScripts; i++ ) {
19770 node = scripts[ i ];
19771 if ( rscriptType.test( node.type || "" ) &&
19772 !dataPriv.access( node, "globalEval" ) &&
19773 jQuery.contains( doc, node ) ) {
19774
19775 if ( node.src ) {
19776
19777 // Optional AJAX dependency, but won't run scripts if not present
19778 if ( jQuery._evalUrl ) {
19779 jQuery._evalUrl( node.src );
19780 }
19781 } else {
19782 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19783 }
19784 }
19785 }
19786 }
19787 }
19788 }
19789
19790 return collection;
19791 }
19792
19793 function remove( elem, selector, keepData ) {
19794 var node,
19795 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19796 i = 0;
19797
19798 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19799 if ( !keepData && node.nodeType === 1 ) {
19800 jQuery.cleanData( getAll( node ) );
19801 }
19802
19803 if ( node.parentNode ) {
19804 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19805 setGlobalEval( getAll( node, "script" ) );
19806 }
19807 node.parentNode.removeChild( node );
19808 }
19809 }
19810
19811 return elem;
19812 }
19813
19814 jQuery.extend( {
19815 htmlPrefilter: function( html ) {
19816 return html.replace( rxhtmlTag, "<$1></$2>" );
19817 },
19818
19819 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19820 var i, l, srcElements, destElements,
19821 clone = elem.cloneNode( true ),
19822 inPage = jQuery.contains( elem.ownerDocument, elem );
19823
19824 // Fix IE cloning issues
19825 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19826 !jQuery.isXMLDoc( elem ) ) {
19827
19828 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19829 destElements = getAll( clone );
19830 srcElements = getAll( elem );
19831
19832 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19833 fixInput( srcElements[ i ], destElements[ i ] );
19834 }
19835 }
19836
19837 // Copy the events from the original to the clone
19838 if ( dataAndEvents ) {
19839 if ( deepDataAndEvents ) {
19840 srcElements = srcElements || getAll( elem );
19841 destElements = destElements || getAll( clone );
19842
19843 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19844 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19845 }
19846 } else {
19847 cloneCopyEvent( elem, clone );
19848 }
19849 }
19850
19851 // Preserve script evaluation history
19852 destElements = getAll( clone, "script" );
19853 if ( destElements.length > 0 ) {
19854 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19855 }
19856
19857 // Return the cloned set
19858 return clone;
19859 },
19860
19861 cleanData: function( elems ) {
19862 var data, elem, type,
19863 special = jQuery.event.special,
19864 i = 0;
19865
19866 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19867 if ( acceptData( elem ) ) {
19868 if ( ( data = elem[ dataPriv.expando ] ) ) {
19869 if ( data.events ) {
19870 for ( type in data.events ) {
19871 if ( special[ type ] ) {
19872 jQuery.event.remove( elem, type );
19873
19874 // This is a shortcut to avoid jQuery.event.remove's overhead
19875 } else {
19876 jQuery.removeEvent( elem, type, data.handle );
19877 }
19878 }
19879 }
19880
19881 // Support: Chrome <=35 - 45+
19882 // Assign undefined instead of using delete, see Data#remove
19883 elem[ dataPriv.expando ] = undefined;
19884 }
19885 if ( elem[ dataUser.expando ] ) {
19886
19887 // Support: Chrome <=35 - 45+
19888 // Assign undefined instead of using delete, see Data#remove
19889 elem[ dataUser.expando ] = undefined;
19890 }
19891 }
19892 }
19893 }
19894 } );
19895
19896 jQuery.fn.extend( {
19897 detach: function( selector ) {
19898 return remove( this, selector, true );
19899 },
19900
19901 remove: function( selector ) {
19902 return remove( this, selector );
19903 },
19904
19905 text: function( value ) {
19906 return access( this, function( value ) {
19907 return value === undefined ?
19908 jQuery.text( this ) :
19909 this.empty().each( function() {
19910 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19911 this.textContent = value;
19912 }
19913 } );
19914 }, null, value, arguments.length );
19915 },
19916
19917 append: function() {
19918 return domManip( this, arguments, function( elem ) {
19919 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19920 var target = manipulationTarget( this, elem );
19921 target.appendChild( elem );
19922 }
19923 } );
19924 },
19925
19926 prepend: function() {
19927 return domManip( this, arguments, function( elem ) {
19928 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19929 var target = manipulationTarget( this, elem );
19930 target.insertBefore( elem, target.firstChild );
19931 }
19932 } );
19933 },
19934
19935 before: function() {
19936 return domManip( this, arguments, function( elem ) {
19937 if ( this.parentNode ) {
19938 this.parentNode.insertBefore( elem, this );
19939 }
19940 } );
19941 },
19942
19943 after: function() {
19944 return domManip( this, arguments, function( elem ) {
19945 if ( this.parentNode ) {
19946 this.parentNode.insertBefore( elem, this.nextSibling );
19947 }
19948 } );
19949 },
19950
19951 empty: function() {
19952 var elem,
19953 i = 0;
19954
19955 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19956 if ( elem.nodeType === 1 ) {
19957
19958 // Prevent memory leaks
19959 jQuery.cleanData( getAll( elem, false ) );
19960
19961 // Remove any remaining nodes
19962 elem.textContent = "";
19963 }
19964 }
19965
19966 return this;
19967 },
19968
19969 clone: function( dataAndEvents, deepDataAndEvents ) {
19970 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19971 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19972
19973 return this.map( function() {
19974 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19975 } );
19976 },
19977
19978 html: function( value ) {
19979 return access( this, function( value ) {
19980 var elem = this[ 0 ] || {},
19981 i = 0,
19982 l = this.length;
19983
19984 if ( value === undefined && elem.nodeType === 1 ) {
19985 return elem.innerHTML;
19986 }
19987
19988 // See if we can take a shortcut and just use innerHTML
19989 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
19990 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
19991
19992 value = jQuery.htmlPrefilter( value );
19993
19994 try {
19995 for ( ; i < l; i++ ) {
19996 elem = this[ i ] || {};
19997
19998 // Remove element nodes and prevent memory leaks
19999 if ( elem.nodeType === 1 ) {
20000 jQuery.cleanData( getAll( elem, false ) );
20001 elem.innerHTML = value;
20002 }
20003 }
20004
20005 elem = 0;
20006
20007 // If using innerHTML throws an exception, use the fallback method
20008 } catch ( e ) {}
20009 }
20010
20011 if ( elem ) {
20012 this.empty().append( value );
20013 }
20014 }, null, value, arguments.length );
20015 },
20016
20017 replaceWith: function() {
20018 var ignored = [];
20019
20020 // Make the changes, replacing each non-ignored context element with the new content
20021 return domManip( this, arguments, function( elem ) {
20022 var parent = this.parentNode;
20023
20024 if ( jQuery.inArray( this, ignored ) < 0 ) {
20025 jQuery.cleanData( getAll( this ) );
20026 if ( parent ) {
20027 parent.replaceChild( elem, this );
20028 }
20029 }
20030
20031 // Force callback invocation
20032 }, ignored );
20033 }
20034 } );
20035
20036 jQuery.each( {
20037 appendTo: "append",
20038 prependTo: "prepend",
20039 insertBefore: "before",
20040 insertAfter: "after",
20041 replaceAll: "replaceWith"
20042 }, function( name, original ) {
20043 jQuery.fn[ name ] = function( selector ) {
20044 var elems,
20045 ret = [],
20046 insert = jQuery( selector ),
20047 last = insert.length - 1,
20048 i = 0;
20049
20050 for ( ; i <= last; i++ ) {
20051 elems = i === last ? this : this.clone( true );
20052 jQuery( insert[ i ] )[ original ]( elems );
20053
20054 // Support: Android <=4.0 only, PhantomJS 1 only
20055 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20056 push.apply( ret, elems.get() );
20057 }
20058
20059 return this.pushStack( ret );
20060 };
20061 } );
20062 var rmargin = ( /^margin/ );
20063
20064 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20065
20066 var getStyles = function( elem ) {
20067
20068 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20069 // IE throws on elements created in popups
20070 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20071 var view = elem.ownerDocument.defaultView;
20072
20073 if ( !view || !view.opener ) {
20074 view = window;
20075 }
20076
20077 return view.getComputedStyle( elem );
20078 };
20079
20080
20081
20082 ( function() {
20083
20084 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20085 // so they're executed at the same time to save the second computation.
20086 function computeStyleTests() {
20087
20088 // This is a singleton, we need to execute it only once
20089 if ( !div ) {
20090 return;
20091 }
20092
20093 div.style.cssText =
20094 "box-sizing:border-box;" +
20095 "position:relative;display:block;" +
20096 "margin:auto;border:1px;padding:1px;" +
20097 "top:1%;width:50%";
20098 div.innerHTML = "";
20099 documentElement.appendChild( container );
20100
20101 var divStyle = window.getComputedStyle( div );
20102 pixelPositionVal = divStyle.top !== "1%";
20103
20104 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20105 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20106 boxSizingReliableVal = divStyle.width === "4px";
20107
20108 // Support: Android 4.0 - 4.3 only
20109 // Some styles come back with percentage values, even though they shouldn't
20110 div.style.marginRight = "50%";
20111 pixelMarginRightVal = divStyle.marginRight === "4px";
20112
20113 documentElement.removeChild( container );
20114
20115 // Nullify the div so it wouldn't be stored in the memory and
20116 // it will also be a sign that checks already performed
20117 div = null;
20118 }
20119
20120 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20121 container = document.createElement( "div" ),
20122 div = document.createElement( "div" );
20123
20124 // Finish early in limited (non-browser) environments
20125 if ( !div.style ) {
20126 return;
20127 }
20128
20129 // Support: IE <=9 - 11 only
20130 // Style of cloned element affects source element cloned (#8908)
20131 div.style.backgroundClip = "content-box";
20132 div.cloneNode( true ).style.backgroundClip = "";
20133 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20134
20135 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20136 "padding:0;margin-top:1px;position:absolute";
20137 container.appendChild( div );
20138
20139 jQuery.extend( support, {
20140 pixelPosition: function() {
20141 computeStyleTests();
20142 return pixelPositionVal;
20143 },
20144 boxSizingReliable: function() {
20145 computeStyleTests();
20146 return boxSizingReliableVal;
20147 },
20148 pixelMarginRight: function() {
20149 computeStyleTests();
20150 return pixelMarginRightVal;
20151 },
20152 reliableMarginLeft: function() {
20153 computeStyleTests();
20154 return reliableMarginLeftVal;
20155 }
20156 } );
20157 } )();
20158
20159
20160 function curCSS( elem, name, computed ) {
20161 var width, minWidth, maxWidth, ret,
20162
20163 // Support: Firefox 51+
20164 // Retrieving style before computed somehow
20165 // fixes an issue with getting wrong values
20166 // on detached elements
20167 style = elem.style;
20168
20169 computed = computed || getStyles( elem );
20170
20171 // getPropertyValue is needed for:
20172 // .css('filter') (IE 9 only, #12537)
20173 // .css('--customProperty) (#3144)
20174 if ( computed ) {
20175 ret = computed.getPropertyValue( name ) || computed[ name ];
20176
20177 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20178 ret = jQuery.style( elem, name );
20179 }
20180
20181 // A tribute to the "awesome hack by Dean Edwards"
20182 // Android Browser returns percentage for some values,
20183 // but width seems to be reliably pixels.
20184 // This is against the CSSOM draft spec:
20185 // https://drafts.csswg.org/cssom/#resolved-values
20186 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20187
20188 // Remember the original values
20189 width = style.width;
20190 minWidth = style.minWidth;
20191 maxWidth = style.maxWidth;
20192
20193 // Put in the new values to get a computed value out
20194 style.minWidth = style.maxWidth = style.width = ret;
20195 ret = computed.width;
20196
20197 // Revert the changed values
20198 style.width = width;
20199 style.minWidth = minWidth;
20200 style.maxWidth = maxWidth;
20201 }
20202 }
20203
20204 return ret !== undefined ?
20205
20206 // Support: IE <=9 - 11 only
20207 // IE returns zIndex value as an integer.
20208 ret + "" :
20209 ret;
20210 }
20211
20212
20213 function addGetHookIf( conditionFn, hookFn ) {
20214
20215 // Define the hook, we'll check on the first run if it's really needed.
20216 return {
20217 get: function() {
20218 if ( conditionFn() ) {
20219
20220 // Hook not needed (or it's not possible to use it due
20221 // to missing dependency), remove it.
20222 delete this.get;
20223 return;
20224 }
20225
20226 // Hook needed; redefine it so that the support test is not executed again.
20227 return ( this.get = hookFn ).apply( this, arguments );
20228 }
20229 };
20230 }
20231
20232
20233 var
20234
20235 // Swappable if display is none or starts with table
20236 // except "table", "table-cell", or "table-caption"
20237 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20238 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20239 rcustomProp = /^--/,
20240 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20241 cssNormalTransform = {
20242 letterSpacing: "0",
20243 fontWeight: "400"
20244 },
20245
20246 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20247 emptyStyle = document.createElement( "div" ).style;
20248
20249 // Return a css property mapped to a potentially vendor prefixed property
20250 function vendorPropName( name ) {
20251
20252 // Shortcut for names that are not vendor prefixed
20253 if ( name in emptyStyle ) {
20254 return name;
20255 }
20256
20257 // Check for vendor prefixed names
20258 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20259 i = cssPrefixes.length;
20260
20261 while ( i-- ) {
20262 name = cssPrefixes[ i ] + capName;
20263 if ( name in emptyStyle ) {
20264 return name;
20265 }
20266 }
20267 }
20268
20269 // Return a property mapped along what jQuery.cssProps suggests or to
20270 // a vendor prefixed property.
20271 function finalPropName( name ) {
20272 var ret = jQuery.cssProps[ name ];
20273 if ( !ret ) {
20274 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20275 }
20276 return ret;
20277 }
20278
20279 function setPositiveNumber( elem, value, subtract ) {
20280
20281 // Any relative (+/-) values have already been
20282 // normalized at this point
20283 var matches = rcssNum.exec( value );
20284 return matches ?
20285
20286 // Guard against undefined "subtract", e.g., when used as in cssHooks
20287 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20288 value;
20289 }
20290
20291 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20292 var i,
20293 val = 0;
20294
20295 // If we already have the right measurement, avoid augmentation
20296 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20297 i = 4;
20298
20299 // Otherwise initialize for horizontal or vertical properties
20300 } else {
20301 i = name === "width" ? 1 : 0;
20302 }
20303
20304 for ( ; i < 4; i += 2 ) {
20305
20306 // Both box models exclude margin, so add it if we want it
20307 if ( extra === "margin" ) {
20308 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20309 }
20310
20311 if ( isBorderBox ) {
20312
20313 // border-box includes padding, so remove it if we want content
20314 if ( extra === "content" ) {
20315 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20316 }
20317
20318 // At this point, extra isn't border nor margin, so remove border
20319 if ( extra !== "margin" ) {
20320 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20321 }
20322 } else {
20323
20324 // At this point, extra isn't content, so add padding
20325 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20326
20327 // At this point, extra isn't content nor padding, so add border
20328 if ( extra !== "padding" ) {
20329 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20330 }
20331 }
20332 }
20333
20334 return val;
20335 }
20336
20337 function getWidthOrHeight( elem, name, extra ) {
20338
20339 // Start with computed style
20340 var valueIsBorderBox,
20341 styles = getStyles( elem ),
20342 val = curCSS( elem, name, styles ),
20343 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20344
20345 // Computed unit is not pixels. Stop here and return.
20346 if ( rnumnonpx.test( val ) ) {
20347 return val;
20348 }
20349
20350 // Check for style in case a browser which returns unreliable values
20351 // for getComputedStyle silently falls back to the reliable elem.style
20352 valueIsBorderBox = isBorderBox &&
20353 ( support.boxSizingReliable() || val === elem.style[ name ] );
20354
20355 // Fall back to offsetWidth/Height when value is "auto"
20356 // This happens for inline elements with no explicit setting (gh-3571)
20357 if ( val === "auto" ) {
20358 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20359 }
20360
20361 // Normalize "", auto, and prepare for extra
20362 val = parseFloat( val ) || 0;
20363
20364 // Use the active box-sizing model to add/subtract irrelevant styles
20365 return ( val +
20366 augmentWidthOrHeight(
20367 elem,
20368 name,
20369 extra || ( isBorderBox ? "border" : "content" ),
20370 valueIsBorderBox,
20371 styles
20372 )
20373 ) + "px";
20374 }
20375
20376 jQuery.extend( {
20377
20378 // Add in style property hooks for overriding the default
20379 // behavior of getting and setting a style property
20380 cssHooks: {
20381 opacity: {
20382 get: function( elem, computed ) {
20383 if ( computed ) {
20384
20385 // We should always get a number back from opacity
20386 var ret = curCSS( elem, "opacity" );
20387 return ret === "" ? "1" : ret;
20388 }
20389 }
20390 }
20391 },
20392
20393 // Don't automatically add "px" to these possibly-unitless properties
20394 cssNumber: {
20395 "animationIterationCount": true,
20396 "columnCount": true,
20397 "fillOpacity": true,
20398 "flexGrow": true,
20399 "flexShrink": true,
20400 "fontWeight": true,
20401 "lineHeight": true,
20402 "opacity": true,
20403 "order": true,
20404 "orphans": true,
20405 "widows": true,
20406 "zIndex": true,
20407 "zoom": true
20408 },
20409
20410 // Add in properties whose names you wish to fix before
20411 // setting or getting the value
20412 cssProps: {
20413 "float": "cssFloat"
20414 },
20415
20416 // Get and set the style property on a DOM Node
20417 style: function( elem, name, value, extra ) {
20418
20419 // Don't set styles on text and comment nodes
20420 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20421 return;
20422 }
20423
20424 // Make sure that we're working with the right name
20425 var ret, type, hooks,
20426 origName = jQuery.camelCase( name ),
20427 isCustomProp = rcustomProp.test( name ),
20428 style = elem.style;
20429
20430 // Make sure that we're working with the right name. We don't
20431 // want to query the value if it is a CSS custom property
20432 // since they are user-defined.
20433 if ( !isCustomProp ) {
20434 name = finalPropName( origName );
20435 }
20436
20437 // Gets hook for the prefixed version, then unprefixed version
20438 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20439
20440 // Check if we're setting a value
20441 if ( value !== undefined ) {
20442 type = typeof value;
20443
20444 // Convert "+=" or "-=" to relative numbers (#7345)
20445 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20446 value = adjustCSS( elem, name, ret );
20447
20448 // Fixes bug #9237
20449 type = "number";
20450 }
20451
20452 // Make sure that null and NaN values aren't set (#7116)
20453 if ( value == null || value !== value ) {
20454 return;
20455 }
20456
20457 // If a number was passed in, add the unit (except for certain CSS properties)
20458 if ( type === "number" ) {
20459 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20460 }
20461
20462 // background-* props affect original clone's values
20463 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20464 style[ name ] = "inherit";
20465 }
20466
20467 // If a hook was provided, use that value, otherwise just set the specified value
20468 if ( !hooks || !( "set" in hooks ) ||
20469 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20470
20471 if ( isCustomProp ) {
20472 style.setProperty( name, value );
20473 } else {
20474 style[ name ] = value;
20475 }
20476 }
20477
20478 } else {
20479
20480 // If a hook was provided get the non-computed value from there
20481 if ( hooks && "get" in hooks &&
20482 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20483
20484 return ret;
20485 }
20486
20487 // Otherwise just get the value from the style object
20488 return style[ name ];
20489 }
20490 },
20491
20492 css: function( elem, name, extra, styles ) {
20493 var val, num, hooks,
20494 origName = jQuery.camelCase( name ),
20495 isCustomProp = rcustomProp.test( name );
20496
20497 // Make sure that we're working with the right name. We don't
20498 // want to modify the value if it is a CSS custom property
20499 // since they are user-defined.
20500 if ( !isCustomProp ) {
20501 name = finalPropName( origName );
20502 }
20503
20504 // Try prefixed name followed by the unprefixed name
20505 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20506
20507 // If a hook was provided get the computed value from there
20508 if ( hooks && "get" in hooks ) {
20509 val = hooks.get( elem, true, extra );
20510 }
20511
20512 // Otherwise, if a way to get the computed value exists, use that
20513 if ( val === undefined ) {
20514 val = curCSS( elem, name, styles );
20515 }
20516
20517 // Convert "normal" to computed value
20518 if ( val === "normal" && name in cssNormalTransform ) {
20519 val = cssNormalTransform[ name ];
20520 }
20521
20522 // Make numeric if forced or a qualifier was provided and val looks numeric
20523 if ( extra === "" || extra ) {
20524 num = parseFloat( val );
20525 return extra === true || isFinite( num ) ? num || 0 : val;
20526 }
20527
20528 return val;
20529 }
20530 } );
20531
20532 jQuery.each( [ "height", "width" ], function( i, name ) {
20533 jQuery.cssHooks[ name ] = {
20534 get: function( elem, computed, extra ) {
20535 if ( computed ) {
20536
20537 // Certain elements can have dimension info if we invisibly show them
20538 // but it must have a current display style that would benefit
20539 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20540
20541 // Support: Safari 8+
20542 // Table columns in Safari have non-zero offsetWidth & zero
20543 // getBoundingClientRect().width unless display is changed.
20544 // Support: IE <=11 only
20545 // Running getBoundingClientRect on a disconnected node
20546 // in IE throws an error.
20547 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20548 swap( elem, cssShow, function() {
20549 return getWidthOrHeight( elem, name, extra );
20550 } ) :
20551 getWidthOrHeight( elem, name, extra );
20552 }
20553 },
20554
20555 set: function( elem, value, extra ) {
20556 var matches,
20557 styles = extra && getStyles( elem ),
20558 subtract = extra && augmentWidthOrHeight(
20559 elem,
20560 name,
20561 extra,
20562 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20563 styles
20564 );
20565
20566 // Convert to pixels if value adjustment is needed
20567 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20568 ( matches[ 3 ] || "px" ) !== "px" ) {
20569
20570 elem.style[ name ] = value;
20571 value = jQuery.css( elem, name );
20572 }
20573
20574 return setPositiveNumber( elem, value, subtract );
20575 }
20576 };
20577 } );
20578
20579 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20580 function( elem, computed ) {
20581 if ( computed ) {
20582 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20583 elem.getBoundingClientRect().left -
20584 swap( elem, { marginLeft: 0 }, function() {
20585 return elem.getBoundingClientRect().left;
20586 } )
20587 ) + "px";
20588 }
20589 }
20590 );
20591
20592 // These hooks are used by animate to expand properties
20593 jQuery.each( {
20594 margin: "",
20595 padding: "",
20596 border: "Width"
20597 }, function( prefix, suffix ) {
20598 jQuery.cssHooks[ prefix + suffix ] = {
20599 expand: function( value ) {
20600 var i = 0,
20601 expanded = {},
20602
20603 // Assumes a single number if not a string
20604 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20605
20606 for ( ; i < 4; i++ ) {
20607 expanded[ prefix + cssExpand[ i ] + suffix ] =
20608 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20609 }
20610
20611 return expanded;
20612 }
20613 };
20614
20615 if ( !rmargin.test( prefix ) ) {
20616 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20617 }
20618 } );
20619
20620 jQuery.fn.extend( {
20621 css: function( name, value ) {
20622 return access( this, function( elem, name, value ) {
20623 var styles, len,
20624 map = {},
20625 i = 0;
20626
20627 if ( Array.isArray( name ) ) {
20628 styles = getStyles( elem );
20629 len = name.length;
20630
20631 for ( ; i < len; i++ ) {
20632 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20633 }
20634
20635 return map;
20636 }
20637
20638 return value !== undefined ?
20639 jQuery.style( elem, name, value ) :
20640 jQuery.css( elem, name );
20641 }, name, value, arguments.length > 1 );
20642 }
20643 } );
20644
20645
20646 function Tween( elem, options, prop, end, easing ) {
20647 return new Tween.prototype.init( elem, options, prop, end, easing );
20648 }
20649 jQuery.Tween = Tween;
20650
20651 Tween.prototype = {
20652 constructor: Tween,
20653 init: function( elem, options, prop, end, easing, unit ) {
20654 this.elem = elem;
20655 this.prop = prop;
20656 this.easing = easing || jQuery.easing._default;
20657 this.options = options;
20658 this.start = this.now = this.cur();
20659 this.end = end;
20660 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20661 },
20662 cur: function() {
20663 var hooks = Tween.propHooks[ this.prop ];
20664
20665 return hooks && hooks.get ?
20666 hooks.get( this ) :
20667 Tween.propHooks._default.get( this );
20668 },
20669 run: function( percent ) {
20670 var eased,
20671 hooks = Tween.propHooks[ this.prop ];
20672
20673 if ( this.options.duration ) {
20674 this.pos = eased = jQuery.easing[ this.easing ](
20675 percent, this.options.duration * percent, 0, 1, this.options.duration
20676 );
20677 } else {
20678 this.pos = eased = percent;
20679 }
20680 this.now = ( this.end - this.start ) * eased + this.start;
20681
20682 if ( this.options.step ) {
20683 this.options.step.call( this.elem, this.now, this );
20684 }
20685
20686 if ( hooks && hooks.set ) {
20687 hooks.set( this );
20688 } else {
20689 Tween.propHooks._default.set( this );
20690 }
20691 return this;
20692 }
20693 };
20694
20695 Tween.prototype.init.prototype = Tween.prototype;
20696
20697 Tween.propHooks = {
20698 _default: {
20699 get: function( tween ) {
20700 var result;
20701
20702 // Use a property on the element directly when it is not a DOM element,
20703 // or when there is no matching style property that exists.
20704 if ( tween.elem.nodeType !== 1 ||
20705 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20706 return tween.elem[ tween.prop ];
20707 }
20708
20709 // Passing an empty string as a 3rd parameter to .css will automatically
20710 // attempt a parseFloat and fallback to a string if the parse fails.
20711 // Simple values such as "10px" are parsed to Float;
20712 // complex values such as "rotate(1rad)" are returned as-is.
20713 result = jQuery.css( tween.elem, tween.prop, "" );
20714
20715 // Empty strings, null, undefined and "auto" are converted to 0.
20716 return !result || result === "auto" ? 0 : result;
20717 },
20718 set: function( tween ) {
20719
20720 // Use step hook for back compat.
20721 // Use cssHook if its there.
20722 // Use .style if available and use plain properties where available.
20723 if ( jQuery.fx.step[ tween.prop ] ) {
20724 jQuery.fx.step[ tween.prop ]( tween );
20725 } else if ( tween.elem.nodeType === 1 &&
20726 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20727 jQuery.cssHooks[ tween.prop ] ) ) {
20728 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20729 } else {
20730 tween.elem[ tween.prop ] = tween.now;
20731 }
20732 }
20733 }
20734 };
20735
20736 // Support: IE <=9 only
20737 // Panic based approach to setting things on disconnected nodes
20738 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20739 set: function( tween ) {
20740 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20741 tween.elem[ tween.prop ] = tween.now;
20742 }
20743 }
20744 };
20745
20746 jQuery.easing = {
20747 linear: function( p ) {
20748 return p;
20749 },
20750 swing: function( p ) {
20751 return 0.5 - Math.cos( p * Math.PI ) / 2;
20752 },
20753 _default: "swing"
20754 };
20755
20756 jQuery.fx = Tween.prototype.init;
20757
20758 // Back compat <1.8 extension point
20759 jQuery.fx.step = {};
20760
20761
20762
20763
20764 var
20765 fxNow, inProgress,
20766 rfxtypes = /^(?:toggle|show|hide)$/,
20767 rrun = /queueHooks$/;
20768
20769 function schedule() {
20770 if ( inProgress ) {
20771 if ( document.hidden === false && window.requestAnimationFrame ) {
20772 window.requestAnimationFrame( schedule );
20773 } else {
20774 window.setTimeout( schedule, jQuery.fx.interval );
20775 }
20776
20777 jQuery.fx.tick();
20778 }
20779 }
20780
20781 // Animations created synchronously will run synchronously
20782 function createFxNow() {
20783 window.setTimeout( function() {
20784 fxNow = undefined;
20785 } );
20786 return ( fxNow = jQuery.now() );
20787 }
20788
20789 // Generate parameters to create a standard animation
20790 function genFx( type, includeWidth ) {
20791 var which,
20792 i = 0,
20793 attrs = { height: type };
20794
20795 // If we include width, step value is 1 to do all cssExpand values,
20796 // otherwise step value is 2 to skip over Left and Right
20797 includeWidth = includeWidth ? 1 : 0;
20798 for ( ; i < 4; i += 2 - includeWidth ) {
20799 which = cssExpand[ i ];
20800 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20801 }
20802
20803 if ( includeWidth ) {
20804 attrs.opacity = attrs.width = type;
20805 }
20806
20807 return attrs;
20808 }
20809
20810 function createTween( value, prop, animation ) {
20811 var tween,
20812 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20813 index = 0,
20814 length = collection.length;
20815 for ( ; index < length; index++ ) {
20816 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20817
20818 // We're done with this property
20819 return tween;
20820 }
20821 }
20822 }
20823
20824 function defaultPrefilter( elem, props, opts ) {
20825 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20826 isBox = "width" in props || "height" in props,
20827 anim = this,
20828 orig = {},
20829 style = elem.style,
20830 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20831 dataShow = dataPriv.get( elem, "fxshow" );
20832
20833 // Queue-skipping animations hijack the fx hooks
20834 if ( !opts.queue ) {
20835 hooks = jQuery._queueHooks( elem, "fx" );
20836 if ( hooks.unqueued == null ) {
20837 hooks.unqueued = 0;
20838 oldfire = hooks.empty.fire;
20839 hooks.empty.fire = function() {
20840 if ( !hooks.unqueued ) {
20841 oldfire();
20842 }
20843 };
20844 }
20845 hooks.unqueued++;
20846
20847 anim.always( function() {
20848
20849 // Ensure the complete handler is called before this completes
20850 anim.always( function() {
20851 hooks.unqueued--;
20852 if ( !jQuery.queue( elem, "fx" ).length ) {
20853 hooks.empty.fire();
20854 }
20855 } );
20856 } );
20857 }
20858
20859 // Detect show/hide animations
20860 for ( prop in props ) {
20861 value = props[ prop ];
20862 if ( rfxtypes.test( value ) ) {
20863 delete props[ prop ];
20864 toggle = toggle || value === "toggle";
20865 if ( value === ( hidden ? "hide" : "show" ) ) {
20866
20867 // Pretend to be hidden if this is a "show" and
20868 // there is still data from a stopped show/hide
20869 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20870 hidden = true;
20871
20872 // Ignore all other no-op show/hide data
20873 } else {
20874 continue;
20875 }
20876 }
20877 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20878 }
20879 }
20880
20881 // Bail out if this is a no-op like .hide().hide()
20882 propTween = !jQuery.isEmptyObject( props );
20883 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20884 return;
20885 }
20886
20887 // Restrict "overflow" and "display" styles during box animations
20888 if ( isBox && elem.nodeType === 1 ) {
20889
20890 // Support: IE <=9 - 11, Edge 12 - 13
20891 // Record all 3 overflow attributes because IE does not infer the shorthand
20892 // from identically-valued overflowX and overflowY
20893 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20894
20895 // Identify a display type, preferring old show/hide data over the CSS cascade
20896 restoreDisplay = dataShow && dataShow.display;
20897 if ( restoreDisplay == null ) {
20898 restoreDisplay = dataPriv.get( elem, "display" );
20899 }
20900 display = jQuery.css( elem, "display" );
20901 if ( display === "none" ) {
20902 if ( restoreDisplay ) {
20903 display = restoreDisplay;
20904 } else {
20905
20906 // Get nonempty value(s) by temporarily forcing visibility
20907 showHide( [ elem ], true );
20908 restoreDisplay = elem.style.display || restoreDisplay;
20909 display = jQuery.css( elem, "display" );
20910 showHide( [ elem ] );
20911 }
20912 }
20913
20914 // Animate inline elements as inline-block
20915 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20916 if ( jQuery.css( elem, "float" ) === "none" ) {
20917
20918 // Restore the original display value at the end of pure show/hide animations
20919 if ( !propTween ) {
20920 anim.done( function() {
20921 style.display = restoreDisplay;
20922 } );
20923 if ( restoreDisplay == null ) {
20924 display = style.display;
20925 restoreDisplay = display === "none" ? "" : display;
20926 }
20927 }
20928 style.display = "inline-block";
20929 }
20930 }
20931 }
20932
20933 if ( opts.overflow ) {
20934 style.overflow = "hidden";
20935 anim.always( function() {
20936 style.overflow = opts.overflow[ 0 ];
20937 style.overflowX = opts.overflow[ 1 ];
20938 style.overflowY = opts.overflow[ 2 ];
20939 } );
20940 }
20941
20942 // Implement show/hide animations
20943 propTween = false;
20944 for ( prop in orig ) {
20945
20946 // General show/hide setup for this element animation
20947 if ( !propTween ) {
20948 if ( dataShow ) {
20949 if ( "hidden" in dataShow ) {
20950 hidden = dataShow.hidden;
20951 }
20952 } else {
20953 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20954 }
20955
20956 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20957 if ( toggle ) {
20958 dataShow.hidden = !hidden;
20959 }
20960
20961 // Show elements before animating them
20962 if ( hidden ) {
20963 showHide( [ elem ], true );
20964 }
20965
20966 /* eslint-disable no-loop-func */
20967
20968 anim.done( function() {
20969
20970 /* eslint-enable no-loop-func */
20971
20972 // The final step of a "hide" animation is actually hiding the element
20973 if ( !hidden ) {
20974 showHide( [ elem ] );
20975 }
20976 dataPriv.remove( elem, "fxshow" );
20977 for ( prop in orig ) {
20978 jQuery.style( elem, prop, orig[ prop ] );
20979 }
20980 } );
20981 }
20982
20983 // Per-property setup
20984 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20985 if ( !( prop in dataShow ) ) {
20986 dataShow[ prop ] = propTween.start;
20987 if ( hidden ) {
20988 propTween.end = propTween.start;
20989 propTween.start = 0;
20990 }
20991 }
20992 }
20993 }
20994
20995 function propFilter( props, specialEasing ) {
20996 var index, name, easing, value, hooks;
20997
20998 // camelCase, specialEasing and expand cssHook pass
20999 for ( index in props ) {
21000 name = jQuery.camelCase( index );
21001 easing = specialEasing[ name ];
21002 value = props[ index ];
21003 if ( Array.isArray( value ) ) {
21004 easing = value[ 1 ];
21005 value = props[ index ] = value[ 0 ];
21006 }
21007
21008 if ( index !== name ) {
21009 props[ name ] = value;
21010 delete props[ index ];
21011 }
21012
21013 hooks = jQuery.cssHooks[ name ];
21014 if ( hooks && "expand" in hooks ) {
21015 value = hooks.expand( value );
21016 delete props[ name ];
21017
21018 // Not quite $.extend, this won't overwrite existing keys.
21019 // Reusing 'index' because we have the correct "name"
21020 for ( index in value ) {
21021 if ( !( index in props ) ) {
21022 props[ index ] = value[ index ];
21023 specialEasing[ index ] = easing;
21024 }
21025 }
21026 } else {
21027 specialEasing[ name ] = easing;
21028 }
21029 }
21030 }
21031
21032 function Animation( elem, properties, options ) {
21033 var result,
21034 stopped,
21035 index = 0,
21036 length = Animation.prefilters.length,
21037 deferred = jQuery.Deferred().always( function() {
21038
21039 // Don't match elem in the :animated selector
21040 delete tick.elem;
21041 } ),
21042 tick = function() {
21043 if ( stopped ) {
21044 return false;
21045 }
21046 var currentTime = fxNow || createFxNow(),
21047 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21048
21049 // Support: Android 2.3 only
21050 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21051 temp = remaining / animation.duration || 0,
21052 percent = 1 - temp,
21053 index = 0,
21054 length = animation.tweens.length;
21055
21056 for ( ; index < length; index++ ) {
21057 animation.tweens[ index ].run( percent );
21058 }
21059
21060 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21061
21062 // If there's more to do, yield
21063 if ( percent < 1 && length ) {
21064 return remaining;
21065 }
21066
21067 // If this was an empty animation, synthesize a final progress notification
21068 if ( !length ) {
21069 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21070 }
21071
21072 // Resolve the animation and report its conclusion
21073 deferred.resolveWith( elem, [ animation ] );
21074 return false;
21075 },
21076 animation = deferred.promise( {
21077 elem: elem,
21078 props: jQuery.extend( {}, properties ),
21079 opts: jQuery.extend( true, {
21080 specialEasing: {},
21081 easing: jQuery.easing._default
21082 }, options ),
21083 originalProperties: properties,
21084 originalOptions: options,
21085 startTime: fxNow || createFxNow(),
21086 duration: options.duration,
21087 tweens: [],
21088 createTween: function( prop, end ) {
21089 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21090 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21091 animation.tweens.push( tween );
21092 return tween;
21093 },
21094 stop: function( gotoEnd ) {
21095 var index = 0,
21096
21097 // If we are going to the end, we want to run all the tweens
21098 // otherwise we skip this part
21099 length = gotoEnd ? animation.tweens.length : 0;
21100 if ( stopped ) {
21101 return this;
21102 }
21103 stopped = true;
21104 for ( ; index < length; index++ ) {
21105 animation.tweens[ index ].run( 1 );
21106 }
21107
21108 // Resolve when we played the last frame; otherwise, reject
21109 if ( gotoEnd ) {
21110 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21111 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21112 } else {
21113 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21114 }
21115 return this;
21116 }
21117 } ),
21118 props = animation.props;
21119
21120 propFilter( props, animation.opts.specialEasing );
21121
21122 for ( ; index < length; index++ ) {
21123 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21124 if ( result ) {
21125 if ( jQuery.isFunction( result.stop ) ) {
21126 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21127 jQuery.proxy( result.stop, result );
21128 }
21129 return result;
21130 }
21131 }
21132
21133 jQuery.map( props, createTween, animation );
21134
21135 if ( jQuery.isFunction( animation.opts.start ) ) {
21136 animation.opts.start.call( elem, animation );
21137 }
21138
21139 // Attach callbacks from options
21140 animation
21141 .progress( animation.opts.progress )
21142 .done( animation.opts.done, animation.opts.complete )
21143 .fail( animation.opts.fail )
21144 .always( animation.opts.always );
21145
21146 jQuery.fx.timer(
21147 jQuery.extend( tick, {
21148 elem: elem,
21149 anim: animation,
21150 queue: animation.opts.queue
21151 } )
21152 );
21153
21154 return animation;
21155 }
21156
21157 jQuery.Animation = jQuery.extend( Animation, {
21158
21159 tweeners: {
21160 "*": [ function( prop, value ) {
21161 var tween = this.createTween( prop, value );
21162 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21163 return tween;
21164 } ]
21165 },
21166
21167 tweener: function( props, callback ) {
21168 if ( jQuery.isFunction( props ) ) {
21169 callback = props;
21170 props = [ "*" ];
21171 } else {
21172 props = props.match( rnothtmlwhite );
21173 }
21174
21175 var prop,
21176 index = 0,
21177 length = props.length;
21178
21179 for ( ; index < length; index++ ) {
21180 prop = props[ index ];
21181 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21182 Animation.tweeners[ prop ].unshift( callback );
21183 }
21184 },
21185
21186 prefilters: [ defaultPrefilter ],
21187
21188 prefilter: function( callback, prepend ) {
21189 if ( prepend ) {
21190 Animation.prefilters.unshift( callback );
21191 } else {
21192 Animation.prefilters.push( callback );
21193 }
21194 }
21195 } );
21196
21197 jQuery.speed = function( speed, easing, fn ) {
21198 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21199 complete: fn || !fn && easing ||
21200 jQuery.isFunction( speed ) && speed,
21201 duration: speed,
21202 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21203 };
21204
21205 // Go to the end state if fx are off
21206 if ( jQuery.fx.off ) {
21207 opt.duration = 0;
21208
21209 } else {
21210 if ( typeof opt.duration !== "number" ) {
21211 if ( opt.duration in jQuery.fx.speeds ) {
21212 opt.duration = jQuery.fx.speeds[ opt.duration ];
21213
21214 } else {
21215 opt.duration = jQuery.fx.speeds._default;
21216 }
21217 }
21218 }
21219
21220 // Normalize opt.queue - true/undefined/null -> "fx"
21221 if ( opt.queue == null || opt.queue === true ) {
21222 opt.queue = "fx";
21223 }
21224
21225 // Queueing
21226 opt.old = opt.complete;
21227
21228 opt.complete = function() {
21229 if ( jQuery.isFunction( opt.old ) ) {
21230 opt.old.call( this );
21231 }
21232
21233 if ( opt.queue ) {
21234 jQuery.dequeue( this, opt.queue );
21235 }
21236 };
21237
21238 return opt;
21239 };
21240
21241 jQuery.fn.extend( {
21242 fadeTo: function( speed, to, easing, callback ) {
21243
21244 // Show any hidden elements after setting opacity to 0
21245 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21246
21247 // Animate to the value specified
21248 .end().animate( { opacity: to }, speed, easing, callback );
21249 },
21250 animate: function( prop, speed, easing, callback ) {
21251 var empty = jQuery.isEmptyObject( prop ),
21252 optall = jQuery.speed( speed, easing, callback ),
21253 doAnimation = function() {
21254
21255 // Operate on a copy of prop so per-property easing won't be lost
21256 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21257
21258 // Empty animations, or finishing resolves immediately
21259 if ( empty || dataPriv.get( this, "finish" ) ) {
21260 anim.stop( true );
21261 }
21262 };
21263 doAnimation.finish = doAnimation;
21264
21265 return empty || optall.queue === false ?
21266 this.each( doAnimation ) :
21267 this.queue( optall.queue, doAnimation );
21268 },
21269 stop: function( type, clearQueue, gotoEnd ) {
21270 var stopQueue = function( hooks ) {
21271 var stop = hooks.stop;
21272 delete hooks.stop;
21273 stop( gotoEnd );
21274 };
21275
21276 if ( typeof type !== "string" ) {
21277 gotoEnd = clearQueue;
21278 clearQueue = type;
21279 type = undefined;
21280 }
21281 if ( clearQueue && type !== false ) {
21282 this.queue( type || "fx", [] );
21283 }
21284
21285 return this.each( function() {
21286 var dequeue = true,
21287 index = type != null && type + "queueHooks",
21288 timers = jQuery.timers,
21289 data = dataPriv.get( this );
21290
21291 if ( index ) {
21292 if ( data[ index ] && data[ index ].stop ) {
21293 stopQueue( data[ index ] );
21294 }
21295 } else {
21296 for ( index in data ) {
21297 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21298 stopQueue( data[ index ] );
21299 }
21300 }
21301 }
21302
21303 for ( index = timers.length; index--; ) {
21304 if ( timers[ index ].elem === this &&
21305 ( type == null || timers[ index ].queue === type ) ) {
21306
21307 timers[ index ].anim.stop( gotoEnd );
21308 dequeue = false;
21309 timers.splice( index, 1 );
21310 }
21311 }
21312
21313 // Start the next in the queue if the last step wasn't forced.
21314 // Timers currently will call their complete callbacks, which
21315 // will dequeue but only if they were gotoEnd.
21316 if ( dequeue || !gotoEnd ) {
21317 jQuery.dequeue( this, type );
21318 }
21319 } );
21320 },
21321 finish: function( type ) {
21322 if ( type !== false ) {
21323 type = type || "fx";
21324 }
21325 return this.each( function() {
21326 var index,
21327 data = dataPriv.get( this ),
21328 queue = data[ type + "queue" ],
21329 hooks = data[ type + "queueHooks" ],
21330 timers = jQuery.timers,
21331 length = queue ? queue.length : 0;
21332
21333 // Enable finishing flag on private data
21334 data.finish = true;
21335
21336 // Empty the queue first
21337 jQuery.queue( this, type, [] );
21338
21339 if ( hooks && hooks.stop ) {
21340 hooks.stop.call( this, true );
21341 }
21342
21343 // Look for any active animations, and finish them
21344 for ( index = timers.length; index--; ) {
21345 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21346 timers[ index ].anim.stop( true );
21347 timers.splice( index, 1 );
21348 }
21349 }
21350
21351 // Look for any animations in the old queue and finish them
21352 for ( index = 0; index < length; index++ ) {
21353 if ( queue[ index ] && queue[ index ].finish ) {
21354 queue[ index ].finish.call( this );
21355 }
21356 }
21357
21358 // Turn off finishing flag
21359 delete data.finish;
21360 } );
21361 }
21362 } );
21363
21364 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21365 var cssFn = jQuery.fn[ name ];
21366 jQuery.fn[ name ] = function( speed, easing, callback ) {
21367 return speed == null || typeof speed === "boolean" ?
21368 cssFn.apply( this, arguments ) :
21369 this.animate( genFx( name, true ), speed, easing, callback );
21370 };
21371 } );
21372
21373 // Generate shortcuts for custom animations
21374 jQuery.each( {
21375 slideDown: genFx( "show" ),
21376 slideUp: genFx( "hide" ),
21377 slideToggle: genFx( "toggle" ),
21378 fadeIn: { opacity: "show" },
21379 fadeOut: { opacity: "hide" },
21380 fadeToggle: { opacity: "toggle" }
21381 }, function( name, props ) {
21382 jQuery.fn[ name ] = function( speed, easing, callback ) {
21383 return this.animate( props, speed, easing, callback );
21384 };
21385 } );
21386
21387 jQuery.timers = [];
21388 jQuery.fx.tick = function() {
21389 var timer,
21390 i = 0,
21391 timers = jQuery.timers;
21392
21393 fxNow = jQuery.now();
21394
21395 for ( ; i < timers.length; i++ ) {
21396 timer = timers[ i ];
21397
21398 // Run the timer and safely remove it when done (allowing for external removal)
21399 if ( !timer() && timers[ i ] === timer ) {
21400 timers.splice( i--, 1 );
21401 }
21402 }
21403
21404 if ( !timers.length ) {
21405 jQuery.fx.stop();
21406 }
21407 fxNow = undefined;
21408 };
21409
21410 jQuery.fx.timer = function( timer ) {
21411 jQuery.timers.push( timer );
21412 jQuery.fx.start();
21413 };
21414
21415 jQuery.fx.interval = 13;
21416 jQuery.fx.start = function() {
21417 if ( inProgress ) {
21418 return;
21419 }
21420
21421 inProgress = true;
21422 schedule();
21423 };
21424
21425 jQuery.fx.stop = function() {
21426 inProgress = null;
21427 };
21428
21429 jQuery.fx.speeds = {
21430 slow: 600,
21431 fast: 200,
21432
21433 // Default speed
21434 _default: 400
21435 };
21436
21437
21438 // Based off of the plugin by Clint Helfers, with permission.
21439 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21440 jQuery.fn.delay = function( time, type ) {
21441 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21442 type = type || "fx";
21443
21444 return this.queue( type, function( next, hooks ) {
21445 var timeout = window.setTimeout( next, time );
21446 hooks.stop = function() {
21447 window.clearTimeout( timeout );
21448 };
21449 } );
21450 };
21451
21452
21453 ( function() {
21454 var input = document.createElement( "input" ),
21455 select = document.createElement( "select" ),
21456 opt = select.appendChild( document.createElement( "option" ) );
21457
21458 input.type = "checkbox";
21459
21460 // Support: Android <=4.3 only
21461 // Default value for a checkbox should be "on"
21462 support.checkOn = input.value !== "";
21463
21464 // Support: IE <=11 only
21465 // Must access selectedIndex to make default options select
21466 support.optSelected = opt.selected;
21467
21468 // Support: IE <=11 only
21469 // An input loses its value after becoming a radio
21470 input = document.createElement( "input" );
21471 input.value = "t";
21472 input.type = "radio";
21473 support.radioValue = input.value === "t";
21474 } )();
21475
21476
21477 var boolHook,
21478 attrHandle = jQuery.expr.attrHandle;
21479
21480 jQuery.fn.extend( {
21481 attr: function( name, value ) {
21482 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21483 },
21484
21485 removeAttr: function( name ) {
21486 return this.each( function() {
21487 jQuery.removeAttr( this, name );
21488 } );
21489 }
21490 } );
21491
21492 jQuery.extend( {
21493 attr: function( elem, name, value ) {
21494 var ret, hooks,
21495 nType = elem.nodeType;
21496
21497 // Don't get/set attributes on text, comment and attribute nodes
21498 if ( nType === 3 || nType === 8 || nType === 2 ) {
21499 return;
21500 }
21501
21502 // Fallback to prop when attributes are not supported
21503 if ( typeof elem.getAttribute === "undefined" ) {
21504 return jQuery.prop( elem, name, value );
21505 }
21506
21507 // Attribute hooks are determined by the lowercase version
21508 // Grab necessary hook if one is defined
21509 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21510 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21511 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21512 }
21513
21514 if ( value !== undefined ) {
21515 if ( value === null ) {
21516 jQuery.removeAttr( elem, name );
21517 return;
21518 }
21519
21520 if ( hooks && "set" in hooks &&
21521 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21522 return ret;
21523 }
21524
21525 elem.setAttribute( name, value + "" );
21526 return value;
21527 }
21528
21529 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21530 return ret;
21531 }
21532
21533 ret = jQuery.find.attr( elem, name );
21534
21535 // Non-existent attributes return null, we normalize to undefined
21536 return ret == null ? undefined : ret;
21537 },
21538
21539 attrHooks: {
21540 type: {
21541 set: function( elem, value ) {
21542 if ( !support.radioValue && value === "radio" &&
21543 nodeName( elem, "input" ) ) {
21544 var val = elem.value;
21545 elem.setAttribute( "type", value );
21546 if ( val ) {
21547 elem.value = val;
21548 }
21549 return value;
21550 }
21551 }
21552 }
21553 },
21554
21555 removeAttr: function( elem, value ) {
21556 var name,
21557 i = 0,
21558
21559 // Attribute names can contain non-HTML whitespace characters
21560 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21561 attrNames = value && value.match( rnothtmlwhite );
21562
21563 if ( attrNames && elem.nodeType === 1 ) {
21564 while ( ( name = attrNames[ i++ ] ) ) {
21565 elem.removeAttribute( name );
21566 }
21567 }
21568 }
21569 } );
21570
21571 // Hooks for boolean attributes
21572 boolHook = {
21573 set: function( elem, value, name ) {
21574 if ( value === false ) {
21575
21576 // Remove boolean attributes when set to false
21577 jQuery.removeAttr( elem, name );
21578 } else {
21579 elem.setAttribute( name, name );
21580 }
21581 return name;
21582 }
21583 };
21584
21585 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21586 var getter = attrHandle[ name ] || jQuery.find.attr;
21587
21588 attrHandle[ name ] = function( elem, name, isXML ) {
21589 var ret, handle,
21590 lowercaseName = name.toLowerCase();
21591
21592 if ( !isXML ) {
21593
21594 // Avoid an infinite loop by temporarily removing this function from the getter
21595 handle = attrHandle[ lowercaseName ];
21596 attrHandle[ lowercaseName ] = ret;
21597 ret = getter( elem, name, isXML ) != null ?
21598 lowercaseName :
21599 null;
21600 attrHandle[ lowercaseName ] = handle;
21601 }
21602 return ret;
21603 };
21604 } );
21605
21606
21607
21608
21609 var rfocusable = /^(?:input|select|textarea|button)$/i,
21610 rclickable = /^(?:a|area)$/i;
21611
21612 jQuery.fn.extend( {
21613 prop: function( name, value ) {
21614 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21615 },
21616
21617 removeProp: function( name ) {
21618 return this.each( function() {
21619 delete this[ jQuery.propFix[ name ] || name ];
21620 } );
21621 }
21622 } );
21623
21624 jQuery.extend( {
21625 prop: function( elem, name, value ) {
21626 var ret, hooks,
21627 nType = elem.nodeType;
21628
21629 // Don't get/set properties on text, comment and attribute nodes
21630 if ( nType === 3 || nType === 8 || nType === 2 ) {
21631 return;
21632 }
21633
21634 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21635
21636 // Fix name and attach hooks
21637 name = jQuery.propFix[ name ] || name;
21638 hooks = jQuery.propHooks[ name ];
21639 }
21640
21641 if ( value !== undefined ) {
21642 if ( hooks && "set" in hooks &&
21643 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21644 return ret;
21645 }
21646
21647 return ( elem[ name ] = value );
21648 }
21649
21650 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21651 return ret;
21652 }
21653
21654 return elem[ name ];
21655 },
21656
21657 propHooks: {
21658 tabIndex: {
21659 get: function( elem ) {
21660
21661 // Support: IE <=9 - 11 only
21662 // elem.tabIndex doesn't always return the
21663 // correct value when it hasn't been explicitly set
21664 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21665 // Use proper attribute retrieval(#12072)
21666 var tabindex = jQuery.find.attr( elem, "tabindex" );
21667
21668 if ( tabindex ) {
21669 return parseInt( tabindex, 10 );
21670 }
21671
21672 if (
21673 rfocusable.test( elem.nodeName ) ||
21674 rclickable.test( elem.nodeName ) &&
21675 elem.href
21676 ) {
21677 return 0;
21678 }
21679
21680 return -1;
21681 }
21682 }
21683 },
21684
21685 propFix: {
21686 "for": "htmlFor",
21687 "class": "className"
21688 }
21689 } );
21690
21691 // Support: IE <=11 only
21692 // Accessing the selectedIndex property
21693 // forces the browser to respect setting selected
21694 // on the option
21695 // The getter ensures a default option is selected
21696 // when in an optgroup
21697 // eslint rule "no-unused-expressions" is disabled for this code
21698 // since it considers such accessions noop
21699 if ( !support.optSelected ) {
21700 jQuery.propHooks.selected = {
21701 get: function( elem ) {
21702
21703 /* eslint no-unused-expressions: "off" */
21704
21705 var parent = elem.parentNode;
21706 if ( parent && parent.parentNode ) {
21707 parent.parentNode.selectedIndex;
21708 }
21709 return null;
21710 },
21711 set: function( elem ) {
21712
21713 /* eslint no-unused-expressions: "off" */
21714
21715 var parent = elem.parentNode;
21716 if ( parent ) {
21717 parent.selectedIndex;
21718
21719 if ( parent.parentNode ) {
21720 parent.parentNode.selectedIndex;
21721 }
21722 }
21723 }
21724 };
21725 }
21726
21727 jQuery.each( [
21728 "tabIndex",
21729 "readOnly",
21730 "maxLength",
21731 "cellSpacing",
21732 "cellPadding",
21733 "rowSpan",
21734 "colSpan",
21735 "useMap",
21736 "frameBorder",
21737 "contentEditable"
21738 ], function() {
21739 jQuery.propFix[ this.toLowerCase() ] = this;
21740 } );
21741
21742
21743
21744
21745 // Strip and collapse whitespace according to HTML spec
21746 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21747 function stripAndCollapse( value ) {
21748 var tokens = value.match( rnothtmlwhite ) || [];
21749 return tokens.join( " " );
21750 }
21751
21752
21753 function getClass( elem ) {
21754 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21755 }
21756
21757 jQuery.fn.extend( {
21758 addClass: function( value ) {
21759 var classes, elem, cur, curValue, clazz, j, finalValue,
21760 i = 0;
21761
21762 if ( jQuery.isFunction( value ) ) {
21763 return this.each( function( j ) {
21764 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21765 } );
21766 }
21767
21768 if ( typeof value === "string" && value ) {
21769 classes = value.match( rnothtmlwhite ) || [];
21770
21771 while ( ( elem = this[ i++ ] ) ) {
21772 curValue = getClass( elem );
21773 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21774
21775 if ( cur ) {
21776 j = 0;
21777 while ( ( clazz = classes[ j++ ] ) ) {
21778 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21779 cur += clazz + " ";
21780 }
21781 }
21782
21783 // Only assign if different to avoid unneeded rendering.
21784 finalValue = stripAndCollapse( cur );
21785 if ( curValue !== finalValue ) {
21786 elem.setAttribute( "class", finalValue );
21787 }
21788 }
21789 }
21790 }
21791
21792 return this;
21793 },
21794
21795 removeClass: function( value ) {
21796 var classes, elem, cur, curValue, clazz, j, finalValue,
21797 i = 0;
21798
21799 if ( jQuery.isFunction( value ) ) {
21800 return this.each( function( j ) {
21801 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21802 } );
21803 }
21804
21805 if ( !arguments.length ) {
21806 return this.attr( "class", "" );
21807 }
21808
21809 if ( typeof value === "string" && value ) {
21810 classes = value.match( rnothtmlwhite ) || [];
21811
21812 while ( ( elem = this[ i++ ] ) ) {
21813 curValue = getClass( elem );
21814
21815 // This expression is here for better compressibility (see addClass)
21816 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21817
21818 if ( cur ) {
21819 j = 0;
21820 while ( ( clazz = classes[ j++ ] ) ) {
21821
21822 // Remove *all* instances
21823 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21824 cur = cur.replace( " " + clazz + " ", " " );
21825 }
21826 }
21827
21828 // Only assign if different to avoid unneeded rendering.
21829 finalValue = stripAndCollapse( cur );
21830 if ( curValue !== finalValue ) {
21831 elem.setAttribute( "class", finalValue );
21832 }
21833 }
21834 }
21835 }
21836
21837 return this;
21838 },
21839
21840 toggleClass: function( value, stateVal ) {
21841 var type = typeof value;
21842
21843 if ( typeof stateVal === "boolean" && type === "string" ) {
21844 return stateVal ? this.addClass( value ) : this.removeClass( value );
21845 }
21846
21847 if ( jQuery.isFunction( value ) ) {
21848 return this.each( function( i ) {
21849 jQuery( this ).toggleClass(
21850 value.call( this, i, getClass( this ), stateVal ),
21851 stateVal
21852 );
21853 } );
21854 }
21855
21856 return this.each( function() {
21857 var className, i, self, classNames;
21858
21859 if ( type === "string" ) {
21860
21861 // Toggle individual class names
21862 i = 0;
21863 self = jQuery( this );
21864 classNames = value.match( rnothtmlwhite ) || [];
21865
21866 while ( ( className = classNames[ i++ ] ) ) {
21867
21868 // Check each className given, space separated list
21869 if ( self.hasClass( className ) ) {
21870 self.removeClass( className );
21871 } else {
21872 self.addClass( className );
21873 }
21874 }
21875
21876 // Toggle whole class name
21877 } else if ( value === undefined || type === "boolean" ) {
21878 className = getClass( this );
21879 if ( className ) {
21880
21881 // Store className if set
21882 dataPriv.set( this, "__className__", className );
21883 }
21884
21885 // If the element has a class name or if we're passed `false`,
21886 // then remove the whole classname (if there was one, the above saved it).
21887 // Otherwise bring back whatever was previously saved (if anything),
21888 // falling back to the empty string if nothing was stored.
21889 if ( this.setAttribute ) {
21890 this.setAttribute( "class",
21891 className || value === false ?
21892 "" :
21893 dataPriv.get( this, "__className__" ) || ""
21894 );
21895 }
21896 }
21897 } );
21898 },
21899
21900 hasClass: function( selector ) {
21901 var className, elem,
21902 i = 0;
21903
21904 className = " " + selector + " ";
21905 while ( ( elem = this[ i++ ] ) ) {
21906 if ( elem.nodeType === 1 &&
21907 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21908 return true;
21909 }
21910 }
21911
21912 return false;
21913 }
21914 } );
21915
21916
21917
21918
21919 var rreturn = /\r/g;
21920
21921 jQuery.fn.extend( {
21922 val: function( value ) {
21923 var hooks, ret, isFunction,
21924 elem = this[ 0 ];
21925
21926 if ( !arguments.length ) {
21927 if ( elem ) {
21928 hooks = jQuery.valHooks[ elem.type ] ||
21929 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21930
21931 if ( hooks &&
21932 "get" in hooks &&
21933 ( ret = hooks.get( elem, "value" ) ) !== undefined
21934 ) {
21935 return ret;
21936 }
21937
21938 ret = elem.value;
21939
21940 // Handle most common string cases
21941 if ( typeof ret === "string" ) {
21942 return ret.replace( rreturn, "" );
21943 }
21944
21945 // Handle cases where value is null/undef or number
21946 return ret == null ? "" : ret;
21947 }
21948
21949 return;
21950 }
21951
21952 isFunction = jQuery.isFunction( value );
21953
21954 return this.each( function( i ) {
21955 var val;
21956
21957 if ( this.nodeType !== 1 ) {
21958 return;
21959 }
21960
21961 if ( isFunction ) {
21962 val = value.call( this, i, jQuery( this ).val() );
21963 } else {
21964 val = value;
21965 }
21966
21967 // Treat null/undefined as ""; convert numbers to string
21968 if ( val == null ) {
21969 val = "";
21970
21971 } else if ( typeof val === "number" ) {
21972 val += "";
21973
21974 } else if ( Array.isArray( val ) ) {
21975 val = jQuery.map( val, function( value ) {
21976 return value == null ? "" : value + "";
21977 } );
21978 }
21979
21980 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21981
21982 // If set returns undefined, fall back to normal setting
21983 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21984 this.value = val;
21985 }
21986 } );
21987 }
21988 } );
21989
21990 jQuery.extend( {
21991 valHooks: {
21992 option: {
21993 get: function( elem ) {
21994
21995 var val = jQuery.find.attr( elem, "value" );
21996 return val != null ?
21997 val :
21998
21999 // Support: IE <=10 - 11 only
22000 // option.text throws exceptions (#14686, #14858)
22001 // Strip and collapse whitespace
22002 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
22003 stripAndCollapse( jQuery.text( elem ) );
22004 }
22005 },
22006 select: {
22007 get: function( elem ) {
22008 var value, option, i,
22009 options = elem.options,
22010 index = elem.selectedIndex,
22011 one = elem.type === "select-one",
22012 values = one ? null : [],
22013 max = one ? index + 1 : options.length;
22014
22015 if ( index < 0 ) {
22016 i = max;
22017
22018 } else {
22019 i = one ? index : 0;
22020 }
22021
22022 // Loop through all the selected options
22023 for ( ; i < max; i++ ) {
22024 option = options[ i ];
22025
22026 // Support: IE <=9 only
22027 // IE8-9 doesn't update selected after form reset (#2551)
22028 if ( ( option.selected || i === index ) &&
22029
22030 // Don't return options that are disabled or in a disabled optgroup
22031 !option.disabled &&
22032 ( !option.parentNode.disabled ||
22033 !nodeName( option.parentNode, "optgroup" ) ) ) {
22034
22035 // Get the specific value for the option
22036 value = jQuery( option ).val();
22037
22038 // We don't need an array for one selects
22039 if ( one ) {
22040 return value;
22041 }
22042
22043 // Multi-Selects return an array
22044 values.push( value );
22045 }
22046 }
22047
22048 return values;
22049 },
22050
22051 set: function( elem, value ) {
22052 var optionSet, option,
22053 options = elem.options,
22054 values = jQuery.makeArray( value ),
22055 i = options.length;
22056
22057 while ( i-- ) {
22058 option = options[ i ];
22059
22060 /* eslint-disable no-cond-assign */
22061
22062 if ( option.selected =
22063 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22064 ) {
22065 optionSet = true;
22066 }
22067
22068 /* eslint-enable no-cond-assign */
22069 }
22070
22071 // Force browsers to behave consistently when non-matching value is set
22072 if ( !optionSet ) {
22073 elem.selectedIndex = -1;
22074 }
22075 return values;
22076 }
22077 }
22078 }
22079 } );
22080
22081 // Radios and checkboxes getter/setter
22082 jQuery.each( [ "radio", "checkbox" ], function() {
22083 jQuery.valHooks[ this ] = {
22084 set: function( elem, value ) {
22085 if ( Array.isArray( value ) ) {
22086 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22087 }
22088 }
22089 };
22090 if ( !support.checkOn ) {
22091 jQuery.valHooks[ this ].get = function( elem ) {
22092 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22093 };
22094 }
22095 } );
22096
22097
22098
22099
22100 // Return jQuery for attributes-only inclusion
22101
22102
22103 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22104
22105 jQuery.extend( jQuery.event, {
22106
22107 trigger: function( event, data, elem, onlyHandlers ) {
22108
22109 var i, cur, tmp, bubbleType, ontype, handle, special,
22110 eventPath = [ elem || document ],
22111 type = hasOwn.call( event, "type" ) ? event.type : event,
22112 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22113
22114 cur = tmp = elem = elem || document;
22115
22116 // Don't do events on text and comment nodes
22117 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22118 return;
22119 }
22120
22121 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22122 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22123 return;
22124 }
22125
22126 if ( type.indexOf( "." ) > -1 ) {
22127
22128 // Namespaced trigger; create a regexp to match event type in handle()
22129 namespaces = type.split( "." );
22130 type = namespaces.shift();
22131 namespaces.sort();
22132 }
22133 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22134
22135 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22136 event = event[ jQuery.expando ] ?
22137 event :
22138 new jQuery.Event( type, typeof event === "object" && event );
22139
22140 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22141 event.isTrigger = onlyHandlers ? 2 : 3;
22142 event.namespace = namespaces.join( "." );
22143 event.rnamespace = event.namespace ?
22144 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22145 null;
22146
22147 // Clean up the event in case it is being reused
22148 event.result = undefined;
22149 if ( !event.target ) {
22150 event.target = elem;
22151 }
22152
22153 // Clone any incoming data and prepend the event, creating the handler arg list
22154 data = data == null ?
22155 [ event ] :
22156 jQuery.makeArray( data, [ event ] );
22157
22158 // Allow special events to draw outside the lines
22159 special = jQuery.event.special[ type ] || {};
22160 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22161 return;
22162 }
22163
22164 // Determine event propagation path in advance, per W3C events spec (#9951)
22165 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22166 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22167
22168 bubbleType = special.delegateType || type;
22169 if ( !rfocusMorph.test( bubbleType + type ) ) {
22170 cur = cur.parentNode;
22171 }
22172 for ( ; cur; cur = cur.parentNode ) {
22173 eventPath.push( cur );
22174 tmp = cur;
22175 }
22176
22177 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22178 if ( tmp === ( elem.ownerDocument || document ) ) {
22179 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22180 }
22181 }
22182
22183 // Fire handlers on the event path
22184 i = 0;
22185 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22186
22187 event.type = i > 1 ?
22188 bubbleType :
22189 special.bindType || type;
22190
22191 // jQuery handler
22192 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22193 dataPriv.get( cur, "handle" );
22194 if ( handle ) {
22195 handle.apply( cur, data );
22196 }
22197
22198 // Native handler
22199 handle = ontype && cur[ ontype ];
22200 if ( handle && handle.apply && acceptData( cur ) ) {
22201 event.result = handle.apply( cur, data );
22202 if ( event.result === false ) {
22203 event.preventDefault();
22204 }
22205 }
22206 }
22207 event.type = type;
22208
22209 // If nobody prevented the default action, do it now
22210 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22211
22212 if ( ( !special._default ||
22213 special._default.apply( eventPath.pop(), data ) === false ) &&
22214 acceptData( elem ) ) {
22215
22216 // Call a native DOM method on the target with the same name as the event.
22217 // Don't do default actions on window, that's where global variables be (#6170)
22218 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22219
22220 // Don't re-trigger an onFOO event when we call its FOO() method
22221 tmp = elem[ ontype ];
22222
22223 if ( tmp ) {
22224 elem[ ontype ] = null;
22225 }
22226
22227 // Prevent re-triggering of the same event, since we already bubbled it above
22228 jQuery.event.triggered = type;
22229 elem[ type ]();
22230 jQuery.event.triggered = undefined;
22231
22232 if ( tmp ) {
22233 elem[ ontype ] = tmp;
22234 }
22235 }
22236 }
22237 }
22238
22239 return event.result;
22240 },
22241
22242 // Piggyback on a donor event to simulate a different one
22243 // Used only for `focus(in | out)` events
22244 simulate: function( type, elem, event ) {
22245 var e = jQuery.extend(
22246 new jQuery.Event(),
22247 event,
22248 {
22249 type: type,
22250 isSimulated: true
22251 }
22252 );
22253
22254 jQuery.event.trigger( e, null, elem );
22255 }
22256
22257 } );
22258
22259 jQuery.fn.extend( {
22260
22261 trigger: function( type, data ) {
22262 return this.each( function() {
22263 jQuery.event.trigger( type, data, this );
22264 } );
22265 },
22266 triggerHandler: function( type, data ) {
22267 var elem = this[ 0 ];
22268 if ( elem ) {
22269 return jQuery.event.trigger( type, data, elem, true );
22270 }
22271 }
22272 } );
22273
22274
22275 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22276 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22277 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22278 function( i, name ) {
22279
22280 // Handle event binding
22281 jQuery.fn[ name ] = function( data, fn ) {
22282 return arguments.length > 0 ?
22283 this.on( name, null, data, fn ) :
22284 this.trigger( name );
22285 };
22286 } );
22287
22288 jQuery.fn.extend( {
22289 hover: function( fnOver, fnOut ) {
22290 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22291 }
22292 } );
22293
22294
22295
22296
22297 support.focusin = "onfocusin" in window;
22298
22299
22300 // Support: Firefox <=44
22301 // Firefox doesn't have focus(in | out) events
22302 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22303 //
22304 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22305 // focus(in | out) events fire after focus & blur events,
22306 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22307 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22308 if ( !support.focusin ) {
22309 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22310
22311 // Attach a single capturing handler on the document while someone wants focusin/focusout
22312 var handler = function( event ) {
22313 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22314 };
22315
22316 jQuery.event.special[ fix ] = {
22317 setup: function() {
22318 var doc = this.ownerDocument || this,
22319 attaches = dataPriv.access( doc, fix );
22320
22321 if ( !attaches ) {
22322 doc.addEventListener( orig, handler, true );
22323 }
22324 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22325 },
22326 teardown: function() {
22327 var doc = this.ownerDocument || this,
22328 attaches = dataPriv.access( doc, fix ) - 1;
22329
22330 if ( !attaches ) {
22331 doc.removeEventListener( orig, handler, true );
22332 dataPriv.remove( doc, fix );
22333
22334 } else {
22335 dataPriv.access( doc, fix, attaches );
22336 }
22337 }
22338 };
22339 } );
22340 }
22341 var location = window.location;
22342
22343 var nonce = jQuery.now();
22344
22345 var rquery = ( /\?/ );
22346
22347
22348
22349 // Cross-browser xml parsing
22350 jQuery.parseXML = function( data ) {
22351 var xml;
22352 if ( !data || typeof data !== "string" ) {
22353 return null;
22354 }
22355
22356 // Support: IE 9 - 11 only
22357 // IE throws on parseFromString with invalid input.
22358 try {
22359 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22360 } catch ( e ) {
22361 xml = undefined;
22362 }
22363
22364 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22365 jQuery.error( "Invalid XML: " + data );
22366 }
22367 return xml;
22368 };
22369
22370
22371 var
22372 rbracket = /\[\]$/,
22373 rCRLF = /\r?\n/g,
22374 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22375 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22376
22377 function buildParams( prefix, obj, traditional, add ) {
22378 var name;
22379
22380 if ( Array.isArray( obj ) ) {
22381
22382 // Serialize array item.
22383 jQuery.each( obj, function( i, v ) {
22384 if ( traditional || rbracket.test( prefix ) ) {
22385
22386 // Treat each array item as a scalar.
22387 add( prefix, v );
22388
22389 } else {
22390
22391 // Item is non-scalar (array or object), encode its numeric index.
22392 buildParams(
22393 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22394 v,
22395 traditional,
22396 add
22397 );
22398 }
22399 } );
22400
22401 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22402
22403 // Serialize object item.
22404 for ( name in obj ) {
22405 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22406 }
22407
22408 } else {
22409
22410 // Serialize scalar item.
22411 add( prefix, obj );
22412 }
22413 }
22414
22415 // Serialize an array of form elements or a set of
22416 // key/values into a query string
22417 jQuery.param = function( a, traditional ) {
22418 var prefix,
22419 s = [],
22420 add = function( key, valueOrFunction ) {
22421
22422 // If value is a function, invoke it and use its return value
22423 var value = jQuery.isFunction( valueOrFunction ) ?
22424 valueOrFunction() :
22425 valueOrFunction;
22426
22427 s[ s.length ] = encodeURIComponent( key ) + "=" +
22428 encodeURIComponent( value == null ? "" : value );
22429 };
22430
22431 // If an array was passed in, assume that it is an array of form elements.
22432 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22433
22434 // Serialize the form elements
22435 jQuery.each( a, function() {
22436 add( this.name, this.value );
22437 } );
22438
22439 } else {
22440
22441 // If traditional, encode the "old" way (the way 1.3.2 or older
22442 // did it), otherwise encode params recursively.
22443 for ( prefix in a ) {
22444 buildParams( prefix, a[ prefix ], traditional, add );
22445 }
22446 }
22447
22448 // Return the resulting serialization
22449 return s.join( "&" );
22450 };
22451
22452 jQuery.fn.extend( {
22453 serialize: function() {
22454 return jQuery.param( this.serializeArray() );
22455 },
22456 serializeArray: function() {
22457 return this.map( function() {
22458
22459 // Can add propHook for "elements" to filter or add form elements
22460 var elements = jQuery.prop( this, "elements" );
22461 return elements ? jQuery.makeArray( elements ) : this;
22462 } )
22463 .filter( function() {
22464 var type = this.type;
22465
22466 // Use .is( ":disabled" ) so that fieldset[disabled] works
22467 return this.name && !jQuery( this ).is( ":disabled" ) &&
22468 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22469 ( this.checked || !rcheckableType.test( type ) );
22470 } )
22471 .map( function( i, elem ) {
22472 var val = jQuery( this ).val();
22473
22474 if ( val == null ) {
22475 return null;
22476 }
22477
22478 if ( Array.isArray( val ) ) {
22479 return jQuery.map( val, function( val ) {
22480 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22481 } );
22482 }
22483
22484 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22485 } ).get();
22486 }
22487 } );
22488
22489
22490 var
22491 r20 = /%20/g,
22492 rhash = /#.*$/,
22493 rantiCache = /([?&])_=[^&]*/,
22494 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22495
22496 // #7653, #8125, #8152: local protocol detection
22497 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22498 rnoContent = /^(?:GET|HEAD)$/,
22499 rprotocol = /^\/\//,
22500
22501 /* Prefilters
22502 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22503 * 2) These are called:
22504 * - BEFORE asking for a transport
22505 * - AFTER param serialization (s.data is a string if s.processData is true)
22506 * 3) key is the dataType
22507 * 4) the catchall symbol "*" can be used
22508 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22509 */
22510 prefilters = {},
22511
22512 /* Transports bindings
22513 * 1) key is the dataType
22514 * 2) the catchall symbol "*" can be used
22515 * 3) selection will start with transport dataType and THEN go to "*" if needed
22516 */
22517 transports = {},
22518
22519 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22520 allTypes = "*/".concat( "*" ),
22521
22522 // Anchor tag for parsing the document origin
22523 originAnchor = document.createElement( "a" );
22524 originAnchor.href = location.href;
22525
22526 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22527 function addToPrefiltersOrTransports( structure ) {
22528
22529 // dataTypeExpression is optional and defaults to "*"
22530 return function( dataTypeExpression, func ) {
22531
22532 if ( typeof dataTypeExpression !== "string" ) {
22533 func = dataTypeExpression;
22534 dataTypeExpression = "*";
22535 }
22536
22537 var dataType,
22538 i = 0,
22539 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22540
22541 if ( jQuery.isFunction( func ) ) {
22542
22543 // For each dataType in the dataTypeExpression
22544 while ( ( dataType = dataTypes[ i++ ] ) ) {
22545
22546 // Prepend if requested
22547 if ( dataType[ 0 ] === "+" ) {
22548 dataType = dataType.slice( 1 ) || "*";
22549 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22550
22551 // Otherwise append
22552 } else {
22553 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22554 }
22555 }
22556 }
22557 };
22558 }
22559
22560 // Base inspection function for prefilters and transports
22561 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22562
22563 var inspected = {},
22564 seekingTransport = ( structure === transports );
22565
22566 function inspect( dataType ) {
22567 var selected;
22568 inspected[ dataType ] = true;
22569 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22570 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22571 if ( typeof dataTypeOrTransport === "string" &&
22572 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22573
22574 options.dataTypes.unshift( dataTypeOrTransport );
22575 inspect( dataTypeOrTransport );
22576 return false;
22577 } else if ( seekingTransport ) {
22578 return !( selected = dataTypeOrTransport );
22579 }
22580 } );
22581 return selected;
22582 }
22583
22584 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22585 }
22586
22587 // A special extend for ajax options
22588 // that takes "flat" options (not to be deep extended)
22589 // Fixes #9887
22590 function ajaxExtend( target, src ) {
22591 var key, deep,
22592 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22593
22594 for ( key in src ) {
22595 if ( src[ key ] !== undefined ) {
22596 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22597 }
22598 }
22599 if ( deep ) {
22600 jQuery.extend( true, target, deep );
22601 }
22602
22603 return target;
22604 }
22605
22606 /* Handles responses to an ajax request:
22607 * - finds the right dataType (mediates between content-type and expected dataType)
22608 * - returns the corresponding response
22609 */
22610 function ajaxHandleResponses( s, jqXHR, responses ) {
22611
22612 var ct, type, finalDataType, firstDataType,
22613 contents = s.contents,
22614 dataTypes = s.dataTypes;
22615
22616 // Remove auto dataType and get content-type in the process
22617 while ( dataTypes[ 0 ] === "*" ) {
22618 dataTypes.shift();
22619 if ( ct === undefined ) {
22620 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22621 }
22622 }
22623
22624 // Check if we're dealing with a known content-type
22625 if ( ct ) {
22626 for ( type in contents ) {
22627 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22628 dataTypes.unshift( type );
22629 break;
22630 }
22631 }
22632 }
22633
22634 // Check to see if we have a response for the expected dataType
22635 if ( dataTypes[ 0 ] in responses ) {
22636 finalDataType = dataTypes[ 0 ];
22637 } else {
22638
22639 // Try convertible dataTypes
22640 for ( type in responses ) {
22641 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22642 finalDataType = type;
22643 break;
22644 }
22645 if ( !firstDataType ) {
22646 firstDataType = type;
22647 }
22648 }
22649
22650 // Or just use first one
22651 finalDataType = finalDataType || firstDataType;
22652 }
22653
22654 // If we found a dataType
22655 // We add the dataType to the list if needed
22656 // and return the corresponding response
22657 if ( finalDataType ) {
22658 if ( finalDataType !== dataTypes[ 0 ] ) {
22659 dataTypes.unshift( finalDataType );
22660 }
22661 return responses[ finalDataType ];
22662 }
22663 }
22664
22665 /* Chain conversions given the request and the original response
22666 * Also sets the responseXXX fields on the jqXHR instance
22667 */
22668 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22669 var conv2, current, conv, tmp, prev,
22670 converters = {},
22671
22672 // Work with a copy of dataTypes in case we need to modify it for conversion
22673 dataTypes = s.dataTypes.slice();
22674
22675 // Create converters map with lowercased keys
22676 if ( dataTypes[ 1 ] ) {
22677 for ( conv in s.converters ) {
22678 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22679 }
22680 }
22681
22682 current = dataTypes.shift();
22683
22684 // Convert to each sequential dataType
22685 while ( current ) {
22686
22687 if ( s.responseFields[ current ] ) {
22688 jqXHR[ s.responseFields[ current ] ] = response;
22689 }
22690
22691 // Apply the dataFilter if provided
22692 if ( !prev && isSuccess && s.dataFilter ) {
22693 response = s.dataFilter( response, s.dataType );
22694 }
22695
22696 prev = current;
22697 current = dataTypes.shift();
22698
22699 if ( current ) {
22700
22701 // There's only work to do if current dataType is non-auto
22702 if ( current === "*" ) {
22703
22704 current = prev;
22705
22706 // Convert response if prev dataType is non-auto and differs from current
22707 } else if ( prev !== "*" && prev !== current ) {
22708
22709 // Seek a direct converter
22710 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22711
22712 // If none found, seek a pair
22713 if ( !conv ) {
22714 for ( conv2 in converters ) {
22715
22716 // If conv2 outputs current
22717 tmp = conv2.split( " " );
22718 if ( tmp[ 1 ] === current ) {
22719
22720 // If prev can be converted to accepted input
22721 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22722 converters[ "* " + tmp[ 0 ] ];
22723 if ( conv ) {
22724
22725 // Condense equivalence converters
22726 if ( conv === true ) {
22727 conv = converters[ conv2 ];
22728
22729 // Otherwise, insert the intermediate dataType
22730 } else if ( converters[ conv2 ] !== true ) {
22731 current = tmp[ 0 ];
22732 dataTypes.unshift( tmp[ 1 ] );
22733 }
22734 break;
22735 }
22736 }
22737 }
22738 }
22739
22740 // Apply converter (if not an equivalence)
22741 if ( conv !== true ) {
22742
22743 // Unless errors are allowed to bubble, catch and return them
22744 if ( conv && s.throws ) {
22745 response = conv( response );
22746 } else {
22747 try {
22748 response = conv( response );
22749 } catch ( e ) {
22750 return {
22751 state: "parsererror",
22752 error: conv ? e : "No conversion from " + prev + " to " + current
22753 };
22754 }
22755 }
22756 }
22757 }
22758 }
22759 }
22760
22761 return { state: "success", data: response };
22762 }
22763
22764 jQuery.extend( {
22765
22766 // Counter for holding the number of active queries
22767 active: 0,
22768
22769 // Last-Modified header cache for next request
22770 lastModified: {},
22771 etag: {},
22772
22773 ajaxSettings: {
22774 url: location.href,
22775 type: "GET",
22776 isLocal: rlocalProtocol.test( location.protocol ),
22777 global: true,
22778 processData: true,
22779 async: true,
22780 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22781
22782 /*
22783 timeout: 0,
22784 data: null,
22785 dataType: null,
22786 username: null,
22787 password: null,
22788 cache: null,
22789 throws: false,
22790 traditional: false,
22791 headers: {},
22792 */
22793
22794 accepts: {
22795 "*": allTypes,
22796 text: "text/plain",
22797 html: "text/html",
22798 xml: "application/xml, text/xml",
22799 json: "application/json, text/javascript"
22800 },
22801
22802 contents: {
22803 xml: /\bxml\b/,
22804 html: /\bhtml/,
22805 json: /\bjson\b/
22806 },
22807
22808 responseFields: {
22809 xml: "responseXML",
22810 text: "responseText",
22811 json: "responseJSON"
22812 },
22813
22814 // Data converters
22815 // Keys separate source (or catchall "*") and destination types with a single space
22816 converters: {
22817
22818 // Convert anything to text
22819 "* text": String,
22820
22821 // Text to html (true = no transformation)
22822 "text html": true,
22823
22824 // Evaluate text as a json expression
22825 "text json": JSON.parse,
22826
22827 // Parse text as xml
22828 "text xml": jQuery.parseXML
22829 },
22830
22831 // For options that shouldn't be deep extended:
22832 // you can add your own custom options here if
22833 // and when you create one that shouldn't be
22834 // deep extended (see ajaxExtend)
22835 flatOptions: {
22836 url: true,
22837 context: true
22838 }
22839 },
22840
22841 // Creates a full fledged settings object into target
22842 // with both ajaxSettings and settings fields.
22843 // If target is omitted, writes into ajaxSettings.
22844 ajaxSetup: function( target, settings ) {
22845 return settings ?
22846
22847 // Building a settings object
22848 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22849
22850 // Extending ajaxSettings
22851 ajaxExtend( jQuery.ajaxSettings, target );
22852 },
22853
22854 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22855 ajaxTransport: addToPrefiltersOrTransports( transports ),
22856
22857 // Main method
22858 ajax: function( url, options ) {
22859
22860 // If url is an object, simulate pre-1.5 signature
22861 if ( typeof url === "object" ) {
22862 options = url;
22863 url = undefined;
22864 }
22865
22866 // Force options to be an object
22867 options = options || {};
22868
22869 var transport,
22870
22871 // URL without anti-cache param
22872 cacheURL,
22873
22874 // Response headers
22875 responseHeadersString,
22876 responseHeaders,
22877
22878 // timeout handle
22879 timeoutTimer,
22880
22881 // Url cleanup var
22882 urlAnchor,
22883
22884 // Request state (becomes false upon send and true upon completion)
22885 completed,
22886
22887 // To know if global events are to be dispatched
22888 fireGlobals,
22889
22890 // Loop variable
22891 i,
22892
22893 // uncached part of the url
22894 uncached,
22895
22896 // Create the final options object
22897 s = jQuery.ajaxSetup( {}, options ),
22898
22899 // Callbacks context
22900 callbackContext = s.context || s,
22901
22902 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22903 globalEventContext = s.context &&
22904 ( callbackContext.nodeType || callbackContext.jquery ) ?
22905 jQuery( callbackContext ) :
22906 jQuery.event,
22907
22908 // Deferreds
22909 deferred = jQuery.Deferred(),
22910 completeDeferred = jQuery.Callbacks( "once memory" ),
22911
22912 // Status-dependent callbacks
22913 statusCode = s.statusCode || {},
22914
22915 // Headers (they are sent all at once)
22916 requestHeaders = {},
22917 requestHeadersNames = {},
22918
22919 // Default abort message
22920 strAbort = "canceled",
22921
22922 // Fake xhr
22923 jqXHR = {
22924 readyState: 0,
22925
22926 // Builds headers hashtable if needed
22927 getResponseHeader: function( key ) {
22928 var match;
22929 if ( completed ) {
22930 if ( !responseHeaders ) {
22931 responseHeaders = {};
22932 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22933 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22934 }
22935 }
22936 match = responseHeaders[ key.toLowerCase() ];
22937 }
22938 return match == null ? null : match;
22939 },
22940
22941 // Raw string
22942 getAllResponseHeaders: function() {
22943 return completed ? responseHeadersString : null;
22944 },
22945
22946 // Caches the header
22947 setRequestHeader: function( name, value ) {
22948 if ( completed == null ) {
22949 name = requestHeadersNames[ name.toLowerCase() ] =
22950 requestHeadersNames[ name.toLowerCase() ] || name;
22951 requestHeaders[ name ] = value;
22952 }
22953 return this;
22954 },
22955
22956 // Overrides response content-type header
22957 overrideMimeType: function( type ) {
22958 if ( completed == null ) {
22959 s.mimeType = type;
22960 }
22961 return this;
22962 },
22963
22964 // Status-dependent callbacks
22965 statusCode: function( map ) {
22966 var code;
22967 if ( map ) {
22968 if ( completed ) {
22969
22970 // Execute the appropriate callbacks
22971 jqXHR.always( map[ jqXHR.status ] );
22972 } else {
22973
22974 // Lazy-add the new callbacks in a way that preserves old ones
22975 for ( code in map ) {
22976 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22977 }
22978 }
22979 }
22980 return this;
22981 },
22982
22983 // Cancel the request
22984 abort: function( statusText ) {
22985 var finalText = statusText || strAbort;
22986 if ( transport ) {
22987 transport.abort( finalText );
22988 }
22989 done( 0, finalText );
22990 return this;
22991 }
22992 };
22993
22994 // Attach deferreds
22995 deferred.promise( jqXHR );
22996
22997 // Add protocol if not provided (prefilters might expect it)
22998 // Handle falsy url in the settings object (#10093: consistency with old signature)
22999 // We also use the url parameter if available
23000 s.url = ( ( url || s.url || location.href ) + "" )
23001 .replace( rprotocol, location.protocol + "//" );
23002
23003 // Alias method option to type as per ticket #12004
23004 s.type = options.method || options.type || s.method || s.type;
23005
23006 // Extract dataTypes list
23007 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
23008
23009 // A cross-domain request is in order when the origin doesn't match the current origin.
23010 if ( s.crossDomain == null ) {
23011 urlAnchor = document.createElement( "a" );
23012
23013 // Support: IE <=8 - 11, Edge 12 - 13
23014 // IE throws exception on accessing the href property if url is malformed,
23015 // e.g. http://example.com:80x/
23016 try {
23017 urlAnchor.href = s.url;
23018
23019 // Support: IE <=8 - 11 only
23020 // Anchor's host property isn't correctly set when s.url is relative
23021 urlAnchor.href = urlAnchor.href;
23022 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23023 urlAnchor.protocol + "//" + urlAnchor.host;
23024 } catch ( e ) {
23025
23026 // If there is an error parsing the URL, assume it is crossDomain,
23027 // it can be rejected by the transport if it is invalid
23028 s.crossDomain = true;
23029 }
23030 }
23031
23032 // Convert data if not already a string
23033 if ( s.data && s.processData && typeof s.data !== "string" ) {
23034 s.data = jQuery.param( s.data, s.traditional );
23035 }
23036
23037 // Apply prefilters
23038 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23039
23040 // If request was aborted inside a prefilter, stop there
23041 if ( completed ) {
23042 return jqXHR;
23043 }
23044
23045 // We can fire global events as of now if asked to
23046 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23047 fireGlobals = jQuery.event && s.global;
23048
23049 // Watch for a new set of requests
23050 if ( fireGlobals && jQuery.active++ === 0 ) {
23051 jQuery.event.trigger( "ajaxStart" );
23052 }
23053
23054 // Uppercase the type
23055 s.type = s.type.toUpperCase();
23056
23057 // Determine if request has content
23058 s.hasContent = !rnoContent.test( s.type );
23059
23060 // Save the URL in case we're toying with the If-Modified-Since
23061 // and/or If-None-Match header later on
23062 // Remove hash to simplify url manipulation
23063 cacheURL = s.url.replace( rhash, "" );
23064
23065 // More options handling for requests with no content
23066 if ( !s.hasContent ) {
23067
23068 // Remember the hash so we can put it back
23069 uncached = s.url.slice( cacheURL.length );
23070
23071 // If data is available, append data to url
23072 if ( s.data ) {
23073 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23074
23075 // #9682: remove data so that it's not used in an eventual retry
23076 delete s.data;
23077 }
23078
23079 // Add or update anti-cache param if needed
23080 if ( s.cache === false ) {
23081 cacheURL = cacheURL.replace( rantiCache, "$1" );
23082 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23083 }
23084
23085 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23086 s.url = cacheURL + uncached;
23087
23088 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23089 } else if ( s.data && s.processData &&
23090 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23091 s.data = s.data.replace( r20, "+" );
23092 }
23093
23094 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23095 if ( s.ifModified ) {
23096 if ( jQuery.lastModified[ cacheURL ] ) {
23097 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23098 }
23099 if ( jQuery.etag[ cacheURL ] ) {
23100 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23101 }
23102 }
23103
23104 // Set the correct header, if data is being sent
23105 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23106 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23107 }
23108
23109 // Set the Accepts header for the server, depending on the dataType
23110 jqXHR.setRequestHeader(
23111 "Accept",
23112 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23113 s.accepts[ s.dataTypes[ 0 ] ] +
23114 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23115 s.accepts[ "*" ]
23116 );
23117
23118 // Check for headers option
23119 for ( i in s.headers ) {
23120 jqXHR.setRequestHeader( i, s.headers[ i ] );
23121 }
23122
23123 // Allow custom headers/mimetypes and early abort
23124 if ( s.beforeSend &&
23125 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23126
23127 // Abort if not done already and return
23128 return jqXHR.abort();
23129 }
23130
23131 // Aborting is no longer a cancellation
23132 strAbort = "abort";
23133
23134 // Install callbacks on deferreds
23135 completeDeferred.add( s.complete );
23136 jqXHR.done( s.success );
23137 jqXHR.fail( s.error );
23138
23139 // Get transport
23140 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23141
23142 // If no transport, we auto-abort
23143 if ( !transport ) {
23144 done( -1, "No Transport" );
23145 } else {
23146 jqXHR.readyState = 1;
23147
23148 // Send global event
23149 if ( fireGlobals ) {
23150 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23151 }
23152
23153 // If request was aborted inside ajaxSend, stop there
23154 if ( completed ) {
23155 return jqXHR;
23156 }
23157
23158 // Timeout
23159 if ( s.async && s.timeout > 0 ) {
23160 timeoutTimer = window.setTimeout( function() {
23161 jqXHR.abort( "timeout" );
23162 }, s.timeout );
23163 }
23164
23165 try {
23166 completed = false;
23167 transport.send( requestHeaders, done );
23168 } catch ( e ) {
23169
23170 // Rethrow post-completion exceptions
23171 if ( completed ) {
23172 throw e;
23173 }
23174
23175 // Propagate others as results
23176 done( -1, e );
23177 }
23178 }
23179
23180 // Callback for when everything is done
23181 function done( status, nativeStatusText, responses, headers ) {
23182 var isSuccess, success, error, response, modified,
23183 statusText = nativeStatusText;
23184
23185 // Ignore repeat invocations
23186 if ( completed ) {
23187 return;
23188 }
23189
23190 completed = true;
23191
23192 // Clear timeout if it exists
23193 if ( timeoutTimer ) {
23194 window.clearTimeout( timeoutTimer );
23195 }
23196
23197 // Dereference transport for early garbage collection
23198 // (no matter how long the jqXHR object will be used)
23199 transport = undefined;
23200
23201 // Cache response headers
23202 responseHeadersString = headers || "";
23203
23204 // Set readyState
23205 jqXHR.readyState = status > 0 ? 4 : 0;
23206
23207 // Determine if successful
23208 isSuccess = status >= 200 && status < 300 || status === 304;
23209
23210 // Get response data
23211 if ( responses ) {
23212 response = ajaxHandleResponses( s, jqXHR, responses );
23213 }
23214
23215 // Convert no matter what (that way responseXXX fields are always set)
23216 response = ajaxConvert( s, response, jqXHR, isSuccess );
23217
23218 // If successful, handle type chaining
23219 if ( isSuccess ) {
23220
23221 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23222 if ( s.ifModified ) {
23223 modified = jqXHR.getResponseHeader( "Last-Modified" );
23224 if ( modified ) {
23225 jQuery.lastModified[ cacheURL ] = modified;
23226 }
23227 modified = jqXHR.getResponseHeader( "etag" );
23228 if ( modified ) {
23229 jQuery.etag[ cacheURL ] = modified;
23230 }
23231 }
23232
23233 // if no content
23234 if ( status === 204 || s.type === "HEAD" ) {
23235 statusText = "nocontent";
23236
23237 // if not modified
23238 } else if ( status === 304 ) {
23239 statusText = "notmodified";
23240
23241 // If we have data, let's convert it
23242 } else {
23243 statusText = response.state;
23244 success = response.data;
23245 error = response.error;
23246 isSuccess = !error;
23247 }
23248 } else {
23249
23250 // Extract error from statusText and normalize for non-aborts
23251 error = statusText;
23252 if ( status || !statusText ) {
23253 statusText = "error";
23254 if ( status < 0 ) {
23255 status = 0;
23256 }
23257 }
23258 }
23259
23260 // Set data for the fake xhr object
23261 jqXHR.status = status;
23262 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23263
23264 // Success/Error
23265 if ( isSuccess ) {
23266 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23267 } else {
23268 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23269 }
23270
23271 // Status-dependent callbacks
23272 jqXHR.statusCode( statusCode );
23273 statusCode = undefined;
23274
23275 if ( fireGlobals ) {
23276 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23277 [ jqXHR, s, isSuccess ? success : error ] );
23278 }
23279
23280 // Complete
23281 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23282
23283 if ( fireGlobals ) {
23284 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23285
23286 // Handle the global AJAX counter
23287 if ( !( --jQuery.active ) ) {
23288 jQuery.event.trigger( "ajaxStop" );
23289 }
23290 }
23291 }
23292
23293 return jqXHR;
23294 },
23295
23296 getJSON: function( url, data, callback ) {
23297 return jQuery.get( url, data, callback, "json" );
23298 },
23299
23300 getScript: function( url, callback ) {
23301 return jQuery.get( url, undefined, callback, "script" );
23302 }
23303 } );
23304
23305 jQuery.each( [ "get", "post" ], function( i, method ) {
23306 jQuery[ method ] = function( url, data, callback, type ) {
23307
23308 // Shift arguments if data argument was omitted
23309 if ( jQuery.isFunction( data ) ) {
23310 type = type || callback;
23311 callback = data;
23312 data = undefined;
23313 }
23314
23315 // The url can be an options object (which then must have .url)
23316 return jQuery.ajax( jQuery.extend( {
23317 url: url,
23318 type: method,
23319 dataType: type,
23320 data: data,
23321 success: callback
23322 }, jQuery.isPlainObject( url ) && url ) );
23323 };
23324 } );
23325
23326
23327 jQuery._evalUrl = function( url ) {
23328 return jQuery.ajax( {
23329 url: url,
23330
23331 // Make this explicit, since user can override this through ajaxSetup (#11264)
23332 type: "GET",
23333 dataType: "script",
23334 cache: true,
23335 async: false,
23336 global: false,
23337 "throws": true
23338 } );
23339 };
23340
23341
23342 jQuery.fn.extend( {
23343 wrapAll: function( html ) {
23344 var wrap;
23345
23346 if ( this[ 0 ] ) {
23347 if ( jQuery.isFunction( html ) ) {
23348 html = html.call( this[ 0 ] );
23349 }
23350
23351 // The elements to wrap the target around
23352 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23353
23354 if ( this[ 0 ].parentNode ) {
23355 wrap.insertBefore( this[ 0 ] );
23356 }
23357
23358 wrap.map( function() {
23359 var elem = this;
23360
23361 while ( elem.firstElementChild ) {
23362 elem = elem.firstElementChild;
23363 }
23364
23365 return elem;
23366 } ).append( this );
23367 }
23368
23369 return this;
23370 },
23371
23372 wrapInner: function( html ) {
23373 if ( jQuery.isFunction( html ) ) {
23374 return this.each( function( i ) {
23375 jQuery( this ).wrapInner( html.call( this, i ) );
23376 } );
23377 }
23378
23379 return this.each( function() {
23380 var self = jQuery( this ),
23381 contents = self.contents();
23382
23383 if ( contents.length ) {
23384 contents.wrapAll( html );
23385
23386 } else {
23387 self.append( html );
23388 }
23389 } );
23390 },
23391
23392 wrap: function( html ) {
23393 var isFunction = jQuery.isFunction( html );
23394
23395 return this.each( function( i ) {
23396 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23397 } );
23398 },
23399
23400 unwrap: function( selector ) {
23401 this.parent( selector ).not( "body" ).each( function() {
23402 jQuery( this ).replaceWith( this.childNodes );
23403 } );
23404 return this;
23405 }
23406 } );
23407
23408
23409 jQuery.expr.pseudos.hidden = function( elem ) {
23410 return !jQuery.expr.pseudos.visible( elem );
23411 };
23412 jQuery.expr.pseudos.visible = function( elem ) {
23413 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23414 };
23415
23416
23417
23418
23419 jQuery.ajaxSettings.xhr = function() {
23420 try {
23421 return new window.XMLHttpRequest();
23422 } catch ( e ) {}
23423 };
23424
23425 var xhrSuccessStatus = {
23426
23427 // File protocol always yields status code 0, assume 200
23428 0: 200,
23429
23430 // Support: IE <=9 only
23431 // #1450: sometimes IE returns 1223 when it should be 204
23432 1223: 204
23433 },
23434 xhrSupported = jQuery.ajaxSettings.xhr();
23435
23436 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23437 support.ajax = xhrSupported = !!xhrSupported;
23438
23439 jQuery.ajaxTransport( function( options ) {
23440 var callback, errorCallback;
23441
23442 // Cross domain only allowed if supported through XMLHttpRequest
23443 if ( support.cors || xhrSupported && !options.crossDomain ) {
23444 return {
23445 send: function( headers, complete ) {
23446 var i,
23447 xhr = options.xhr();
23448
23449 xhr.open(
23450 options.type,
23451 options.url,
23452 options.async,
23453 options.username,
23454 options.password
23455 );
23456
23457 // Apply custom fields if provided
23458 if ( options.xhrFields ) {
23459 for ( i in options.xhrFields ) {
23460 xhr[ i ] = options.xhrFields[ i ];
23461 }
23462 }
23463
23464 // Override mime type if needed
23465 if ( options.mimeType && xhr.overrideMimeType ) {
23466 xhr.overrideMimeType( options.mimeType );
23467 }
23468
23469 // X-Requested-With header
23470 // For cross-domain requests, seeing as conditions for a preflight are
23471 // akin to a jigsaw puzzle, we simply never set it to be sure.
23472 // (it can always be set on a per-request basis or even using ajaxSetup)
23473 // For same-domain requests, won't change header if already provided.
23474 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23475 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23476 }
23477
23478 // Set headers
23479 for ( i in headers ) {
23480 xhr.setRequestHeader( i, headers[ i ] );
23481 }
23482
23483 // Callback
23484 callback = function( type ) {
23485 return function() {
23486 if ( callback ) {
23487 callback = errorCallback = xhr.onload =
23488 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23489
23490 if ( type === "abort" ) {
23491 xhr.abort();
23492 } else if ( type === "error" ) {
23493
23494 // Support: IE <=9 only
23495 // On a manual native abort, IE9 throws
23496 // errors on any property access that is not readyState
23497 if ( typeof xhr.status !== "number" ) {
23498 complete( 0, "error" );
23499 } else {
23500 complete(
23501
23502 // File: protocol always yields status 0; see #8605, #14207
23503 xhr.status,
23504 xhr.statusText
23505 );
23506 }
23507 } else {
23508 complete(
23509 xhrSuccessStatus[ xhr.status ] || xhr.status,
23510 xhr.statusText,
23511
23512 // Support: IE <=9 only
23513 // IE9 has no XHR2 but throws on binary (trac-11426)
23514 // For XHR2 non-text, let the caller handle it (gh-2498)
23515 ( xhr.responseType || "text" ) !== "text" ||
23516 typeof xhr.responseText !== "string" ?
23517 { binary: xhr.response } :
23518 { text: xhr.responseText },
23519 xhr.getAllResponseHeaders()
23520 );
23521 }
23522 }
23523 };
23524 };
23525
23526 // Listen to events
23527 xhr.onload = callback();
23528 errorCallback = xhr.onerror = callback( "error" );
23529
23530 // Support: IE 9 only
23531 // Use onreadystatechange to replace onabort
23532 // to handle uncaught aborts
23533 if ( xhr.onabort !== undefined ) {
23534 xhr.onabort = errorCallback;
23535 } else {
23536 xhr.onreadystatechange = function() {
23537
23538 // Check readyState before timeout as it changes
23539 if ( xhr.readyState === 4 ) {
23540
23541 // Allow onerror to be called first,
23542 // but that will not handle a native abort
23543 // Also, save errorCallback to a variable
23544 // as xhr.onerror cannot be accessed
23545 window.setTimeout( function() {
23546 if ( callback ) {
23547 errorCallback();
23548 }
23549 } );
23550 }
23551 };
23552 }
23553
23554 // Create the abort callback
23555 callback = callback( "abort" );
23556
23557 try {
23558
23559 // Do send the request (this may raise an exception)
23560 xhr.send( options.hasContent && options.data || null );
23561 } catch ( e ) {
23562
23563 // #14683: Only rethrow if this hasn't been notified as an error yet
23564 if ( callback ) {
23565 throw e;
23566 }
23567 }
23568 },
23569
23570 abort: function() {
23571 if ( callback ) {
23572 callback();
23573 }
23574 }
23575 };
23576 }
23577 } );
23578
23579
23580
23581
23582 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23583 jQuery.ajaxPrefilter( function( s ) {
23584 if ( s.crossDomain ) {
23585 s.contents.script = false;
23586 }
23587 } );
23588
23589 // Install script dataType
23590 jQuery.ajaxSetup( {
23591 accepts: {
23592 script: "text/javascript, application/javascript, " +
23593 "application/ecmascript, application/x-ecmascript"
23594 },
23595 contents: {
23596 script: /\b(?:java|ecma)script\b/
23597 },
23598 converters: {
23599 "text script": function( text ) {
23600 jQuery.globalEval( text );
23601 return text;
23602 }
23603 }
23604 } );
23605
23606 // Handle cache's special case and crossDomain
23607 jQuery.ajaxPrefilter( "script", function( s ) {
23608 if ( s.cache === undefined ) {
23609 s.cache = false;
23610 }
23611 if ( s.crossDomain ) {
23612 s.type = "GET";
23613 }
23614 } );
23615
23616 // Bind script tag hack transport
23617 jQuery.ajaxTransport( "script", function( s ) {
23618
23619 // This transport only deals with cross domain requests
23620 if ( s.crossDomain ) {
23621 var script, callback;
23622 return {
23623 send: function( _, complete ) {
23624 script = jQuery( "<script>" ).prop( {
23625 charset: s.scriptCharset,
23626 src: s.url
23627 } ).on(
23628 "load error",
23629 callback = function( evt ) {
23630 script.remove();
23631 callback = null;
23632 if ( evt ) {
23633 complete( evt.type === "error" ? 404 : 200, evt.type );
23634 }
23635 }
23636 );
23637
23638 // Use native DOM manipulation to avoid our domManip AJAX trickery
23639 document.head.appendChild( script[ 0 ] );
23640 },
23641 abort: function() {
23642 if ( callback ) {
23643 callback();
23644 }
23645 }
23646 };
23647 }
23648 } );
23649
23650
23651
23652
23653 var oldCallbacks = [],
23654 rjsonp = /(=)\?(?=&|$)|\?\?/;
23655
23656 // Default jsonp settings
23657 jQuery.ajaxSetup( {
23658 jsonp: "callback",
23659 jsonpCallback: function() {
23660 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23661 this[ callback ] = true;
23662 return callback;
23663 }
23664 } );
23665
23666 // Detect, normalize options and install callbacks for jsonp requests
23667 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23668
23669 var callbackName, overwritten, responseContainer,
23670 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23671 "url" :
23672 typeof s.data === "string" &&
23673 ( s.contentType || "" )
23674 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23675 rjsonp.test( s.data ) && "data"
23676 );
23677
23678 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23679 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23680
23681 // Get callback name, remembering preexisting value associated with it
23682 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23683 s.jsonpCallback() :
23684 s.jsonpCallback;
23685
23686 // Insert callback into url or form data
23687 if ( jsonProp ) {
23688 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23689 } else if ( s.jsonp !== false ) {
23690 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23691 }
23692
23693 // Use data converter to retrieve json after script execution
23694 s.converters[ "script json" ] = function() {
23695 if ( !responseContainer ) {
23696 jQuery.error( callbackName + " was not called" );
23697 }
23698 return responseContainer[ 0 ];
23699 };
23700
23701 // Force json dataType
23702 s.dataTypes[ 0 ] = "json";
23703
23704 // Install callback
23705 overwritten = window[ callbackName ];
23706 window[ callbackName ] = function() {
23707 responseContainer = arguments;
23708 };
23709
23710 // Clean-up function (fires after converters)
23711 jqXHR.always( function() {
23712
23713 // If previous value didn't exist - remove it
23714 if ( overwritten === undefined ) {
23715 jQuery( window ).removeProp( callbackName );
23716
23717 // Otherwise restore preexisting value
23718 } else {
23719 window[ callbackName ] = overwritten;
23720 }
23721
23722 // Save back as free
23723 if ( s[ callbackName ] ) {
23724
23725 // Make sure that re-using the options doesn't screw things around
23726 s.jsonpCallback = originalSettings.jsonpCallback;
23727
23728 // Save the callback name for future use
23729 oldCallbacks.push( callbackName );
23730 }
23731
23732 // Call if it was a function and we have a response
23733 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23734 overwritten( responseContainer[ 0 ] );
23735 }
23736
23737 responseContainer = overwritten = undefined;
23738 } );
23739
23740 // Delegate to script
23741 return "script";
23742 }
23743 } );
23744
23745
23746
23747
23748 // Support: Safari 8 only
23749 // In Safari 8 documents created via document.implementation.createHTMLDocument
23750 // collapse sibling forms: the second one becomes a child of the first one.
23751 // Because of that, this security measure has to be disabled in Safari 8.
23752 // https://bugs.webkit.org/show_bug.cgi?id=137337
23753 support.createHTMLDocument = ( function() {
23754 var body = document.implementation.createHTMLDocument( "" ).body;
23755 body.innerHTML = "<form></form><form></form>";
23756 return body.childNodes.length === 2;
23757 } )();
23758
23759
23760 // Argument "data" should be string of html
23761 // context (optional): If specified, the fragment will be created in this context,
23762 // defaults to document
23763 // keepScripts (optional): If true, will include scripts passed in the html string
23764 jQuery.parseHTML = function( data, context, keepScripts ) {
23765 if ( typeof data !== "string" ) {
23766 return [];
23767 }
23768 if ( typeof context === "boolean" ) {
23769 keepScripts = context;
23770 context = false;
23771 }
23772
23773 var base, parsed, scripts;
23774
23775 if ( !context ) {
23776
23777 // Stop scripts or inline event handlers from being executed immediately
23778 // by using document.implementation
23779 if ( support.createHTMLDocument ) {
23780 context = document.implementation.createHTMLDocument( "" );
23781
23782 // Set the base href for the created document
23783 // so any parsed elements with URLs
23784 // are based on the document's URL (gh-2965)
23785 base = context.createElement( "base" );
23786 base.href = document.location.href;
23787 context.head.appendChild( base );
23788 } else {
23789 context = document;
23790 }
23791 }
23792
23793 parsed = rsingleTag.exec( data );
23794 scripts = !keepScripts && [];
23795
23796 // Single tag
23797 if ( parsed ) {
23798 return [ context.createElement( parsed[ 1 ] ) ];
23799 }
23800
23801 parsed = buildFragment( [ data ], context, scripts );
23802
23803 if ( scripts && scripts.length ) {
23804 jQuery( scripts ).remove();
23805 }
23806
23807 return jQuery.merge( [], parsed.childNodes );
23808 };
23809
23810
23811 /**
23812 * Load a url into a page
23813 */
23814 jQuery.fn.load = function( url, params, callback ) {
23815 var selector, type, response,
23816 self = this,
23817 off = url.indexOf( " " );
23818
23819 if ( off > -1 ) {
23820 selector = stripAndCollapse( url.slice( off ) );
23821 url = url.slice( 0, off );
23822 }
23823
23824 // If it's a function
23825 if ( jQuery.isFunction( params ) ) {
23826
23827 // We assume that it's the callback
23828 callback = params;
23829 params = undefined;
23830
23831 // Otherwise, build a param string
23832 } else if ( params && typeof params === "object" ) {
23833 type = "POST";
23834 }
23835
23836 // If we have elements to modify, make the request
23837 if ( self.length > 0 ) {
23838 jQuery.ajax( {
23839 url: url,
23840
23841 // If "type" variable is undefined, then "GET" method will be used.
23842 // Make value of this field explicit since
23843 // user can override it through ajaxSetup method
23844 type: type || "GET",
23845 dataType: "html",
23846 data: params
23847 } ).done( function( responseText ) {
23848
23849 // Save response for use in complete callback
23850 response = arguments;
23851
23852 self.html( selector ?
23853
23854 // If a selector was specified, locate the right elements in a dummy div
23855 // Exclude scripts to avoid IE 'Permission Denied' errors
23856 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23857
23858 // Otherwise use the full result
23859 responseText );
23860
23861 // If the request succeeds, this function gets "data", "status", "jqXHR"
23862 // but they are ignored because response was set above.
23863 // If it fails, this function gets "jqXHR", "status", "error"
23864 } ).always( callback && function( jqXHR, status ) {
23865 self.each( function() {
23866 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23867 } );
23868 } );
23869 }
23870
23871 return this;
23872 };
23873
23874
23875
23876
23877 // Attach a bunch of functions for handling common AJAX events
23878 jQuery.each( [
23879 "ajaxStart",
23880 "ajaxStop",
23881 "ajaxComplete",
23882 "ajaxError",
23883 "ajaxSuccess",
23884 "ajaxSend"
23885 ], function( i, type ) {
23886 jQuery.fn[ type ] = function( fn ) {
23887 return this.on( type, fn );
23888 };
23889 } );
23890
23891
23892
23893
23894 jQuery.expr.pseudos.animated = function( elem ) {
23895 return jQuery.grep( jQuery.timers, function( fn ) {
23896 return elem === fn.elem;
23897 } ).length;
23898 };
23899
23900
23901
23902
23903 jQuery.offset = {
23904 setOffset: function( elem, options, i ) {
23905 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23906 position = jQuery.css( elem, "position" ),
23907 curElem = jQuery( elem ),
23908 props = {};
23909
23910 // Set position first, in-case top/left are set even on static elem
23911 if ( position === "static" ) {
23912 elem.style.position = "relative";
23913 }
23914
23915 curOffset = curElem.offset();
23916 curCSSTop = jQuery.css( elem, "top" );
23917 curCSSLeft = jQuery.css( elem, "left" );
23918 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23919 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23920
23921 // Need to be able to calculate position if either
23922 // top or left is auto and position is either absolute or fixed
23923 if ( calculatePosition ) {
23924 curPosition = curElem.position();
23925 curTop = curPosition.top;
23926 curLeft = curPosition.left;
23927
23928 } else {
23929 curTop = parseFloat( curCSSTop ) || 0;
23930 curLeft = parseFloat( curCSSLeft ) || 0;
23931 }
23932
23933 if ( jQuery.isFunction( options ) ) {
23934
23935 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23936 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23937 }
23938
23939 if ( options.top != null ) {
23940 props.top = ( options.top - curOffset.top ) + curTop;
23941 }
23942 if ( options.left != null ) {
23943 props.left = ( options.left - curOffset.left ) + curLeft;
23944 }
23945
23946 if ( "using" in options ) {
23947 options.using.call( elem, props );
23948
23949 } else {
23950 curElem.css( props );
23951 }
23952 }
23953 };
23954
23955 jQuery.fn.extend( {
23956 offset: function( options ) {
23957
23958 // Preserve chaining for setter
23959 if ( arguments.length ) {
23960 return options === undefined ?
23961 this :
23962 this.each( function( i ) {
23963 jQuery.offset.setOffset( this, options, i );
23964 } );
23965 }
23966
23967 var doc, docElem, rect, win,
23968 elem = this[ 0 ];
23969
23970 if ( !elem ) {
23971 return;
23972 }
23973
23974 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23975 // Support: IE <=11 only
23976 // Running getBoundingClientRect on a
23977 // disconnected node in IE throws an error
23978 if ( !elem.getClientRects().length ) {
23979 return { top: 0, left: 0 };
23980 }
23981
23982 rect = elem.getBoundingClientRect();
23983
23984 doc = elem.ownerDocument;
23985 docElem = doc.documentElement;
23986 win = doc.defaultView;
23987
23988 return {
23989 top: rect.top + win.pageYOffset - docElem.clientTop,
23990 left: rect.left + win.pageXOffset - docElem.clientLeft
23991 };
23992 },
23993
23994 position: function() {
23995 if ( !this[ 0 ] ) {
23996 return;
23997 }
23998
23999 var offsetParent, offset,
24000 elem = this[ 0 ],
24001 parentOffset = { top: 0, left: 0 };
24002
24003 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
24004 // because it is its only offset parent
24005 if ( jQuery.css( elem, "position" ) === "fixed" ) {
24006
24007 // Assume getBoundingClientRect is there when computed position is fixed
24008 offset = elem.getBoundingClientRect();
24009
24010 } else {
24011
24012 // Get *real* offsetParent
24013 offsetParent = this.offsetParent();
24014
24015 // Get correct offsets
24016 offset = this.offset();
24017 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24018 parentOffset = offsetParent.offset();
24019 }
24020
24021 // Add offsetParent borders
24022 parentOffset = {
24023 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24024 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24025 };
24026 }
24027
24028 // Subtract parent offsets and element margins
24029 return {
24030 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24031 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24032 };
24033 },
24034
24035 // This method will return documentElement in the following cases:
24036 // 1) For the element inside the iframe without offsetParent, this method will return
24037 // documentElement of the parent window
24038 // 2) For the hidden or detached element
24039 // 3) For body or html element, i.e. in case of the html node - it will return itself
24040 //
24041 // but those exceptions were never presented as a real life use-cases
24042 // and might be considered as more preferable results.
24043 //
24044 // This logic, however, is not guaranteed and can change at any point in the future
24045 offsetParent: function() {
24046 return this.map( function() {
24047 var offsetParent = this.offsetParent;
24048
24049 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24050 offsetParent = offsetParent.offsetParent;
24051 }
24052
24053 return offsetParent || documentElement;
24054 } );
24055 }
24056 } );
24057
24058 // Create scrollLeft and scrollTop methods
24059 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24060 var top = "pageYOffset" === prop;
24061
24062 jQuery.fn[ method ] = function( val ) {
24063 return access( this, function( elem, method, val ) {
24064
24065 // Coalesce documents and windows
24066 var win;
24067 if ( jQuery.isWindow( elem ) ) {
24068 win = elem;
24069 } else if ( elem.nodeType === 9 ) {
24070 win = elem.defaultView;
24071 }
24072
24073 if ( val === undefined ) {
24074 return win ? win[ prop ] : elem[ method ];
24075 }
24076
24077 if ( win ) {
24078 win.scrollTo(
24079 !top ? val : win.pageXOffset,
24080 top ? val : win.pageYOffset
24081 );
24082
24083 } else {
24084 elem[ method ] = val;
24085 }
24086 }, method, val, arguments.length );
24087 };
24088 } );
24089
24090 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24091 // Add the top/left cssHooks using jQuery.fn.position
24092 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24093 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24094 // getComputedStyle returns percent when specified for top/left/bottom/right;
24095 // rather than make the css module depend on the offset module, just check for it here
24096 jQuery.each( [ "top", "left" ], function( i, prop ) {
24097 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24098 function( elem, computed ) {
24099 if ( computed ) {
24100 computed = curCSS( elem, prop );
24101
24102 // If curCSS returns percentage, fallback to offset
24103 return rnumnonpx.test( computed ) ?
24104 jQuery( elem ).position()[ prop ] + "px" :
24105 computed;
24106 }
24107 }
24108 );
24109 } );
24110
24111
24112 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24113 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24114 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24115 function( defaultExtra, funcName ) {
24116
24117 // Margin is only for outerHeight, outerWidth
24118 jQuery.fn[ funcName ] = function( margin, value ) {
24119 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24120 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24121
24122 return access( this, function( elem, type, value ) {
24123 var doc;
24124
24125 if ( jQuery.isWindow( elem ) ) {
24126
24127 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24128 return funcName.indexOf( "outer" ) === 0 ?
24129 elem[ "inner" + name ] :
24130 elem.document.documentElement[ "client" + name ];
24131 }
24132
24133 // Get document width or height
24134 if ( elem.nodeType === 9 ) {
24135 doc = elem.documentElement;
24136
24137 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24138 // whichever is greatest
24139 return Math.max(
24140 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24141 elem.body[ "offset" + name ], doc[ "offset" + name ],
24142 doc[ "client" + name ]
24143 );
24144 }
24145
24146 return value === undefined ?
24147
24148 // Get width or height on the element, requesting but not forcing parseFloat
24149 jQuery.css( elem, type, extra ) :
24150
24151 // Set width or height on the element
24152 jQuery.style( elem, type, value, extra );
24153 }, type, chainable ? margin : undefined, chainable );
24154 };
24155 } );
24156 } );
24157
24158
24159 jQuery.fn.extend( {
24160
24161 bind: function( types, data, fn ) {
24162 return this.on( types, null, data, fn );
24163 },
24164 unbind: function( types, fn ) {
24165 return this.off( types, null, fn );
24166 },
24167
24168 delegate: function( selector, types, data, fn ) {
24169 return this.on( types, selector, data, fn );
24170 },
24171 undelegate: function( selector, types, fn ) {
24172
24173 // ( namespace ) or ( selector, types [, fn] )
24174 return arguments.length === 1 ?
24175 this.off( selector, "**" ) :
24176 this.off( types, selector || "**", fn );
24177 }
24178 } );
24179
24180 jQuery.holdReady = function( hold ) {
24181 if ( hold ) {
24182 jQuery.readyWait++;
24183 } else {
24184 jQuery.ready( true );
24185 }
24186 };
24187 jQuery.isArray = Array.isArray;
24188 jQuery.parseJSON = JSON.parse;
24189 jQuery.nodeName = nodeName;
24190
24191
24192
24193
24194 // Register as a named AMD module, since jQuery can be concatenated with other
24195 // files that may use define, but not via a proper concatenation script that
24196 // understands anonymous AMD modules. A named AMD is safest and most robust
24197 // way to register. Lowercase jquery is used because AMD module names are
24198 // derived from file names, and jQuery is normally delivered in a lowercase
24199 // file name. Do this after creating the global so that if an AMD module wants
24200 // to call noConflict to hide this version of jQuery, it will work.
24201
24202 // Note that for maximum portability, libraries that are not jQuery should
24203 // declare themselves as anonymous modules, and avoid setting a global if an
24204 // AMD loader is present. jQuery is a special case. For more information, see
24205 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24206
24207 if ( typeof define === "function" && define.amd ) {
24208 define( "jquery", [], function() {
24209 return jQuery;
24210 } );
24211 }
24212
24213
24214
24215
24216 var
24217
24218 // Map over jQuery in case of overwrite
24219 _jQuery = window.jQuery,
24220
24221 // Map over the $ in case of overwrite
24222 _$ = window.$;
24223
24224 jQuery.noConflict = function( deep ) {
24225 if ( window.$ === jQuery ) {
24226 window.$ = _$;
24227 }
24228
24229 if ( deep && window.jQuery === jQuery ) {
24230 window.jQuery = _jQuery;
24231 }
24232
24233 return jQuery;
24234 };
24235
24236 // Expose jQuery and $ identifiers, even in AMD
24237 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24238 // and CommonJS for browser emulators (#13566)
24239 if ( !noGlobal ) {
24240 window.jQuery = window.$ = jQuery;
24241 }
24242
24243
24244
24245
24246 return jQuery;
24247 } );
24248 </script>
24249 <script>/*!
24250 * Bootstrap v3.3.7 (http://getbootstrap.com)
24251 * Copyright 2011-2016 Twitter, Inc.
24252 * Licensed under the MIT license
24253 */
24254
24255 if (typeof jQuery === 'undefined') {
24256 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24257 }
24258
24259 +function ($) {
24260 'use strict';
24261 var version = $.fn.jquery.split(' ')[0].split('.')
24262 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24263 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24264 }
24265 }(jQuery);
24266
24267 /* ========================================================================
24268 * Bootstrap: transition.js v3.3.7
24269 * http://getbootstrap.com/javascript/#transitions
24270 * ========================================================================
24271 * Copyright 2011-2016 Twitter, Inc.
24272 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24273 * ======================================================================== */
24274
24275
24276 +function ($) {
24277 'use strict';
24278
24279 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24280 // ============================================================
24281
24282 function transitionEnd() {
24283 var el = document.createElement('bootstrap')
24284
24285 var transEndEventNames = {
24286 WebkitTransition : 'webkitTransitionEnd',
24287 MozTransition : 'transitionend',
24288 OTransition : 'oTransitionEnd otransitionend',
24289 transition : 'transitionend'
24290 }
24291
24292 for (var name in transEndEventNames) {
24293 if (el.style[name] !== undefined) {
24294 return { end: transEndEventNames[name] }
24295 }
24296 }
24297
24298 return false // explicit for ie8 ( ._.)
24299 }
24300
24301 // http://blog.alexmaccaw.com/css-transitions
24302 $.fn.emulateTransitionEnd = function (duration) {
24303 var called = false
24304 var $el = this
24305 $(this).one('bsTransitionEnd', function () { called = true })
24306 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24307 setTimeout(callback, duration)
24308 return this
24309 }
24310
24311 $(function () {
24312 $.support.transition = transitionEnd()
24313
24314 if (!$.support.transition) return
24315
24316 $.event.special.bsTransitionEnd = {
24317 bindType: $.support.transition.end,
24318 delegateType: $.support.transition.end,
24319 handle: function (e) {
24320 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24321 }
24322 }
24323 })
24324
24325 }(jQuery);
24326
24327 /* ========================================================================
24328 * Bootstrap: alert.js v3.3.7
24329 * http://getbootstrap.com/javascript/#alerts
24330 * ========================================================================
24331 * Copyright 2011-2016 Twitter, Inc.
24332 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24333 * ======================================================================== */
24334
24335
24336 +function ($) {
24337 'use strict';
24338
24339 // ALERT CLASS DEFINITION
24340 // ======================
24341
24342 var dismiss = '[data-dismiss="alert"]'
24343 var Alert = function (el) {
24344 $(el).on('click', dismiss, this.close)
24345 }
24346
24347 Alert.VERSION = '3.3.7'
24348
24349 Alert.TRANSITION_DURATION = 150
24350
24351 Alert.prototype.close = function (e) {
24352 var $this = $(this)
24353 var selector = $this.attr('data-target')
24354
24355 if (!selector) {
24356 selector = $this.attr('href')
24357 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24358 }
24359
24360 var $parent = $(selector === '#' ? [] : selector)
24361
24362 if (e) e.preventDefault()
24363
24364 if (!$parent.length) {
24365 $parent = $this.closest('.alert')
24366 }
24367
24368 $parent.trigger(e = $.Event('close.bs.alert'))
24369
24370 if (e.isDefaultPrevented()) return
24371
24372 $parent.removeClass('in')
24373
24374 function removeElement() {
24375 // detach from parent, fire event then clean up data
24376 $parent.detach().trigger('closed.bs.alert').remove()
24377 }
24378
24379 $.support.transition && $parent.hasClass('fade') ?
24380 $parent
24381 .one('bsTransitionEnd', removeElement)
24382 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24383 removeElement()
24384 }
24385
24386
24387 // ALERT PLUGIN DEFINITION
24388 // =======================
24389
24390 function Plugin(option) {
24391 return this.each(function () {
24392 var $this = $(this)
24393 var data = $this.data('bs.alert')
24394
24395 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24396 if (typeof option == 'string') data[option].call($this)
24397 })
24398 }
24399
24400 var old = $.fn.alert
24401
24402 $.fn.alert = Plugin
24403 $.fn.alert.Constructor = Alert
24404
24405
24406 // ALERT NO CONFLICT
24407 // =================
24408
24409 $.fn.alert.noConflict = function () {
24410 $.fn.alert = old
24411 return this
24412 }
24413
24414
24415 // ALERT DATA-API
24416 // ==============
24417
24418 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24419
24420 }(jQuery);
24421
24422 /* ========================================================================
24423 * Bootstrap: button.js v3.3.7
24424 * http://getbootstrap.com/javascript/#buttons
24425 * ========================================================================
24426 * Copyright 2011-2016 Twitter, Inc.
24427 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24428 * ======================================================================== */
24429
24430
24431 +function ($) {
24432 'use strict';
24433
24434 // BUTTON PUBLIC CLASS DEFINITION
24435 // ==============================
24436
24437 var Button = function (element, options) {
24438 this.$element = $(element)
24439 this.options = $.extend({}, Button.DEFAULTS, options)
24440 this.isLoading = false
24441 }
24442
24443 Button.VERSION = '3.3.7'
24444
24445 Button.DEFAULTS = {
24446 loadingText: 'loading...'
24447 }
24448
24449 Button.prototype.setState = function (state) {
24450 var d = 'disabled'
24451 var $el = this.$element
24452 var val = $el.is('input') ? 'val' : 'html'
24453 var data = $el.data()
24454
24455 state += 'Text'
24456
24457 if (data.resetText == null) $el.data('resetText', $el[val]())
24458
24459 // push to event loop to allow forms to submit
24460 setTimeout($.proxy(function () {
24461 $el[val](data[state] == null ? this.options[state] : data[state])
24462
24463 if (state == 'loadingText') {
24464 this.isLoading = true
24465 $el.addClass(d).attr(d, d).prop(d, true)
24466 } else if (this.isLoading) {
24467 this.isLoading = false
24468 $el.removeClass(d).removeAttr(d).prop(d, false)
24469 }
24470 }, this), 0)
24471 }
24472
24473 Button.prototype.toggle = function () {
24474 var changed = true
24475 var $parent = this.$element.closest('[data-toggle="buttons"]')
24476
24477 if ($parent.length) {
24478 var $input = this.$element.find('input')
24479 if ($input.prop('type') == 'radio') {
24480 if ($input.prop('checked')) changed = false
24481 $parent.find('.active').removeClass('active')
24482 this.$element.addClass('active')
24483 } else if ($input.prop('type') == 'checkbox') {
24484 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24485 this.$element.toggleClass('active')
24486 }
24487 $input.prop('checked', this.$element.hasClass('active'))
24488 if (changed) $input.trigger('change')
24489 } else {
24490 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24491 this.$element.toggleClass('active')
24492 }
24493 }
24494
24495
24496 // BUTTON PLUGIN DEFINITION
24497 // ========================
24498
24499 function Plugin(option) {
24500 return this.each(function () {
24501 var $this = $(this)
24502 var data = $this.data('bs.button')
24503 var options = typeof option == 'object' && option
24504
24505 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24506
24507 if (option == 'toggle') data.toggle()
24508 else if (option) data.setState(option)
24509 })
24510 }
24511
24512 var old = $.fn.button
24513
24514 $.fn.button = Plugin
24515 $.fn.button.Constructor = Button
24516
24517
24518 // BUTTON NO CONFLICT
24519 // ==================
24520
24521 $.fn.button.noConflict = function () {
24522 $.fn.button = old
24523 return this
24524 }
24525
24526
24527 // BUTTON DATA-API
24528 // ===============
24529
24530 $(document)
24531 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24532 var $btn = $(e.target).closest('.btn')
24533 Plugin.call($btn, 'toggle')
24534 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24535 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24536 e.preventDefault()
24537 // The target component still receive the focus
24538 if ($btn.is('input,button')) $btn.trigger('focus')
24539 else $btn.find('input:visible,button:visible').first().trigger('focus')
24540 }
24541 })
24542 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24543 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24544 })
24545
24546 }(jQuery);
24547
24548 /* ========================================================================
24549 * Bootstrap: carousel.js v3.3.7
24550 * http://getbootstrap.com/javascript/#carousel
24551 * ========================================================================
24552 * Copyright 2011-2016 Twitter, Inc.
24553 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24554 * ======================================================================== */
24555
24556
24557 +function ($) {
24558 'use strict';
24559
24560 // CAROUSEL CLASS DEFINITION
24561 // =========================
24562
24563 var Carousel = function (element, options) {
24564 this.$element = $(element)
24565 this.$indicators = this.$element.find('.carousel-indicators')
24566 this.options = options
24567 this.paused = null
24568 this.sliding = null
24569 this.interval = null
24570 this.$active = null
24571 this.$items = null
24572
24573 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24574
24575 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24576 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24577 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24578 }
24579
24580 Carousel.VERSION = '3.3.7'
24581
24582 Carousel.TRANSITION_DURATION = 600
24583
24584 Carousel.DEFAULTS = {
24585 interval: 5000,
24586 pause: 'hover',
24587 wrap: true,
24588 keyboard: true
24589 }
24590
24591 Carousel.prototype.keydown = function (e) {
24592 if (/input|textarea/i.test(e.target.tagName)) return
24593 switch (e.which) {
24594 case 37: this.prev(); break
24595 case 39: this.next(); break
24596 default: return
24597 }
24598
24599 e.preventDefault()
24600 }
24601
24602 Carousel.prototype.cycle = function (e) {
24603 e || (this.paused = false)
24604
24605 this.interval && clearInterval(this.interval)
24606
24607 this.options.interval
24608 && !this.paused
24609 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24610
24611 return this
24612 }
24613
24614 Carousel.prototype.getItemIndex = function (item) {
24615 this.$items = item.parent().children('.item')
24616 return this.$items.index(item || this.$active)
24617 }
24618
24619 Carousel.prototype.getItemForDirection = function (direction, active) {
24620 var activeIndex = this.getItemIndex(active)
24621 var willWrap = (direction == 'prev' && activeIndex === 0)
24622 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24623 if (willWrap && !this.options.wrap) return active
24624 var delta = direction == 'prev' ? -1 : 1
24625 var itemIndex = (activeIndex + delta) % this.$items.length
24626 return this.$items.eq(itemIndex)
24627 }
24628
24629 Carousel.prototype.to = function (pos) {
24630 var that = this
24631 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24632
24633 if (pos > (this.$items.length - 1) || pos < 0) return
24634
24635 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24636 if (activeIndex == pos) return this.pause().cycle()
24637
24638 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24639 }
24640
24641 Carousel.prototype.pause = function (e) {
24642 e || (this.paused = true)
24643
24644 if (this.$element.find('.next, .prev').length && $.support.transition) {
24645 this.$element.trigger($.support.transition.end)
24646 this.cycle(true)
24647 }
24648
24649 this.interval = clearInterval(this.interval)
24650
24651 return this
24652 }
24653
24654 Carousel.prototype.next = function () {
24655 if (this.sliding) return
24656 return this.slide('next')
24657 }
24658
24659 Carousel.prototype.prev = function () {
24660 if (this.sliding) return
24661 return this.slide('prev')
24662 }
24663
24664 Carousel.prototype.slide = function (type, next) {
24665 var $active = this.$element.find('.item.active')
24666 var $next = next || this.getItemForDirection(type, $active)
24667 var isCycling = this.interval
24668 var direction = type == 'next' ? 'left' : 'right'
24669 var that = this
24670
24671 if ($next.hasClass('active')) return (this.sliding = false)
24672
24673 var relatedTarget = $next[0]
24674 var slideEvent = $.Event('slide.bs.carousel', {
24675 relatedTarget: relatedTarget,
24676 direction: direction
24677 })
24678 this.$element.trigger(slideEvent)
24679 if (slideEvent.isDefaultPrevented()) return
24680
24681 this.sliding = true
24682
24683 isCycling && this.pause()
24684
24685 if (this.$indicators.length) {
24686 this.$indicators.find('.active').removeClass('active')
24687 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24688 $nextIndicator && $nextIndicator.addClass('active')
24689 }
24690
24691 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24692 if ($.support.transition && this.$element.hasClass('slide')) {
24693 $next.addClass(type)
24694 $next[0].offsetWidth // force reflow
24695 $active.addClass(direction)
24696 $next.addClass(direction)
24697 $active
24698 .one('bsTransitionEnd', function () {
24699 $next.removeClass([type, direction].join(' ')).addClass('active')
24700 $active.removeClass(['active', direction].join(' '))
24701 that.sliding = false
24702 setTimeout(function () {
24703 that.$element.trigger(slidEvent)
24704 }, 0)
24705 })
24706 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24707 } else {
24708 $active.removeClass('active')
24709 $next.addClass('active')
24710 this.sliding = false
24711 this.$element.trigger(slidEvent)
24712 }
24713
24714 isCycling && this.cycle()
24715
24716 return this
24717 }
24718
24719
24720 // CAROUSEL PLUGIN DEFINITION
24721 // ==========================
24722
24723 function Plugin(option) {
24724 return this.each(function () {
24725 var $this = $(this)
24726 var data = $this.data('bs.carousel')
24727 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24728 var action = typeof option == 'string' ? option : options.slide
24729
24730 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24731 if (typeof option == 'number') data.to(option)
24732 else if (action) data[action]()
24733 else if (options.interval) data.pause().cycle()
24734 })
24735 }
24736
24737 var old = $.fn.carousel
24738
24739 $.fn.carousel = Plugin
24740 $.fn.carousel.Constructor = Carousel
24741
24742
24743 // CAROUSEL NO CONFLICT
24744 // ====================
24745
24746 $.fn.carousel.noConflict = function () {
24747 $.fn.carousel = old
24748 return this
24749 }
24750
24751
24752 // CAROUSEL DATA-API
24753 // =================
24754
24755 var clickHandler = function (e) {
24756 var href
24757 var $this = $(this)
24758 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24759 if (!$target.hasClass('carousel')) return
24760 var options = $.extend({}, $target.data(), $this.data())
24761 var slideIndex = $this.attr('data-slide-to')
24762 if (slideIndex) options.interval = false
24763
24764 Plugin.call($target, options)
24765
24766 if (slideIndex) {
24767 $target.data('bs.carousel').to(slideIndex)
24768 }
24769
24770 e.preventDefault()
24771 }
24772
24773 $(document)
24774 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24775 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24776
24777 $(window).on('load', function () {
24778 $('[data-ride="carousel"]').each(function () {
24779 var $carousel = $(this)
24780 Plugin.call($carousel, $carousel.data())
24781 })
24782 })
24783
24784 }(jQuery);
24785
24786 /* ========================================================================
24787 * Bootstrap: collapse.js v3.3.7
24788 * http://getbootstrap.com/javascript/#collapse
24789 * ========================================================================
24790 * Copyright 2011-2016 Twitter, Inc.
24791 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24792 * ======================================================================== */
24793
24794 /* jshint latedef: false */
24795
24796 +function ($) {
24797 'use strict';
24798
24799 // COLLAPSE PUBLIC CLASS DEFINITION
24800 // ================================
24801
24802 var Collapse = function (element, options) {
24803 this.$element = $(element)
24804 this.options = $.extend({}, Collapse.DEFAULTS, options)
24805 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24806 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24807 this.transitioning = null
24808
24809 if (this.options.parent) {
24810 this.$parent = this.getParent()
24811 } else {
24812 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24813 }
24814
24815 if (this.options.toggle) this.toggle()
24816 }
24817
24818 Collapse.VERSION = '3.3.7'
24819
24820 Collapse.TRANSITION_DURATION = 350
24821
24822 Collapse.DEFAULTS = {
24823 toggle: true
24824 }
24825
24826 Collapse.prototype.dimension = function () {
24827 var hasWidth = this.$element.hasClass('width')
24828 return hasWidth ? 'width' : 'height'
24829 }
24830
24831 Collapse.prototype.show = function () {
24832 if (this.transitioning || this.$element.hasClass('in')) return
24833
24834 var activesData
24835 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24836
24837 if (actives && actives.length) {
24838 activesData = actives.data('bs.collapse')
24839 if (activesData && activesData.transitioning) return
24840 }
24841
24842 var startEvent = $.Event('show.bs.collapse')
24843 this.$element.trigger(startEvent)
24844 if (startEvent.isDefaultPrevented()) return
24845
24846 if (actives && actives.length) {
24847 Plugin.call(actives, 'hide')
24848 activesData || actives.data('bs.collapse', null)
24849 }
24850
24851 var dimension = this.dimension()
24852
24853 this.$element
24854 .removeClass('collapse')
24855 .addClass('collapsing')[dimension](0)
24856 .attr('aria-expanded', true)
24857
24858 this.$trigger
24859 .removeClass('collapsed')
24860 .attr('aria-expanded', true)
24861
24862 this.transitioning = 1
24863
24864 var complete = function () {
24865 this.$element
24866 .removeClass('collapsing')
24867 .addClass('collapse in')[dimension]('')
24868 this.transitioning = 0
24869 this.$element
24870 .trigger('shown.bs.collapse')
24871 }
24872
24873 if (!$.support.transition) return complete.call(this)
24874
24875 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24876
24877 this.$element
24878 .one('bsTransitionEnd', $.proxy(complete, this))
24879 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24880 }
24881
24882 Collapse.prototype.hide = function () {
24883 if (this.transitioning || !this.$element.hasClass('in')) return
24884
24885 var startEvent = $.Event('hide.bs.collapse')
24886 this.$element.trigger(startEvent)
24887 if (startEvent.isDefaultPrevented()) return
24888
24889 var dimension = this.dimension()
24890
24891 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24892
24893 this.$element
24894 .addClass('collapsing')
24895 .removeClass('collapse in')
24896 .attr('aria-expanded', false)
24897
24898 this.$trigger
24899 .addClass('collapsed')
24900 .attr('aria-expanded', false)
24901
24902 this.transitioning = 1
24903
24904 var complete = function () {
24905 this.transitioning = 0
24906 this.$element
24907 .removeClass('collapsing')
24908 .addClass('collapse')
24909 .trigger('hidden.bs.collapse')
24910 }
24911
24912 if (!$.support.transition) return complete.call(this)
24913
24914 this.$element
24915 [dimension](0)
24916 .one('bsTransitionEnd', $.proxy(complete, this))
24917 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24918 }
24919
24920 Collapse.prototype.toggle = function () {
24921 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24922 }
24923
24924 Collapse.prototype.getParent = function () {
24925 return $(this.options.parent)
24926 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24927 .each($.proxy(function (i, element) {
24928 var $element = $(element)
24929 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24930 }, this))
24931 .end()
24932 }
24933
24934 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24935 var isOpen = $element.hasClass('in')
24936
24937 $element.attr('aria-expanded', isOpen)
24938 $trigger
24939 .toggleClass('collapsed', !isOpen)
24940 .attr('aria-expanded', isOpen)
24941 }
24942
24943 function getTargetFromTrigger($trigger) {
24944 var href
24945 var target = $trigger.attr('data-target')
24946 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24947
24948 return $(target)
24949 }
24950
24951
24952 // COLLAPSE PLUGIN DEFINITION
24953 // ==========================
24954
24955 function Plugin(option) {
24956 return this.each(function () {
24957 var $this = $(this)
24958 var data = $this.data('bs.collapse')
24959 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24960
24961 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24962 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24963 if (typeof option == 'string') data[option]()
24964 })
24965 }
24966
24967 var old = $.fn.collapse
24968
24969 $.fn.collapse = Plugin
24970 $.fn.collapse.Constructor = Collapse
24971
24972
24973 // COLLAPSE NO CONFLICT
24974 // ====================
24975
24976 $.fn.collapse.noConflict = function () {
24977 $.fn.collapse = old
24978 return this
24979 }
24980
24981
24982 // COLLAPSE DATA-API
24983 // =================
24984
24985 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24986 var $this = $(this)
24987
24988 if (!$this.attr('data-target')) e.preventDefault()
24989
24990 var $target = getTargetFromTrigger($this)
24991 var data = $target.data('bs.collapse')
24992 var option = data ? 'toggle' : $this.data()
24993
24994 Plugin.call($target, option)
24995 })
24996
24997 }(jQuery);
24998
24999 /* ========================================================================
25000 * Bootstrap: dropdown.js v3.3.7
25001 * http://getbootstrap.com/javascript/#dropdowns
25002 * ========================================================================
25003 * Copyright 2011-2016 Twitter, Inc.
25004 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25005 * ======================================================================== */
25006
25007
25008 +function ($) {
25009 'use strict';
25010
25011 // DROPDOWN CLASS DEFINITION
25012 // =========================
25013
25014 var backdrop = '.dropdown-backdrop'
25015 var toggle = '[data-toggle="dropdown"]'
25016 var Dropdown = function (element) {
25017 $(element).on('click.bs.dropdown', this.toggle)
25018 }
25019
25020 Dropdown.VERSION = '3.3.7'
25021
25022 function getParent($this) {
25023 var selector = $this.attr('data-target')
25024
25025 if (!selector) {
25026 selector = $this.attr('href')
25027 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25028 }
25029
25030 var $parent = selector && $(selector)
25031
25032 return $parent && $parent.length ? $parent : $this.parent()
25033 }
25034
25035 function clearMenus(e) {
25036 if (e && e.which === 3) return
25037 $(backdrop).remove()
25038 $(toggle).each(function () {
25039 var $this = $(this)
25040 var $parent = getParent($this)
25041 var relatedTarget = { relatedTarget: this }
25042
25043 if (!$parent.hasClass('open')) return
25044
25045 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25046
25047 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25048
25049 if (e.isDefaultPrevented()) return
25050
25051 $this.attr('aria-expanded', 'false')
25052 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25053 })
25054 }
25055
25056 Dropdown.prototype.toggle = function (e) {
25057 var $this = $(this)
25058
25059 if ($this.is('.disabled, :disabled')) return
25060
25061 var $parent = getParent($this)
25062 var isActive = $parent.hasClass('open')
25063
25064 clearMenus()
25065
25066 if (!isActive) {
25067 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25068 // if mobile we use a backdrop because click events don't delegate
25069 $(document.createElement('div'))
25070 .addClass('dropdown-backdrop')
25071 .insertAfter($(this))
25072 .on('click', clearMenus)
25073 }
25074
25075 var relatedTarget = { relatedTarget: this }
25076 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25077
25078 if (e.isDefaultPrevented()) return
25079
25080 $this
25081 .trigger('focus')
25082 .attr('aria-expanded', 'true')
25083
25084 $parent
25085 .toggleClass('open')
25086 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25087 }
25088
25089 return false
25090 }
25091
25092 Dropdown.prototype.keydown = function (e) {
25093 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25094
25095 var $this = $(this)
25096
25097 e.preventDefault()
25098 e.stopPropagation()
25099
25100 if ($this.is('.disabled, :disabled')) return
25101
25102 var $parent = getParent($this)
25103 var isActive = $parent.hasClass('open')
25104
25105 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25106 if (e.which == 27) $parent.find(toggle).trigger('focus')
25107 return $this.trigger('click')
25108 }
25109
25110 var desc = ' li:not(.disabled):visible a'
25111 var $items = $parent.find('.dropdown-menu' + desc)
25112
25113 if (!$items.length) return
25114
25115 var index = $items.index(e.target)
25116
25117 if (e.which == 38 && index > 0) index-- // up
25118 if (e.which == 40 && index < $items.length - 1) index++ // down
25119 if (!~index) index = 0
25120
25121 $items.eq(index).trigger('focus')
25122 }
25123
25124
25125 // DROPDOWN PLUGIN DEFINITION
25126 // ==========================
25127
25128 function Plugin(option) {
25129 return this.each(function () {
25130 var $this = $(this)
25131 var data = $this.data('bs.dropdown')
25132
25133 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25134 if (typeof option == 'string') data[option].call($this)
25135 })
25136 }
25137
25138 var old = $.fn.dropdown
25139
25140 $.fn.dropdown = Plugin
25141 $.fn.dropdown.Constructor = Dropdown
25142
25143
25144 // DROPDOWN NO CONFLICT
25145 // ====================
25146
25147 $.fn.dropdown.noConflict = function () {
25148 $.fn.dropdown = old
25149 return this
25150 }
25151
25152
25153 // APPLY TO STANDARD DROPDOWN ELEMENTS
25154 // ===================================
25155
25156 $(document)
25157 .on('click.bs.dropdown.data-api', clearMenus)
25158 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25159 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25160 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25161 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25162
25163 }(jQuery);
25164
25165 /* ========================================================================
25166 * Bootstrap: modal.js v3.3.7
25167 * http://getbootstrap.com/javascript/#modals
25168 * ========================================================================
25169 * Copyright 2011-2016 Twitter, Inc.
25170 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25171 * ======================================================================== */
25172
25173
25174 +function ($) {
25175 'use strict';
25176
25177 // MODAL CLASS DEFINITION
25178 // ======================
25179
25180 var Modal = function (element, options) {
25181 this.options = options
25182 this.$body = $(document.body)
25183 this.$element = $(element)
25184 this.$dialog = this.$element.find('.modal-dialog')
25185 this.$backdrop = null
25186 this.isShown = null
25187 this.originalBodyPad = null
25188 this.scrollbarWidth = 0
25189 this.ignoreBackdropClick = false
25190
25191 if (this.options.remote) {
25192 this.$element
25193 .find('.modal-content')
25194 .load(this.options.remote, $.proxy(function () {
25195 this.$element.trigger('loaded.bs.modal')
25196 }, this))
25197 }
25198 }
25199
25200 Modal.VERSION = '3.3.7'
25201
25202 Modal.TRANSITION_DURATION = 300
25203 Modal.BACKDROP_TRANSITION_DURATION = 150
25204
25205 Modal.DEFAULTS = {
25206 backdrop: true,
25207 keyboard: true,
25208 show: true
25209 }
25210
25211 Modal.prototype.toggle = function (_relatedTarget) {
25212 return this.isShown ? this.hide() : this.show(_relatedTarget)
25213 }
25214
25215 Modal.prototype.show = function (_relatedTarget) {
25216 var that = this
25217 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25218
25219 this.$element.trigger(e)
25220
25221 if (this.isShown || e.isDefaultPrevented()) return
25222
25223 this.isShown = true
25224
25225 this.checkScrollbar()
25226 this.setScrollbar()
25227 this.$body.addClass('modal-open')
25228
25229 this.escape()
25230 this.resize()
25231
25232 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25233
25234 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25235 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25236 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25237 })
25238 })
25239
25240 this.backdrop(function () {
25241 var transition = $.support.transition && that.$element.hasClass('fade')
25242
25243 if (!that.$element.parent().length) {
25244 that.$element.appendTo(that.$body) // don't move modals dom position
25245 }
25246
25247 that.$element
25248 .show()
25249 .scrollTop(0)
25250
25251 that.adjustDialog()
25252
25253 if (transition) {
25254 that.$element[0].offsetWidth // force reflow
25255 }
25256
25257 that.$element.addClass('in')
25258
25259 that.enforceFocus()
25260
25261 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25262
25263 transition ?
25264 that.$dialog // wait for modal to slide in
25265 .one('bsTransitionEnd', function () {
25266 that.$element.trigger('focus').trigger(e)
25267 })
25268 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25269 that.$element.trigger('focus').trigger(e)
25270 })
25271 }
25272
25273 Modal.prototype.hide = function (e) {
25274 if (e) e.preventDefault()
25275
25276 e = $.Event('hide.bs.modal')
25277
25278 this.$element.trigger(e)
25279
25280 if (!this.isShown || e.isDefaultPrevented()) return
25281
25282 this.isShown = false
25283
25284 this.escape()
25285 this.resize()
25286
25287 $(document).off('focusin.bs.modal')
25288
25289 this.$element
25290 .removeClass('in')
25291 .off('click.dismiss.bs.modal')
25292 .off('mouseup.dismiss.bs.modal')
25293
25294 this.$dialog.off('mousedown.dismiss.bs.modal')
25295
25296 $.support.transition && this.$element.hasClass('fade') ?
25297 this.$element
25298 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25299 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25300 this.hideModal()
25301 }
25302
25303 Modal.prototype.enforceFocus = function () {
25304 $(document)
25305 .off('focusin.bs.modal') // guard against infinite focus loop
25306 .on('focusin.bs.modal', $.proxy(function (e) {
25307 if (document !== e.target &&
25308 this.$element[0] !== e.target &&
25309 !this.$element.has(e.target).length) {
25310 this.$element.trigger('focus')
25311 }
25312 }, this))
25313 }
25314
25315 Modal.prototype.escape = function () {
25316 if (this.isShown && this.options.keyboard) {
25317 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25318 e.which == 27 && this.hide()
25319 }, this))
25320 } else if (!this.isShown) {
25321 this.$element.off('keydown.dismiss.bs.modal')
25322 }
25323 }
25324
25325 Modal.prototype.resize = function () {
25326 if (this.isShown) {
25327 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25328 } else {
25329 $(window).off('resize.bs.modal')
25330 }
25331 }
25332
25333 Modal.prototype.hideModal = function () {
25334 var that = this
25335 this.$element.hide()
25336 this.backdrop(function () {
25337 that.$body.removeClass('modal-open')
25338 that.resetAdjustments()
25339 that.resetScrollbar()
25340 that.$element.trigger('hidden.bs.modal')
25341 })
25342 }
25343
25344 Modal.prototype.removeBackdrop = function () {
25345 this.$backdrop && this.$backdrop.remove()
25346 this.$backdrop = null
25347 }
25348
25349 Modal.prototype.backdrop = function (callback) {
25350 var that = this
25351 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25352
25353 if (this.isShown && this.options.backdrop) {
25354 var doAnimate = $.support.transition && animate
25355
25356 this.$backdrop = $(document.createElement('div'))
25357 .addClass('modal-backdrop ' + animate)
25358 .appendTo(this.$body)
25359
25360 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25361 if (this.ignoreBackdropClick) {
25362 this.ignoreBackdropClick = false
25363 return
25364 }
25365 if (e.target !== e.currentTarget) return
25366 this.options.backdrop == 'static'
25367 ? this.$element[0].focus()
25368 : this.hide()
25369 }, this))
25370
25371 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25372
25373 this.$backdrop.addClass('in')
25374
25375 if (!callback) return
25376
25377 doAnimate ?
25378 this.$backdrop
25379 .one('bsTransitionEnd', callback)
25380 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25381 callback()
25382
25383 } else if (!this.isShown && this.$backdrop) {
25384 this.$backdrop.removeClass('in')
25385
25386 var callbackRemove = function () {
25387 that.removeBackdrop()
25388 callback && callback()
25389 }
25390 $.support.transition && this.$element.hasClass('fade') ?
25391 this.$backdrop
25392 .one('bsTransitionEnd', callbackRemove)
25393 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25394 callbackRemove()
25395
25396 } else if (callback) {
25397 callback()
25398 }
25399 }
25400
25401 // these following methods are used to handle overflowing modals
25402
25403 Modal.prototype.handleUpdate = function () {
25404 this.adjustDialog()
25405 }
25406
25407 Modal.prototype.adjustDialog = function () {
25408 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25409
25410 this.$element.css({
25411 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25412 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25413 })
25414 }
25415
25416 Modal.prototype.resetAdjustments = function () {
25417 this.$element.css({
25418 paddingLeft: '',
25419 paddingRight: ''
25420 })
25421 }
25422
25423 Modal.prototype.checkScrollbar = function () {
25424 var fullWindowWidth = window.innerWidth
25425 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25426 var documentElementRect = document.documentElement.getBoundingClientRect()
25427 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25428 }
25429 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25430 this.scrollbarWidth = this.measureScrollbar()
25431 }
25432
25433 Modal.prototype.setScrollbar = function () {
25434 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25435 this.originalBodyPad = document.body.style.paddingRight || ''
25436 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25437 }
25438
25439 Modal.prototype.resetScrollbar = function () {
25440 this.$body.css('padding-right', this.originalBodyPad)
25441 }
25442
25443 Modal.prototype.measureScrollbar = function () { // thx walsh
25444 var scrollDiv = document.createElement('div')
25445 scrollDiv.className = 'modal-scrollbar-measure'
25446 this.$body.append(scrollDiv)
25447 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25448 this.$body[0].removeChild(scrollDiv)
25449 return scrollbarWidth
25450 }
25451
25452
25453 // MODAL PLUGIN DEFINITION
25454 // =======================
25455
25456 function Plugin(option, _relatedTarget) {
25457 return this.each(function () {
25458 var $this = $(this)
25459 var data = $this.data('bs.modal')
25460 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25461
25462 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25463 if (typeof option == 'string') data[option](_relatedTarget)
25464 else if (options.show) data.show(_relatedTarget)
25465 })
25466 }
25467
25468 var old = $.fn.modal
25469
25470 $.fn.modal = Plugin
25471 $.fn.modal.Constructor = Modal
25472
25473
25474 // MODAL NO CONFLICT
25475 // =================
25476
25477 $.fn.modal.noConflict = function () {
25478 $.fn.modal = old
25479 return this
25480 }
25481
25482
25483 // MODAL DATA-API
25484 // ==============
25485
25486 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25487 var $this = $(this)
25488 var href = $this.attr('href')
25489 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25490 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25491
25492 if ($this.is('a')) e.preventDefault()
25493
25494 $target.one('show.bs.modal', function (showEvent) {
25495 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25496 $target.one('hidden.bs.modal', function () {
25497 $this.is(':visible') && $this.trigger('focus')
25498 })
25499 })
25500 Plugin.call($target, option, this)
25501 })
25502
25503 }(jQuery);
25504
25505 /* ========================================================================
25506 * Bootstrap: tooltip.js v3.3.7
25507 * http://getbootstrap.com/javascript/#tooltip
25508 * Inspired by the original jQuery.tipsy by Jason Frame
25509 * ========================================================================
25510 * Copyright 2011-2016 Twitter, Inc.
25511 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25512 * ======================================================================== */
25513
25514
25515 +function ($) {
25516 'use strict';
25517
25518 // TOOLTIP PUBLIC CLASS DEFINITION
25519 // ===============================
25520
25521 var Tooltip = function (element, options) {
25522 this.type = null
25523 this.options = null
25524 this.enabled = null
25525 this.timeout = null
25526 this.hoverState = null
25527 this.$element = null
25528 this.inState = null
25529
25530 this.init('tooltip', element, options)
25531 }
25532
25533 Tooltip.VERSION = '3.3.7'
25534
25535 Tooltip.TRANSITION_DURATION = 150
25536
25537 Tooltip.DEFAULTS = {
25538 animation: true,
25539 placement: 'top',
25540 selector: false,
25541 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25542 trigger: 'hover focus',
25543 title: '',
25544 delay: 0,
25545 html: false,
25546 container: false,
25547 viewport: {
25548 selector: 'body',
25549 padding: 0
25550 }
25551 }
25552
25553 Tooltip.prototype.init = function (type, element, options) {
25554 this.enabled = true
25555 this.type = type
25556 this.$element = $(element)
25557 this.options = this.getOptions(options)
25558 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25559 this.inState = { click: false, hover: false, focus: false }
25560
25561 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25562 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25563 }
25564
25565 var triggers = this.options.trigger.split(' ')
25566
25567 for (var i = triggers.length; i--;) {
25568 var trigger = triggers[i]
25569
25570 if (trigger == 'click') {
25571 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25572 } else if (trigger != 'manual') {
25573 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25574 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25575
25576 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25577 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25578 }
25579 }
25580
25581 this.options.selector ?
25582 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25583 this.fixTitle()
25584 }
25585
25586 Tooltip.prototype.getDefaults = function () {
25587 return Tooltip.DEFAULTS
25588 }
25589
25590 Tooltip.prototype.getOptions = function (options) {
25591 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25592
25593 if (options.delay && typeof options.delay == 'number') {
25594 options.delay = {
25595 show: options.delay,
25596 hide: options.delay
25597 }
25598 }
25599
25600 return options
25601 }
25602
25603 Tooltip.prototype.getDelegateOptions = function () {
25604 var options = {}
25605 var defaults = this.getDefaults()
25606
25607 this._options && $.each(this._options, function (key, value) {
25608 if (defaults[key] != value) options[key] = value
25609 })
25610
25611 return options
25612 }
25613
25614 Tooltip.prototype.enter = function (obj) {
25615 var self = obj instanceof this.constructor ?
25616 obj : $(obj.currentTarget).data('bs.' + this.type)
25617
25618 if (!self) {
25619 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25620 $(obj.currentTarget).data('bs.' + this.type, self)
25621 }
25622
25623 if (obj instanceof $.Event) {
25624 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25625 }
25626
25627 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25628 self.hoverState = 'in'
25629 return
25630 }
25631
25632 clearTimeout(self.timeout)
25633
25634 self.hoverState = 'in'
25635
25636 if (!self.options.delay || !self.options.delay.show) return self.show()
25637
25638 self.timeout = setTimeout(function () {
25639 if (self.hoverState == 'in') self.show()
25640 }, self.options.delay.show)
25641 }
25642
25643 Tooltip.prototype.isInStateTrue = function () {
25644 for (var key in this.inState) {
25645 if (this.inState[key]) return true
25646 }
25647
25648 return false
25649 }
25650
25651 Tooltip.prototype.leave = function (obj) {
25652 var self = obj instanceof this.constructor ?
25653 obj : $(obj.currentTarget).data('bs.' + this.type)
25654
25655 if (!self) {
25656 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25657 $(obj.currentTarget).data('bs.' + this.type, self)
25658 }
25659
25660 if (obj instanceof $.Event) {
25661 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25662 }
25663
25664 if (self.isInStateTrue()) return
25665
25666 clearTimeout(self.timeout)
25667
25668 self.hoverState = 'out'
25669
25670 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25671
25672 self.timeout = setTimeout(function () {
25673 if (self.hoverState == 'out') self.hide()
25674 }, self.options.delay.hide)
25675 }
25676
25677 Tooltip.prototype.show = function () {
25678 var e = $.Event('show.bs.' + this.type)
25679
25680 if (this.hasContent() && this.enabled) {
25681 this.$element.trigger(e)
25682
25683 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25684 if (e.isDefaultPrevented() || !inDom) return
25685 var that = this
25686
25687 var $tip = this.tip()
25688
25689 var tipId = this.getUID(this.type)
25690
25691 this.setContent()
25692 $tip.attr('id', tipId)
25693 this.$element.attr('aria-describedby', tipId)
25694
25695 if (this.options.animation) $tip.addClass('fade')
25696
25697 var placement = typeof this.options.placement == 'function' ?
25698 this.options.placement.call(this, $tip[0], this.$element[0]) :
25699 this.options.placement
25700
25701 var autoToken = /\s?auto?\s?/i
25702 var autoPlace = autoToken.test(placement)
25703 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25704
25705 $tip
25706 .detach()
25707 .css({ top: 0, left: 0, display: 'block' })
25708 .addClass(placement)
25709 .data('bs.' + this.type, this)
25710
25711 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25712 this.$element.trigger('inserted.bs.' + this.type)
25713
25714 var pos = this.getPosition()
25715 var actualWidth = $tip[0].offsetWidth
25716 var actualHeight = $tip[0].offsetHeight
25717
25718 if (autoPlace) {
25719 var orgPlacement = placement
25720 var viewportDim = this.getPosition(this.$viewport)
25721
25722 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25723 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25724 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25725 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25726 placement
25727
25728 $tip
25729 .removeClass(orgPlacement)
25730 .addClass(placement)
25731 }
25732
25733 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25734
25735 this.applyPlacement(calculatedOffset, placement)
25736
25737 var complete = function () {
25738 var prevHoverState = that.hoverState
25739 that.$element.trigger('shown.bs.' + that.type)
25740 that.hoverState = null
25741
25742 if (prevHoverState == 'out') that.leave(that)
25743 }
25744
25745 $.support.transition && this.$tip.hasClass('fade') ?
25746 $tip
25747 .one('bsTransitionEnd', complete)
25748 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25749 complete()
25750 }
25751 }
25752
25753 Tooltip.prototype.applyPlacement = function (offset, placement) {
25754 var $tip = this.tip()
25755 var width = $tip[0].offsetWidth
25756 var height = $tip[0].offsetHeight
25757
25758 // manually read margins because getBoundingClientRect includes difference
25759 var marginTop = parseInt($tip.css('margin-top'), 10)
25760 var marginLeft = parseInt($tip.css('margin-left'), 10)
25761
25762 // we must check for NaN for ie 8/9
25763 if (isNaN(marginTop)) marginTop = 0
25764 if (isNaN(marginLeft)) marginLeft = 0
25765
25766 offset.top += marginTop
25767 offset.left += marginLeft
25768
25769 // $.fn.offset doesn't round pixel values
25770 // so we use setOffset directly with our own function B-0
25771 $.offset.setOffset($tip[0], $.extend({
25772 using: function (props) {
25773 $tip.css({
25774 top: Math.round(props.top),
25775 left: Math.round(props.left)
25776 })
25777 }
25778 }, offset), 0)
25779
25780 $tip.addClass('in')
25781
25782 // check to see if placing tip in new offset caused the tip to resize itself
25783 var actualWidth = $tip[0].offsetWidth
25784 var actualHeight = $tip[0].offsetHeight
25785
25786 if (placement == 'top' && actualHeight != height) {
25787 offset.top = offset.top + height - actualHeight
25788 }
25789
25790 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25791
25792 if (delta.left) offset.left += delta.left
25793 else offset.top += delta.top
25794
25795 var isVertical = /top|bottom/.test(placement)
25796 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25797 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25798
25799 $tip.offset(offset)
25800 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25801 }
25802
25803 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25804 this.arrow()
25805 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25806 .css(isVertical ? 'top' : 'left', '')
25807 }
25808
25809 Tooltip.prototype.setContent = function () {
25810 var $tip = this.tip()
25811 var title = this.getTitle()
25812
25813 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25814 $tip.removeClass('fade in top bottom left right')
25815 }
25816
25817 Tooltip.prototype.hide = function (callback) {
25818 var that = this
25819 var $tip = $(this.$tip)
25820 var e = $.Event('hide.bs.' + this.type)
25821
25822 function complete() {
25823 if (that.hoverState != 'in') $tip.detach()
25824 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25825 that.$element
25826 .removeAttr('aria-describedby')
25827 .trigger('hidden.bs.' + that.type)
25828 }
25829 callback && callback()
25830 }
25831
25832 this.$element.trigger(e)
25833
25834 if (e.isDefaultPrevented()) return
25835
25836 $tip.removeClass('in')
25837
25838 $.support.transition && $tip.hasClass('fade') ?
25839 $tip
25840 .one('bsTransitionEnd', complete)
25841 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25842 complete()
25843
25844 this.hoverState = null
25845
25846 return this
25847 }
25848
25849 Tooltip.prototype.fixTitle = function () {
25850 var $e = this.$element
25851 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25852 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25853 }
25854 }
25855
25856 Tooltip.prototype.hasContent = function () {
25857 return this.getTitle()
25858 }
25859
25860 Tooltip.prototype.getPosition = function ($element) {
25861 $element = $element || this.$element
25862
25863 var el = $element[0]
25864 var isBody = el.tagName == 'BODY'
25865
25866 var elRect = el.getBoundingClientRect()
25867 if (elRect.width == null) {
25868 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25869 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25870 }
25871 var isSvg = window.SVGElement && el instanceof window.SVGElement
25872 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25873 // See https://github.com/twbs/bootstrap/issues/20280
25874 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25875 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25876 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25877
25878 return $.extend({}, elRect, scroll, outerDims, elOffset)
25879 }
25880
25881 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25882 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25883 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25884 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25885 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25886
25887 }
25888
25889 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25890 var delta = { top: 0, left: 0 }
25891 if (!this.$viewport) return delta
25892
25893 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25894 var viewportDimensions = this.getPosition(this.$viewport)
25895
25896 if (/right|left/.test(placement)) {
25897 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25898 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25899 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25900 delta.top = viewportDimensions.top - topEdgeOffset
25901 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25902 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25903 }
25904 } else {
25905 var leftEdgeOffset = pos.left - viewportPadding
25906 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25907 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25908 delta.left = viewportDimensions.left - leftEdgeOffset
25909 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25910 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25911 }
25912 }
25913
25914 return delta
25915 }
25916
25917 Tooltip.prototype.getTitle = function () {
25918 var title
25919 var $e = this.$element
25920 var o = this.options
25921
25922 title = $e.attr('data-original-title')
25923 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25924
25925 return title
25926 }
25927
25928 Tooltip.prototype.getUID = function (prefix) {
25929 do prefix += ~~(Math.random() * 1000000)
25930 while (document.getElementById(prefix))
25931 return prefix
25932 }
25933
25934 Tooltip.prototype.tip = function () {
25935 if (!this.$tip) {
25936 this.$tip = $(this.options.template)
25937 if (this.$tip.length != 1) {
25938 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25939 }
25940 }
25941 return this.$tip
25942 }
25943
25944 Tooltip.prototype.arrow = function () {
25945 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25946 }
25947
25948 Tooltip.prototype.enable = function () {
25949 this.enabled = true
25950 }
25951
25952 Tooltip.prototype.disable = function () {
25953 this.enabled = false
25954 }
25955
25956 Tooltip.prototype.toggleEnabled = function () {
25957 this.enabled = !this.enabled
25958 }
25959
25960 Tooltip.prototype.toggle = function (e) {
25961 var self = this
25962 if (e) {
25963 self = $(e.currentTarget).data('bs.' + this.type)
25964 if (!self) {
25965 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25966 $(e.currentTarget).data('bs.' + this.type, self)
25967 }
25968 }
25969
25970 if (e) {
25971 self.inState.click = !self.inState.click
25972 if (self.isInStateTrue()) self.enter(self)
25973 else self.leave(self)
25974 } else {
25975 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25976 }
25977 }
25978
25979 Tooltip.prototype.destroy = function () {
25980 var that = this
25981 clearTimeout(this.timeout)
25982 this.hide(function () {
25983 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25984 if (that.$tip) {
25985 that.$tip.detach()
25986 }
25987 that.$tip = null
25988 that.$arrow = null
25989 that.$viewport = null
25990 that.$element = null
25991 })
25992 }
25993
25994
25995 // TOOLTIP PLUGIN DEFINITION
25996 // =========================
25997
25998 function Plugin(option) {
25999 return this.each(function () {
26000 var $this = $(this)
26001 var data = $this.data('bs.tooltip')
26002 var options = typeof option == 'object' && option
26003
26004 if (!data && /destroy|hide/.test(option)) return
26005 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
26006 if (typeof option == 'string') data[option]()
26007 })
26008 }
26009
26010 var old = $.fn.tooltip
26011
26012 $.fn.tooltip = Plugin
26013 $.fn.tooltip.Constructor = Tooltip
26014
26015
26016 // TOOLTIP NO CONFLICT
26017 // ===================
26018
26019 $.fn.tooltip.noConflict = function () {
26020 $.fn.tooltip = old
26021 return this
26022 }
26023
26024 }(jQuery);
26025
26026 /* ========================================================================
26027 * Bootstrap: popover.js v3.3.7
26028 * http://getbootstrap.com/javascript/#popovers
26029 * ========================================================================
26030 * Copyright 2011-2016 Twitter, Inc.
26031 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26032 * ======================================================================== */
26033
26034
26035 +function ($) {
26036 'use strict';
26037
26038 // POPOVER PUBLIC CLASS DEFINITION
26039 // ===============================
26040
26041 var Popover = function (element, options) {
26042 this.init('popover', element, options)
26043 }
26044
26045 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26046
26047 Popover.VERSION = '3.3.7'
26048
26049 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26050 placement: 'right',
26051 trigger: 'click',
26052 content: '',
26053 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26054 })
26055
26056
26057 // NOTE: POPOVER EXTENDS tooltip.js
26058 // ================================
26059
26060 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26061
26062 Popover.prototype.constructor = Popover
26063
26064 Popover.prototype.getDefaults = function () {
26065 return Popover.DEFAULTS
26066 }
26067
26068 Popover.prototype.setContent = function () {
26069 var $tip = this.tip()
26070 var title = this.getTitle()
26071 var content = this.getContent()
26072
26073 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26074 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26075 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26076 ](content)
26077
26078 $tip.removeClass('fade top bottom left right in')
26079
26080 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26081 // this manually by checking the contents.
26082 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26083 }
26084
26085 Popover.prototype.hasContent = function () {
26086 return this.getTitle() || this.getContent()
26087 }
26088
26089 Popover.prototype.getContent = function () {
26090 var $e = this.$element
26091 var o = this.options
26092
26093 return $e.attr('data-content')
26094 || (typeof o.content == 'function' ?
26095 o.content.call($e[0]) :
26096 o.content)
26097 }
26098
26099 Popover.prototype.arrow = function () {
26100 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26101 }
26102
26103
26104 // POPOVER PLUGIN DEFINITION
26105 // =========================
26106
26107 function Plugin(option) {
26108 return this.each(function () {
26109 var $this = $(this)
26110 var data = $this.data('bs.popover')
26111 var options = typeof option == 'object' && option
26112
26113 if (!data && /destroy|hide/.test(option)) return
26114 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26115 if (typeof option == 'string') data[option]()
26116 })
26117 }
26118
26119 var old = $.fn.popover
26120
26121 $.fn.popover = Plugin
26122 $.fn.popover.Constructor = Popover
26123
26124
26125 // POPOVER NO CONFLICT
26126 // ===================
26127
26128 $.fn.popover.noConflict = function () {
26129 $.fn.popover = old
26130 return this
26131 }
26132
26133 }(jQuery);
26134
26135 /* ========================================================================
26136 * Bootstrap: scrollspy.js v3.3.7
26137 * http://getbootstrap.com/javascript/#scrollspy
26138 * ========================================================================
26139 * Copyright 2011-2016 Twitter, Inc.
26140 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26141 * ======================================================================== */
26142
26143
26144 +function ($) {
26145 'use strict';
26146
26147 // SCROLLSPY CLASS DEFINITION
26148 // ==========================
26149
26150 function ScrollSpy(element, options) {
26151 this.$body = $(document.body)
26152 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26153 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26154 this.selector = (this.options.target || '') + ' .nav li > a'
26155 this.offsets = []
26156 this.targets = []
26157 this.activeTarget = null
26158 this.scrollHeight = 0
26159
26160 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26161 this.refresh()
26162 this.process()
26163 }
26164
26165 ScrollSpy.VERSION = '3.3.7'
26166
26167 ScrollSpy.DEFAULTS = {
26168 offset: 10
26169 }
26170
26171 ScrollSpy.prototype.getScrollHeight = function () {
26172 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26173 }
26174
26175 ScrollSpy.prototype.refresh = function () {
26176 var that = this
26177 var offsetMethod = 'offset'
26178 var offsetBase = 0
26179
26180 this.offsets = []
26181 this.targets = []
26182 this.scrollHeight = this.getScrollHeight()
26183
26184 if (!$.isWindow(this.$scrollElement[0])) {
26185 offsetMethod = 'position'
26186 offsetBase = this.$scrollElement.scrollTop()
26187 }
26188
26189 this.$body
26190 .find(this.selector)
26191 .map(function () {
26192 var $el = $(this)
26193 var href = $el.data('target') || $el.attr('href')
26194 var $href = /^#./.test(href) && $(href)
26195
26196 return ($href
26197 && $href.length
26198 && $href.is(':visible')
26199 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26200 })
26201 .sort(function (a, b) { return a[0] - b[0] })
26202 .each(function () {
26203 that.offsets.push(this[0])
26204 that.targets.push(this[1])
26205 })
26206 }
26207
26208 ScrollSpy.prototype.process = function () {
26209 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26210 var scrollHeight = this.getScrollHeight()
26211 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26212 var offsets = this.offsets
26213 var targets = this.targets
26214 var activeTarget = this.activeTarget
26215 var i
26216
26217 if (this.scrollHeight != scrollHeight) {
26218 this.refresh()
26219 }
26220
26221 if (scrollTop >= maxScroll) {
26222 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26223 }
26224
26225 if (activeTarget && scrollTop < offsets[0]) {
26226 this.activeTarget = null
26227 return this.clear()
26228 }
26229
26230 for (i = offsets.length; i--;) {
26231 activeTarget != targets[i]
26232 && scrollTop >= offsets[i]
26233 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26234 && this.activate(targets[i])
26235 }
26236 }
26237
26238 ScrollSpy.prototype.activate = function (target) {
26239 this.activeTarget = target
26240
26241 this.clear()
26242
26243 var selector = this.selector +
26244 '[data-target="' + target + '"],' +
26245 this.selector + '[href="' + target + '"]'
26246
26247 var active = $(selector)
26248 .parents('li')
26249 .addClass('active')
26250
26251 if (active.parent('.dropdown-menu').length) {
26252 active = active
26253 .closest('li.dropdown')
26254 .addClass('active')
26255 }
26256
26257 active.trigger('activate.bs.scrollspy')
26258 }
26259
26260 ScrollSpy.prototype.clear = function () {
26261 $(this.selector)
26262 .parentsUntil(this.options.target, '.active')
26263 .removeClass('active')
26264 }
26265
26266
26267 // SCROLLSPY PLUGIN DEFINITION
26268 // ===========================
26269
26270 function Plugin(option) {
26271 return this.each(function () {
26272 var $this = $(this)
26273 var data = $this.data('bs.scrollspy')
26274 var options = typeof option == 'object' && option
26275
26276 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26277 if (typeof option == 'string') data[option]()
26278 })
26279 }
26280
26281 var old = $.fn.scrollspy
26282
26283 $.fn.scrollspy = Plugin
26284 $.fn.scrollspy.Constructor = ScrollSpy
26285
26286
26287 // SCROLLSPY NO CONFLICT
26288 // =====================
26289
26290 $.fn.scrollspy.noConflict = function () {
26291 $.fn.scrollspy = old
26292 return this
26293 }
26294
26295
26296 // SCROLLSPY DATA-API
26297 // ==================
26298
26299 $(window).on('load.bs.scrollspy.data-api', function () {
26300 $('[data-spy="scroll"]').each(function () {
26301 var $spy = $(this)
26302 Plugin.call($spy, $spy.data())
26303 })
26304 })
26305
26306 }(jQuery);
26307
26308 /* ========================================================================
26309 * Bootstrap: tab.js v3.3.7
26310 * http://getbootstrap.com/javascript/#tabs
26311 * ========================================================================
26312 * Copyright 2011-2016 Twitter, Inc.
26313 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26314 * ======================================================================== */
26315
26316
26317 +function ($) {
26318 'use strict';
26319
26320 // TAB CLASS DEFINITION
26321 // ====================
26322
26323 var Tab = function (element) {
26324 // jscs:disable requireDollarBeforejQueryAssignment
26325 this.element = $(element)
26326 // jscs:enable requireDollarBeforejQueryAssignment
26327 }
26328
26329 Tab.VERSION = '3.3.7'
26330
26331 Tab.TRANSITION_DURATION = 150
26332
26333 Tab.prototype.show = function () {
26334 var $this = this.element
26335 var $ul = $this.closest('ul:not(.dropdown-menu)')
26336 var selector = $this.data('target')
26337
26338 if (!selector) {
26339 selector = $this.attr('href')
26340 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26341 }
26342
26343 if ($this.parent('li').hasClass('active')) return
26344
26345 var $previous = $ul.find('.active:last a')
26346 var hideEvent = $.Event('hide.bs.tab', {
26347 relatedTarget: $this[0]
26348 })
26349 var showEvent = $.Event('show.bs.tab', {
26350 relatedTarget: $previous[0]
26351 })
26352
26353 $previous.trigger(hideEvent)
26354 $this.trigger(showEvent)
26355
26356 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26357
26358 var $target = $(selector)
26359
26360 this.activate($this.closest('li'), $ul)
26361 this.activate($target, $target.parent(), function () {
26362 $previous.trigger({
26363 type: 'hidden.bs.tab',
26364 relatedTarget: $this[0]
26365 })
26366 $this.trigger({
26367 type: 'shown.bs.tab',
26368 relatedTarget: $previous[0]
26369 })
26370 })
26371 }
26372
26373 Tab.prototype.activate = function (element, container, callback) {
26374 var $active = container.find('> .active')
26375 var transition = callback
26376 && $.support.transition
26377 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26378
26379 function next() {
26380 $active
26381 .removeClass('active')
26382 .find('> .dropdown-menu > .active')
26383 .removeClass('active')
26384 .end()
26385 .find('[data-toggle="tab"]')
26386 .attr('aria-expanded', false)
26387
26388 element
26389 .addClass('active')
26390 .find('[data-toggle="tab"]')
26391 .attr('aria-expanded', true)
26392
26393 if (transition) {
26394 element[0].offsetWidth // reflow for transition
26395 element.addClass('in')
26396 } else {
26397 element.removeClass('fade')
26398 }
26399
26400 if (element.parent('.dropdown-menu').length) {
26401 element
26402 .closest('li.dropdown')
26403 .addClass('active')
26404 .end()
26405 .find('[data-toggle="tab"]')
26406 .attr('aria-expanded', true)
26407 }
26408
26409 callback && callback()
26410 }
26411
26412 $active.length && transition ?
26413 $active
26414 .one('bsTransitionEnd', next)
26415 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26416 next()
26417
26418 $active.removeClass('in')
26419 }
26420
26421
26422 // TAB PLUGIN DEFINITION
26423 // =====================
26424
26425 function Plugin(option) {
26426 return this.each(function () {
26427 var $this = $(this)
26428 var data = $this.data('bs.tab')
26429
26430 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26431 if (typeof option == 'string') data[option]()
26432 })
26433 }
26434
26435 var old = $.fn.tab
26436
26437 $.fn.tab = Plugin
26438 $.fn.tab.Constructor = Tab
26439
26440
26441 // TAB NO CONFLICT
26442 // ===============
26443
26444 $.fn.tab.noConflict = function () {
26445 $.fn.tab = old
26446 return this
26447 }
26448
26449
26450 // TAB DATA-API
26451 // ============
26452
26453 var clickHandler = function (e) {
26454 e.preventDefault()
26455 Plugin.call($(this), 'show')
26456 }
26457
26458 $(document)
26459 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26460 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26461
26462 }(jQuery);
26463
26464 /* ========================================================================
26465 * Bootstrap: affix.js v3.3.7
26466 * http://getbootstrap.com/javascript/#affix
26467 * ========================================================================
26468 * Copyright 2011-2016 Twitter, Inc.
26469 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26470 * ======================================================================== */
26471
26472
26473 +function ($) {
26474 'use strict';
26475
26476 // AFFIX CLASS DEFINITION
26477 // ======================
26478
26479 var Affix = function (element, options) {
26480 this.options = $.extend({}, Affix.DEFAULTS, options)
26481
26482 this.$target = $(this.options.target)
26483 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26484 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26485
26486 this.$element = $(element)
26487 this.affixed = null
26488 this.unpin = null
26489 this.pinnedOffset = null
26490
26491 this.checkPosition()
26492 }
26493
26494 Affix.VERSION = '3.3.7'
26495
26496 Affix.RESET = 'affix affix-top affix-bottom'
26497
26498 Affix.DEFAULTS = {
26499 offset: 0,
26500 target: window
26501 }
26502
26503 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26504 var scrollTop = this.$target.scrollTop()
26505 var position = this.$element.offset()
26506 var targetHeight = this.$target.height()
26507
26508 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26509
26510 if (this.affixed == 'bottom') {
26511 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26512 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26513 }
26514
26515 var initializing = this.affixed == null
26516 var colliderTop = initializing ? scrollTop : position.top
26517 var colliderHeight = initializing ? targetHeight : height
26518
26519 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26520 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26521
26522 return false
26523 }
26524
26525 Affix.prototype.getPinnedOffset = function () {
26526 if (this.pinnedOffset) return this.pinnedOffset
26527 this.$element.removeClass(Affix.RESET).addClass('affix')
26528 var scrollTop = this.$target.scrollTop()
26529 var position = this.$element.offset()
26530 return (this.pinnedOffset = position.top - scrollTop)
26531 }
26532
26533 Affix.prototype.checkPositionWithEventLoop = function () {
26534 setTimeout($.proxy(this.checkPosition, this), 1)
26535 }
26536
26537 Affix.prototype.checkPosition = function () {
26538 if (!this.$element.is(':visible')) return
26539
26540 var height = this.$element.height()
26541 var offset = this.options.offset
26542 var offsetTop = offset.top
26543 var offsetBottom = offset.bottom
26544 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26545
26546 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26547 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26548 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26549
26550 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26551
26552 if (this.affixed != affix) {
26553 if (this.unpin != null) this.$element.css('top', '')
26554
26555 var affixType = 'affix' + (affix ? '-' + affix : '')
26556 var e = $.Event(affixType + '.bs.affix')
26557
26558 this.$element.trigger(e)
26559
26560 if (e.isDefaultPrevented()) return
26561
26562 this.affixed = affix
26563 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26564
26565 this.$element
26566 .removeClass(Affix.RESET)
26567 .addClass(affixType)
26568 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26569 }
26570
26571 if (affix == 'bottom') {
26572 this.$element.offset({
26573 top: scrollHeight - height - offsetBottom
26574 })
26575 }
26576 }
26577
26578
26579 // AFFIX PLUGIN DEFINITION
26580 // =======================
26581
26582 function Plugin(option) {
26583 return this.each(function () {
26584 var $this = $(this)
26585 var data = $this.data('bs.affix')
26586 var options = typeof option == 'object' && option
26587
26588 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26589 if (typeof option == 'string') data[option]()
26590 })
26591 }
26592
26593 var old = $.fn.affix
26594
26595 $.fn.affix = Plugin
26596 $.fn.affix.Constructor = Affix
26597
26598
26599 // AFFIX NO CONFLICT
26600 // =================
26601
26602 $.fn.affix.noConflict = function () {
26603 $.fn.affix = old
26604 return this
26605 }
26606
26607
26608 // AFFIX DATA-API
26609 // ==============
26610
26611 $(window).on('load', function () {
26612 $('[data-spy="affix"]').each(function () {
26613 var $spy = $(this)
26614 var data = $spy.data()
26615
26616 data.offset = data.offset || {}
26617
26618 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26619 if (data.offsetTop != null) data.offset.top = data.offsetTop
26620
26621 Plugin.call($spy, data)
26622 })
26623 })
26624
26625 }(jQuery);
26626 </script>
26627 <script>(function() {
26628 'use strict';
26629
26630 /**
26631 * Extend an Object with another Object's properties.
26632 *
26633 * The source objects are specified as additional arguments.
26634 *
26635 * @param dst Object the object to extend.
26636 *
26637 * @return Object the final object.
26638 */
26639 var _extend = function(dst) {
26640 var sources = Array.prototype.slice.call(arguments, 1);
26641 for (var i=0; i<sources.length; ++i) {
26642 var src = sources[i];
26643 for (var p in src) {
26644 if (src.hasOwnProperty(p)) dst[p] = src[p];
26645 }
26646 }
26647 return dst;
26648 };
26649
26650
26651 /**
26652 * Defer execution of given function.
26653 * @param {Function} func
26654 */
26655 var _defer = function(func) {
26656 if (typeof setImmediate === 'function') {
26657 return setImmediate(func);
26658 } else {
26659 return setTimeout(func, 0);
26660 }
26661 };
26662
26663 /**
26664 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26665 */
26666 var Levenshtein = {
26667 /**
26668 * Calculate levenshtein distance of the two strings.
26669 *
26670 * @param str1 String the first string.
26671 * @param str2 String the second string.
26672 * @return Integer the levenshtein distance (0 and above).
26673 */
26674 get: function(str1, str2) {
26675 // base cases
26676 if (str1 === str2) return 0;
26677 if (str1.length === 0) return str2.length;
26678 if (str2.length === 0) return str1.length;
26679
26680 // two rows
26681 var prevRow = new Array(str2.length + 1),
26682 curCol, nextCol, i, j, tmp;
26683
26684 // initialise previous row
26685 for (i=0; i<prevRow.length; ++i) {
26686 prevRow[i] = i;
26687 }
26688
26689 // calculate current row distance from previous row
26690 for (i=0; i<str1.length; ++i) {
26691 nextCol = i + 1;
26692
26693 for (j=0; j<str2.length; ++j) {
26694 curCol = nextCol;
26695
26696 // substution
26697 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26698 // insertion
26699 tmp = curCol + 1;
26700 if (nextCol > tmp) {
26701 nextCol = tmp;
26702 }
26703 // deletion
26704 tmp = prevRow[j + 1] + 1;
26705 if (nextCol > tmp) {
26706 nextCol = tmp;
26707 }
26708
26709 // copy current col value into previous (in preparation for next iteration)
26710 prevRow[j] = curCol;
26711 }
26712
26713 // copy last col value into previous (in preparation for next iteration)
26714 prevRow[j] = nextCol;
26715 }
26716
26717 return nextCol;
26718 },
26719
26720 /**
26721 * Asynchronously calculate levenshtein distance of the two strings.
26722 *
26723 * @param str1 String the first string.
26724 * @param str2 String the second string.
26725 * @param cb Function callback function with signature: function(Error err, int distance)
26726 * @param [options] Object additional options.
26727 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26728 */
26729 getAsync: function(str1, str2, cb, options) {
26730 options = _extend({}, {
26731 progress: null
26732 }, options);
26733
26734 // base cases
26735 if (str1 === str2) return cb(null, 0);
26736 if (str1.length === 0) return cb(null, str2.length);
26737 if (str2.length === 0) return cb(null, str1.length);
26738
26739 // two rows
26740 var prevRow = new Array(str2.length + 1),
26741 curCol, nextCol,
26742 i, j, tmp,
26743 startTime, currentTime;
26744
26745 // initialise previous row
26746 for (i=0; i<prevRow.length; ++i) {
26747 prevRow[i] = i;
26748 }
26749
26750 nextCol = 1;
26751 i = 0;
26752 j = -1;
26753
26754 var __calculate = function() {
26755 // reset timer
26756 startTime = new Date().valueOf();
26757 currentTime = startTime;
26758
26759 // keep going until one second has elapsed
26760 while (currentTime - startTime < 1000) {
26761 // reached end of current row?
26762 if (str2.length <= (++j)) {
26763 // copy current into previous (in preparation for next iteration)
26764 prevRow[j] = nextCol;
26765
26766 // if already done all chars
26767 if (str1.length <= (++i)) {
26768 return cb(null, nextCol);
26769 }
26770 // else if we have more left to do
26771 else {
26772 nextCol = i + 1;
26773 j = 0;
26774 }
26775 }
26776
26777 // calculation
26778 curCol = nextCol;
26779
26780 // substution
26781 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26782 // insertion
26783 tmp = curCol + 1;
26784 if (nextCol > tmp) {
26785 nextCol = tmp;
26786 }
26787 // deletion
26788 tmp = prevRow[j + 1] + 1;
26789 if (nextCol > tmp) {
26790 nextCol = tmp;
26791 }
26792
26793 // copy current into previous (in preparation for next iteration)
26794 prevRow[j] = curCol;
26795
26796 // get current time
26797 currentTime = new Date().valueOf();
26798 }
26799
26800 // send a progress update?
26801 if (null !== options.progress) {
26802 try {
26803 options.progress.call(null, (i * 100.0/ str1.length));
26804 } catch (err) {
26805 return cb('Progress callback: ' + err.toString());
26806 }
26807 }
26808
26809 // next iteration
26810 _defer(__calculate);
26811 };
26812
26813 __calculate();
26814 }
26815
26816 };
26817
26818 // amd
26819 if (typeof define !== "undefined" && define !== null && define.amd) {
26820 define(function() {
26821 return Levenshtein;
26822 });
26823 }
26824 // commonjs
26825 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26826 module.exports = Levenshtein;
26827 }
26828 // web worker
26829 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26830 self.Levenshtein = Levenshtein;
26831 }
26832 // browser main thread
26833 else if (typeof window !== "undefined" && window !== null) {
26834 window.Levenshtein = Levenshtein;
26835 }
26836 }());
26837
26838 </script>
26839 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26840 !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>
26841 <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){
26842 (function (global){
26843 'use strict';
26844
26845 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26846 // original notice:
26847
26848 /*!
26849 * The buffer module from node.js, for the browser.
26850 *
26851 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26852 * @license MIT
26853 */
26854 function compare(a, b) {
26855 if (a === b) {
26856 return 0;
26857 }
26858
26859 var x = a.length;
26860 var y = b.length;
26861
26862 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26863 if (a[i] !== b[i]) {
26864 x = a[i];
26865 y = b[i];
26866 break;
26867 }
26868 }
26869
26870 if (x < y) {
26871 return -1;
26872 }
26873 if (y < x) {
26874 return 1;
26875 }
26876 return 0;
26877 }
26878 function isBuffer(b) {
26879 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26880 return global.Buffer.isBuffer(b);
26881 }
26882 return !!(b != null && b._isBuffer);
26883 }
26884
26885 // based on node assert, original notice:
26886
26887 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26888 //
26889 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26890 //
26891 // Originally from narwhal.js (http://narwhaljs.org)
26892 // Copyright (c) 2009 Thomas Robinson <280north.com>
26893 //
26894 // Permission is hereby granted, free of charge, to any person obtaining a copy
26895 // of this software and associated documentation files (the 'Software'), to
26896 // deal in the Software without restriction, including without limitation the
26897 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26898 // sell copies of the Software, and to permit persons to whom the Software is
26899 // furnished to do so, subject to the following conditions:
26900 //
26901 // The above copyright notice and this permission notice shall be included in
26902 // all copies or substantial portions of the Software.
26903 //
26904 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26905 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26906 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26907 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26908 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26909 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26910
26911 var util = require('util/');
26912 var hasOwn = Object.prototype.hasOwnProperty;
26913 var pSlice = Array.prototype.slice;
26914 var functionsHaveNames = (function () {
26915 return function foo() {}.name === 'foo';
26916 }());
26917 function pToString (obj) {
26918 return Object.prototype.toString.call(obj);
26919 }
26920 function isView(arrbuf) {
26921 if (isBuffer(arrbuf)) {
26922 return false;
26923 }
26924 if (typeof global.ArrayBuffer !== 'function') {
26925 return false;
26926 }
26927 if (typeof ArrayBuffer.isView === 'function') {
26928 return ArrayBuffer.isView(arrbuf);
26929 }
26930 if (!arrbuf) {
26931 return false;
26932 }
26933 if (arrbuf instanceof DataView) {
26934 return true;
26935 }
26936 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26937 return true;
26938 }
26939 return false;
26940 }
26941 // 1. The assert module provides functions that throw
26942 // AssertionError's when particular conditions are not met. The
26943 // assert module must conform to the following interface.
26944
26945 var assert = module.exports = ok;
26946
26947 // 2. The AssertionError is defined in assert.
26948 // new assert.AssertionError({ message: message,
26949 // actual: actual,
26950 // expected: expected })
26951
26952 var regex = /\s*function\s+([^\(\s]*)\s*/;
26953 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26954 function getName(func) {
26955 if (!util.isFunction(func)) {
26956 return;
26957 }
26958 if (functionsHaveNames) {
26959 return func.name;
26960 }
26961 var str = func.toString();
26962 var match = str.match(regex);
26963 return match && match[1];
26964 }
26965 assert.AssertionError = function AssertionError(options) {
26966 this.name = 'AssertionError';
26967 this.actual = options.actual;
26968 this.expected = options.expected;
26969 this.operator = options.operator;
26970 if (options.message) {
26971 this.message = options.message;
26972 this.generatedMessage = false;
26973 } else {
26974 this.message = getMessage(this);
26975 this.generatedMessage = true;
26976 }
26977 var stackStartFunction = options.stackStartFunction || fail;
26978 if (Error.captureStackTrace) {
26979 Error.captureStackTrace(this, stackStartFunction);
26980 } else {
26981 // non v8 browsers so we can have a stacktrace
26982 var err = new Error();
26983 if (err.stack) {
26984 var out = err.stack;
26985
26986 // try to strip useless frames
26987 var fn_name = getName(stackStartFunction);
26988 var idx = out.indexOf('\n' + fn_name);
26989 if (idx >= 0) {
26990 // once we have located the function frame
26991 // we need to strip out everything before it (and its line)
26992 var next_line = out.indexOf('\n', idx + 1);
26993 out = out.substring(next_line + 1);
26994 }
26995
26996 this.stack = out;
26997 }
26998 }
26999 };
27000
27001 // assert.AssertionError instanceof Error
27002 util.inherits(assert.AssertionError, Error);
27003
27004 function truncate(s, n) {
27005 if (typeof s === 'string') {
27006 return s.length < n ? s : s.slice(0, n);
27007 } else {
27008 return s;
27009 }
27010 }
27011 function inspect(something) {
27012 if (functionsHaveNames || !util.isFunction(something)) {
27013 return util.inspect(something);
27014 }
27015 var rawname = getName(something);
27016 var name = rawname ? ': ' + rawname : '';
27017 return '[Function' + name + ']';
27018 }
27019 function getMessage(self) {
27020 return truncate(inspect(self.actual), 128) + ' ' +
27021 self.operator + ' ' +
27022 truncate(inspect(self.expected), 128);
27023 }
27024
27025 // At present only the three keys mentioned above are used and
27026 // understood by the spec. Implementations or sub modules can pass
27027 // other keys to the AssertionError's constructor - they will be
27028 // ignored.
27029
27030 // 3. All of the following functions must throw an AssertionError
27031 // when a corresponding condition is not met, with a message that
27032 // may be undefined if not provided. All assertion methods provide
27033 // both the actual and expected values to the assertion error for
27034 // display purposes.
27035
27036 function fail(actual, expected, message, operator, stackStartFunction) {
27037 throw new assert.AssertionError({
27038 message: message,
27039 actual: actual,
27040 expected: expected,
27041 operator: operator,
27042 stackStartFunction: stackStartFunction
27043 });
27044 }
27045
27046 // EXTENSION! allows for well behaved errors defined elsewhere.
27047 assert.fail = fail;
27048
27049 // 4. Pure assertion tests whether a value is truthy, as determined
27050 // by !!guard.
27051 // assert.ok(guard, message_opt);
27052 // This statement is equivalent to assert.equal(true, !!guard,
27053 // message_opt);. To test strictly for the value true, use
27054 // assert.strictEqual(true, guard, message_opt);.
27055
27056 function ok(value, message) {
27057 if (!value) fail(value, true, message, '==', assert.ok);
27058 }
27059 assert.ok = ok;
27060
27061 // 5. The equality assertion tests shallow, coercive equality with
27062 // ==.
27063 // assert.equal(actual, expected, message_opt);
27064
27065 assert.equal = function equal(actual, expected, message) {
27066 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27067 };
27068
27069 // 6. The non-equality assertion tests for whether two objects are not equal
27070 // with != assert.notEqual(actual, expected, message_opt);
27071
27072 assert.notEqual = function notEqual(actual, expected, message) {
27073 if (actual == expected) {
27074 fail(actual, expected, message, '!=', assert.notEqual);
27075 }
27076 };
27077
27078 // 7. The equivalence assertion tests a deep equality relation.
27079 // assert.deepEqual(actual, expected, message_opt);
27080
27081 assert.deepEqual = function deepEqual(actual, expected, message) {
27082 if (!_deepEqual(actual, expected, false)) {
27083 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27084 }
27085 };
27086
27087 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27088 if (!_deepEqual(actual, expected, true)) {
27089 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27090 }
27091 };
27092
27093 function _deepEqual(actual, expected, strict, memos) {
27094 // 7.1. All identical values are equivalent, as determined by ===.
27095 if (actual === expected) {
27096 return true;
27097 } else if (isBuffer(actual) && isBuffer(expected)) {
27098 return compare(actual, expected) === 0;
27099
27100 // 7.2. If the expected value is a Date object, the actual value is
27101 // equivalent if it is also a Date object that refers to the same time.
27102 } else if (util.isDate(actual) && util.isDate(expected)) {
27103 return actual.getTime() === expected.getTime();
27104
27105 // 7.3 If the expected value is a RegExp object, the actual value is
27106 // equivalent if it is also a RegExp object with the same source and
27107 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27108 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27109 return actual.source === expected.source &&
27110 actual.global === expected.global &&
27111 actual.multiline === expected.multiline &&
27112 actual.lastIndex === expected.lastIndex &&
27113 actual.ignoreCase === expected.ignoreCase;
27114
27115 // 7.4. Other pairs that do not both pass typeof value == 'object',
27116 // equivalence is determined by ==.
27117 } else if ((actual === null || typeof actual !== 'object') &&
27118 (expected === null || typeof expected !== 'object')) {
27119 return strict ? actual === expected : actual == expected;
27120
27121 // If both values are instances of typed arrays, wrap their underlying
27122 // ArrayBuffers in a Buffer each to increase performance
27123 // This optimization requires the arrays to have the same type as checked by
27124 // Object.prototype.toString (aka pToString). Never perform binary
27125 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27126 // bit patterns are not identical.
27127 } else if (isView(actual) && isView(expected) &&
27128 pToString(actual) === pToString(expected) &&
27129 !(actual instanceof Float32Array ||
27130 actual instanceof Float64Array)) {
27131 return compare(new Uint8Array(actual.buffer),
27132 new Uint8Array(expected.buffer)) === 0;
27133
27134 // 7.5 For all other Object pairs, including Array objects, equivalence is
27135 // determined by having the same number of owned properties (as verified
27136 // with Object.prototype.hasOwnProperty.call), the same set of keys
27137 // (although not necessarily the same order), equivalent values for every
27138 // corresponding key, and an identical 'prototype' property. Note: this
27139 // accounts for both named and indexed properties on Arrays.
27140 } else if (isBuffer(actual) !== isBuffer(expected)) {
27141 return false;
27142 } else {
27143 memos = memos || {actual: [], expected: []};
27144
27145 var actualIndex = memos.actual.indexOf(actual);
27146 if (actualIndex !== -1) {
27147 if (actualIndex === memos.expected.indexOf(expected)) {
27148 return true;
27149 }
27150 }
27151
27152 memos.actual.push(actual);
27153 memos.expected.push(expected);
27154
27155 return objEquiv(actual, expected, strict, memos);
27156 }
27157 }
27158
27159 function isArguments(object) {
27160 return Object.prototype.toString.call(object) == '[object Arguments]';
27161 }
27162
27163 function objEquiv(a, b, strict, actualVisitedObjects) {
27164 if (a === null || a === undefined || b === null || b === undefined)
27165 return false;
27166 // if one is a primitive, the other must be same
27167 if (util.isPrimitive(a) || util.isPrimitive(b))
27168 return a === b;
27169 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27170 return false;
27171 var aIsArgs = isArguments(a);
27172 var bIsArgs = isArguments(b);
27173 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27174 return false;
27175 if (aIsArgs) {
27176 a = pSlice.call(a);
27177 b = pSlice.call(b);
27178 return _deepEqual(a, b, strict);
27179 }
27180 var ka = objectKeys(a);
27181 var kb = objectKeys(b);
27182 var key, i;
27183 // having the same number of owned properties (keys incorporates
27184 // hasOwnProperty)
27185 if (ka.length !== kb.length)
27186 return false;
27187 //the same set of keys (although not necessarily the same order),
27188 ka.sort();
27189 kb.sort();
27190 //~~~cheap key test
27191 for (i = ka.length - 1; i >= 0; i--) {
27192 if (ka[i] !== kb[i])
27193 return false;
27194 }
27195 //equivalent values for every corresponding key, and
27196 //~~~possibly expensive deep test
27197 for (i = ka.length - 1; i >= 0; i--) {
27198 key = ka[i];
27199 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27200 return false;
27201 }
27202 return true;
27203 }
27204
27205 // 8. The non-equivalence assertion tests for any deep inequality.
27206 // assert.notDeepEqual(actual, expected, message_opt);
27207
27208 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27209 if (_deepEqual(actual, expected, false)) {
27210 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27211 }
27212 };
27213
27214 assert.notDeepStrictEqual = notDeepStrictEqual;
27215 function notDeepStrictEqual(actual, expected, message) {
27216 if (_deepEqual(actual, expected, true)) {
27217 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27218 }
27219 }
27220
27221
27222 // 9. The strict equality assertion tests strict equality, as determined by ===.
27223 // assert.strictEqual(actual, expected, message_opt);
27224
27225 assert.strictEqual = function strictEqual(actual, expected, message) {
27226 if (actual !== expected) {
27227 fail(actual, expected, message, '===', assert.strictEqual);
27228 }
27229 };
27230
27231 // 10. The strict non-equality assertion tests for strict inequality, as
27232 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27233
27234 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27235 if (actual === expected) {
27236 fail(actual, expected, message, '!==', assert.notStrictEqual);
27237 }
27238 };
27239
27240 function expectedException(actual, expected) {
27241 if (!actual || !expected) {
27242 return false;
27243 }
27244
27245 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27246 return expected.test(actual);
27247 }
27248
27249 try {
27250 if (actual instanceof expected) {
27251 return true;
27252 }
27253 } catch (e) {
27254 // Ignore. The instanceof check doesn't work for arrow functions.
27255 }
27256
27257 if (Error.isPrototypeOf(expected)) {
27258 return false;
27259 }
27260
27261 return expected.call({}, actual) === true;
27262 }
27263
27264 function _tryBlock(block) {
27265 var error;
27266 try {
27267 block();
27268 } catch (e) {
27269 error = e;
27270 }
27271 return error;
27272 }
27273
27274 function _throws(shouldThrow, block, expected, message) {
27275 var actual;
27276
27277 if (typeof block !== 'function') {
27278 throw new TypeError('"block" argument must be a function');
27279 }
27280
27281 if (typeof expected === 'string') {
27282 message = expected;
27283 expected = null;
27284 }
27285
27286 actual = _tryBlock(block);
27287
27288 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27289 (message ? ' ' + message : '.');
27290
27291 if (shouldThrow && !actual) {
27292 fail(actual, expected, 'Missing expected exception' + message);
27293 }
27294
27295 var userProvidedMessage = typeof message === 'string';
27296 var isUnwantedException = !shouldThrow && util.isError(actual);
27297 var isUnexpectedException = !shouldThrow && actual && !expected;
27298
27299 if ((isUnwantedException &&
27300 userProvidedMessage &&
27301 expectedException(actual, expected)) ||
27302 isUnexpectedException) {
27303 fail(actual, expected, 'Got unwanted exception' + message);
27304 }
27305
27306 if ((shouldThrow && actual && expected &&
27307 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27308 throw actual;
27309 }
27310 }
27311
27312 // 11. Expected to throw an error:
27313 // assert.throws(block, Error_opt, message_opt);
27314
27315 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27316 _throws(true, block, error, message);
27317 };
27318
27319 // EXTENSION! This is annoying to write outside this module.
27320 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27321 _throws(false, block, error, message);
27322 };
27323
27324 assert.ifError = function(err) { if (err) throw err; };
27325
27326 var objectKeys = Object.keys || function (obj) {
27327 var keys = [];
27328 for (var key in obj) {
27329 if (hasOwn.call(obj, key)) keys.push(key);
27330 }
27331 return keys;
27332 };
27333
27334 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27335 },{"util/":33}],2:[function(require,module,exports){
27336 'use strict'
27337
27338 exports.byteLength = byteLength
27339 exports.toByteArray = toByteArray
27340 exports.fromByteArray = fromByteArray
27341
27342 var lookup = []
27343 var revLookup = []
27344 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27345
27346 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27347 for (var i = 0, len = code.length; i < len; ++i) {
27348 lookup[i] = code[i]
27349 revLookup[code.charCodeAt(i)] = i
27350 }
27351
27352 revLookup['-'.charCodeAt(0)] = 62
27353 revLookup['_'.charCodeAt(0)] = 63
27354
27355 function placeHoldersCount (b64) {
27356 var len = b64.length
27357 if (len % 4 > 0) {
27358 throw new Error('Invalid string. Length must be a multiple of 4')
27359 }
27360
27361 // the number of equal signs (place holders)
27362 // if there are two placeholders, than the two characters before it
27363 // represent one byte
27364 // if there is only one, then the three characters before it represent 2 bytes
27365 // this is just a cheap hack to not do indexOf twice
27366 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27367 }
27368
27369 function byteLength (b64) {
27370 // base64 is 4/3 + up to two characters of the original data
27371 return b64.length * 3 / 4 - placeHoldersCount(b64)
27372 }
27373
27374 function toByteArray (b64) {
27375 var i, j, l, tmp, placeHolders, arr
27376 var len = b64.length
27377 placeHolders = placeHoldersCount(b64)
27378
27379 arr = new Arr(len * 3 / 4 - placeHolders)
27380
27381 // if there are placeholders, only get up to the last complete 4 chars
27382 l = placeHolders > 0 ? len - 4 : len
27383
27384 var L = 0
27385
27386 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27387 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27388 arr[L++] = (tmp >> 16) & 0xFF
27389 arr[L++] = (tmp >> 8) & 0xFF
27390 arr[L++] = tmp & 0xFF
27391 }
27392
27393 if (placeHolders === 2) {
27394 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27395 arr[L++] = tmp & 0xFF
27396 } else if (placeHolders === 1) {
27397 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27398 arr[L++] = (tmp >> 8) & 0xFF
27399 arr[L++] = tmp & 0xFF
27400 }
27401
27402 return arr
27403 }
27404
27405 function tripletToBase64 (num) {
27406 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27407 }
27408
27409 function encodeChunk (uint8, start, end) {
27410 var tmp
27411 var output = []
27412 for (var i = start; i < end; i += 3) {
27413 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27414 output.push(tripletToBase64(tmp))
27415 }
27416 return output.join('')
27417 }
27418
27419 function fromByteArray (uint8) {
27420 var tmp
27421 var len = uint8.length
27422 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27423 var output = ''
27424 var parts = []
27425 var maxChunkLength = 16383 // must be multiple of 3
27426
27427 // go through the array every three bytes, we'll deal with trailing stuff later
27428 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27429 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27430 }
27431
27432 // pad the end with zeros, but make sure to not forget the extra bytes
27433 if (extraBytes === 1) {
27434 tmp = uint8[len - 1]
27435 output += lookup[tmp >> 2]
27436 output += lookup[(tmp << 4) & 0x3F]
27437 output += '=='
27438 } else if (extraBytes === 2) {
27439 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27440 output += lookup[tmp >> 10]
27441 output += lookup[(tmp >> 4) & 0x3F]
27442 output += lookup[(tmp << 2) & 0x3F]
27443 output += '='
27444 }
27445
27446 parts.push(output)
27447
27448 return parts.join('')
27449 }
27450
27451 },{}],3:[function(require,module,exports){
27452
27453 },{}],4:[function(require,module,exports){
27454 (function (global){
27455 'use strict';
27456
27457 var buffer = require('buffer');
27458 var Buffer = buffer.Buffer;
27459 var SlowBuffer = buffer.SlowBuffer;
27460 var MAX_LEN = buffer.kMaxLength || 2147483647;
27461 exports.alloc = function alloc(size, fill, encoding) {
27462 if (typeof Buffer.alloc === 'function') {
27463 return Buffer.alloc(size, fill, encoding);
27464 }
27465 if (typeof encoding === 'number') {
27466 throw new TypeError('encoding must not be number');
27467 }
27468 if (typeof size !== 'number') {
27469 throw new TypeError('size must be a number');
27470 }
27471 if (size > MAX_LEN) {
27472 throw new RangeError('size is too large');
27473 }
27474 var enc = encoding;
27475 var _fill = fill;
27476 if (_fill === undefined) {
27477 enc = undefined;
27478 _fill = 0;
27479 }
27480 var buf = new Buffer(size);
27481 if (typeof _fill === 'string') {
27482 var fillBuf = new Buffer(_fill, enc);
27483 var flen = fillBuf.length;
27484 var i = -1;
27485 while (++i < size) {
27486 buf[i] = fillBuf[i % flen];
27487 }
27488 } else {
27489 buf.fill(_fill);
27490 }
27491 return buf;
27492 }
27493 exports.allocUnsafe = function allocUnsafe(size) {
27494 if (typeof Buffer.allocUnsafe === 'function') {
27495 return Buffer.allocUnsafe(size);
27496 }
27497 if (typeof size !== 'number') {
27498 throw new TypeError('size must be a number');
27499 }
27500 if (size > MAX_LEN) {
27501 throw new RangeError('size is too large');
27502 }
27503 return new Buffer(size);
27504 }
27505 exports.from = function from(value, encodingOrOffset, length) {
27506 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27507 return Buffer.from(value, encodingOrOffset, length);
27508 }
27509 if (typeof value === 'number') {
27510 throw new TypeError('"value" argument must not be a number');
27511 }
27512 if (typeof value === 'string') {
27513 return new Buffer(value, encodingOrOffset);
27514 }
27515 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27516 var offset = encodingOrOffset;
27517 if (arguments.length === 1) {
27518 return new Buffer(value);
27519 }
27520 if (typeof offset === 'undefined') {
27521 offset = 0;
27522 }
27523 var len = length;
27524 if (typeof len === 'undefined') {
27525 len = value.byteLength - offset;
27526 }
27527 if (offset >= value.byteLength) {
27528 throw new RangeError('\'offset\' is out of bounds');
27529 }
27530 if (len > value.byteLength - offset) {
27531 throw new RangeError('\'length\' is out of bounds');
27532 }
27533 return new Buffer(value.slice(offset, offset + len));
27534 }
27535 if (Buffer.isBuffer(value)) {
27536 var out = new Buffer(value.length);
27537 value.copy(out, 0, 0, value.length);
27538 return out;
27539 }
27540 if (value) {
27541 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27542 return new Buffer(value);
27543 }
27544 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27545 return new Buffer(value.data);
27546 }
27547 }
27548
27549 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27550 }
27551 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27552 if (typeof Buffer.allocUnsafeSlow === 'function') {
27553 return Buffer.allocUnsafeSlow(size);
27554 }
27555 if (typeof size !== 'number') {
27556 throw new TypeError('size must be a number');
27557 }
27558 if (size >= MAX_LEN) {
27559 throw new RangeError('size is too large');
27560 }
27561 return new SlowBuffer(size);
27562 }
27563
27564 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27565 },{"buffer":5}],5:[function(require,module,exports){
27566 /*!
27567 * The buffer module from node.js, for the browser.
27568 *
27569 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27570 * @license MIT
27571 */
27572 /* eslint-disable no-proto */
27573
27574 'use strict'
27575
27576 var base64 = require('base64-js')
27577 var ieee754 = require('ieee754')
27578
27579 exports.Buffer = Buffer
27580 exports.SlowBuffer = SlowBuffer
27581 exports.INSPECT_MAX_BYTES = 50
27582
27583 var K_MAX_LENGTH = 0x7fffffff
27584 exports.kMaxLength = K_MAX_LENGTH
27585
27586 /**
27587 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27588 * === true Use Uint8Array implementation (fastest)
27589 * === false Print warning and recommend using `buffer` v4.x which has an Object
27590 * implementation (most compatible, even IE6)
27591 *
27592 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27593 * Opera 11.6+, iOS 4.2+.
27594 *
27595 * We report that the browser does not support typed arrays if the are not subclassable
27596 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27597 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27598 * for __proto__ and has a buggy typed array implementation.
27599 */
27600 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27601
27602 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27603 typeof console.error === 'function') {
27604 console.error(
27605 'This browser lacks typed array (Uint8Array) support which is required by ' +
27606 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27607 )
27608 }
27609
27610 function typedArraySupport () {
27611 // Can typed array instances can be augmented?
27612 try {
27613 var arr = new Uint8Array(1)
27614 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27615 return arr.foo() === 42
27616 } catch (e) {
27617 return false
27618 }
27619 }
27620
27621 function createBuffer (length) {
27622 if (length > K_MAX_LENGTH) {
27623 throw new RangeError('Invalid typed array length')
27624 }
27625 // Return an augmented `Uint8Array` instance
27626 var buf = new Uint8Array(length)
27627 buf.__proto__ = Buffer.prototype
27628 return buf
27629 }
27630
27631 /**
27632 * The Buffer constructor returns instances of `Uint8Array` that have their
27633 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27634 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27635 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27636 * returns a single octet.
27637 *
27638 * The `Uint8Array` prototype remains unmodified.
27639 */
27640
27641 function Buffer (arg, encodingOrOffset, length) {
27642 // Common case.
27643 if (typeof arg === 'number') {
27644 if (typeof encodingOrOffset === 'string') {
27645 throw new Error(
27646 'If encoding is specified then the first argument must be a string'
27647 )
27648 }
27649 return allocUnsafe(arg)
27650 }
27651 return from(arg, encodingOrOffset, length)
27652 }
27653
27654 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27655 if (typeof Symbol !== 'undefined' && Symbol.species &&
27656 Buffer[Symbol.species] === Buffer) {
27657 Object.defineProperty(Buffer, Symbol.species, {
27658 value: null,
27659 configurable: true,
27660 enumerable: false,
27661 writable: false
27662 })
27663 }
27664
27665 Buffer.poolSize = 8192 // not used by this implementation
27666
27667 function from (value, encodingOrOffset, length) {
27668 if (typeof value === 'number') {
27669 throw new TypeError('"value" argument must not be a number')
27670 }
27671
27672 if (value instanceof ArrayBuffer) {
27673 return fromArrayBuffer(value, encodingOrOffset, length)
27674 }
27675
27676 if (typeof value === 'string') {
27677 return fromString(value, encodingOrOffset)
27678 }
27679
27680 return fromObject(value)
27681 }
27682
27683 /**
27684 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27685 * if value is a number.
27686 * Buffer.from(str[, encoding])
27687 * Buffer.from(array)
27688 * Buffer.from(buffer)
27689 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27690 **/
27691 Buffer.from = function (value, encodingOrOffset, length) {
27692 return from(value, encodingOrOffset, length)
27693 }
27694
27695 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27696 // https://github.com/feross/buffer/pull/148
27697 Buffer.prototype.__proto__ = Uint8Array.prototype
27698 Buffer.__proto__ = Uint8Array
27699
27700 function assertSize (size) {
27701 if (typeof size !== 'number') {
27702 throw new TypeError('"size" argument must be a number')
27703 } else if (size < 0) {
27704 throw new RangeError('"size" argument must not be negative')
27705 }
27706 }
27707
27708 function alloc (size, fill, encoding) {
27709 assertSize(size)
27710 if (size <= 0) {
27711 return createBuffer(size)
27712 }
27713 if (fill !== undefined) {
27714 // Only pay attention to encoding if it's a string. This
27715 // prevents accidentally sending in a number that would
27716 // be interpretted as a start offset.
27717 return typeof encoding === 'string'
27718 ? createBuffer(size).fill(fill, encoding)
27719 : createBuffer(size).fill(fill)
27720 }
27721 return createBuffer(size)
27722 }
27723
27724 /**
27725 * Creates a new filled Buffer instance.
27726 * alloc(size[, fill[, encoding]])
27727 **/
27728 Buffer.alloc = function (size, fill, encoding) {
27729 return alloc(size, fill, encoding)
27730 }
27731
27732 function allocUnsafe (size) {
27733 assertSize(size)
27734 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27735 }
27736
27737 /**
27738 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27739 * */
27740 Buffer.allocUnsafe = function (size) {
27741 return allocUnsafe(size)
27742 }
27743 /**
27744 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27745 */
27746 Buffer.allocUnsafeSlow = function (size) {
27747 return allocUnsafe(size)
27748 }
27749
27750 function fromString (string, encoding) {
27751 if (typeof encoding !== 'string' || encoding === '') {
27752 encoding = 'utf8'
27753 }
27754
27755 if (!Buffer.isEncoding(encoding)) {
27756 throw new TypeError('"encoding" must be a valid string encoding')
27757 }
27758
27759 var length = byteLength(string, encoding) | 0
27760 var buf = createBuffer(length)
27761
27762 var actual = buf.write(string, encoding)
27763
27764 if (actual !== length) {
27765 // Writing a hex string, for example, that contains invalid characters will
27766 // cause everything after the first invalid character to be ignored. (e.g.
27767 // 'abxxcd' will be treated as 'ab')
27768 buf = buf.slice(0, actual)
27769 }
27770
27771 return buf
27772 }
27773
27774 function fromArrayLike (array) {
27775 var length = array.length < 0 ? 0 : checked(array.length) | 0
27776 var buf = createBuffer(length)
27777 for (var i = 0; i < length; i += 1) {
27778 buf[i] = array[i] & 255
27779 }
27780 return buf
27781 }
27782
27783 function fromArrayBuffer (array, byteOffset, length) {
27784 if (byteOffset < 0 || array.byteLength < byteOffset) {
27785 throw new RangeError('\'offset\' is out of bounds')
27786 }
27787
27788 if (array.byteLength < byteOffset + (length || 0)) {
27789 throw new RangeError('\'length\' is out of bounds')
27790 }
27791
27792 var buf
27793 if (byteOffset === undefined && length === undefined) {
27794 buf = new Uint8Array(array)
27795 } else if (length === undefined) {
27796 buf = new Uint8Array(array, byteOffset)
27797 } else {
27798 buf = new Uint8Array(array, byteOffset, length)
27799 }
27800
27801 // Return an augmented `Uint8Array` instance
27802 buf.__proto__ = Buffer.prototype
27803 return buf
27804 }
27805
27806 function fromObject (obj) {
27807 if (Buffer.isBuffer(obj)) {
27808 var len = checked(obj.length) | 0
27809 var buf = createBuffer(len)
27810
27811 if (buf.length === 0) {
27812 return buf
27813 }
27814
27815 obj.copy(buf, 0, 0, len)
27816 return buf
27817 }
27818
27819 if (obj) {
27820 if (isArrayBufferView(obj) || 'length' in obj) {
27821 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27822 return createBuffer(0)
27823 }
27824 return fromArrayLike(obj)
27825 }
27826
27827 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27828 return fromArrayLike(obj.data)
27829 }
27830 }
27831
27832 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27833 }
27834
27835 function checked (length) {
27836 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27837 // length is NaN (which is otherwise coerced to zero.)
27838 if (length >= K_MAX_LENGTH) {
27839 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27840 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27841 }
27842 return length | 0
27843 }
27844
27845 function SlowBuffer (length) {
27846 if (+length != length) { // eslint-disable-line eqeqeq
27847 length = 0
27848 }
27849 return Buffer.alloc(+length)
27850 }
27851
27852 Buffer.isBuffer = function isBuffer (b) {
27853 return b != null && b._isBuffer === true
27854 }
27855
27856 Buffer.compare = function compare (a, b) {
27857 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27858 throw new TypeError('Arguments must be Buffers')
27859 }
27860
27861 if (a === b) return 0
27862
27863 var x = a.length
27864 var y = b.length
27865
27866 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27867 if (a[i] !== b[i]) {
27868 x = a[i]
27869 y = b[i]
27870 break
27871 }
27872 }
27873
27874 if (x < y) return -1
27875 if (y < x) return 1
27876 return 0
27877 }
27878
27879 Buffer.isEncoding = function isEncoding (encoding) {
27880 switch (String(encoding).toLowerCase()) {
27881 case 'hex':
27882 case 'utf8':
27883 case 'utf-8':
27884 case 'ascii':
27885 case 'latin1':
27886 case 'binary':
27887 case 'base64':
27888 case 'ucs2':
27889 case 'ucs-2':
27890 case 'utf16le':
27891 case 'utf-16le':
27892 return true
27893 default:
27894 return false
27895 }
27896 }
27897
27898 Buffer.concat = function concat (list, length) {
27899 if (!Array.isArray(list)) {
27900 throw new TypeError('"list" argument must be an Array of Buffers')
27901 }
27902
27903 if (list.length === 0) {
27904 return Buffer.alloc(0)
27905 }
27906
27907 var i
27908 if (length === undefined) {
27909 length = 0
27910 for (i = 0; i < list.length; ++i) {
27911 length += list[i].length
27912 }
27913 }
27914
27915 var buffer = Buffer.allocUnsafe(length)
27916 var pos = 0
27917 for (i = 0; i < list.length; ++i) {
27918 var buf = list[i]
27919 if (!Buffer.isBuffer(buf)) {
27920 throw new TypeError('"list" argument must be an Array of Buffers')
27921 }
27922 buf.copy(buffer, pos)
27923 pos += buf.length
27924 }
27925 return buffer
27926 }
27927
27928 function byteLength (string, encoding) {
27929 if (Buffer.isBuffer(string)) {
27930 return string.length
27931 }
27932 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27933 return string.byteLength
27934 }
27935 if (typeof string !== 'string') {
27936 string = '' + string
27937 }
27938
27939 var len = string.length
27940 if (len === 0) return 0
27941
27942 // Use a for loop to avoid recursion
27943 var loweredCase = false
27944 for (;;) {
27945 switch (encoding) {
27946 case 'ascii':
27947 case 'latin1':
27948 case 'binary':
27949 return len
27950 case 'utf8':
27951 case 'utf-8':
27952 case undefined:
27953 return utf8ToBytes(string).length
27954 case 'ucs2':
27955 case 'ucs-2':
27956 case 'utf16le':
27957 case 'utf-16le':
27958 return len * 2
27959 case 'hex':
27960 return len >>> 1
27961 case 'base64':
27962 return base64ToBytes(string).length
27963 default:
27964 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27965 encoding = ('' + encoding).toLowerCase()
27966 loweredCase = true
27967 }
27968 }
27969 }
27970 Buffer.byteLength = byteLength
27971
27972 function slowToString (encoding, start, end) {
27973 var loweredCase = false
27974
27975 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27976 // property of a typed array.
27977
27978 // This behaves neither like String nor Uint8Array in that we set start/end
27979 // to their upper/lower bounds if the value passed is out of range.
27980 // undefined is handled specially as per ECMA-262 6th Edition,
27981 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27982 if (start === undefined || start < 0) {
27983 start = 0
27984 }
27985 // Return early if start > this.length. Done here to prevent potential uint32
27986 // coercion fail below.
27987 if (start > this.length) {
27988 return ''
27989 }
27990
27991 if (end === undefined || end > this.length) {
27992 end = this.length
27993 }
27994
27995 if (end <= 0) {
27996 return ''
27997 }
27998
27999 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
28000 end >>>= 0
28001 start >>>= 0
28002
28003 if (end <= start) {
28004 return ''
28005 }
28006
28007 if (!encoding) encoding = 'utf8'
28008
28009 while (true) {
28010 switch (encoding) {
28011 case 'hex':
28012 return hexSlice(this, start, end)
28013
28014 case 'utf8':
28015 case 'utf-8':
28016 return utf8Slice(this, start, end)
28017
28018 case 'ascii':
28019 return asciiSlice(this, start, end)
28020
28021 case 'latin1':
28022 case 'binary':
28023 return latin1Slice(this, start, end)
28024
28025 case 'base64':
28026 return base64Slice(this, start, end)
28027
28028 case 'ucs2':
28029 case 'ucs-2':
28030 case 'utf16le':
28031 case 'utf-16le':
28032 return utf16leSlice(this, start, end)
28033
28034 default:
28035 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28036 encoding = (encoding + '').toLowerCase()
28037 loweredCase = true
28038 }
28039 }
28040 }
28041
28042 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28043 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28044 // reliably in a browserify context because there could be multiple different
28045 // copies of the 'buffer' package in use. This method works even for Buffer
28046 // instances that were created from another copy of the `buffer` package.
28047 // See: https://github.com/feross/buffer/issues/154
28048 Buffer.prototype._isBuffer = true
28049
28050 function swap (b, n, m) {
28051 var i = b[n]
28052 b[n] = b[m]
28053 b[m] = i
28054 }
28055
28056 Buffer.prototype.swap16 = function swap16 () {
28057 var len = this.length
28058 if (len % 2 !== 0) {
28059 throw new RangeError('Buffer size must be a multiple of 16-bits')
28060 }
28061 for (var i = 0; i < len; i += 2) {
28062 swap(this, i, i + 1)
28063 }
28064 return this
28065 }
28066
28067 Buffer.prototype.swap32 = function swap32 () {
28068 var len = this.length
28069 if (len % 4 !== 0) {
28070 throw new RangeError('Buffer size must be a multiple of 32-bits')
28071 }
28072 for (var i = 0; i < len; i += 4) {
28073 swap(this, i, i + 3)
28074 swap(this, i + 1, i + 2)
28075 }
28076 return this
28077 }
28078
28079 Buffer.prototype.swap64 = function swap64 () {
28080 var len = this.length
28081 if (len % 8 !== 0) {
28082 throw new RangeError('Buffer size must be a multiple of 64-bits')
28083 }
28084 for (var i = 0; i < len; i += 8) {
28085 swap(this, i, i + 7)
28086 swap(this, i + 1, i + 6)
28087 swap(this, i + 2, i + 5)
28088 swap(this, i + 3, i + 4)
28089 }
28090 return this
28091 }
28092
28093 Buffer.prototype.toString = function toString () {
28094 var length = this.length
28095 if (length === 0) return ''
28096 if (arguments.length === 0) return utf8Slice(this, 0, length)
28097 return slowToString.apply(this, arguments)
28098 }
28099
28100 Buffer.prototype.equals = function equals (b) {
28101 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28102 if (this === b) return true
28103 return Buffer.compare(this, b) === 0
28104 }
28105
28106 Buffer.prototype.inspect = function inspect () {
28107 var str = ''
28108 var max = exports.INSPECT_MAX_BYTES
28109 if (this.length > 0) {
28110 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28111 if (this.length > max) str += ' ... '
28112 }
28113 return '<Buffer ' + str + '>'
28114 }
28115
28116 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28117 if (!Buffer.isBuffer(target)) {
28118 throw new TypeError('Argument must be a Buffer')
28119 }
28120
28121 if (start === undefined) {
28122 start = 0
28123 }
28124 if (end === undefined) {
28125 end = target ? target.length : 0
28126 }
28127 if (thisStart === undefined) {
28128 thisStart = 0
28129 }
28130 if (thisEnd === undefined) {
28131 thisEnd = this.length
28132 }
28133
28134 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28135 throw new RangeError('out of range index')
28136 }
28137
28138 if (thisStart >= thisEnd && start >= end) {
28139 return 0
28140 }
28141 if (thisStart >= thisEnd) {
28142 return -1
28143 }
28144 if (start >= end) {
28145 return 1
28146 }
28147
28148 start >>>= 0
28149 end >>>= 0
28150 thisStart >>>= 0
28151 thisEnd >>>= 0
28152
28153 if (this === target) return 0
28154
28155 var x = thisEnd - thisStart
28156 var y = end - start
28157 var len = Math.min(x, y)
28158
28159 var thisCopy = this.slice(thisStart, thisEnd)
28160 var targetCopy = target.slice(start, end)
28161
28162 for (var i = 0; i < len; ++i) {
28163 if (thisCopy[i] !== targetCopy[i]) {
28164 x = thisCopy[i]
28165 y = targetCopy[i]
28166 break
28167 }
28168 }
28169
28170 if (x < y) return -1
28171 if (y < x) return 1
28172 return 0
28173 }
28174
28175 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28176 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28177 //
28178 // Arguments:
28179 // - buffer - a Buffer to search
28180 // - val - a string, Buffer, or number
28181 // - byteOffset - an index into `buffer`; will be clamped to an int32
28182 // - encoding - an optional encoding, relevant is val is a string
28183 // - dir - true for indexOf, false for lastIndexOf
28184 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28185 // Empty buffer means no match
28186 if (buffer.length === 0) return -1
28187
28188 // Normalize byteOffset
28189 if (typeof byteOffset === 'string') {
28190 encoding = byteOffset
28191 byteOffset = 0
28192 } else if (byteOffset > 0x7fffffff) {
28193 byteOffset = 0x7fffffff
28194 } else if (byteOffset < -0x80000000) {
28195 byteOffset = -0x80000000
28196 }
28197 byteOffset = +byteOffset // Coerce to Number.
28198 if (numberIsNaN(byteOffset)) {
28199 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28200 byteOffset = dir ? 0 : (buffer.length - 1)
28201 }
28202
28203 // Normalize byteOffset: negative offsets start from the end of the buffer
28204 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28205 if (byteOffset >= buffer.length) {
28206 if (dir) return -1
28207 else byteOffset = buffer.length - 1
28208 } else if (byteOffset < 0) {
28209 if (dir) byteOffset = 0
28210 else return -1
28211 }
28212
28213 // Normalize val
28214 if (typeof val === 'string') {
28215 val = Buffer.from(val, encoding)
28216 }
28217
28218 // Finally, search either indexOf (if dir is true) or lastIndexOf
28219 if (Buffer.isBuffer(val)) {
28220 // Special case: looking for empty string/buffer always fails
28221 if (val.length === 0) {
28222 return -1
28223 }
28224 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28225 } else if (typeof val === 'number') {
28226 val = val & 0xFF // Search for a byte value [0-255]
28227 if (typeof Uint8Array.prototype.indexOf === 'function') {
28228 if (dir) {
28229 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28230 } else {
28231 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28232 }
28233 }
28234 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28235 }
28236
28237 throw new TypeError('val must be string, number or Buffer')
28238 }
28239
28240 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28241 var indexSize = 1
28242 var arrLength = arr.length
28243 var valLength = val.length
28244
28245 if (encoding !== undefined) {
28246 encoding = String(encoding).toLowerCase()
28247 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28248 encoding === 'utf16le' || encoding === 'utf-16le') {
28249 if (arr.length < 2 || val.length < 2) {
28250 return -1
28251 }
28252 indexSize = 2
28253 arrLength /= 2
28254 valLength /= 2
28255 byteOffset /= 2
28256 }
28257 }
28258
28259 function read (buf, i) {
28260 if (indexSize === 1) {
28261 return buf[i]
28262 } else {
28263 return buf.readUInt16BE(i * indexSize)
28264 }
28265 }
28266
28267 var i
28268 if (dir) {
28269 var foundIndex = -1
28270 for (i = byteOffset; i < arrLength; i++) {
28271 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28272 if (foundIndex === -1) foundIndex = i
28273 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28274 } else {
28275 if (foundIndex !== -1) i -= i - foundIndex
28276 foundIndex = -1
28277 }
28278 }
28279 } else {
28280 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28281 for (i = byteOffset; i >= 0; i--) {
28282 var found = true
28283 for (var j = 0; j < valLength; j++) {
28284 if (read(arr, i + j) !== read(val, j)) {
28285 found = false
28286 break
28287 }
28288 }
28289 if (found) return i
28290 }
28291 }
28292
28293 return -1
28294 }
28295
28296 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28297 return this.indexOf(val, byteOffset, encoding) !== -1
28298 }
28299
28300 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28301 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28302 }
28303
28304 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28305 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28306 }
28307
28308 function hexWrite (buf, string, offset, length) {
28309 offset = Number(offset) || 0
28310 var remaining = buf.length - offset
28311 if (!length) {
28312 length = remaining
28313 } else {
28314 length = Number(length)
28315 if (length > remaining) {
28316 length = remaining
28317 }
28318 }
28319
28320 // must be an even number of digits
28321 var strLen = string.length
28322 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28323
28324 if (length > strLen / 2) {
28325 length = strLen / 2
28326 }
28327 for (var i = 0; i < length; ++i) {
28328 var parsed = parseInt(string.substr(i * 2, 2), 16)
28329 if (numberIsNaN(parsed)) return i
28330 buf[offset + i] = parsed
28331 }
28332 return i
28333 }
28334
28335 function utf8Write (buf, string, offset, length) {
28336 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28337 }
28338
28339 function asciiWrite (buf, string, offset, length) {
28340 return blitBuffer(asciiToBytes(string), buf, offset, length)
28341 }
28342
28343 function latin1Write (buf, string, offset, length) {
28344 return asciiWrite(buf, string, offset, length)
28345 }
28346
28347 function base64Write (buf, string, offset, length) {
28348 return blitBuffer(base64ToBytes(string), buf, offset, length)
28349 }
28350
28351 function ucs2Write (buf, string, offset, length) {
28352 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28353 }
28354
28355 Buffer.prototype.write = function write (string, offset, length, encoding) {
28356 // Buffer#write(string)
28357 if (offset === undefined) {
28358 encoding = 'utf8'
28359 length = this.length
28360 offset = 0
28361 // Buffer#write(string, encoding)
28362 } else if (length === undefined && typeof offset === 'string') {
28363 encoding = offset
28364 length = this.length
28365 offset = 0
28366 // Buffer#write(string, offset[, length][, encoding])
28367 } else if (isFinite(offset)) {
28368 offset = offset >>> 0
28369 if (isFinite(length)) {
28370 length = length >>> 0
28371 if (encoding === undefined) encoding = 'utf8'
28372 } else {
28373 encoding = length
28374 length = undefined
28375 }
28376 } else {
28377 throw new Error(
28378 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28379 )
28380 }
28381
28382 var remaining = this.length - offset
28383 if (length === undefined || length > remaining) length = remaining
28384
28385 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28386 throw new RangeError('Attempt to write outside buffer bounds')
28387 }
28388
28389 if (!encoding) encoding = 'utf8'
28390
28391 var loweredCase = false
28392 for (;;) {
28393 switch (encoding) {
28394 case 'hex':
28395 return hexWrite(this, string, offset, length)
28396
28397 case 'utf8':
28398 case 'utf-8':
28399 return utf8Write(this, string, offset, length)
28400
28401 case 'ascii':
28402 return asciiWrite(this, string, offset, length)
28403
28404 case 'latin1':
28405 case 'binary':
28406 return latin1Write(this, string, offset, length)
28407
28408 case 'base64':
28409 // Warning: maxLength not taken into account in base64Write
28410 return base64Write(this, string, offset, length)
28411
28412 case 'ucs2':
28413 case 'ucs-2':
28414 case 'utf16le':
28415 case 'utf-16le':
28416 return ucs2Write(this, string, offset, length)
28417
28418 default:
28419 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28420 encoding = ('' + encoding).toLowerCase()
28421 loweredCase = true
28422 }
28423 }
28424 }
28425
28426 Buffer.prototype.toJSON = function toJSON () {
28427 return {
28428 type: 'Buffer',
28429 data: Array.prototype.slice.call(this._arr || this, 0)
28430 }
28431 }
28432
28433 function base64Slice (buf, start, end) {
28434 if (start === 0 && end === buf.length) {
28435 return base64.fromByteArray(buf)
28436 } else {
28437 return base64.fromByteArray(buf.slice(start, end))
28438 }
28439 }
28440
28441 function utf8Slice (buf, start, end) {
28442 end = Math.min(buf.length, end)
28443 var res = []
28444
28445 var i = start
28446 while (i < end) {
28447 var firstByte = buf[i]
28448 var codePoint = null
28449 var bytesPerSequence = (firstByte > 0xEF) ? 4
28450 : (firstByte > 0xDF) ? 3
28451 : (firstByte > 0xBF) ? 2
28452 : 1
28453
28454 if (i + bytesPerSequence <= end) {
28455 var secondByte, thirdByte, fourthByte, tempCodePoint
28456
28457 switch (bytesPerSequence) {
28458 case 1:
28459 if (firstByte < 0x80) {
28460 codePoint = firstByte
28461 }
28462 break
28463 case 2:
28464 secondByte = buf[i + 1]
28465 if ((secondByte & 0xC0) === 0x80) {
28466 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28467 if (tempCodePoint > 0x7F) {
28468 codePoint = tempCodePoint
28469 }
28470 }
28471 break
28472 case 3:
28473 secondByte = buf[i + 1]
28474 thirdByte = buf[i + 2]
28475 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28476 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28477 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28478 codePoint = tempCodePoint
28479 }
28480 }
28481 break
28482 case 4:
28483 secondByte = buf[i + 1]
28484 thirdByte = buf[i + 2]
28485 fourthByte = buf[i + 3]
28486 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28487 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28488 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28489 codePoint = tempCodePoint
28490 }
28491 }
28492 }
28493 }
28494
28495 if (codePoint === null) {
28496 // we did not generate a valid codePoint so insert a
28497 // replacement char (U+FFFD) and advance only 1 byte
28498 codePoint = 0xFFFD
28499 bytesPerSequence = 1
28500 } else if (codePoint > 0xFFFF) {
28501 // encode to utf16 (surrogate pair dance)
28502 codePoint -= 0x10000
28503 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28504 codePoint = 0xDC00 | codePoint & 0x3FF
28505 }
28506
28507 res.push(codePoint)
28508 i += bytesPerSequence
28509 }
28510
28511 return decodeCodePointsArray(res)
28512 }
28513
28514 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28515 // the lowest limit is Chrome, with 0x10000 args.
28516 // We go 1 magnitude less, for safety
28517 var MAX_ARGUMENTS_LENGTH = 0x1000
28518
28519 function decodeCodePointsArray (codePoints) {
28520 var len = codePoints.length
28521 if (len <= MAX_ARGUMENTS_LENGTH) {
28522 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28523 }
28524
28525 // Decode in chunks to avoid "call stack size exceeded".
28526 var res = ''
28527 var i = 0
28528 while (i < len) {
28529 res += String.fromCharCode.apply(
28530 String,
28531 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28532 )
28533 }
28534 return res
28535 }
28536
28537 function asciiSlice (buf, start, end) {
28538 var ret = ''
28539 end = Math.min(buf.length, end)
28540
28541 for (var i = start; i < end; ++i) {
28542 ret += String.fromCharCode(buf[i] & 0x7F)
28543 }
28544 return ret
28545 }
28546
28547 function latin1Slice (buf, start, end) {
28548 var ret = ''
28549 end = Math.min(buf.length, end)
28550
28551 for (var i = start; i < end; ++i) {
28552 ret += String.fromCharCode(buf[i])
28553 }
28554 return ret
28555 }
28556
28557 function hexSlice (buf, start, end) {
28558 var len = buf.length
28559
28560 if (!start || start < 0) start = 0
28561 if (!end || end < 0 || end > len) end = len
28562
28563 var out = ''
28564 for (var i = start; i < end; ++i) {
28565 out += toHex(buf[i])
28566 }
28567 return out
28568 }
28569
28570 function utf16leSlice (buf, start, end) {
28571 var bytes = buf.slice(start, end)
28572 var res = ''
28573 for (var i = 0; i < bytes.length; i += 2) {
28574 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28575 }
28576 return res
28577 }
28578
28579 Buffer.prototype.slice = function slice (start, end) {
28580 var len = this.length
28581 start = ~~start
28582 end = end === undefined ? len : ~~end
28583
28584 if (start < 0) {
28585 start += len
28586 if (start < 0) start = 0
28587 } else if (start > len) {
28588 start = len
28589 }
28590
28591 if (end < 0) {
28592 end += len
28593 if (end < 0) end = 0
28594 } else if (end > len) {
28595 end = len
28596 }
28597
28598 if (end < start) end = start
28599
28600 var newBuf = this.subarray(start, end)
28601 // Return an augmented `Uint8Array` instance
28602 newBuf.__proto__ = Buffer.prototype
28603 return newBuf
28604 }
28605
28606 /*
28607 * Need to make sure that buffer isn't trying to write out of bounds.
28608 */
28609 function checkOffset (offset, ext, length) {
28610 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28611 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28612 }
28613
28614 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28615 offset = offset >>> 0
28616 byteLength = byteLength >>> 0
28617 if (!noAssert) checkOffset(offset, byteLength, this.length)
28618
28619 var val = this[offset]
28620 var mul = 1
28621 var i = 0
28622 while (++i < byteLength && (mul *= 0x100)) {
28623 val += this[offset + i] * mul
28624 }
28625
28626 return val
28627 }
28628
28629 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28630 offset = offset >>> 0
28631 byteLength = byteLength >>> 0
28632 if (!noAssert) {
28633 checkOffset(offset, byteLength, this.length)
28634 }
28635
28636 var val = this[offset + --byteLength]
28637 var mul = 1
28638 while (byteLength > 0 && (mul *= 0x100)) {
28639 val += this[offset + --byteLength] * mul
28640 }
28641
28642 return val
28643 }
28644
28645 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28646 offset = offset >>> 0
28647 if (!noAssert) checkOffset(offset, 1, this.length)
28648 return this[offset]
28649 }
28650
28651 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28652 offset = offset >>> 0
28653 if (!noAssert) checkOffset(offset, 2, this.length)
28654 return this[offset] | (this[offset + 1] << 8)
28655 }
28656
28657 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28658 offset = offset >>> 0
28659 if (!noAssert) checkOffset(offset, 2, this.length)
28660 return (this[offset] << 8) | this[offset + 1]
28661 }
28662
28663 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28664 offset = offset >>> 0
28665 if (!noAssert) checkOffset(offset, 4, this.length)
28666
28667 return ((this[offset]) |
28668 (this[offset + 1] << 8) |
28669 (this[offset + 2] << 16)) +
28670 (this[offset + 3] * 0x1000000)
28671 }
28672
28673 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28674 offset = offset >>> 0
28675 if (!noAssert) checkOffset(offset, 4, this.length)
28676
28677 return (this[offset] * 0x1000000) +
28678 ((this[offset + 1] << 16) |
28679 (this[offset + 2] << 8) |
28680 this[offset + 3])
28681 }
28682
28683 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28684 offset = offset >>> 0
28685 byteLength = byteLength >>> 0
28686 if (!noAssert) checkOffset(offset, byteLength, this.length)
28687
28688 var val = this[offset]
28689 var mul = 1
28690 var i = 0
28691 while (++i < byteLength && (mul *= 0x100)) {
28692 val += this[offset + i] * mul
28693 }
28694 mul *= 0x80
28695
28696 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28697
28698 return val
28699 }
28700
28701 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28702 offset = offset >>> 0
28703 byteLength = byteLength >>> 0
28704 if (!noAssert) checkOffset(offset, byteLength, this.length)
28705
28706 var i = byteLength
28707 var mul = 1
28708 var val = this[offset + --i]
28709 while (i > 0 && (mul *= 0x100)) {
28710 val += this[offset + --i] * mul
28711 }
28712 mul *= 0x80
28713
28714 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28715
28716 return val
28717 }
28718
28719 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28720 offset = offset >>> 0
28721 if (!noAssert) checkOffset(offset, 1, this.length)
28722 if (!(this[offset] & 0x80)) return (this[offset])
28723 return ((0xff - this[offset] + 1) * -1)
28724 }
28725
28726 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28727 offset = offset >>> 0
28728 if (!noAssert) checkOffset(offset, 2, this.length)
28729 var val = this[offset] | (this[offset + 1] << 8)
28730 return (val & 0x8000) ? val | 0xFFFF0000 : val
28731 }
28732
28733 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28734 offset = offset >>> 0
28735 if (!noAssert) checkOffset(offset, 2, this.length)
28736 var val = this[offset + 1] | (this[offset] << 8)
28737 return (val & 0x8000) ? val | 0xFFFF0000 : val
28738 }
28739
28740 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28741 offset = offset >>> 0
28742 if (!noAssert) checkOffset(offset, 4, this.length)
28743
28744 return (this[offset]) |
28745 (this[offset + 1] << 8) |
28746 (this[offset + 2] << 16) |
28747 (this[offset + 3] << 24)
28748 }
28749
28750 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28751 offset = offset >>> 0
28752 if (!noAssert) checkOffset(offset, 4, this.length)
28753
28754 return (this[offset] << 24) |
28755 (this[offset + 1] << 16) |
28756 (this[offset + 2] << 8) |
28757 (this[offset + 3])
28758 }
28759
28760 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28761 offset = offset >>> 0
28762 if (!noAssert) checkOffset(offset, 4, this.length)
28763 return ieee754.read(this, offset, true, 23, 4)
28764 }
28765
28766 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28767 offset = offset >>> 0
28768 if (!noAssert) checkOffset(offset, 4, this.length)
28769 return ieee754.read(this, offset, false, 23, 4)
28770 }
28771
28772 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28773 offset = offset >>> 0
28774 if (!noAssert) checkOffset(offset, 8, this.length)
28775 return ieee754.read(this, offset, true, 52, 8)
28776 }
28777
28778 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28779 offset = offset >>> 0
28780 if (!noAssert) checkOffset(offset, 8, this.length)
28781 return ieee754.read(this, offset, false, 52, 8)
28782 }
28783
28784 function checkInt (buf, value, offset, ext, max, min) {
28785 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28786 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28787 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28788 }
28789
28790 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28791 value = +value
28792 offset = offset >>> 0
28793 byteLength = byteLength >>> 0
28794 if (!noAssert) {
28795 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28796 checkInt(this, value, offset, byteLength, maxBytes, 0)
28797 }
28798
28799 var mul = 1
28800 var i = 0
28801 this[offset] = value & 0xFF
28802 while (++i < byteLength && (mul *= 0x100)) {
28803 this[offset + i] = (value / mul) & 0xFF
28804 }
28805
28806 return offset + byteLength
28807 }
28808
28809 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28810 value = +value
28811 offset = offset >>> 0
28812 byteLength = byteLength >>> 0
28813 if (!noAssert) {
28814 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28815 checkInt(this, value, offset, byteLength, maxBytes, 0)
28816 }
28817
28818 var i = byteLength - 1
28819 var mul = 1
28820 this[offset + i] = value & 0xFF
28821 while (--i >= 0 && (mul *= 0x100)) {
28822 this[offset + i] = (value / mul) & 0xFF
28823 }
28824
28825 return offset + byteLength
28826 }
28827
28828 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28829 value = +value
28830 offset = offset >>> 0
28831 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28832 this[offset] = (value & 0xff)
28833 return offset + 1
28834 }
28835
28836 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28837 value = +value
28838 offset = offset >>> 0
28839 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28840 this[offset] = (value & 0xff)
28841 this[offset + 1] = (value >>> 8)
28842 return offset + 2
28843 }
28844
28845 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28846 value = +value
28847 offset = offset >>> 0
28848 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28849 this[offset] = (value >>> 8)
28850 this[offset + 1] = (value & 0xff)
28851 return offset + 2
28852 }
28853
28854 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28855 value = +value
28856 offset = offset >>> 0
28857 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28858 this[offset + 3] = (value >>> 24)
28859 this[offset + 2] = (value >>> 16)
28860 this[offset + 1] = (value >>> 8)
28861 this[offset] = (value & 0xff)
28862 return offset + 4
28863 }
28864
28865 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28866 value = +value
28867 offset = offset >>> 0
28868 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28869 this[offset] = (value >>> 24)
28870 this[offset + 1] = (value >>> 16)
28871 this[offset + 2] = (value >>> 8)
28872 this[offset + 3] = (value & 0xff)
28873 return offset + 4
28874 }
28875
28876 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28877 value = +value
28878 offset = offset >>> 0
28879 if (!noAssert) {
28880 var limit = Math.pow(2, (8 * byteLength) - 1)
28881
28882 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28883 }
28884
28885 var i = 0
28886 var mul = 1
28887 var sub = 0
28888 this[offset] = value & 0xFF
28889 while (++i < byteLength && (mul *= 0x100)) {
28890 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28891 sub = 1
28892 }
28893 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28894 }
28895
28896 return offset + byteLength
28897 }
28898
28899 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28900 value = +value
28901 offset = offset >>> 0
28902 if (!noAssert) {
28903 var limit = Math.pow(2, (8 * byteLength) - 1)
28904
28905 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28906 }
28907
28908 var i = byteLength - 1
28909 var mul = 1
28910 var sub = 0
28911 this[offset + i] = value & 0xFF
28912 while (--i >= 0 && (mul *= 0x100)) {
28913 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28914 sub = 1
28915 }
28916 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28917 }
28918
28919 return offset + byteLength
28920 }
28921
28922 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28923 value = +value
28924 offset = offset >>> 0
28925 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28926 if (value < 0) value = 0xff + value + 1
28927 this[offset] = (value & 0xff)
28928 return offset + 1
28929 }
28930
28931 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28932 value = +value
28933 offset = offset >>> 0
28934 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28935 this[offset] = (value & 0xff)
28936 this[offset + 1] = (value >>> 8)
28937 return offset + 2
28938 }
28939
28940 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28941 value = +value
28942 offset = offset >>> 0
28943 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28944 this[offset] = (value >>> 8)
28945 this[offset + 1] = (value & 0xff)
28946 return offset + 2
28947 }
28948
28949 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28950 value = +value
28951 offset = offset >>> 0
28952 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28953 this[offset] = (value & 0xff)
28954 this[offset + 1] = (value >>> 8)
28955 this[offset + 2] = (value >>> 16)
28956 this[offset + 3] = (value >>> 24)
28957 return offset + 4
28958 }
28959
28960 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28961 value = +value
28962 offset = offset >>> 0
28963 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28964 if (value < 0) value = 0xffffffff + value + 1
28965 this[offset] = (value >>> 24)
28966 this[offset + 1] = (value >>> 16)
28967 this[offset + 2] = (value >>> 8)
28968 this[offset + 3] = (value & 0xff)
28969 return offset + 4
28970 }
28971
28972 function checkIEEE754 (buf, value, offset, ext, max, min) {
28973 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28974 if (offset < 0) throw new RangeError('Index out of range')
28975 }
28976
28977 function writeFloat (buf, value, offset, littleEndian, noAssert) {
28978 value = +value
28979 offset = offset >>> 0
28980 if (!noAssert) {
28981 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
28982 }
28983 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28984 return offset + 4
28985 }
28986
28987 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28988 return writeFloat(this, value, offset, true, noAssert)
28989 }
28990
28991 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
28992 return writeFloat(this, value, offset, false, noAssert)
28993 }
28994
28995 function writeDouble (buf, value, offset, littleEndian, noAssert) {
28996 value = +value
28997 offset = offset >>> 0
28998 if (!noAssert) {
28999 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
29000 }
29001 ieee754.write(buf, value, offset, littleEndian, 52, 8)
29002 return offset + 8
29003 }
29004
29005 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
29006 return writeDouble(this, value, offset, true, noAssert)
29007 }
29008
29009 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29010 return writeDouble(this, value, offset, false, noAssert)
29011 }
29012
29013 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29014 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29015 if (!start) start = 0
29016 if (!end && end !== 0) end = this.length
29017 if (targetStart >= target.length) targetStart = target.length
29018 if (!targetStart) targetStart = 0
29019 if (end > 0 && end < start) end = start
29020
29021 // Copy 0 bytes; we're done
29022 if (end === start) return 0
29023 if (target.length === 0 || this.length === 0) return 0
29024
29025 // Fatal error conditions
29026 if (targetStart < 0) {
29027 throw new RangeError('targetStart out of bounds')
29028 }
29029 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29030 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29031
29032 // Are we oob?
29033 if (end > this.length) end = this.length
29034 if (target.length - targetStart < end - start) {
29035 end = target.length - targetStart + start
29036 }
29037
29038 var len = end - start
29039 var i
29040
29041 if (this === target && start < targetStart && targetStart < end) {
29042 // descending copy from end
29043 for (i = len - 1; i >= 0; --i) {
29044 target[i + targetStart] = this[i + start]
29045 }
29046 } else if (len < 1000) {
29047 // ascending copy from start
29048 for (i = 0; i < len; ++i) {
29049 target[i + targetStart] = this[i + start]
29050 }
29051 } else {
29052 Uint8Array.prototype.set.call(
29053 target,
29054 this.subarray(start, start + len),
29055 targetStart
29056 )
29057 }
29058
29059 return len
29060 }
29061
29062 // Usage:
29063 // buffer.fill(number[, offset[, end]])
29064 // buffer.fill(buffer[, offset[, end]])
29065 // buffer.fill(string[, offset[, end]][, encoding])
29066 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29067 // Handle string cases:
29068 if (typeof val === 'string') {
29069 if (typeof start === 'string') {
29070 encoding = start
29071 start = 0
29072 end = this.length
29073 } else if (typeof end === 'string') {
29074 encoding = end
29075 end = this.length
29076 }
29077 if (val.length === 1) {
29078 var code = val.charCodeAt(0)
29079 if (code < 256) {
29080 val = code
29081 }
29082 }
29083 if (encoding !== undefined && typeof encoding !== 'string') {
29084 throw new TypeError('encoding must be a string')
29085 }
29086 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29087 throw new TypeError('Unknown encoding: ' + encoding)
29088 }
29089 } else if (typeof val === 'number') {
29090 val = val & 255
29091 }
29092
29093 // Invalid ranges are not set to a default, so can range check early.
29094 if (start < 0 || this.length < start || this.length < end) {
29095 throw new RangeError('Out of range index')
29096 }
29097
29098 if (end <= start) {
29099 return this
29100 }
29101
29102 start = start >>> 0
29103 end = end === undefined ? this.length : end >>> 0
29104
29105 if (!val) val = 0
29106
29107 var i
29108 if (typeof val === 'number') {
29109 for (i = start; i < end; ++i) {
29110 this[i] = val
29111 }
29112 } else {
29113 var bytes = Buffer.isBuffer(val)
29114 ? val
29115 : new Buffer(val, encoding)
29116 var len = bytes.length
29117 for (i = 0; i < end - start; ++i) {
29118 this[i + start] = bytes[i % len]
29119 }
29120 }
29121
29122 return this
29123 }
29124
29125 // HELPER FUNCTIONS
29126 // ================
29127
29128 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29129
29130 function base64clean (str) {
29131 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29132 str = str.trim().replace(INVALID_BASE64_RE, '')
29133 // Node converts strings with length < 2 to ''
29134 if (str.length < 2) return ''
29135 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29136 while (str.length % 4 !== 0) {
29137 str = str + '='
29138 }
29139 return str
29140 }
29141
29142 function toHex (n) {
29143 if (n < 16) return '0' + n.toString(16)
29144 return n.toString(16)
29145 }
29146
29147 function utf8ToBytes (string, units) {
29148 units = units || Infinity
29149 var codePoint
29150 var length = string.length
29151 var leadSurrogate = null
29152 var bytes = []
29153
29154 for (var i = 0; i < length; ++i) {
29155 codePoint = string.charCodeAt(i)
29156
29157 // is surrogate component
29158 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29159 // last char was a lead
29160 if (!leadSurrogate) {
29161 // no lead yet
29162 if (codePoint > 0xDBFF) {
29163 // unexpected trail
29164 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29165 continue
29166 } else if (i + 1 === length) {
29167 // unpaired lead
29168 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29169 continue
29170 }
29171
29172 // valid lead
29173 leadSurrogate = codePoint
29174
29175 continue
29176 }
29177
29178 // 2 leads in a row
29179 if (codePoint < 0xDC00) {
29180 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29181 leadSurrogate = codePoint
29182 continue
29183 }
29184
29185 // valid surrogate pair
29186 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29187 } else if (leadSurrogate) {
29188 // valid bmp char, but last char was a lead
29189 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29190 }
29191
29192 leadSurrogate = null
29193
29194 // encode utf8
29195 if (codePoint < 0x80) {
29196 if ((units -= 1) < 0) break
29197 bytes.push(codePoint)
29198 } else if (codePoint < 0x800) {
29199 if ((units -= 2) < 0) break
29200 bytes.push(
29201 codePoint >> 0x6 | 0xC0,
29202 codePoint & 0x3F | 0x80
29203 )
29204 } else if (codePoint < 0x10000) {
29205 if ((units -= 3) < 0) break
29206 bytes.push(
29207 codePoint >> 0xC | 0xE0,
29208 codePoint >> 0x6 & 0x3F | 0x80,
29209 codePoint & 0x3F | 0x80
29210 )
29211 } else if (codePoint < 0x110000) {
29212 if ((units -= 4) < 0) break
29213 bytes.push(
29214 codePoint >> 0x12 | 0xF0,
29215 codePoint >> 0xC & 0x3F | 0x80,
29216 codePoint >> 0x6 & 0x3F | 0x80,
29217 codePoint & 0x3F | 0x80
29218 )
29219 } else {
29220 throw new Error('Invalid code point')
29221 }
29222 }
29223
29224 return bytes
29225 }
29226
29227 function asciiToBytes (str) {
29228 var byteArray = []
29229 for (var i = 0; i < str.length; ++i) {
29230 // Node's code seems to be doing this and not & 0x7F..
29231 byteArray.push(str.charCodeAt(i) & 0xFF)
29232 }
29233 return byteArray
29234 }
29235
29236 function utf16leToBytes (str, units) {
29237 var c, hi, lo
29238 var byteArray = []
29239 for (var i = 0; i < str.length; ++i) {
29240 if ((units -= 2) < 0) break
29241
29242 c = str.charCodeAt(i)
29243 hi = c >> 8
29244 lo = c % 256
29245 byteArray.push(lo)
29246 byteArray.push(hi)
29247 }
29248
29249 return byteArray
29250 }
29251
29252 function base64ToBytes (str) {
29253 return base64.toByteArray(base64clean(str))
29254 }
29255
29256 function blitBuffer (src, dst, offset, length) {
29257 for (var i = 0; i < length; ++i) {
29258 if ((i + offset >= dst.length) || (i >= src.length)) break
29259 dst[i + offset] = src[i]
29260 }
29261 return i
29262 }
29263
29264 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29265 function isArrayBufferView (obj) {
29266 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29267 }
29268
29269 function numberIsNaN (obj) {
29270 return obj !== obj // eslint-disable-line no-self-compare
29271 }
29272
29273 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29274 (function (Buffer){
29275 // Copyright Joyent, Inc. and other Node contributors.
29276 //
29277 // Permission is hereby granted, free of charge, to any person obtaining a
29278 // copy of this software and associated documentation files (the
29279 // "Software"), to deal in the Software without restriction, including
29280 // without limitation the rights to use, copy, modify, merge, publish,
29281 // distribute, sublicense, and/or sell copies of the Software, and to permit
29282 // persons to whom the Software is furnished to do so, subject to the
29283 // following conditions:
29284 //
29285 // The above copyright notice and this permission notice shall be included
29286 // in all copies or substantial portions of the Software.
29287 //
29288 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29289 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29290 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29291 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29292 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29293 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29294 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29295
29296 // NOTE: These type checking functions intentionally don't use `instanceof`
29297 // because it is fragile and can be easily faked with `Object.create()`.
29298
29299 function isArray(arg) {
29300 if (Array.isArray) {
29301 return Array.isArray(arg);
29302 }
29303 return objectToString(arg) === '[object Array]';
29304 }
29305 exports.isArray = isArray;
29306
29307 function isBoolean(arg) {
29308 return typeof arg === 'boolean';
29309 }
29310 exports.isBoolean = isBoolean;
29311
29312 function isNull(arg) {
29313 return arg === null;
29314 }
29315 exports.isNull = isNull;
29316
29317 function isNullOrUndefined(arg) {
29318 return arg == null;
29319 }
29320 exports.isNullOrUndefined = isNullOrUndefined;
29321
29322 function isNumber(arg) {
29323 return typeof arg === 'number';
29324 }
29325 exports.isNumber = isNumber;
29326
29327 function isString(arg) {
29328 return typeof arg === 'string';
29329 }
29330 exports.isString = isString;
29331
29332 function isSymbol(arg) {
29333 return typeof arg === 'symbol';
29334 }
29335 exports.isSymbol = isSymbol;
29336
29337 function isUndefined(arg) {
29338 return arg === void 0;
29339 }
29340 exports.isUndefined = isUndefined;
29341
29342 function isRegExp(re) {
29343 return objectToString(re) === '[object RegExp]';
29344 }
29345 exports.isRegExp = isRegExp;
29346
29347 function isObject(arg) {
29348 return typeof arg === 'object' && arg !== null;
29349 }
29350 exports.isObject = isObject;
29351
29352 function isDate(d) {
29353 return objectToString(d) === '[object Date]';
29354 }
29355 exports.isDate = isDate;
29356
29357 function isError(e) {
29358 return (objectToString(e) === '[object Error]' || e instanceof Error);
29359 }
29360 exports.isError = isError;
29361
29362 function isFunction(arg) {
29363 return typeof arg === 'function';
29364 }
29365 exports.isFunction = isFunction;
29366
29367 function isPrimitive(arg) {
29368 return arg === null ||
29369 typeof arg === 'boolean' ||
29370 typeof arg === 'number' ||
29371 typeof arg === 'string' ||
29372 typeof arg === 'symbol' || // ES6 symbol
29373 typeof arg === 'undefined';
29374 }
29375 exports.isPrimitive = isPrimitive;
29376
29377 exports.isBuffer = Buffer.isBuffer;
29378
29379 function objectToString(o) {
29380 return Object.prototype.toString.call(o);
29381 }
29382
29383 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29384 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29385 // Copyright Joyent, Inc. and other Node contributors.
29386 //
29387 // Permission is hereby granted, free of charge, to any person obtaining a
29388 // copy of this software and associated documentation files (the
29389 // "Software"), to deal in the Software without restriction, including
29390 // without limitation the rights to use, copy, modify, merge, publish,
29391 // distribute, sublicense, and/or sell copies of the Software, and to permit
29392 // persons to whom the Software is furnished to do so, subject to the
29393 // following conditions:
29394 //
29395 // The above copyright notice and this permission notice shall be included
29396 // in all copies or substantial portions of the Software.
29397 //
29398 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29399 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29400 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29401 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29402 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29403 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29404 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29405
29406 function EventEmitter() {
29407 this._events = this._events || {};
29408 this._maxListeners = this._maxListeners || undefined;
29409 }
29410 module.exports = EventEmitter;
29411
29412 // Backwards-compat with node 0.10.x
29413 EventEmitter.EventEmitter = EventEmitter;
29414
29415 EventEmitter.prototype._events = undefined;
29416 EventEmitter.prototype._maxListeners = undefined;
29417
29418 // By default EventEmitters will print a warning if more than 10 listeners are
29419 // added to it. This is a useful default which helps finding memory leaks.
29420 EventEmitter.defaultMaxListeners = 10;
29421
29422 // Obviously not all Emitters should be limited to 10. This function allows
29423 // that to be increased. Set to zero for unlimited.
29424 EventEmitter.prototype.setMaxListeners = function(n) {
29425 if (!isNumber(n) || n < 0 || isNaN(n))
29426 throw TypeError('n must be a positive number');
29427 this._maxListeners = n;
29428 return this;
29429 };
29430
29431 EventEmitter.prototype.emit = function(type) {
29432 var er, handler, len, args, i, listeners;
29433
29434 if (!this._events)
29435 this._events = {};
29436
29437 // If there is no 'error' event listener then throw.
29438 if (type === 'error') {
29439 if (!this._events.error ||
29440 (isObject(this._events.error) && !this._events.error.length)) {
29441 er = arguments[1];
29442 if (er instanceof Error) {
29443 throw er; // Unhandled 'error' event
29444 } else {
29445 // At least give some kind of context to the user
29446 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29447 err.context = er;
29448 throw err;
29449 }
29450 }
29451 }
29452
29453 handler = this._events[type];
29454
29455 if (isUndefined(handler))
29456 return false;
29457
29458 if (isFunction(handler)) {
29459 switch (arguments.length) {
29460 // fast cases
29461 case 1:
29462 handler.call(this);
29463 break;
29464 case 2:
29465 handler.call(this, arguments[1]);
29466 break;
29467 case 3:
29468 handler.call(this, arguments[1], arguments[2]);
29469 break;
29470 // slower
29471 default:
29472 args = Array.prototype.slice.call(arguments, 1);
29473 handler.apply(this, args);
29474 }
29475 } else if (isObject(handler)) {
29476 args = Array.prototype.slice.call(arguments, 1);
29477 listeners = handler.slice();
29478 len = listeners.length;
29479 for (i = 0; i < len; i++)
29480 listeners[i].apply(this, args);
29481 }
29482
29483 return true;
29484 };
29485
29486 EventEmitter.prototype.addListener = function(type, listener) {
29487 var m;
29488
29489 if (!isFunction(listener))
29490 throw TypeError('listener must be a function');
29491
29492 if (!this._events)
29493 this._events = {};
29494
29495 // To avoid recursion in the case that type === "newListener"! Before
29496 // adding it to the listeners, first emit "newListener".
29497 if (this._events.newListener)
29498 this.emit('newListener', type,
29499 isFunction(listener.listener) ?
29500 listener.listener : listener);
29501
29502 if (!this._events[type])
29503 // Optimize the case of one listener. Don't need the extra array object.
29504 this._events[type] = listener;
29505 else if (isObject(this._events[type]))
29506 // If we've already got an array, just append.
29507 this._events[type].push(listener);
29508 else
29509 // Adding the second element, need to change to array.
29510 this._events[type] = [this._events[type], listener];
29511
29512 // Check for listener leak
29513 if (isObject(this._events[type]) && !this._events[type].warned) {
29514 if (!isUndefined(this._maxListeners)) {
29515 m = this._maxListeners;
29516 } else {
29517 m = EventEmitter.defaultMaxListeners;
29518 }
29519
29520 if (m && m > 0 && this._events[type].length > m) {
29521 this._events[type].warned = true;
29522 console.error('(node) warning: possible EventEmitter memory ' +
29523 'leak detected. %d listeners added. ' +
29524 'Use emitter.setMaxListeners() to increase limit.',
29525 this._events[type].length);
29526 if (typeof console.trace === 'function') {
29527 // not supported in IE 10
29528 console.trace();
29529 }
29530 }
29531 }
29532
29533 return this;
29534 };
29535
29536 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29537
29538 EventEmitter.prototype.once = function(type, listener) {
29539 if (!isFunction(listener))
29540 throw TypeError('listener must be a function');
29541
29542 var fired = false;
29543
29544 function g() {
29545 this.removeListener(type, g);
29546
29547 if (!fired) {
29548 fired = true;
29549 listener.apply(this, arguments);
29550 }
29551 }
29552
29553 g.listener = listener;
29554 this.on(type, g);
29555
29556 return this;
29557 };
29558
29559 // emits a 'removeListener' event iff the listener was removed
29560 EventEmitter.prototype.removeListener = function(type, listener) {
29561 var list, position, length, i;
29562
29563 if (!isFunction(listener))
29564 throw TypeError('listener must be a function');
29565
29566 if (!this._events || !this._events[type])
29567 return this;
29568
29569 list = this._events[type];
29570 length = list.length;
29571 position = -1;
29572
29573 if (list === listener ||
29574 (isFunction(list.listener) && list.listener === listener)) {
29575 delete this._events[type];
29576 if (this._events.removeListener)
29577 this.emit('removeListener', type, listener);
29578
29579 } else if (isObject(list)) {
29580 for (i = length; i-- > 0;) {
29581 if (list[i] === listener ||
29582 (list[i].listener && list[i].listener === listener)) {
29583 position = i;
29584 break;
29585 }
29586 }
29587
29588 if (position < 0)
29589 return this;
29590
29591 if (list.length === 1) {
29592 list.length = 0;
29593 delete this._events[type];
29594 } else {
29595 list.splice(position, 1);
29596 }
29597
29598 if (this._events.removeListener)
29599 this.emit('removeListener', type, listener);
29600 }
29601
29602 return this;
29603 };
29604
29605 EventEmitter.prototype.removeAllListeners = function(type) {
29606 var key, listeners;
29607
29608 if (!this._events)
29609 return this;
29610
29611 // not listening for removeListener, no need to emit
29612 if (!this._events.removeListener) {
29613 if (arguments.length === 0)
29614 this._events = {};
29615 else if (this._events[type])
29616 delete this._events[type];
29617 return this;
29618 }
29619
29620 // emit removeListener for all listeners on all events
29621 if (arguments.length === 0) {
29622 for (key in this._events) {
29623 if (key === 'removeListener') continue;
29624 this.removeAllListeners(key);
29625 }
29626 this.removeAllListeners('removeListener');
29627 this._events = {};
29628 return this;
29629 }
29630
29631 listeners = this._events[type];
29632
29633 if (isFunction(listeners)) {
29634 this.removeListener(type, listeners);
29635 } else if (listeners) {
29636 // LIFO order
29637 while (listeners.length)
29638 this.removeListener(type, listeners[listeners.length - 1]);
29639 }
29640 delete this._events[type];
29641
29642 return this;
29643 };
29644
29645 EventEmitter.prototype.listeners = function(type) {
29646 var ret;
29647 if (!this._events || !this._events[type])
29648 ret = [];
29649 else if (isFunction(this._events[type]))
29650 ret = [this._events[type]];
29651 else
29652 ret = this._events[type].slice();
29653 return ret;
29654 };
29655
29656 EventEmitter.prototype.listenerCount = function(type) {
29657 if (this._events) {
29658 var evlistener = this._events[type];
29659
29660 if (isFunction(evlistener))
29661 return 1;
29662 else if (evlistener)
29663 return evlistener.length;
29664 }
29665 return 0;
29666 };
29667
29668 EventEmitter.listenerCount = function(emitter, type) {
29669 return emitter.listenerCount(type);
29670 };
29671
29672 function isFunction(arg) {
29673 return typeof arg === 'function';
29674 }
29675
29676 function isNumber(arg) {
29677 return typeof arg === 'number';
29678 }
29679
29680 function isObject(arg) {
29681 return typeof arg === 'object' && arg !== null;
29682 }
29683
29684 function isUndefined(arg) {
29685 return arg === void 0;
29686 }
29687
29688 },{}],8:[function(require,module,exports){
29689 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29690 var e, m
29691 var eLen = nBytes * 8 - mLen - 1
29692 var eMax = (1 << eLen) - 1
29693 var eBias = eMax >> 1
29694 var nBits = -7
29695 var i = isLE ? (nBytes - 1) : 0
29696 var d = isLE ? -1 : 1
29697 var s = buffer[offset + i]
29698
29699 i += d
29700
29701 e = s & ((1 << (-nBits)) - 1)
29702 s >>= (-nBits)
29703 nBits += eLen
29704 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29705
29706 m = e & ((1 << (-nBits)) - 1)
29707 e >>= (-nBits)
29708 nBits += mLen
29709 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29710
29711 if (e === 0) {
29712 e = 1 - eBias
29713 } else if (e === eMax) {
29714 return m ? NaN : ((s ? -1 : 1) * Infinity)
29715 } else {
29716 m = m + Math.pow(2, mLen)
29717 e = e - eBias
29718 }
29719 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29720 }
29721
29722 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29723 var e, m, c
29724 var eLen = nBytes * 8 - mLen - 1
29725 var eMax = (1 << eLen) - 1
29726 var eBias = eMax >> 1
29727 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29728 var i = isLE ? 0 : (nBytes - 1)
29729 var d = isLE ? 1 : -1
29730 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29731
29732 value = Math.abs(value)
29733
29734 if (isNaN(value) || value === Infinity) {
29735 m = isNaN(value) ? 1 : 0
29736 e = eMax
29737 } else {
29738 e = Math.floor(Math.log(value) / Math.LN2)
29739 if (value * (c = Math.pow(2, -e)) < 1) {
29740 e--
29741 c *= 2
29742 }
29743 if (e + eBias >= 1) {
29744 value += rt / c
29745 } else {
29746 value += rt * Math.pow(2, 1 - eBias)
29747 }
29748 if (value * c >= 2) {
29749 e++
29750 c /= 2
29751 }
29752
29753 if (e + eBias >= eMax) {
29754 m = 0
29755 e = eMax
29756 } else if (e + eBias >= 1) {
29757 m = (value * c - 1) * Math.pow(2, mLen)
29758 e = e + eBias
29759 } else {
29760 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29761 e = 0
29762 }
29763 }
29764
29765 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29766
29767 e = (e << mLen) | m
29768 eLen += mLen
29769 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29770
29771 buffer[offset + i - d] |= s * 128
29772 }
29773
29774 },{}],9:[function(require,module,exports){
29775 if (typeof Object.create === 'function') {
29776 // implementation from standard node.js 'util' module
29777 module.exports = function inherits(ctor, superCtor) {
29778 ctor.super_ = superCtor
29779 ctor.prototype = Object.create(superCtor.prototype, {
29780 constructor: {
29781 value: ctor,
29782 enumerable: false,
29783 writable: true,
29784 configurable: true
29785 }
29786 });
29787 };
29788 } else {
29789 // old school shim for old browsers
29790 module.exports = function inherits(ctor, superCtor) {
29791 ctor.super_ = superCtor
29792 var TempCtor = function () {}
29793 TempCtor.prototype = superCtor.prototype
29794 ctor.prototype = new TempCtor()
29795 ctor.prototype.constructor = ctor
29796 }
29797 }
29798
29799 },{}],10:[function(require,module,exports){
29800 /*!
29801 * Determine if an object is a Buffer
29802 *
29803 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29804 * @license MIT
29805 */
29806
29807 // The _isBuffer check is for Safari 5-7 support, because it's missing
29808 // Object.prototype.constructor. Remove this eventually
29809 module.exports = function (obj) {
29810 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29811 }
29812
29813 function isBuffer (obj) {
29814 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29815 }
29816
29817 // For Node v0.10 support. Remove this eventually.
29818 function isSlowBuffer (obj) {
29819 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29820 }
29821
29822 },{}],11:[function(require,module,exports){
29823 var toString = {}.toString;
29824
29825 module.exports = Array.isArray || function (arr) {
29826 return toString.call(arr) == '[object Array]';
29827 };
29828
29829 },{}],12:[function(require,module,exports){
29830 (function (process){
29831 'use strict';
29832
29833 if (!process.version ||
29834 process.version.indexOf('v0.') === 0 ||
29835 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29836 module.exports = nextTick;
29837 } else {
29838 module.exports = process.nextTick;
29839 }
29840
29841 function nextTick(fn, arg1, arg2, arg3) {
29842 if (typeof fn !== 'function') {
29843 throw new TypeError('"callback" argument must be a function');
29844 }
29845 var len = arguments.length;
29846 var args, i;
29847 switch (len) {
29848 case 0:
29849 case 1:
29850 return process.nextTick(fn);
29851 case 2:
29852 return process.nextTick(function afterTickOne() {
29853 fn.call(null, arg1);
29854 });
29855 case 3:
29856 return process.nextTick(function afterTickTwo() {
29857 fn.call(null, arg1, arg2);
29858 });
29859 case 4:
29860 return process.nextTick(function afterTickThree() {
29861 fn.call(null, arg1, arg2, arg3);
29862 });
29863 default:
29864 args = new Array(len - 1);
29865 i = 0;
29866 while (i < args.length) {
29867 args[i++] = arguments[i];
29868 }
29869 return process.nextTick(function afterTick() {
29870 fn.apply(null, args);
29871 });
29872 }
29873 }
29874
29875 }).call(this,require('_process'))
29876 },{"_process":13}],13:[function(require,module,exports){
29877 // shim for using process in browser
29878 var process = module.exports = {};
29879
29880 // cached from whatever global is present so that test runners that stub it
29881 // don't break things. But we need to wrap it in a try catch in case it is
29882 // wrapped in strict mode code which doesn't define any globals. It's inside a
29883 // function because try/catches deoptimize in certain engines.
29884
29885 var cachedSetTimeout;
29886 var cachedClearTimeout;
29887
29888 function defaultSetTimout() {
29889 throw new Error('setTimeout has not been defined');
29890 }
29891 function defaultClearTimeout () {
29892 throw new Error('clearTimeout has not been defined');
29893 }
29894 (function () {
29895 try {
29896 if (typeof setTimeout === 'function') {
29897 cachedSetTimeout = setTimeout;
29898 } else {
29899 cachedSetTimeout = defaultSetTimout;
29900 }
29901 } catch (e) {
29902 cachedSetTimeout = defaultSetTimout;
29903 }
29904 try {
29905 if (typeof clearTimeout === 'function') {
29906 cachedClearTimeout = clearTimeout;
29907 } else {
29908 cachedClearTimeout = defaultClearTimeout;
29909 }
29910 } catch (e) {
29911 cachedClearTimeout = defaultClearTimeout;
29912 }
29913 } ())
29914 function runTimeout(fun) {
29915 if (cachedSetTimeout === setTimeout) {
29916 //normal enviroments in sane situations
29917 return setTimeout(fun, 0);
29918 }
29919 // if setTimeout wasn't available but was latter defined
29920 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29921 cachedSetTimeout = setTimeout;
29922 return setTimeout(fun, 0);
29923 }
29924 try {
29925 // when when somebody has screwed with setTimeout but no I.E. maddness
29926 return cachedSetTimeout(fun, 0);
29927 } catch(e){
29928 try {
29929 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29930 return cachedSetTimeout.call(null, fun, 0);
29931 } catch(e){
29932 // 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
29933 return cachedSetTimeout.call(this, fun, 0);
29934 }
29935 }
29936
29937
29938 }
29939 function runClearTimeout(marker) {
29940 if (cachedClearTimeout === clearTimeout) {
29941 //normal enviroments in sane situations
29942 return clearTimeout(marker);
29943 }
29944 // if clearTimeout wasn't available but was latter defined
29945 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29946 cachedClearTimeout = clearTimeout;
29947 return clearTimeout(marker);
29948 }
29949 try {
29950 // when when somebody has screwed with setTimeout but no I.E. maddness
29951 return cachedClearTimeout(marker);
29952 } catch (e){
29953 try {
29954 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29955 return cachedClearTimeout.call(null, marker);
29956 } catch (e){
29957 // 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.
29958 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29959 return cachedClearTimeout.call(this, marker);
29960 }
29961 }
29962
29963
29964
29965 }
29966 var queue = [];
29967 var draining = false;
29968 var currentQueue;
29969 var queueIndex = -1;
29970
29971 function cleanUpNextTick() {
29972 if (!draining || !currentQueue) {
29973 return;
29974 }
29975 draining = false;
29976 if (currentQueue.length) {
29977 queue = currentQueue.concat(queue);
29978 } else {
29979 queueIndex = -1;
29980 }
29981 if (queue.length) {
29982 drainQueue();
29983 }
29984 }
29985
29986 function drainQueue() {
29987 if (draining) {
29988 return;
29989 }
29990 var timeout = runTimeout(cleanUpNextTick);
29991 draining = true;
29992
29993 var len = queue.length;
29994 while(len) {
29995 currentQueue = queue;
29996 queue = [];
29997 while (++queueIndex < len) {
29998 if (currentQueue) {
29999 currentQueue[queueIndex].run();
30000 }
30001 }
30002 queueIndex = -1;
30003 len = queue.length;
30004 }
30005 currentQueue = null;
30006 draining = false;
30007 runClearTimeout(timeout);
30008 }
30009
30010 process.nextTick = function (fun) {
30011 var args = new Array(arguments.length - 1);
30012 if (arguments.length > 1) {
30013 for (var i = 1; i < arguments.length; i++) {
30014 args[i - 1] = arguments[i];
30015 }
30016 }
30017 queue.push(new Item(fun, args));
30018 if (queue.length === 1 && !draining) {
30019 runTimeout(drainQueue);
30020 }
30021 };
30022
30023 // v8 likes predictible objects
30024 function Item(fun, array) {
30025 this.fun = fun;
30026 this.array = array;
30027 }
30028 Item.prototype.run = function () {
30029 this.fun.apply(null, this.array);
30030 };
30031 process.title = 'browser';
30032 process.browser = true;
30033 process.env = {};
30034 process.argv = [];
30035 process.version = ''; // empty string to avoid regexp issues
30036 process.versions = {};
30037
30038 function noop() {}
30039
30040 process.on = noop;
30041 process.addListener = noop;
30042 process.once = noop;
30043 process.off = noop;
30044 process.removeListener = noop;
30045 process.removeAllListeners = noop;
30046 process.emit = noop;
30047 process.prependListener = noop;
30048 process.prependOnceListener = noop;
30049
30050 process.listeners = function (name) { return [] }
30051
30052 process.binding = function (name) {
30053 throw new Error('process.binding is not supported');
30054 };
30055
30056 process.cwd = function () { return '/' };
30057 process.chdir = function (dir) {
30058 throw new Error('process.chdir is not supported');
30059 };
30060 process.umask = function() { return 0; };
30061
30062 },{}],14:[function(require,module,exports){
30063 module.exports = require('./lib/_stream_duplex.js');
30064
30065 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30066 // a duplex stream is just a stream that is both readable and writable.
30067 // Since JS doesn't have multiple prototypal inheritance, this class
30068 // prototypally inherits from Readable, and then parasitically from
30069 // Writable.
30070
30071 'use strict';
30072
30073 /*<replacement>*/
30074
30075 var objectKeys = Object.keys || function (obj) {
30076 var keys = [];
30077 for (var key in obj) {
30078 keys.push(key);
30079 }return keys;
30080 };
30081 /*</replacement>*/
30082
30083 module.exports = Duplex;
30084
30085 /*<replacement>*/
30086 var processNextTick = require('process-nextick-args');
30087 /*</replacement>*/
30088
30089 /*<replacement>*/
30090 var util = require('core-util-is');
30091 util.inherits = require('inherits');
30092 /*</replacement>*/
30093
30094 var Readable = require('./_stream_readable');
30095 var Writable = require('./_stream_writable');
30096
30097 util.inherits(Duplex, Readable);
30098
30099 var keys = objectKeys(Writable.prototype);
30100 for (var v = 0; v < keys.length; v++) {
30101 var method = keys[v];
30102 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30103 }
30104
30105 function Duplex(options) {
30106 if (!(this instanceof Duplex)) return new Duplex(options);
30107
30108 Readable.call(this, options);
30109 Writable.call(this, options);
30110
30111 if (options && options.readable === false) this.readable = false;
30112
30113 if (options && options.writable === false) this.writable = false;
30114
30115 this.allowHalfOpen = true;
30116 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30117
30118 this.once('end', onend);
30119 }
30120
30121 // the no-half-open enforcer
30122 function onend() {
30123 // if we allow half-open state, or if the writable side ended,
30124 // then we're ok.
30125 if (this.allowHalfOpen || this._writableState.ended) return;
30126
30127 // no more data can be written.
30128 // But allow more writes to happen in this tick.
30129 processNextTick(onEndNT, this);
30130 }
30131
30132 function onEndNT(self) {
30133 self.end();
30134 }
30135
30136 function forEach(xs, f) {
30137 for (var i = 0, l = xs.length; i < l; i++) {
30138 f(xs[i], i);
30139 }
30140 }
30141 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30142 // a passthrough stream.
30143 // basically just the most minimal sort of Transform stream.
30144 // Every written chunk gets output as-is.
30145
30146 'use strict';
30147
30148 module.exports = PassThrough;
30149
30150 var Transform = require('./_stream_transform');
30151
30152 /*<replacement>*/
30153 var util = require('core-util-is');
30154 util.inherits = require('inherits');
30155 /*</replacement>*/
30156
30157 util.inherits(PassThrough, Transform);
30158
30159 function PassThrough(options) {
30160 if (!(this instanceof PassThrough)) return new PassThrough(options);
30161
30162 Transform.call(this, options);
30163 }
30164
30165 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30166 cb(null, chunk);
30167 };
30168 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30169 (function (process){
30170 'use strict';
30171
30172 module.exports = Readable;
30173
30174 /*<replacement>*/
30175 var processNextTick = require('process-nextick-args');
30176 /*</replacement>*/
30177
30178 /*<replacement>*/
30179 var isArray = require('isarray');
30180 /*</replacement>*/
30181
30182 /*<replacement>*/
30183 var Duplex;
30184 /*</replacement>*/
30185
30186 Readable.ReadableState = ReadableState;
30187
30188 /*<replacement>*/
30189 var EE = require('events').EventEmitter;
30190
30191 var EElistenerCount = function (emitter, type) {
30192 return emitter.listeners(type).length;
30193 };
30194 /*</replacement>*/
30195
30196 /*<replacement>*/
30197 var Stream = require('./internal/streams/stream');
30198 /*</replacement>*/
30199
30200 var Buffer = require('buffer').Buffer;
30201 /*<replacement>*/
30202 var bufferShim = require('buffer-shims');
30203 /*</replacement>*/
30204
30205 /*<replacement>*/
30206 var util = require('core-util-is');
30207 util.inherits = require('inherits');
30208 /*</replacement>*/
30209
30210 /*<replacement>*/
30211 var debugUtil = require('util');
30212 var debug = void 0;
30213 if (debugUtil && debugUtil.debuglog) {
30214 debug = debugUtil.debuglog('stream');
30215 } else {
30216 debug = function () {};
30217 }
30218 /*</replacement>*/
30219
30220 var BufferList = require('./internal/streams/BufferList');
30221 var StringDecoder;
30222
30223 util.inherits(Readable, Stream);
30224
30225 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30226
30227 function prependListener(emitter, event, fn) {
30228 // Sadly this is not cacheable as some libraries bundle their own
30229 // event emitter implementation with them.
30230 if (typeof emitter.prependListener === 'function') {
30231 return emitter.prependListener(event, fn);
30232 } else {
30233 // This is a hack to make sure that our error handler is attached before any
30234 // userland ones. NEVER DO THIS. This is here only because this code needs
30235 // to continue to work with older versions of Node.js that do not include
30236 // the prependListener() method. The goal is to eventually remove this hack.
30237 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]];
30238 }
30239 }
30240
30241 function ReadableState(options, stream) {
30242 Duplex = Duplex || require('./_stream_duplex');
30243
30244 options = options || {};
30245
30246 // object stream flag. Used to make read(n) ignore n and to
30247 // make all the buffer merging and length checks go away
30248 this.objectMode = !!options.objectMode;
30249
30250 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30251
30252 // the point at which it stops calling _read() to fill the buffer
30253 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30254 var hwm = options.highWaterMark;
30255 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30256 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30257
30258 // cast to ints.
30259 this.highWaterMark = ~~this.highWaterMark;
30260
30261 // A linked list is used to store data chunks instead of an array because the
30262 // linked list can remove elements from the beginning faster than
30263 // array.shift()
30264 this.buffer = new BufferList();
30265 this.length = 0;
30266 this.pipes = null;
30267 this.pipesCount = 0;
30268 this.flowing = null;
30269 this.ended = false;
30270 this.endEmitted = false;
30271 this.reading = false;
30272
30273 // a flag to be able to tell if the onwrite cb is called immediately,
30274 // or on a later tick. We set this to true at first, because any
30275 // actions that shouldn't happen until "later" should generally also
30276 // not happen before the first write call.
30277 this.sync = true;
30278
30279 // whenever we return null, then we set a flag to say
30280 // that we're awaiting a 'readable' event emission.
30281 this.needReadable = false;
30282 this.emittedReadable = false;
30283 this.readableListening = false;
30284 this.resumeScheduled = false;
30285
30286 // Crypto is kind of old and crusty. Historically, its default string
30287 // encoding is 'binary' so we have to make this configurable.
30288 // Everything else in the universe uses 'utf8', though.
30289 this.defaultEncoding = options.defaultEncoding || 'utf8';
30290
30291 // when piping, we only care about 'readable' events that happen
30292 // after read()ing all the bytes and not getting any pushback.
30293 this.ranOut = false;
30294
30295 // the number of writers that are awaiting a drain event in .pipe()s
30296 this.awaitDrain = 0;
30297
30298 // if true, a maybeReadMore has been scheduled
30299 this.readingMore = false;
30300
30301 this.decoder = null;
30302 this.encoding = null;
30303 if (options.encoding) {
30304 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30305 this.decoder = new StringDecoder(options.encoding);
30306 this.encoding = options.encoding;
30307 }
30308 }
30309
30310 function Readable(options) {
30311 Duplex = Duplex || require('./_stream_duplex');
30312
30313 if (!(this instanceof Readable)) return new Readable(options);
30314
30315 this._readableState = new ReadableState(options, this);
30316
30317 // legacy
30318 this.readable = true;
30319
30320 if (options && typeof options.read === 'function') this._read = options.read;
30321
30322 Stream.call(this);
30323 }
30324
30325 // Manually shove something into the read() buffer.
30326 // This returns true if the highWaterMark has not been hit yet,
30327 // similar to how Writable.write() returns true if you should
30328 // write() some more.
30329 Readable.prototype.push = function (chunk, encoding) {
30330 var state = this._readableState;
30331
30332 if (!state.objectMode && typeof chunk === 'string') {
30333 encoding = encoding || state.defaultEncoding;
30334 if (encoding !== state.encoding) {
30335 chunk = bufferShim.from(chunk, encoding);
30336 encoding = '';
30337 }
30338 }
30339
30340 return readableAddChunk(this, state, chunk, encoding, false);
30341 };
30342
30343 // Unshift should *always* be something directly out of read()
30344 Readable.prototype.unshift = function (chunk) {
30345 var state = this._readableState;
30346 return readableAddChunk(this, state, chunk, '', true);
30347 };
30348
30349 Readable.prototype.isPaused = function () {
30350 return this._readableState.flowing === false;
30351 };
30352
30353 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30354 var er = chunkInvalid(state, chunk);
30355 if (er) {
30356 stream.emit('error', er);
30357 } else if (chunk === null) {
30358 state.reading = false;
30359 onEofChunk(stream, state);
30360 } else if (state.objectMode || chunk && chunk.length > 0) {
30361 if (state.ended && !addToFront) {
30362 var e = new Error('stream.push() after EOF');
30363 stream.emit('error', e);
30364 } else if (state.endEmitted && addToFront) {
30365 var _e = new Error('stream.unshift() after end event');
30366 stream.emit('error', _e);
30367 } else {
30368 var skipAdd;
30369 if (state.decoder && !addToFront && !encoding) {
30370 chunk = state.decoder.write(chunk);
30371 skipAdd = !state.objectMode && chunk.length === 0;
30372 }
30373
30374 if (!addToFront) state.reading = false;
30375
30376 // Don't add to the buffer if we've decoded to an empty string chunk and
30377 // we're not in object mode
30378 if (!skipAdd) {
30379 // if we want the data now, just emit it.
30380 if (state.flowing && state.length === 0 && !state.sync) {
30381 stream.emit('data', chunk);
30382 stream.read(0);
30383 } else {
30384 // update the buffer info.
30385 state.length += state.objectMode ? 1 : chunk.length;
30386 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30387
30388 if (state.needReadable) emitReadable(stream);
30389 }
30390 }
30391
30392 maybeReadMore(stream, state);
30393 }
30394 } else if (!addToFront) {
30395 state.reading = false;
30396 }
30397
30398 return needMoreData(state);
30399 }
30400
30401 // if it's past the high water mark, we can push in some more.
30402 // Also, if we have no data yet, we can stand some
30403 // more bytes. This is to work around cases where hwm=0,
30404 // such as the repl. Also, if the push() triggered a
30405 // readable event, and the user called read(largeNumber) such that
30406 // needReadable was set, then we ought to push more, so that another
30407 // 'readable' event will be triggered.
30408 function needMoreData(state) {
30409 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30410 }
30411
30412 // backwards compatibility.
30413 Readable.prototype.setEncoding = function (enc) {
30414 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30415 this._readableState.decoder = new StringDecoder(enc);
30416 this._readableState.encoding = enc;
30417 return this;
30418 };
30419
30420 // Don't raise the hwm > 8MB
30421 var MAX_HWM = 0x800000;
30422 function computeNewHighWaterMark(n) {
30423 if (n >= MAX_HWM) {
30424 n = MAX_HWM;
30425 } else {
30426 // Get the next highest power of 2 to prevent increasing hwm excessively in
30427 // tiny amounts
30428 n--;
30429 n |= n >>> 1;
30430 n |= n >>> 2;
30431 n |= n >>> 4;
30432 n |= n >>> 8;
30433 n |= n >>> 16;
30434 n++;
30435 }
30436 return n;
30437 }
30438
30439 // This function is designed to be inlinable, so please take care when making
30440 // changes to the function body.
30441 function howMuchToRead(n, state) {
30442 if (n <= 0 || state.length === 0 && state.ended) return 0;
30443 if (state.objectMode) return 1;
30444 if (n !== n) {
30445 // Only flow one buffer at a time
30446 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30447 }
30448 // If we're asking for more than the current hwm, then raise the hwm.
30449 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30450 if (n <= state.length) return n;
30451 // Don't have enough
30452 if (!state.ended) {
30453 state.needReadable = true;
30454 return 0;
30455 }
30456 return state.length;
30457 }
30458
30459 // you can override either this method, or the async _read(n) below.
30460 Readable.prototype.read = function (n) {
30461 debug('read', n);
30462 n = parseInt(n, 10);
30463 var state = this._readableState;
30464 var nOrig = n;
30465
30466 if (n !== 0) state.emittedReadable = false;
30467
30468 // if we're doing read(0) to trigger a readable event, but we
30469 // already have a bunch of data in the buffer, then just trigger
30470 // the 'readable' event and move on.
30471 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30472 debug('read: emitReadable', state.length, state.ended);
30473 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30474 return null;
30475 }
30476
30477 n = howMuchToRead(n, state);
30478
30479 // if we've ended, and we're now clear, then finish it up.
30480 if (n === 0 && state.ended) {
30481 if (state.length === 0) endReadable(this);
30482 return null;
30483 }
30484
30485 // All the actual chunk generation logic needs to be
30486 // *below* the call to _read. The reason is that in certain
30487 // synthetic stream cases, such as passthrough streams, _read
30488 // may be a completely synchronous operation which may change
30489 // the state of the read buffer, providing enough data when
30490 // before there was *not* enough.
30491 //
30492 // So, the steps are:
30493 // 1. Figure out what the state of things will be after we do
30494 // a read from the buffer.
30495 //
30496 // 2. If that resulting state will trigger a _read, then call _read.
30497 // Note that this may be asynchronous, or synchronous. Yes, it is
30498 // deeply ugly to write APIs this way, but that still doesn't mean
30499 // that the Readable class should behave improperly, as streams are
30500 // designed to be sync/async agnostic.
30501 // Take note if the _read call is sync or async (ie, if the read call
30502 // has returned yet), so that we know whether or not it's safe to emit
30503 // 'readable' etc.
30504 //
30505 // 3. Actually pull the requested chunks out of the buffer and return.
30506
30507 // if we need a readable event, then we need to do some reading.
30508 var doRead = state.needReadable;
30509 debug('need readable', doRead);
30510
30511 // if we currently have less than the highWaterMark, then also read some
30512 if (state.length === 0 || state.length - n < state.highWaterMark) {
30513 doRead = true;
30514 debug('length less than watermark', doRead);
30515 }
30516
30517 // however, if we've ended, then there's no point, and if we're already
30518 // reading, then it's unnecessary.
30519 if (state.ended || state.reading) {
30520 doRead = false;
30521 debug('reading or ended', doRead);
30522 } else if (doRead) {
30523 debug('do read');
30524 state.reading = true;
30525 state.sync = true;
30526 // if the length is currently zero, then we *need* a readable event.
30527 if (state.length === 0) state.needReadable = true;
30528 // call internal read method
30529 this._read(state.highWaterMark);
30530 state.sync = false;
30531 // If _read pushed data synchronously, then `reading` will be false,
30532 // and we need to re-evaluate how much data we can return to the user.
30533 if (!state.reading) n = howMuchToRead(nOrig, state);
30534 }
30535
30536 var ret;
30537 if (n > 0) ret = fromList(n, state);else ret = null;
30538
30539 if (ret === null) {
30540 state.needReadable = true;
30541 n = 0;
30542 } else {
30543 state.length -= n;
30544 }
30545
30546 if (state.length === 0) {
30547 // If we have nothing in the buffer, then we want to know
30548 // as soon as we *do* get something into the buffer.
30549 if (!state.ended) state.needReadable = true;
30550
30551 // If we tried to read() past the EOF, then emit end on the next tick.
30552 if (nOrig !== n && state.ended) endReadable(this);
30553 }
30554
30555 if (ret !== null) this.emit('data', ret);
30556
30557 return ret;
30558 };
30559
30560 function chunkInvalid(state, chunk) {
30561 var er = null;
30562 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30563 er = new TypeError('Invalid non-string/buffer chunk');
30564 }
30565 return er;
30566 }
30567
30568 function onEofChunk(stream, state) {
30569 if (state.ended) return;
30570 if (state.decoder) {
30571 var chunk = state.decoder.end();
30572 if (chunk && chunk.length) {
30573 state.buffer.push(chunk);
30574 state.length += state.objectMode ? 1 : chunk.length;
30575 }
30576 }
30577 state.ended = true;
30578
30579 // emit 'readable' now to make sure it gets picked up.
30580 emitReadable(stream);
30581 }
30582
30583 // Don't emit readable right away in sync mode, because this can trigger
30584 // another read() call => stack overflow. This way, it might trigger
30585 // a nextTick recursion warning, but that's not so bad.
30586 function emitReadable(stream) {
30587 var state = stream._readableState;
30588 state.needReadable = false;
30589 if (!state.emittedReadable) {
30590 debug('emitReadable', state.flowing);
30591 state.emittedReadable = true;
30592 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30593 }
30594 }
30595
30596 function emitReadable_(stream) {
30597 debug('emit readable');
30598 stream.emit('readable');
30599 flow(stream);
30600 }
30601
30602 // at this point, the user has presumably seen the 'readable' event,
30603 // and called read() to consume some data. that may have triggered
30604 // in turn another _read(n) call, in which case reading = true if
30605 // it's in progress.
30606 // However, if we're not ended, or reading, and the length < hwm,
30607 // then go ahead and try to read some more preemptively.
30608 function maybeReadMore(stream, state) {
30609 if (!state.readingMore) {
30610 state.readingMore = true;
30611 processNextTick(maybeReadMore_, stream, state);
30612 }
30613 }
30614
30615 function maybeReadMore_(stream, state) {
30616 var len = state.length;
30617 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30618 debug('maybeReadMore read 0');
30619 stream.read(0);
30620 if (len === state.length)
30621 // didn't get any data, stop spinning.
30622 break;else len = state.length;
30623 }
30624 state.readingMore = false;
30625 }
30626
30627 // abstract method. to be overridden in specific implementation classes.
30628 // call cb(er, data) where data is <= n in length.
30629 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30630 // arbitrary, and perhaps not very meaningful.
30631 Readable.prototype._read = function (n) {
30632 this.emit('error', new Error('_read() is not implemented'));
30633 };
30634
30635 Readable.prototype.pipe = function (dest, pipeOpts) {
30636 var src = this;
30637 var state = this._readableState;
30638
30639 switch (state.pipesCount) {
30640 case 0:
30641 state.pipes = dest;
30642 break;
30643 case 1:
30644 state.pipes = [state.pipes, dest];
30645 break;
30646 default:
30647 state.pipes.push(dest);
30648 break;
30649 }
30650 state.pipesCount += 1;
30651 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30652
30653 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30654
30655 var endFn = doEnd ? onend : cleanup;
30656 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30657
30658 dest.on('unpipe', onunpipe);
30659 function onunpipe(readable) {
30660 debug('onunpipe');
30661 if (readable === src) {
30662 cleanup();
30663 }
30664 }
30665
30666 function onend() {
30667 debug('onend');
30668 dest.end();
30669 }
30670
30671 // when the dest drains, it reduces the awaitDrain counter
30672 // on the source. This would be more elegant with a .once()
30673 // handler in flow(), but adding and removing repeatedly is
30674 // too slow.
30675 var ondrain = pipeOnDrain(src);
30676 dest.on('drain', ondrain);
30677
30678 var cleanedUp = false;
30679 function cleanup() {
30680 debug('cleanup');
30681 // cleanup event handlers once the pipe is broken
30682 dest.removeListener('close', onclose);
30683 dest.removeListener('finish', onfinish);
30684 dest.removeListener('drain', ondrain);
30685 dest.removeListener('error', onerror);
30686 dest.removeListener('unpipe', onunpipe);
30687 src.removeListener('end', onend);
30688 src.removeListener('end', cleanup);
30689 src.removeListener('data', ondata);
30690
30691 cleanedUp = true;
30692
30693 // if the reader is waiting for a drain event from this
30694 // specific writer, then it would cause it to never start
30695 // flowing again.
30696 // So, if this is awaiting a drain, then we just call it now.
30697 // If we don't know, then assume that we are waiting for one.
30698 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30699 }
30700
30701 // If the user pushes more data while we're writing to dest then we'll end up
30702 // in ondata again. However, we only want to increase awaitDrain once because
30703 // dest will only emit one 'drain' event for the multiple writes.
30704 // => Introduce a guard on increasing awaitDrain.
30705 var increasedAwaitDrain = false;
30706 src.on('data', ondata);
30707 function ondata(chunk) {
30708 debug('ondata');
30709 increasedAwaitDrain = false;
30710 var ret = dest.write(chunk);
30711 if (false === ret && !increasedAwaitDrain) {
30712 // If the user unpiped during `dest.write()`, it is possible
30713 // to get stuck in a permanently paused state if that write
30714 // also returned false.
30715 // => Check whether `dest` is still a piping destination.
30716 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30717 debug('false write response, pause', src._readableState.awaitDrain);
30718 src._readableState.awaitDrain++;
30719 increasedAwaitDrain = true;
30720 }
30721 src.pause();
30722 }
30723 }
30724
30725 // if the dest has an error, then stop piping into it.
30726 // however, don't suppress the throwing behavior for this.
30727 function onerror(er) {
30728 debug('onerror', er);
30729 unpipe();
30730 dest.removeListener('error', onerror);
30731 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30732 }
30733
30734 // Make sure our error handler is attached before userland ones.
30735 prependListener(dest, 'error', onerror);
30736
30737 // Both close and finish should trigger unpipe, but only once.
30738 function onclose() {
30739 dest.removeListener('finish', onfinish);
30740 unpipe();
30741 }
30742 dest.once('close', onclose);
30743 function onfinish() {
30744 debug('onfinish');
30745 dest.removeListener('close', onclose);
30746 unpipe();
30747 }
30748 dest.once('finish', onfinish);
30749
30750 function unpipe() {
30751 debug('unpipe');
30752 src.unpipe(dest);
30753 }
30754
30755 // tell the dest that it's being piped to
30756 dest.emit('pipe', src);
30757
30758 // start the flow if it hasn't been started already.
30759 if (!state.flowing) {
30760 debug('pipe resume');
30761 src.resume();
30762 }
30763
30764 return dest;
30765 };
30766
30767 function pipeOnDrain(src) {
30768 return function () {
30769 var state = src._readableState;
30770 debug('pipeOnDrain', state.awaitDrain);
30771 if (state.awaitDrain) state.awaitDrain--;
30772 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30773 state.flowing = true;
30774 flow(src);
30775 }
30776 };
30777 }
30778
30779 Readable.prototype.unpipe = function (dest) {
30780 var state = this._readableState;
30781
30782 // if we're not piping anywhere, then do nothing.
30783 if (state.pipesCount === 0) return this;
30784
30785 // just one destination. most common case.
30786 if (state.pipesCount === 1) {
30787 // passed in one, but it's not the right one.
30788 if (dest && dest !== state.pipes) return this;
30789
30790 if (!dest) dest = state.pipes;
30791
30792 // got a match.
30793 state.pipes = null;
30794 state.pipesCount = 0;
30795 state.flowing = false;
30796 if (dest) dest.emit('unpipe', this);
30797 return this;
30798 }
30799
30800 // slow case. multiple pipe destinations.
30801
30802 if (!dest) {
30803 // remove all.
30804 var dests = state.pipes;
30805 var len = state.pipesCount;
30806 state.pipes = null;
30807 state.pipesCount = 0;
30808 state.flowing = false;
30809
30810 for (var i = 0; i < len; i++) {
30811 dests[i].emit('unpipe', this);
30812 }return this;
30813 }
30814
30815 // try to find the right one.
30816 var index = indexOf(state.pipes, dest);
30817 if (index === -1) return this;
30818
30819 state.pipes.splice(index, 1);
30820 state.pipesCount -= 1;
30821 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30822
30823 dest.emit('unpipe', this);
30824
30825 return this;
30826 };
30827
30828 // set up data events if they are asked for
30829 // Ensure readable listeners eventually get something
30830 Readable.prototype.on = function (ev, fn) {
30831 var res = Stream.prototype.on.call(this, ev, fn);
30832
30833 if (ev === 'data') {
30834 // Start flowing on next tick if stream isn't explicitly paused
30835 if (this._readableState.flowing !== false) this.resume();
30836 } else if (ev === 'readable') {
30837 var state = this._readableState;
30838 if (!state.endEmitted && !state.readableListening) {
30839 state.readableListening = state.needReadable = true;
30840 state.emittedReadable = false;
30841 if (!state.reading) {
30842 processNextTick(nReadingNextTick, this);
30843 } else if (state.length) {
30844 emitReadable(this, state);
30845 }
30846 }
30847 }
30848
30849 return res;
30850 };
30851 Readable.prototype.addListener = Readable.prototype.on;
30852
30853 function nReadingNextTick(self) {
30854 debug('readable nexttick read 0');
30855 self.read(0);
30856 }
30857
30858 // pause() and resume() are remnants of the legacy readable stream API
30859 // If the user uses them, then switch into old mode.
30860 Readable.prototype.resume = function () {
30861 var state = this._readableState;
30862 if (!state.flowing) {
30863 debug('resume');
30864 state.flowing = true;
30865 resume(this, state);
30866 }
30867 return this;
30868 };
30869
30870 function resume(stream, state) {
30871 if (!state.resumeScheduled) {
30872 state.resumeScheduled = true;
30873 processNextTick(resume_, stream, state);
30874 }
30875 }
30876
30877 function resume_(stream, state) {
30878 if (!state.reading) {
30879 debug('resume read 0');
30880 stream.read(0);
30881 }
30882
30883 state.resumeScheduled = false;
30884 state.awaitDrain = 0;
30885 stream.emit('resume');
30886 flow(stream);
30887 if (state.flowing && !state.reading) stream.read(0);
30888 }
30889
30890 Readable.prototype.pause = function () {
30891 debug('call pause flowing=%j', this._readableState.flowing);
30892 if (false !== this._readableState.flowing) {
30893 debug('pause');
30894 this._readableState.flowing = false;
30895 this.emit('pause');
30896 }
30897 return this;
30898 };
30899
30900 function flow(stream) {
30901 var state = stream._readableState;
30902 debug('flow', state.flowing);
30903 while (state.flowing && stream.read() !== null) {}
30904 }
30905
30906 // wrap an old-style stream as the async data source.
30907 // This is *not* part of the readable stream interface.
30908 // It is an ugly unfortunate mess of history.
30909 Readable.prototype.wrap = function (stream) {
30910 var state = this._readableState;
30911 var paused = false;
30912
30913 var self = this;
30914 stream.on('end', function () {
30915 debug('wrapped end');
30916 if (state.decoder && !state.ended) {
30917 var chunk = state.decoder.end();
30918 if (chunk && chunk.length) self.push(chunk);
30919 }
30920
30921 self.push(null);
30922 });
30923
30924 stream.on('data', function (chunk) {
30925 debug('wrapped data');
30926 if (state.decoder) chunk = state.decoder.write(chunk);
30927
30928 // don't skip over falsy values in objectMode
30929 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30930
30931 var ret = self.push(chunk);
30932 if (!ret) {
30933 paused = true;
30934 stream.pause();
30935 }
30936 });
30937
30938 // proxy all the other methods.
30939 // important when wrapping filters and duplexes.
30940 for (var i in stream) {
30941 if (this[i] === undefined && typeof stream[i] === 'function') {
30942 this[i] = function (method) {
30943 return function () {
30944 return stream[method].apply(stream, arguments);
30945 };
30946 }(i);
30947 }
30948 }
30949
30950 // proxy certain important events.
30951 for (var n = 0; n < kProxyEvents.length; n++) {
30952 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30953 }
30954
30955 // when we try to consume some more bytes, simply unpause the
30956 // underlying stream.
30957 self._read = function (n) {
30958 debug('wrapped _read', n);
30959 if (paused) {
30960 paused = false;
30961 stream.resume();
30962 }
30963 };
30964
30965 return self;
30966 };
30967
30968 // exposed for testing purposes only.
30969 Readable._fromList = fromList;
30970
30971 // Pluck off n bytes from an array of buffers.
30972 // Length is the combined lengths of all the buffers in the list.
30973 // This function is designed to be inlinable, so please take care when making
30974 // changes to the function body.
30975 function fromList(n, state) {
30976 // nothing buffered
30977 if (state.length === 0) return null;
30978
30979 var ret;
30980 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30981 // read it all, truncate the list
30982 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);
30983 state.buffer.clear();
30984 } else {
30985 // read part of list
30986 ret = fromListPartial(n, state.buffer, state.decoder);
30987 }
30988
30989 return ret;
30990 }
30991
30992 // Extracts only enough buffered data to satisfy the amount requested.
30993 // This function is designed to be inlinable, so please take care when making
30994 // changes to the function body.
30995 function fromListPartial(n, list, hasStrings) {
30996 var ret;
30997 if (n < list.head.data.length) {
30998 // slice is the same for buffers and strings
30999 ret = list.head.data.slice(0, n);
31000 list.head.data = list.head.data.slice(n);
31001 } else if (n === list.head.data.length) {
31002 // first chunk is a perfect match
31003 ret = list.shift();
31004 } else {
31005 // result spans more than one buffer
31006 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
31007 }
31008 return ret;
31009 }
31010
31011 // Copies a specified amount of characters from the list of buffered data
31012 // chunks.
31013 // This function is designed to be inlinable, so please take care when making
31014 // changes to the function body.
31015 function copyFromBufferString(n, list) {
31016 var p = list.head;
31017 var c = 1;
31018 var ret = p.data;
31019 n -= ret.length;
31020 while (p = p.next) {
31021 var str = p.data;
31022 var nb = n > str.length ? str.length : n;
31023 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31024 n -= nb;
31025 if (n === 0) {
31026 if (nb === str.length) {
31027 ++c;
31028 if (p.next) list.head = p.next;else list.head = list.tail = null;
31029 } else {
31030 list.head = p;
31031 p.data = str.slice(nb);
31032 }
31033 break;
31034 }
31035 ++c;
31036 }
31037 list.length -= c;
31038 return ret;
31039 }
31040
31041 // Copies a specified amount of bytes from the list of buffered data chunks.
31042 // This function is designed to be inlinable, so please take care when making
31043 // changes to the function body.
31044 function copyFromBuffer(n, list) {
31045 var ret = bufferShim.allocUnsafe(n);
31046 var p = list.head;
31047 var c = 1;
31048 p.data.copy(ret);
31049 n -= p.data.length;
31050 while (p = p.next) {
31051 var buf = p.data;
31052 var nb = n > buf.length ? buf.length : n;
31053 buf.copy(ret, ret.length - n, 0, nb);
31054 n -= nb;
31055 if (n === 0) {
31056 if (nb === buf.length) {
31057 ++c;
31058 if (p.next) list.head = p.next;else list.head = list.tail = null;
31059 } else {
31060 list.head = p;
31061 p.data = buf.slice(nb);
31062 }
31063 break;
31064 }
31065 ++c;
31066 }
31067 list.length -= c;
31068 return ret;
31069 }
31070
31071 function endReadable(stream) {
31072 var state = stream._readableState;
31073
31074 // If we get here before consuming all the bytes, then that is a
31075 // bug in node. Should never happen.
31076 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31077
31078 if (!state.endEmitted) {
31079 state.ended = true;
31080 processNextTick(endReadableNT, state, stream);
31081 }
31082 }
31083
31084 function endReadableNT(state, stream) {
31085 // Check that we didn't get one last unshift.
31086 if (!state.endEmitted && state.length === 0) {
31087 state.endEmitted = true;
31088 stream.readable = false;
31089 stream.emit('end');
31090 }
31091 }
31092
31093 function forEach(xs, f) {
31094 for (var i = 0, l = xs.length; i < l; i++) {
31095 f(xs[i], i);
31096 }
31097 }
31098
31099 function indexOf(xs, x) {
31100 for (var i = 0, l = xs.length; i < l; i++) {
31101 if (xs[i] === x) return i;
31102 }
31103 return -1;
31104 }
31105 }).call(this,require('_process'))
31106 },{"./_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){
31107 // a transform stream is a readable/writable stream where you do
31108 // something with the data. Sometimes it's called a "filter",
31109 // but that's not a great name for it, since that implies a thing where
31110 // some bits pass through, and others are simply ignored. (That would
31111 // be a valid example of a transform, of course.)
31112 //
31113 // While the output is causally related to the input, it's not a
31114 // necessarily symmetric or synchronous transformation. For example,
31115 // a zlib stream might take multiple plain-text writes(), and then
31116 // emit a single compressed chunk some time in the future.
31117 //
31118 // Here's how this works:
31119 //
31120 // The Transform stream has all the aspects of the readable and writable
31121 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31122 // internally, and returns false if there's a lot of pending writes
31123 // buffered up. When you call read(), that calls _read(n) until
31124 // there's enough pending readable data buffered up.
31125 //
31126 // In a transform stream, the written data is placed in a buffer. When
31127 // _read(n) is called, it transforms the queued up data, calling the
31128 // buffered _write cb's as it consumes chunks. If consuming a single
31129 // written chunk would result in multiple output chunks, then the first
31130 // outputted bit calls the readcb, and subsequent chunks just go into
31131 // the read buffer, and will cause it to emit 'readable' if necessary.
31132 //
31133 // This way, back-pressure is actually determined by the reading side,
31134 // since _read has to be called to start processing a new chunk. However,
31135 // a pathological inflate type of transform can cause excessive buffering
31136 // here. For example, imagine a stream where every byte of input is
31137 // interpreted as an integer from 0-255, and then results in that many
31138 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31139 // 1kb of data being output. In this case, you could write a very small
31140 // amount of input, and end up with a very large amount of output. In
31141 // such a pathological inflating mechanism, there'd be no way to tell
31142 // the system to stop doing the transform. A single 4MB write could
31143 // cause the system to run out of memory.
31144 //
31145 // However, even in such a pathological case, only a single written chunk
31146 // would be consumed, and then the rest would wait (un-transformed) until
31147 // the results of the previous transformed chunk were consumed.
31148
31149 'use strict';
31150
31151 module.exports = Transform;
31152
31153 var Duplex = require('./_stream_duplex');
31154
31155 /*<replacement>*/
31156 var util = require('core-util-is');
31157 util.inherits = require('inherits');
31158 /*</replacement>*/
31159
31160 util.inherits(Transform, Duplex);
31161
31162 function TransformState(stream) {
31163 this.afterTransform = function (er, data) {
31164 return afterTransform(stream, er, data);
31165 };
31166
31167 this.needTransform = false;
31168 this.transforming = false;
31169 this.writecb = null;
31170 this.writechunk = null;
31171 this.writeencoding = null;
31172 }
31173
31174 function afterTransform(stream, er, data) {
31175 var ts = stream._transformState;
31176 ts.transforming = false;
31177
31178 var cb = ts.writecb;
31179
31180 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31181
31182 ts.writechunk = null;
31183 ts.writecb = null;
31184
31185 if (data !== null && data !== undefined) stream.push(data);
31186
31187 cb(er);
31188
31189 var rs = stream._readableState;
31190 rs.reading = false;
31191 if (rs.needReadable || rs.length < rs.highWaterMark) {
31192 stream._read(rs.highWaterMark);
31193 }
31194 }
31195
31196 function Transform(options) {
31197 if (!(this instanceof Transform)) return new Transform(options);
31198
31199 Duplex.call(this, options);
31200
31201 this._transformState = new TransformState(this);
31202
31203 var stream = this;
31204
31205 // start out asking for a readable event once data is transformed.
31206 this._readableState.needReadable = true;
31207
31208 // we have implemented the _read method, and done the other things
31209 // that Readable wants before the first _read call, so unset the
31210 // sync guard flag.
31211 this._readableState.sync = false;
31212
31213 if (options) {
31214 if (typeof options.transform === 'function') this._transform = options.transform;
31215
31216 if (typeof options.flush === 'function') this._flush = options.flush;
31217 }
31218
31219 // When the writable side finishes, then flush out anything remaining.
31220 this.once('prefinish', function () {
31221 if (typeof this._flush === 'function') this._flush(function (er, data) {
31222 done(stream, er, data);
31223 });else done(stream);
31224 });
31225 }
31226
31227 Transform.prototype.push = function (chunk, encoding) {
31228 this._transformState.needTransform = false;
31229 return Duplex.prototype.push.call(this, chunk, encoding);
31230 };
31231
31232 // This is the part where you do stuff!
31233 // override this function in implementation classes.
31234 // 'chunk' is an input chunk.
31235 //
31236 // Call `push(newChunk)` to pass along transformed output
31237 // to the readable side. You may call 'push' zero or more times.
31238 //
31239 // Call `cb(err)` when you are done with this chunk. If you pass
31240 // an error, then that'll put the hurt on the whole operation. If you
31241 // never call cb(), then you'll never get another chunk.
31242 Transform.prototype._transform = function (chunk, encoding, cb) {
31243 throw new Error('_transform() is not implemented');
31244 };
31245
31246 Transform.prototype._write = function (chunk, encoding, cb) {
31247 var ts = this._transformState;
31248 ts.writecb = cb;
31249 ts.writechunk = chunk;
31250 ts.writeencoding = encoding;
31251 if (!ts.transforming) {
31252 var rs = this._readableState;
31253 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31254 }
31255 };
31256
31257 // Doesn't matter what the args are here.
31258 // _transform does all the work.
31259 // That we got here means that the readable side wants more data.
31260 Transform.prototype._read = function (n) {
31261 var ts = this._transformState;
31262
31263 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31264 ts.transforming = true;
31265 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31266 } else {
31267 // mark that we need a transform, so that any data that comes in
31268 // will get processed, now that we've asked for it.
31269 ts.needTransform = true;
31270 }
31271 };
31272
31273 function done(stream, er, data) {
31274 if (er) return stream.emit('error', er);
31275
31276 if (data !== null && data !== undefined) stream.push(data);
31277
31278 // if there's nothing in the write buffer, then that means
31279 // that nothing more will ever be provided
31280 var ws = stream._writableState;
31281 var ts = stream._transformState;
31282
31283 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31284
31285 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31286
31287 return stream.push(null);
31288 }
31289 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31290 (function (process){
31291 // A bit simpler than readable streams.
31292 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31293 // the drain event emission and buffering.
31294
31295 'use strict';
31296
31297 module.exports = Writable;
31298
31299 /*<replacement>*/
31300 var processNextTick = require('process-nextick-args');
31301 /*</replacement>*/
31302
31303 /*<replacement>*/
31304 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31305 /*</replacement>*/
31306
31307 /*<replacement>*/
31308 var Duplex;
31309 /*</replacement>*/
31310
31311 Writable.WritableState = WritableState;
31312
31313 /*<replacement>*/
31314 var util = require('core-util-is');
31315 util.inherits = require('inherits');
31316 /*</replacement>*/
31317
31318 /*<replacement>*/
31319 var internalUtil = {
31320 deprecate: require('util-deprecate')
31321 };
31322 /*</replacement>*/
31323
31324 /*<replacement>*/
31325 var Stream = require('./internal/streams/stream');
31326 /*</replacement>*/
31327
31328 var Buffer = require('buffer').Buffer;
31329 /*<replacement>*/
31330 var bufferShim = require('buffer-shims');
31331 /*</replacement>*/
31332
31333 util.inherits(Writable, Stream);
31334
31335 function nop() {}
31336
31337 function WriteReq(chunk, encoding, cb) {
31338 this.chunk = chunk;
31339 this.encoding = encoding;
31340 this.callback = cb;
31341 this.next = null;
31342 }
31343
31344 function WritableState(options, stream) {
31345 Duplex = Duplex || require('./_stream_duplex');
31346
31347 options = options || {};
31348
31349 // object stream flag to indicate whether or not this stream
31350 // contains buffers or objects.
31351 this.objectMode = !!options.objectMode;
31352
31353 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31354
31355 // the point at which write() starts returning false
31356 // Note: 0 is a valid value, means that we always return false if
31357 // the entire buffer is not flushed immediately on write()
31358 var hwm = options.highWaterMark;
31359 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31360 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31361
31362 // cast to ints.
31363 this.highWaterMark = ~~this.highWaterMark;
31364
31365 // drain event flag.
31366 this.needDrain = false;
31367 // at the start of calling end()
31368 this.ending = false;
31369 // when end() has been called, and returned
31370 this.ended = false;
31371 // when 'finish' is emitted
31372 this.finished = false;
31373
31374 // should we decode strings into buffers before passing to _write?
31375 // this is here so that some node-core streams can optimize string
31376 // handling at a lower level.
31377 var noDecode = options.decodeStrings === false;
31378 this.decodeStrings = !noDecode;
31379
31380 // Crypto is kind of old and crusty. Historically, its default string
31381 // encoding is 'binary' so we have to make this configurable.
31382 // Everything else in the universe uses 'utf8', though.
31383 this.defaultEncoding = options.defaultEncoding || 'utf8';
31384
31385 // not an actual buffer we keep track of, but a measurement
31386 // of how much we're waiting to get pushed to some underlying
31387 // socket or file.
31388 this.length = 0;
31389
31390 // a flag to see when we're in the middle of a write.
31391 this.writing = false;
31392
31393 // when true all writes will be buffered until .uncork() call
31394 this.corked = 0;
31395
31396 // a flag to be able to tell if the onwrite cb is called immediately,
31397 // or on a later tick. We set this to true at first, because any
31398 // actions that shouldn't happen until "later" should generally also
31399 // not happen before the first write call.
31400 this.sync = true;
31401
31402 // a flag to know if we're processing previously buffered items, which
31403 // may call the _write() callback in the same tick, so that we don't
31404 // end up in an overlapped onwrite situation.
31405 this.bufferProcessing = false;
31406
31407 // the callback that's passed to _write(chunk,cb)
31408 this.onwrite = function (er) {
31409 onwrite(stream, er);
31410 };
31411
31412 // the callback that the user supplies to write(chunk,encoding,cb)
31413 this.writecb = null;
31414
31415 // the amount that is being written when _write is called.
31416 this.writelen = 0;
31417
31418 this.bufferedRequest = null;
31419 this.lastBufferedRequest = null;
31420
31421 // number of pending user-supplied write callbacks
31422 // this must be 0 before 'finish' can be emitted
31423 this.pendingcb = 0;
31424
31425 // emit prefinish if the only thing we're waiting for is _write cbs
31426 // This is relevant for synchronous Transform streams
31427 this.prefinished = false;
31428
31429 // True if the error was already emitted and should not be thrown again
31430 this.errorEmitted = false;
31431
31432 // count buffered requests
31433 this.bufferedRequestCount = 0;
31434
31435 // allocate the first CorkedRequest, there is always
31436 // one allocated and free to use, and we maintain at most two
31437 this.corkedRequestsFree = new CorkedRequest(this);
31438 }
31439
31440 WritableState.prototype.getBuffer = function getBuffer() {
31441 var current = this.bufferedRequest;
31442 var out = [];
31443 while (current) {
31444 out.push(current);
31445 current = current.next;
31446 }
31447 return out;
31448 };
31449
31450 (function () {
31451 try {
31452 Object.defineProperty(WritableState.prototype, 'buffer', {
31453 get: internalUtil.deprecate(function () {
31454 return this.getBuffer();
31455 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31456 });
31457 } catch (_) {}
31458 })();
31459
31460 // Test _writableState for inheritance to account for Duplex streams,
31461 // whose prototype chain only points to Readable.
31462 var realHasInstance;
31463 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31464 realHasInstance = Function.prototype[Symbol.hasInstance];
31465 Object.defineProperty(Writable, Symbol.hasInstance, {
31466 value: function (object) {
31467 if (realHasInstance.call(this, object)) return true;
31468
31469 return object && object._writableState instanceof WritableState;
31470 }
31471 });
31472 } else {
31473 realHasInstance = function (object) {
31474 return object instanceof this;
31475 };
31476 }
31477
31478 function Writable(options) {
31479 Duplex = Duplex || require('./_stream_duplex');
31480
31481 // Writable ctor is applied to Duplexes, too.
31482 // `realHasInstance` is necessary because using plain `instanceof`
31483 // would return false, as no `_writableState` property is attached.
31484
31485 // Trying to use the custom `instanceof` for Writable here will also break the
31486 // Node.js LazyTransform implementation, which has a non-trivial getter for
31487 // `_writableState` that would lead to infinite recursion.
31488 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31489 return new Writable(options);
31490 }
31491
31492 this._writableState = new WritableState(options, this);
31493
31494 // legacy.
31495 this.writable = true;
31496
31497 if (options) {
31498 if (typeof options.write === 'function') this._write = options.write;
31499
31500 if (typeof options.writev === 'function') this._writev = options.writev;
31501 }
31502
31503 Stream.call(this);
31504 }
31505
31506 // Otherwise people can pipe Writable streams, which is just wrong.
31507 Writable.prototype.pipe = function () {
31508 this.emit('error', new Error('Cannot pipe, not readable'));
31509 };
31510
31511 function writeAfterEnd(stream, cb) {
31512 var er = new Error('write after end');
31513 // TODO: defer error events consistently everywhere, not just the cb
31514 stream.emit('error', er);
31515 processNextTick(cb, er);
31516 }
31517
31518 // Checks that a user-supplied chunk is valid, especially for the particular
31519 // mode the stream is in. Currently this means that `null` is never accepted
31520 // and undefined/non-string values are only allowed in object mode.
31521 function validChunk(stream, state, chunk, cb) {
31522 var valid = true;
31523 var er = false;
31524
31525 if (chunk === null) {
31526 er = new TypeError('May not write null values to stream');
31527 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31528 er = new TypeError('Invalid non-string/buffer chunk');
31529 }
31530 if (er) {
31531 stream.emit('error', er);
31532 processNextTick(cb, er);
31533 valid = false;
31534 }
31535 return valid;
31536 }
31537
31538 Writable.prototype.write = function (chunk, encoding, cb) {
31539 var state = this._writableState;
31540 var ret = false;
31541 var isBuf = Buffer.isBuffer(chunk);
31542
31543 if (typeof encoding === 'function') {
31544 cb = encoding;
31545 encoding = null;
31546 }
31547
31548 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31549
31550 if (typeof cb !== 'function') cb = nop;
31551
31552 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31553 state.pendingcb++;
31554 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31555 }
31556
31557 return ret;
31558 };
31559
31560 Writable.prototype.cork = function () {
31561 var state = this._writableState;
31562
31563 state.corked++;
31564 };
31565
31566 Writable.prototype.uncork = function () {
31567 var state = this._writableState;
31568
31569 if (state.corked) {
31570 state.corked--;
31571
31572 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31573 }
31574 };
31575
31576 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31577 // node::ParseEncoding() requires lower case.
31578 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31579 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);
31580 this._writableState.defaultEncoding = encoding;
31581 return this;
31582 };
31583
31584 function decodeChunk(state, chunk, encoding) {
31585 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31586 chunk = bufferShim.from(chunk, encoding);
31587 }
31588 return chunk;
31589 }
31590
31591 // if we're already writing something, then just put this
31592 // in the queue, and wait our turn. Otherwise, call _write
31593 // If we return false, then we need a drain event, so set that flag.
31594 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31595 if (!isBuf) {
31596 chunk = decodeChunk(state, chunk, encoding);
31597 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31598 }
31599 var len = state.objectMode ? 1 : chunk.length;
31600
31601 state.length += len;
31602
31603 var ret = state.length < state.highWaterMark;
31604 // we must ensure that previous needDrain will not be reset to false.
31605 if (!ret) state.needDrain = true;
31606
31607 if (state.writing || state.corked) {
31608 var last = state.lastBufferedRequest;
31609 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31610 if (last) {
31611 last.next = state.lastBufferedRequest;
31612 } else {
31613 state.bufferedRequest = state.lastBufferedRequest;
31614 }
31615 state.bufferedRequestCount += 1;
31616 } else {
31617 doWrite(stream, state, false, len, chunk, encoding, cb);
31618 }
31619
31620 return ret;
31621 }
31622
31623 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31624 state.writelen = len;
31625 state.writecb = cb;
31626 state.writing = true;
31627 state.sync = true;
31628 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31629 state.sync = false;
31630 }
31631
31632 function onwriteError(stream, state, sync, er, cb) {
31633 --state.pendingcb;
31634 if (sync) processNextTick(cb, er);else cb(er);
31635
31636 stream._writableState.errorEmitted = true;
31637 stream.emit('error', er);
31638 }
31639
31640 function onwriteStateUpdate(state) {
31641 state.writing = false;
31642 state.writecb = null;
31643 state.length -= state.writelen;
31644 state.writelen = 0;
31645 }
31646
31647 function onwrite(stream, er) {
31648 var state = stream._writableState;
31649 var sync = state.sync;
31650 var cb = state.writecb;
31651
31652 onwriteStateUpdate(state);
31653
31654 if (er) onwriteError(stream, state, sync, er, cb);else {
31655 // Check if we're actually ready to finish, but don't emit yet
31656 var finished = needFinish(state);
31657
31658 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31659 clearBuffer(stream, state);
31660 }
31661
31662 if (sync) {
31663 /*<replacement>*/
31664 asyncWrite(afterWrite, stream, state, finished, cb);
31665 /*</replacement>*/
31666 } else {
31667 afterWrite(stream, state, finished, cb);
31668 }
31669 }
31670 }
31671
31672 function afterWrite(stream, state, finished, cb) {
31673 if (!finished) onwriteDrain(stream, state);
31674 state.pendingcb--;
31675 cb();
31676 finishMaybe(stream, state);
31677 }
31678
31679 // Must force callback to be called on nextTick, so that we don't
31680 // emit 'drain' before the write() consumer gets the 'false' return
31681 // value, and has a chance to attach a 'drain' listener.
31682 function onwriteDrain(stream, state) {
31683 if (state.length === 0 && state.needDrain) {
31684 state.needDrain = false;
31685 stream.emit('drain');
31686 }
31687 }
31688
31689 // if there's something in the buffer waiting, then process it
31690 function clearBuffer(stream, state) {
31691 state.bufferProcessing = true;
31692 var entry = state.bufferedRequest;
31693
31694 if (stream._writev && entry && entry.next) {
31695 // Fast case, write everything using _writev()
31696 var l = state.bufferedRequestCount;
31697 var buffer = new Array(l);
31698 var holder = state.corkedRequestsFree;
31699 holder.entry = entry;
31700
31701 var count = 0;
31702 while (entry) {
31703 buffer[count] = entry;
31704 entry = entry.next;
31705 count += 1;
31706 }
31707
31708 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31709
31710 // doWrite is almost always async, defer these to save a bit of time
31711 // as the hot path ends with doWrite
31712 state.pendingcb++;
31713 state.lastBufferedRequest = null;
31714 if (holder.next) {
31715 state.corkedRequestsFree = holder.next;
31716 holder.next = null;
31717 } else {
31718 state.corkedRequestsFree = new CorkedRequest(state);
31719 }
31720 } else {
31721 // Slow case, write chunks one-by-one
31722 while (entry) {
31723 var chunk = entry.chunk;
31724 var encoding = entry.encoding;
31725 var cb = entry.callback;
31726 var len = state.objectMode ? 1 : chunk.length;
31727
31728 doWrite(stream, state, false, len, chunk, encoding, cb);
31729 entry = entry.next;
31730 // if we didn't call the onwrite immediately, then
31731 // it means that we need to wait until it does.
31732 // also, that means that the chunk and cb are currently
31733 // being processed, so move the buffer counter past them.
31734 if (state.writing) {
31735 break;
31736 }
31737 }
31738
31739 if (entry === null) state.lastBufferedRequest = null;
31740 }
31741
31742 state.bufferedRequestCount = 0;
31743 state.bufferedRequest = entry;
31744 state.bufferProcessing = false;
31745 }
31746
31747 Writable.prototype._write = function (chunk, encoding, cb) {
31748 cb(new Error('_write() is not implemented'));
31749 };
31750
31751 Writable.prototype._writev = null;
31752
31753 Writable.prototype.end = function (chunk, encoding, cb) {
31754 var state = this._writableState;
31755
31756 if (typeof chunk === 'function') {
31757 cb = chunk;
31758 chunk = null;
31759 encoding = null;
31760 } else if (typeof encoding === 'function') {
31761 cb = encoding;
31762 encoding = null;
31763 }
31764
31765 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31766
31767 // .end() fully uncorks
31768 if (state.corked) {
31769 state.corked = 1;
31770 this.uncork();
31771 }
31772
31773 // ignore unnecessary end() calls.
31774 if (!state.ending && !state.finished) endWritable(this, state, cb);
31775 };
31776
31777 function needFinish(state) {
31778 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31779 }
31780
31781 function prefinish(stream, state) {
31782 if (!state.prefinished) {
31783 state.prefinished = true;
31784 stream.emit('prefinish');
31785 }
31786 }
31787
31788 function finishMaybe(stream, state) {
31789 var need = needFinish(state);
31790 if (need) {
31791 if (state.pendingcb === 0) {
31792 prefinish(stream, state);
31793 state.finished = true;
31794 stream.emit('finish');
31795 } else {
31796 prefinish(stream, state);
31797 }
31798 }
31799 return need;
31800 }
31801
31802 function endWritable(stream, state, cb) {
31803 state.ending = true;
31804 finishMaybe(stream, state);
31805 if (cb) {
31806 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31807 }
31808 state.ended = true;
31809 stream.writable = false;
31810 }
31811
31812 // It seems a linked list but it is not
31813 // there will be only 2 of these for each stream
31814 function CorkedRequest(state) {
31815 var _this = this;
31816
31817 this.next = null;
31818 this.entry = null;
31819 this.finish = function (err) {
31820 var entry = _this.entry;
31821 _this.entry = null;
31822 while (entry) {
31823 var cb = entry.callback;
31824 state.pendingcb--;
31825 cb(err);
31826 entry = entry.next;
31827 }
31828 if (state.corkedRequestsFree) {
31829 state.corkedRequestsFree.next = _this;
31830 } else {
31831 state.corkedRequestsFree = _this;
31832 }
31833 };
31834 }
31835 }).call(this,require('_process'))
31836 },{"./_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){
31837 'use strict';
31838
31839 var Buffer = require('buffer').Buffer;
31840 /*<replacement>*/
31841 var bufferShim = require('buffer-shims');
31842 /*</replacement>*/
31843
31844 module.exports = BufferList;
31845
31846 function BufferList() {
31847 this.head = null;
31848 this.tail = null;
31849 this.length = 0;
31850 }
31851
31852 BufferList.prototype.push = function (v) {
31853 var entry = { data: v, next: null };
31854 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31855 this.tail = entry;
31856 ++this.length;
31857 };
31858
31859 BufferList.prototype.unshift = function (v) {
31860 var entry = { data: v, next: this.head };
31861 if (this.length === 0) this.tail = entry;
31862 this.head = entry;
31863 ++this.length;
31864 };
31865
31866 BufferList.prototype.shift = function () {
31867 if (this.length === 0) return;
31868 var ret = this.head.data;
31869 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31870 --this.length;
31871 return ret;
31872 };
31873
31874 BufferList.prototype.clear = function () {
31875 this.head = this.tail = null;
31876 this.length = 0;
31877 };
31878
31879 BufferList.prototype.join = function (s) {
31880 if (this.length === 0) return '';
31881 var p = this.head;
31882 var ret = '' + p.data;
31883 while (p = p.next) {
31884 ret += s + p.data;
31885 }return ret;
31886 };
31887
31888 BufferList.prototype.concat = function (n) {
31889 if (this.length === 0) return bufferShim.alloc(0);
31890 if (this.length === 1) return this.head.data;
31891 var ret = bufferShim.allocUnsafe(n >>> 0);
31892 var p = this.head;
31893 var i = 0;
31894 while (p) {
31895 p.data.copy(ret, i);
31896 i += p.data.length;
31897 p = p.next;
31898 }
31899 return ret;
31900 };
31901 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31902 module.exports = require('events').EventEmitter;
31903
31904 },{"events":7}],22:[function(require,module,exports){
31905 'use strict';
31906
31907 var Buffer = require('safe-buffer').Buffer;
31908
31909 var isEncoding = Buffer.isEncoding || function (encoding) {
31910 encoding = '' + encoding;
31911 switch (encoding && encoding.toLowerCase()) {
31912 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':
31913 return true;
31914 default:
31915 return false;
31916 }
31917 };
31918
31919 function _normalizeEncoding(enc) {
31920 if (!enc) return 'utf8';
31921 var retried;
31922 while (true) {
31923 switch (enc) {
31924 case 'utf8':
31925 case 'utf-8':
31926 return 'utf8';
31927 case 'ucs2':
31928 case 'ucs-2':
31929 case 'utf16le':
31930 case 'utf-16le':
31931 return 'utf16le';
31932 case 'latin1':
31933 case 'binary':
31934 return 'latin1';
31935 case 'base64':
31936 case 'ascii':
31937 case 'hex':
31938 return enc;
31939 default:
31940 if (retried) return; // undefined
31941 enc = ('' + enc).toLowerCase();
31942 retried = true;
31943 }
31944 }
31945 };
31946
31947 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31948 // modules monkey-patch it to support additional encodings
31949 function normalizeEncoding(enc) {
31950 var nenc = _normalizeEncoding(enc);
31951 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31952 return nenc || enc;
31953 }
31954
31955 // StringDecoder provides an interface for efficiently splitting a series of
31956 // buffers into a series of JS strings without breaking apart multi-byte
31957 // characters.
31958 exports.StringDecoder = StringDecoder;
31959 function StringDecoder(encoding) {
31960 this.encoding = normalizeEncoding(encoding);
31961 var nb;
31962 switch (this.encoding) {
31963 case 'utf16le':
31964 this.text = utf16Text;
31965 this.end = utf16End;
31966 nb = 4;
31967 break;
31968 case 'utf8':
31969 this.fillLast = utf8FillLast;
31970 nb = 4;
31971 break;
31972 case 'base64':
31973 this.text = base64Text;
31974 this.end = base64End;
31975 nb = 3;
31976 break;
31977 default:
31978 this.write = simpleWrite;
31979 this.end = simpleEnd;
31980 return;
31981 }
31982 this.lastNeed = 0;
31983 this.lastTotal = 0;
31984 this.lastChar = Buffer.allocUnsafe(nb);
31985 }
31986
31987 StringDecoder.prototype.write = function (buf) {
31988 if (buf.length === 0) return '';
31989 var r;
31990 var i;
31991 if (this.lastNeed) {
31992 r = this.fillLast(buf);
31993 if (r === undefined) return '';
31994 i = this.lastNeed;
31995 this.lastNeed = 0;
31996 } else {
31997 i = 0;
31998 }
31999 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
32000 return r || '';
32001 };
32002
32003 StringDecoder.prototype.end = utf8End;
32004
32005 // Returns only complete characters in a Buffer
32006 StringDecoder.prototype.text = utf8Text;
32007
32008 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32009 StringDecoder.prototype.fillLast = function (buf) {
32010 if (this.lastNeed <= buf.length) {
32011 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32012 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32013 }
32014 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32015 this.lastNeed -= buf.length;
32016 };
32017
32018 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32019 // continuation byte.
32020 function utf8CheckByte(byte) {
32021 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;
32022 return -1;
32023 }
32024
32025 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32026 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32027 // needed to complete the UTF-8 character (if applicable) are returned.
32028 function utf8CheckIncomplete(self, buf, i) {
32029 var j = buf.length - 1;
32030 if (j < i) return 0;
32031 var nb = utf8CheckByte(buf[j]);
32032 if (nb >= 0) {
32033 if (nb > 0) self.lastNeed = nb - 1;
32034 return nb;
32035 }
32036 if (--j < i) return 0;
32037 nb = utf8CheckByte(buf[j]);
32038 if (nb >= 0) {
32039 if (nb > 0) self.lastNeed = nb - 2;
32040 return nb;
32041 }
32042 if (--j < i) return 0;
32043 nb = utf8CheckByte(buf[j]);
32044 if (nb >= 0) {
32045 if (nb > 0) {
32046 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32047 }
32048 return nb;
32049 }
32050 return 0;
32051 }
32052
32053 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32054 // needed or are available. If we see a non-continuation byte where we expect
32055 // one, we "replace" the validated continuation bytes we've seen so far with
32056 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32057 // behavior. The continuation byte check is included three times in the case
32058 // where all of the continuation bytes for a character exist in the same buffer.
32059 // It is also done this way as a slight performance increase instead of using a
32060 // loop.
32061 function utf8CheckExtraBytes(self, buf, p) {
32062 if ((buf[0] & 0xC0) !== 0x80) {
32063 self.lastNeed = 0;
32064 return '\ufffd'.repeat(p);
32065 }
32066 if (self.lastNeed > 1 && buf.length > 1) {
32067 if ((buf[1] & 0xC0) !== 0x80) {
32068 self.lastNeed = 1;
32069 return '\ufffd'.repeat(p + 1);
32070 }
32071 if (self.lastNeed > 2 && buf.length > 2) {
32072 if ((buf[2] & 0xC0) !== 0x80) {
32073 self.lastNeed = 2;
32074 return '\ufffd'.repeat(p + 2);
32075 }
32076 }
32077 }
32078 }
32079
32080 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32081 function utf8FillLast(buf) {
32082 var p = this.lastTotal - this.lastNeed;
32083 var r = utf8CheckExtraBytes(this, buf, p);
32084 if (r !== undefined) return r;
32085 if (this.lastNeed <= buf.length) {
32086 buf.copy(this.lastChar, p, 0, this.lastNeed);
32087 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32088 }
32089 buf.copy(this.lastChar, p, 0, buf.length);
32090 this.lastNeed -= buf.length;
32091 }
32092
32093 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32094 // partial character, the character's bytes are buffered until the required
32095 // number of bytes are available.
32096 function utf8Text(buf, i) {
32097 var total = utf8CheckIncomplete(this, buf, i);
32098 if (!this.lastNeed) return buf.toString('utf8', i);
32099 this.lastTotal = total;
32100 var end = buf.length - (total - this.lastNeed);
32101 buf.copy(this.lastChar, 0, end);
32102 return buf.toString('utf8', i, end);
32103 }
32104
32105 // For UTF-8, a replacement character for each buffered byte of a (partial)
32106 // character needs to be added to the output.
32107 function utf8End(buf) {
32108 var r = buf && buf.length ? this.write(buf) : '';
32109 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32110 return r;
32111 }
32112
32113 // UTF-16LE typically needs two bytes per character, but even if we have an even
32114 // number of bytes available, we need to check if we end on a leading/high
32115 // surrogate. In that case, we need to wait for the next two bytes in order to
32116 // decode the last character properly.
32117 function utf16Text(buf, i) {
32118 if ((buf.length - i) % 2 === 0) {
32119 var r = buf.toString('utf16le', i);
32120 if (r) {
32121 var c = r.charCodeAt(r.length - 1);
32122 if (c >= 0xD800 && c <= 0xDBFF) {
32123 this.lastNeed = 2;
32124 this.lastTotal = 4;
32125 this.lastChar[0] = buf[buf.length - 2];
32126 this.lastChar[1] = buf[buf.length - 1];
32127 return r.slice(0, -1);
32128 }
32129 }
32130 return r;
32131 }
32132 this.lastNeed = 1;
32133 this.lastTotal = 2;
32134 this.lastChar[0] = buf[buf.length - 1];
32135 return buf.toString('utf16le', i, buf.length - 1);
32136 }
32137
32138 // For UTF-16LE we do not explicitly append special replacement characters if we
32139 // end on a partial character, we simply let v8 handle that.
32140 function utf16End(buf) {
32141 var r = buf && buf.length ? this.write(buf) : '';
32142 if (this.lastNeed) {
32143 var end = this.lastTotal - this.lastNeed;
32144 return r + this.lastChar.toString('utf16le', 0, end);
32145 }
32146 return r;
32147 }
32148
32149 function base64Text(buf, i) {
32150 var n = (buf.length - i) % 3;
32151 if (n === 0) return buf.toString('base64', i);
32152 this.lastNeed = 3 - n;
32153 this.lastTotal = 3;
32154 if (n === 1) {
32155 this.lastChar[0] = buf[buf.length - 1];
32156 } else {
32157 this.lastChar[0] = buf[buf.length - 2];
32158 this.lastChar[1] = buf[buf.length - 1];
32159 }
32160 return buf.toString('base64', i, buf.length - n);
32161 }
32162
32163 function base64End(buf) {
32164 var r = buf && buf.length ? this.write(buf) : '';
32165 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32166 return r;
32167 }
32168
32169 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32170 function simpleWrite(buf) {
32171 return buf.toString(this.encoding);
32172 }
32173
32174 function simpleEnd(buf) {
32175 return buf && buf.length ? this.write(buf) : '';
32176 }
32177 },{"safe-buffer":27}],23:[function(require,module,exports){
32178 module.exports = require('./readable').PassThrough
32179
32180 },{"./readable":24}],24:[function(require,module,exports){
32181 exports = module.exports = require('./lib/_stream_readable.js');
32182 exports.Stream = exports;
32183 exports.Readable = exports;
32184 exports.Writable = require('./lib/_stream_writable.js');
32185 exports.Duplex = require('./lib/_stream_duplex.js');
32186 exports.Transform = require('./lib/_stream_transform.js');
32187 exports.PassThrough = require('./lib/_stream_passthrough.js');
32188
32189 },{"./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){
32190 module.exports = require('./readable').Transform
32191
32192 },{"./readable":24}],26:[function(require,module,exports){
32193 module.exports = require('./lib/_stream_writable.js');
32194
32195 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32196 module.exports = require('buffer')
32197
32198 },{"buffer":5}],28:[function(require,module,exports){
32199 // Copyright Joyent, Inc. and other Node contributors.
32200 //
32201 // Permission is hereby granted, free of charge, to any person obtaining a
32202 // copy of this software and associated documentation files (the
32203 // "Software"), to deal in the Software without restriction, including
32204 // without limitation the rights to use, copy, modify, merge, publish,
32205 // distribute, sublicense, and/or sell copies of the Software, and to permit
32206 // persons to whom the Software is furnished to do so, subject to the
32207 // following conditions:
32208 //
32209 // The above copyright notice and this permission notice shall be included
32210 // in all copies or substantial portions of the Software.
32211 //
32212 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32213 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32214 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32215 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32216 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32217 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32218 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32219
32220 module.exports = Stream;
32221
32222 var EE = require('events').EventEmitter;
32223 var inherits = require('inherits');
32224
32225 inherits(Stream, EE);
32226 Stream.Readable = require('readable-stream/readable.js');
32227 Stream.Writable = require('readable-stream/writable.js');
32228 Stream.Duplex = require('readable-stream/duplex.js');
32229 Stream.Transform = require('readable-stream/transform.js');
32230 Stream.PassThrough = require('readable-stream/passthrough.js');
32231
32232 // Backwards-compat with node 0.4.x
32233 Stream.Stream = Stream;
32234
32235
32236
32237 // old-style streams. Note that the pipe method (the only relevant
32238 // part of this class) is overridden in the Readable class.
32239
32240 function Stream() {
32241 EE.call(this);
32242 }
32243
32244 Stream.prototype.pipe = function(dest, options) {
32245 var source = this;
32246
32247 function ondata(chunk) {
32248 if (dest.writable) {
32249 if (false === dest.write(chunk) && source.pause) {
32250 source.pause();
32251 }
32252 }
32253 }
32254
32255 source.on('data', ondata);
32256
32257 function ondrain() {
32258 if (source.readable && source.resume) {
32259 source.resume();
32260 }
32261 }
32262
32263 dest.on('drain', ondrain);
32264
32265 // If the 'end' option is not supplied, dest.end() will be called when
32266 // source gets the 'end' or 'close' events. Only dest.end() once.
32267 if (!dest._isStdio && (!options || options.end !== false)) {
32268 source.on('end', onend);
32269 source.on('close', onclose);
32270 }
32271
32272 var didOnEnd = false;
32273 function onend() {
32274 if (didOnEnd) return;
32275 didOnEnd = true;
32276
32277 dest.end();
32278 }
32279
32280
32281 function onclose() {
32282 if (didOnEnd) return;
32283 didOnEnd = true;
32284
32285 if (typeof dest.destroy === 'function') dest.destroy();
32286 }
32287
32288 // don't leave dangling pipes when there are errors.
32289 function onerror(er) {
32290 cleanup();
32291 if (EE.listenerCount(this, 'error') === 0) {
32292 throw er; // Unhandled stream error in pipe.
32293 }
32294 }
32295
32296 source.on('error', onerror);
32297 dest.on('error', onerror);
32298
32299 // remove all the event listeners that were added.
32300 function cleanup() {
32301 source.removeListener('data', ondata);
32302 dest.removeListener('drain', ondrain);
32303
32304 source.removeListener('end', onend);
32305 source.removeListener('close', onclose);
32306
32307 source.removeListener('error', onerror);
32308 dest.removeListener('error', onerror);
32309
32310 source.removeListener('end', cleanup);
32311 source.removeListener('close', cleanup);
32312
32313 dest.removeListener('close', cleanup);
32314 }
32315
32316 source.on('end', cleanup);
32317 source.on('close', cleanup);
32318
32319 dest.on('close', cleanup);
32320
32321 dest.emit('pipe', source);
32322
32323 // Allow for unix-like usage: A.pipe(B).pipe(C)
32324 return dest;
32325 };
32326
32327 },{"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){
32328 // Copyright Joyent, Inc. and other Node contributors.
32329 //
32330 // Permission is hereby granted, free of charge, to any person obtaining a
32331 // copy of this software and associated documentation files (the
32332 // "Software"), to deal in the Software without restriction, including
32333 // without limitation the rights to use, copy, modify, merge, publish,
32334 // distribute, sublicense, and/or sell copies of the Software, and to permit
32335 // persons to whom the Software is furnished to do so, subject to the
32336 // following conditions:
32337 //
32338 // The above copyright notice and this permission notice shall be included
32339 // in all copies or substantial portions of the Software.
32340 //
32341 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32342 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32343 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32344 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32345 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32346 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32347 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32348
32349 var Buffer = require('buffer').Buffer;
32350
32351 var isBufferEncoding = Buffer.isEncoding
32352 || function(encoding) {
32353 switch (encoding && encoding.toLowerCase()) {
32354 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;
32355 default: return false;
32356 }
32357 }
32358
32359
32360 function assertEncoding(encoding) {
32361 if (encoding && !isBufferEncoding(encoding)) {
32362 throw new Error('Unknown encoding: ' + encoding);
32363 }
32364 }
32365
32366 // StringDecoder provides an interface for efficiently splitting a series of
32367 // buffers into a series of JS strings without breaking apart multi-byte
32368 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32369 //
32370 // @TODO Handling all encodings inside a single object makes it very difficult
32371 // to reason about this code, so it should be split up in the future.
32372 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32373 // points as used by CESU-8.
32374 var StringDecoder = exports.StringDecoder = function(encoding) {
32375 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32376 assertEncoding(encoding);
32377 switch (this.encoding) {
32378 case 'utf8':
32379 // CESU-8 represents each of Surrogate Pair by 3-bytes
32380 this.surrogateSize = 3;
32381 break;
32382 case 'ucs2':
32383 case 'utf16le':
32384 // UTF-16 represents each of Surrogate Pair by 2-bytes
32385 this.surrogateSize = 2;
32386 this.detectIncompleteChar = utf16DetectIncompleteChar;
32387 break;
32388 case 'base64':
32389 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32390 this.surrogateSize = 3;
32391 this.detectIncompleteChar = base64DetectIncompleteChar;
32392 break;
32393 default:
32394 this.write = passThroughWrite;
32395 return;
32396 }
32397
32398 // Enough space to store all bytes of a single character. UTF-8 needs 4
32399 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32400 this.charBuffer = new Buffer(6);
32401 // Number of bytes received for the current incomplete multi-byte character.
32402 this.charReceived = 0;
32403 // Number of bytes expected for the current incomplete multi-byte character.
32404 this.charLength = 0;
32405 };
32406
32407
32408 // write decodes the given buffer and returns it as JS string that is
32409 // guaranteed to not contain any partial multi-byte characters. Any partial
32410 // character found at the end of the buffer is buffered up, and will be
32411 // returned when calling write again with the remaining bytes.
32412 //
32413 // Note: Converting a Buffer containing an orphan surrogate to a String
32414 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32415 // Buffer#write) will replace incomplete surrogates with the unicode
32416 // replacement character. See https://codereview.chromium.org/121173009/ .
32417 StringDecoder.prototype.write = function(buffer) {
32418 var charStr = '';
32419 // if our last write ended with an incomplete multibyte character
32420 while (this.charLength) {
32421 // determine how many remaining bytes this buffer has to offer for this char
32422 var available = (buffer.length >= this.charLength - this.charReceived) ?
32423 this.charLength - this.charReceived :
32424 buffer.length;
32425
32426 // add the new bytes to the char buffer
32427 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32428 this.charReceived += available;
32429
32430 if (this.charReceived < this.charLength) {
32431 // still not enough chars in this buffer? wait for more ...
32432 return '';
32433 }
32434
32435 // remove bytes belonging to the current character from the buffer
32436 buffer = buffer.slice(available, buffer.length);
32437
32438 // get the character that was split
32439 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32440
32441 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32442 var charCode = charStr.charCodeAt(charStr.length - 1);
32443 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32444 this.charLength += this.surrogateSize;
32445 charStr = '';
32446 continue;
32447 }
32448 this.charReceived = this.charLength = 0;
32449
32450 // if there are no more bytes in this buffer, just emit our char
32451 if (buffer.length === 0) {
32452 return charStr;
32453 }
32454 break;
32455 }
32456
32457 // determine and set charLength / charReceived
32458 this.detectIncompleteChar(buffer);
32459
32460 var end = buffer.length;
32461 if (this.charLength) {
32462 // buffer the incomplete character bytes we got
32463 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32464 end -= this.charReceived;
32465 }
32466
32467 charStr += buffer.toString(this.encoding, 0, end);
32468
32469 var end = charStr.length - 1;
32470 var charCode = charStr.charCodeAt(end);
32471 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32472 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32473 var size = this.surrogateSize;
32474 this.charLength += size;
32475 this.charReceived += size;
32476 this.charBuffer.copy(this.charBuffer, size, 0, size);
32477 buffer.copy(this.charBuffer, 0, 0, size);
32478 return charStr.substring(0, end);
32479 }
32480
32481 // or just emit the charStr
32482 return charStr;
32483 };
32484
32485 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32486 // the end of the given buffer. If so, it sets this.charLength to the byte
32487 // length that character, and sets this.charReceived to the number of bytes
32488 // that are available for this character.
32489 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32490 // determine how many bytes we have to check at the end of this buffer
32491 var i = (buffer.length >= 3) ? 3 : buffer.length;
32492
32493 // Figure out if one of the last i bytes of our buffer announces an
32494 // incomplete char.
32495 for (; i > 0; i--) {
32496 var c = buffer[buffer.length - i];
32497
32498 // See http://en.wikipedia.org/wiki/UTF-8#Description
32499
32500 // 110XXXXX
32501 if (i == 1 && c >> 5 == 0x06) {
32502 this.charLength = 2;
32503 break;
32504 }
32505
32506 // 1110XXXX
32507 if (i <= 2 && c >> 4 == 0x0E) {
32508 this.charLength = 3;
32509 break;
32510 }
32511
32512 // 11110XXX
32513 if (i <= 3 && c >> 3 == 0x1E) {
32514 this.charLength = 4;
32515 break;
32516 }
32517 }
32518 this.charReceived = i;
32519 };
32520
32521 StringDecoder.prototype.end = function(buffer) {
32522 var res = '';
32523 if (buffer && buffer.length)
32524 res = this.write(buffer);
32525
32526 if (this.charReceived) {
32527 var cr = this.charReceived;
32528 var buf = this.charBuffer;
32529 var enc = this.encoding;
32530 res += buf.slice(0, cr).toString(enc);
32531 }
32532
32533 return res;
32534 };
32535
32536 function passThroughWrite(buffer) {
32537 return buffer.toString(this.encoding);
32538 }
32539
32540 function utf16DetectIncompleteChar(buffer) {
32541 this.charReceived = buffer.length % 2;
32542 this.charLength = this.charReceived ? 2 : 0;
32543 }
32544
32545 function base64DetectIncompleteChar(buffer) {
32546 this.charReceived = buffer.length % 3;
32547 this.charLength = this.charReceived ? 3 : 0;
32548 }
32549
32550 },{"buffer":5}],30:[function(require,module,exports){
32551 (function (global){
32552
32553 /**
32554 * Module exports.
32555 */
32556
32557 module.exports = deprecate;
32558
32559 /**
32560 * Mark that a method should not be used.
32561 * Returns a modified function which warns once by default.
32562 *
32563 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32564 *
32565 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32566 * will throw an Error when invoked.
32567 *
32568 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32569 * will invoke `console.trace()` instead of `console.error()`.
32570 *
32571 * @param {Function} fn - the function to deprecate
32572 * @param {String} msg - the string to print to the console when `fn` is invoked
32573 * @returns {Function} a new "deprecated" version of `fn`
32574 * @api public
32575 */
32576
32577 function deprecate (fn, msg) {
32578 if (config('noDeprecation')) {
32579 return fn;
32580 }
32581
32582 var warned = false;
32583 function deprecated() {
32584 if (!warned) {
32585 if (config('throwDeprecation')) {
32586 throw new Error(msg);
32587 } else if (config('traceDeprecation')) {
32588 console.trace(msg);
32589 } else {
32590 console.warn(msg);
32591 }
32592 warned = true;
32593 }
32594 return fn.apply(this, arguments);
32595 }
32596
32597 return deprecated;
32598 }
32599
32600 /**
32601 * Checks `localStorage` for boolean values for the given `name`.
32602 *
32603 * @param {String} name
32604 * @returns {Boolean}
32605 * @api private
32606 */
32607
32608 function config (name) {
32609 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32610 try {
32611 if (!global.localStorage) return false;
32612 } catch (_) {
32613 return false;
32614 }
32615 var val = global.localStorage[name];
32616 if (null == val) return false;
32617 return String(val).toLowerCase() === 'true';
32618 }
32619
32620 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32621 },{}],31:[function(require,module,exports){
32622 arguments[4][9][0].apply(exports,arguments)
32623 },{"dup":9}],32:[function(require,module,exports){
32624 module.exports = function isBuffer(arg) {
32625 return arg && typeof arg === 'object'
32626 && typeof arg.copy === 'function'
32627 && typeof arg.fill === 'function'
32628 && typeof arg.readUInt8 === 'function';
32629 }
32630 },{}],33:[function(require,module,exports){
32631 (function (process,global){
32632 // Copyright Joyent, Inc. and other Node contributors.
32633 //
32634 // Permission is hereby granted, free of charge, to any person obtaining a
32635 // copy of this software and associated documentation files (the
32636 // "Software"), to deal in the Software without restriction, including
32637 // without limitation the rights to use, copy, modify, merge, publish,
32638 // distribute, sublicense, and/or sell copies of the Software, and to permit
32639 // persons to whom the Software is furnished to do so, subject to the
32640 // following conditions:
32641 //
32642 // The above copyright notice and this permission notice shall be included
32643 // in all copies or substantial portions of the Software.
32644 //
32645 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32646 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32647 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32648 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32649 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32650 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32651 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32652
32653 var formatRegExp = /%[sdj%]/g;
32654 exports.format = function(f) {
32655 if (!isString(f)) {
32656 var objects = [];
32657 for (var i = 0; i < arguments.length; i++) {
32658 objects.push(inspect(arguments[i]));
32659 }
32660 return objects.join(' ');
32661 }
32662
32663 var i = 1;
32664 var args = arguments;
32665 var len = args.length;
32666 var str = String(f).replace(formatRegExp, function(x) {
32667 if (x === '%%') return '%';
32668 if (i >= len) return x;
32669 switch (x) {
32670 case '%s': return String(args[i++]);
32671 case '%d': return Number(args[i++]);
32672 case '%j':
32673 try {
32674 return JSON.stringify(args[i++]);
32675 } catch (_) {
32676 return '[Circular]';
32677 }
32678 default:
32679 return x;
32680 }
32681 });
32682 for (var x = args[i]; i < len; x = args[++i]) {
32683 if (isNull(x) || !isObject(x)) {
32684 str += ' ' + x;
32685 } else {
32686 str += ' ' + inspect(x);
32687 }
32688 }
32689 return str;
32690 };
32691
32692
32693 // Mark that a method should not be used.
32694 // Returns a modified function which warns once by default.
32695 // If --no-deprecation is set, then it is a no-op.
32696 exports.deprecate = function(fn, msg) {
32697 // Allow for deprecating things in the process of starting up.
32698 if (isUndefined(global.process)) {
32699 return function() {
32700 return exports.deprecate(fn, msg).apply(this, arguments);
32701 };
32702 }
32703
32704 if (process.noDeprecation === true) {
32705 return fn;
32706 }
32707
32708 var warned = false;
32709 function deprecated() {
32710 if (!warned) {
32711 if (process.throwDeprecation) {
32712 throw new Error(msg);
32713 } else if (process.traceDeprecation) {
32714 console.trace(msg);
32715 } else {
32716 console.error(msg);
32717 }
32718 warned = true;
32719 }
32720 return fn.apply(this, arguments);
32721 }
32722
32723 return deprecated;
32724 };
32725
32726
32727 var debugs = {};
32728 var debugEnviron;
32729 exports.debuglog = function(set) {
32730 if (isUndefined(debugEnviron))
32731 debugEnviron = process.env.NODE_DEBUG || '';
32732 set = set.toUpperCase();
32733 if (!debugs[set]) {
32734 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32735 var pid = process.pid;
32736 debugs[set] = function() {
32737 var msg = exports.format.apply(exports, arguments);
32738 console.error('%s %d: %s', set, pid, msg);
32739 };
32740 } else {
32741 debugs[set] = function() {};
32742 }
32743 }
32744 return debugs[set];
32745 };
32746
32747
32748 /**
32749 * Echos the value of a value. Trys to print the value out
32750 * in the best way possible given the different types.
32751 *
32752 * @param {Object} obj The object to print out.
32753 * @param {Object} opts Optional options object that alters the output.
32754 */
32755 /* legacy: obj, showHidden, depth, colors*/
32756 function inspect(obj, opts) {
32757 // default options
32758 var ctx = {
32759 seen: [],
32760 stylize: stylizeNoColor
32761 };
32762 // legacy...
32763 if (arguments.length >= 3) ctx.depth = arguments[2];
32764 if (arguments.length >= 4) ctx.colors = arguments[3];
32765 if (isBoolean(opts)) {
32766 // legacy...
32767 ctx.showHidden = opts;
32768 } else if (opts) {
32769 // got an "options" object
32770 exports._extend(ctx, opts);
32771 }
32772 // set default options
32773 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32774 if (isUndefined(ctx.depth)) ctx.depth = 2;
32775 if (isUndefined(ctx.colors)) ctx.colors = false;
32776 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32777 if (ctx.colors) ctx.stylize = stylizeWithColor;
32778 return formatValue(ctx, obj, ctx.depth);
32779 }
32780 exports.inspect = inspect;
32781
32782
32783 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32784 inspect.colors = {
32785 'bold' : [1, 22],
32786 'italic' : [3, 23],
32787 'underline' : [4, 24],
32788 'inverse' : [7, 27],
32789 'white' : [37, 39],
32790 'grey' : [90, 39],
32791 'black' : [30, 39],
32792 'blue' : [34, 39],
32793 'cyan' : [36, 39],
32794 'green' : [32, 39],
32795 'magenta' : [35, 39],
32796 'red' : [31, 39],
32797 'yellow' : [33, 39]
32798 };
32799
32800 // Don't use 'blue' not visible on cmd.exe
32801 inspect.styles = {
32802 'special': 'cyan',
32803 'number': 'yellow',
32804 'boolean': 'yellow',
32805 'undefined': 'grey',
32806 'null': 'bold',
32807 'string': 'green',
32808 'date': 'magenta',
32809 // "name": intentionally not styling
32810 'regexp': 'red'
32811 };
32812
32813
32814 function stylizeWithColor(str, styleType) {
32815 var style = inspect.styles[styleType];
32816
32817 if (style) {
32818 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32819 '\u001b[' + inspect.colors[style][1] + 'm';
32820 } else {
32821 return str;
32822 }
32823 }
32824
32825
32826 function stylizeNoColor(str, styleType) {
32827 return str;
32828 }
32829
32830
32831 function arrayToHash(array) {
32832 var hash = {};
32833
32834 array.forEach(function(val, idx) {
32835 hash[val] = true;
32836 });
32837
32838 return hash;
32839 }
32840
32841
32842 function formatValue(ctx, value, recurseTimes) {
32843 // Provide a hook for user-specified inspect functions.
32844 // Check that value is an object with an inspect function on it
32845 if (ctx.customInspect &&
32846 value &&
32847 isFunction(value.inspect) &&
32848 // Filter out the util module, it's inspect function is special
32849 value.inspect !== exports.inspect &&
32850 // Also filter out any prototype objects using the circular check.
32851 !(value.constructor && value.constructor.prototype === value)) {
32852 var ret = value.inspect(recurseTimes, ctx);
32853 if (!isString(ret)) {
32854 ret = formatValue(ctx, ret, recurseTimes);
32855 }
32856 return ret;
32857 }
32858
32859 // Primitive types cannot have properties
32860 var primitive = formatPrimitive(ctx, value);
32861 if (primitive) {
32862 return primitive;
32863 }
32864
32865 // Look up the keys of the object.
32866 var keys = Object.keys(value);
32867 var visibleKeys = arrayToHash(keys);
32868
32869 if (ctx.showHidden) {
32870 keys = Object.getOwnPropertyNames(value);
32871 }
32872
32873 // IE doesn't make error fields non-enumerable
32874 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32875 if (isError(value)
32876 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32877 return formatError(value);
32878 }
32879
32880 // Some type of object without properties can be shortcutted.
32881 if (keys.length === 0) {
32882 if (isFunction(value)) {
32883 var name = value.name ? ': ' + value.name : '';
32884 return ctx.stylize('[Function' + name + ']', 'special');
32885 }
32886 if (isRegExp(value)) {
32887 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32888 }
32889 if (isDate(value)) {
32890 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32891 }
32892 if (isError(value)) {
32893 return formatError(value);
32894 }
32895 }
32896
32897 var base = '', array = false, braces = ['{', '}'];
32898
32899 // Make Array say that they are Array
32900 if (isArray(value)) {
32901 array = true;
32902 braces = ['[', ']'];
32903 }
32904
32905 // Make functions say that they are functions
32906 if (isFunction(value)) {
32907 var n = value.name ? ': ' + value.name : '';
32908 base = ' [Function' + n + ']';
32909 }
32910
32911 // Make RegExps say that they are RegExps
32912 if (isRegExp(value)) {
32913 base = ' ' + RegExp.prototype.toString.call(value);
32914 }
32915
32916 // Make dates with properties first say the date
32917 if (isDate(value)) {
32918 base = ' ' + Date.prototype.toUTCString.call(value);
32919 }
32920
32921 // Make error with message first say the error
32922 if (isError(value)) {
32923 base = ' ' + formatError(value);
32924 }
32925
32926 if (keys.length === 0 && (!array || value.length == 0)) {
32927 return braces[0] + base + braces[1];
32928 }
32929
32930 if (recurseTimes < 0) {
32931 if (isRegExp(value)) {
32932 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32933 } else {
32934 return ctx.stylize('[Object]', 'special');
32935 }
32936 }
32937
32938 ctx.seen.push(value);
32939
32940 var output;
32941 if (array) {
32942 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32943 } else {
32944 output = keys.map(function(key) {
32945 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32946 });
32947 }
32948
32949 ctx.seen.pop();
32950
32951 return reduceToSingleString(output, base, braces);
32952 }
32953
32954
32955 function formatPrimitive(ctx, value) {
32956 if (isUndefined(value))
32957 return ctx.stylize('undefined', 'undefined');
32958 if (isString(value)) {
32959 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32960 .replace(/'/g, "\\'")
32961 .replace(/\\"/g, '"') + '\'';
32962 return ctx.stylize(simple, 'string');
32963 }
32964 if (isNumber(value))
32965 return ctx.stylize('' + value, 'number');
32966 if (isBoolean(value))
32967 return ctx.stylize('' + value, 'boolean');
32968 // For some reason typeof null is "object", so special case here.
32969 if (isNull(value))
32970 return ctx.stylize('null', 'null');
32971 }
32972
32973
32974 function formatError(value) {
32975 return '[' + Error.prototype.toString.call(value) + ']';
32976 }
32977
32978
32979 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32980 var output = [];
32981 for (var i = 0, l = value.length; i < l; ++i) {
32982 if (hasOwnProperty(value, String(i))) {
32983 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32984 String(i), true));
32985 } else {
32986 output.push('');
32987 }
32988 }
32989 keys.forEach(function(key) {
32990 if (!key.match(/^\d+$/)) {
32991 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32992 key, true));
32993 }
32994 });
32995 return output;
32996 }
32997
32998
32999 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
33000 var name, str, desc;
33001 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
33002 if (desc.get) {
33003 if (desc.set) {
33004 str = ctx.stylize('[Getter/Setter]', 'special');
33005 } else {
33006 str = ctx.stylize('[Getter]', 'special');
33007 }
33008 } else {
33009 if (desc.set) {
33010 str = ctx.stylize('[Setter]', 'special');
33011 }
33012 }
33013 if (!hasOwnProperty(visibleKeys, key)) {
33014 name = '[' + key + ']';
33015 }
33016 if (!str) {
33017 if (ctx.seen.indexOf(desc.value) < 0) {
33018 if (isNull(recurseTimes)) {
33019 str = formatValue(ctx, desc.value, null);
33020 } else {
33021 str = formatValue(ctx, desc.value, recurseTimes - 1);
33022 }
33023 if (str.indexOf('\n') > -1) {
33024 if (array) {
33025 str = str.split('\n').map(function(line) {
33026 return ' ' + line;
33027 }).join('\n').substr(2);
33028 } else {
33029 str = '\n' + str.split('\n').map(function(line) {
33030 return ' ' + line;
33031 }).join('\n');
33032 }
33033 }
33034 } else {
33035 str = ctx.stylize('[Circular]', 'special');
33036 }
33037 }
33038 if (isUndefined(name)) {
33039 if (array && key.match(/^\d+$/)) {
33040 return str;
33041 }
33042 name = JSON.stringify('' + key);
33043 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33044 name = name.substr(1, name.length - 2);
33045 name = ctx.stylize(name, 'name');
33046 } else {
33047 name = name.replace(/'/g, "\\'")
33048 .replace(/\\"/g, '"')
33049 .replace(/(^"|"$)/g, "'");
33050 name = ctx.stylize(name, 'string');
33051 }
33052 }
33053
33054 return name + ': ' + str;
33055 }
33056
33057
33058 function reduceToSingleString(output, base, braces) {
33059 var numLinesEst = 0;
33060 var length = output.reduce(function(prev, cur) {
33061 numLinesEst++;
33062 if (cur.indexOf('\n') >= 0) numLinesEst++;
33063 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33064 }, 0);
33065
33066 if (length > 60) {
33067 return braces[0] +
33068 (base === '' ? '' : base + '\n ') +
33069 ' ' +
33070 output.join(',\n ') +
33071 ' ' +
33072 braces[1];
33073 }
33074
33075 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33076 }
33077
33078
33079 // NOTE: These type checking functions intentionally don't use `instanceof`
33080 // because it is fragile and can be easily faked with `Object.create()`.
33081 function isArray(ar) {
33082 return Array.isArray(ar);
33083 }
33084 exports.isArray = isArray;
33085
33086 function isBoolean(arg) {
33087 return typeof arg === 'boolean';
33088 }
33089 exports.isBoolean = isBoolean;
33090
33091 function isNull(arg) {
33092 return arg === null;
33093 }
33094 exports.isNull = isNull;
33095
33096 function isNullOrUndefined(arg) {
33097 return arg == null;
33098 }
33099 exports.isNullOrUndefined = isNullOrUndefined;
33100
33101 function isNumber(arg) {
33102 return typeof arg === 'number';
33103 }
33104 exports.isNumber = isNumber;
33105
33106 function isString(arg) {
33107 return typeof arg === 'string';
33108 }
33109 exports.isString = isString;
33110
33111 function isSymbol(arg) {
33112 return typeof arg === 'symbol';
33113 }
33114 exports.isSymbol = isSymbol;
33115
33116 function isUndefined(arg) {
33117 return arg === void 0;
33118 }
33119 exports.isUndefined = isUndefined;
33120
33121 function isRegExp(re) {
33122 return isObject(re) && objectToString(re) === '[object RegExp]';
33123 }
33124 exports.isRegExp = isRegExp;
33125
33126 function isObject(arg) {
33127 return typeof arg === 'object' && arg !== null;
33128 }
33129 exports.isObject = isObject;
33130
33131 function isDate(d) {
33132 return isObject(d) && objectToString(d) === '[object Date]';
33133 }
33134 exports.isDate = isDate;
33135
33136 function isError(e) {
33137 return isObject(e) &&
33138 (objectToString(e) === '[object Error]' || e instanceof Error);
33139 }
33140 exports.isError = isError;
33141
33142 function isFunction(arg) {
33143 return typeof arg === 'function';
33144 }
33145 exports.isFunction = isFunction;
33146
33147 function isPrimitive(arg) {
33148 return arg === null ||
33149 typeof arg === 'boolean' ||
33150 typeof arg === 'number' ||
33151 typeof arg === 'string' ||
33152 typeof arg === 'symbol' || // ES6 symbol
33153 typeof arg === 'undefined';
33154 }
33155 exports.isPrimitive = isPrimitive;
33156
33157 exports.isBuffer = require('./support/isBuffer');
33158
33159 function objectToString(o) {
33160 return Object.prototype.toString.call(o);
33161 }
33162
33163
33164 function pad(n) {
33165 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33166 }
33167
33168
33169 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33170 'Oct', 'Nov', 'Dec'];
33171
33172 // 26 Feb 16:19:34
33173 function timestamp() {
33174 var d = new Date();
33175 var time = [pad(d.getHours()),
33176 pad(d.getMinutes()),
33177 pad(d.getSeconds())].join(':');
33178 return [d.getDate(), months[d.getMonth()], time].join(' ');
33179 }
33180
33181
33182 // log is just a thin wrapper to console.log that prepends a timestamp
33183 exports.log = function() {
33184 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33185 };
33186
33187
33188 /**
33189 * Inherit the prototype methods from one constructor into another.
33190 *
33191 * The Function.prototype.inherits from lang.js rewritten as a standalone
33192 * function (not on Function.prototype). NOTE: If this file is to be loaded
33193 * during bootstrapping this function needs to be rewritten using some native
33194 * functions as prototype setup using normal JavaScript does not work as
33195 * expected during bootstrapping (see mirror.js in r114903).
33196 *
33197 * @param {function} ctor Constructor function which needs to inherit the
33198 * prototype.
33199 * @param {function} superCtor Constructor function to inherit prototype from.
33200 */
33201 exports.inherits = require('inherits');
33202
33203 exports._extend = function(origin, add) {
33204 // Don't do anything if add isn't an object
33205 if (!add || !isObject(add)) return origin;
33206
33207 var keys = Object.keys(add);
33208 var i = keys.length;
33209 while (i--) {
33210 origin[keys[i]] = add[keys[i]];
33211 }
33212 return origin;
33213 };
33214
33215 function hasOwnProperty(obj, prop) {
33216 return Object.prototype.hasOwnProperty.call(obj, prop);
33217 }
33218
33219 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33220 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33221 bitcoin = {
33222 base58: require('bs58'),
33223 bitcoin: require('bitcoinjs-lib'),
33224 ecurve: require('ecurve'),
33225 BigInteger: require('bigi'),
33226 Buffer: require('buffer'),
33227 elliptic: require('elliptic'),
33228 bs58check: require('bs58check'),
33229 }
33230
33231 module.exports = bitcoin;
33232
33233 },{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
33234 // base-x encoding
33235 // Forked from https://github.com/cryptocoinjs/bs58
33236 // Originally written by Mike Hearn for BitcoinJ
33237 // Copyright (c) 2011 Google Inc
33238 // Ported to JavaScript by Stefan Thomas
33239 // Merged Buffer refactorings from base58-native by Stephen Pair
33240 // Copyright (c) 2013 BitPay Inc
33241
33242 var Buffer = require('safe-buffer').Buffer
33243
33244 module.exports = function base (ALPHABET) {
33245 var ALPHABET_MAP = {}
33246 var BASE = ALPHABET.length
33247 var LEADER = ALPHABET.charAt(0)
33248
33249 // pre-compute lookup table
33250 for (var z = 0; z < ALPHABET.length; z++) {
33251 var x = ALPHABET.charAt(z)
33252
33253 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33254 ALPHABET_MAP[x] = z
33255 }
33256
33257 function encode (source) {
33258 if (source.length === 0) return ''
33259
33260 var digits = [0]
33261 for (var i = 0; i < source.length; ++i) {
33262 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33263 carry += digits[j] << 8
33264 digits[j] = carry % BASE
33265 carry = (carry / BASE) | 0
33266 }
33267
33268 while (carry > 0) {
33269 digits.push(carry % BASE)
33270 carry = (carry / BASE) | 0
33271 }
33272 }
33273
33274 var string = ''
33275
33276 // deal with leading zeros
33277 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
33278 // convert digits to a string
33279 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33280
33281 return string
33282 }
33283
33284 function decodeUnsafe (string) {
33285 if (string.length === 0) return Buffer.allocUnsafe(0)
33286
33287 var bytes = [0]
33288 for (var i = 0; i < string.length; i++) {
33289 var value = ALPHABET_MAP[string[i]]
33290 if (value === undefined) return
33291
33292 for (var j = 0, carry = value; j < bytes.length; ++j) {
33293 carry += bytes[j] * BASE
33294 bytes[j] = carry & 0xff
33295 carry >>= 8
33296 }
33297
33298 while (carry > 0) {
33299 bytes.push(carry & 0xff)
33300 carry >>= 8
33301 }
33302 }
33303
33304 // deal with leading zeros
33305 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33306 bytes.push(0)
33307 }
33308
33309 return Buffer.from(bytes.reverse())
33310 }
33311
33312 function decode (string) {
33313 var buffer = decodeUnsafe(string)
33314 if (buffer) return buffer
33315
33316 throw new Error('Non-base' + BASE + ' character')
33317 }
33318
33319 return {
33320 encode: encode,
33321 decodeUnsafe: decodeUnsafe,
33322 decode: decode
33323 }
33324 }
33325
33326 },{"safe-buffer":128}],36:[function(require,module,exports){
33327 'use strict'
33328 let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33329
33330 // pre-compute lookup table
33331 let ALPHABET_MAP = {}
33332 for (let z = 0; z < ALPHABET.length; z++) {
33333 let x = ALPHABET.charAt(z)
33334
33335 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33336 ALPHABET_MAP[x] = z
33337 }
33338
33339 function polymodStep (pre) {
33340 let b = pre >> 25
33341 return ((pre & 0x1FFFFFF) << 5) ^
33342 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33343 (-((b >> 1) & 1) & 0x26508e6d) ^
33344 (-((b >> 2) & 1) & 0x1ea119fa) ^
33345 (-((b >> 3) & 1) & 0x3d4233dd) ^
33346 (-((b >> 4) & 1) & 0x2a1462b3)
33347 }
33348
33349 function prefixChk (prefix) {
33350 let chk = 1
33351 for (let i = 0; i < prefix.length; ++i) {
33352 let c = prefix.charCodeAt(i)
33353 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33354
33355 chk = polymodStep(chk) ^ (c >> 5)
33356 }
33357 chk = polymodStep(chk)
33358
33359 for (let i = 0; i < prefix.length; ++i) {
33360 let v = prefix.charCodeAt(i)
33361 chk = polymodStep(chk) ^ (v & 0x1f)
33362 }
33363 return chk
33364 }
33365
33366 function encode (prefix, words) {
33367 // too long?
33368 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
33369 prefix = prefix.toLowerCase()
33370
33371 // determine chk mod
33372 let chk = prefixChk(prefix)
33373 let result = prefix + '1'
33374 for (let i = 0; i < words.length; ++i) {
33375 let x = words[i]
33376 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33377
33378 chk = polymodStep(chk) ^ x
33379 result += ALPHABET.charAt(x)
33380 }
33381
33382 for (let i = 0; i < 6; ++i) {
33383 chk = polymodStep(chk)
33384 }
33385 chk ^= 1
33386
33387 for (let i = 0; i < 6; ++i) {
33388 let v = (chk >> ((5 - i) * 5)) & 0x1f
33389 result += ALPHABET.charAt(v)
33390 }
33391
33392 return result
33393 }
33394
33395 function decode (str) {
33396 if (str.length < 8) throw new TypeError(str + ' too short')
33397 if (str.length > 90) throw new TypeError(str + ' too long')
33398
33399 // don't allow mixed case
33400 let lowered = str.toLowerCase()
33401 let uppered = str.toUpperCase()
33402 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33403 str = lowered
33404
33405 let split = str.lastIndexOf('1')
33406 if (split === 0) throw new Error('Missing prefix for ' + str)
33407
33408 let prefix = str.slice(0, split)
33409 let wordChars = str.slice(split + 1)
33410 if (wordChars.length < 6) throw new Error('Data too short')
33411
33412 let chk = prefixChk(prefix)
33413 let words = []
33414 for (let i = 0; i < wordChars.length; ++i) {
33415 let c = wordChars.charAt(i)
33416 let v = ALPHABET_MAP[c]
33417 if (v === undefined) throw new Error('Unknown character ' + c)
33418 chk = polymodStep(chk) ^ v
33419
33420 // not in the checksum?
33421 if (i + 6 >= wordChars.length) continue
33422 words.push(v)
33423 }
33424
33425 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33426 return { prefix, words }
33427 }
33428
33429 function convert (data, inBits, outBits, pad) {
33430 let value = 0
33431 let bits = 0
33432 let maxV = (1 << outBits) - 1
33433
33434 let result = []
33435 for (let i = 0; i < data.length; ++i) {
33436 value = (value << inBits) | data[i]
33437 bits += inBits
33438
33439 while (bits >= outBits) {
33440 bits -= outBits
33441 result.push((value >> bits) & maxV)
33442 }
33443 }
33444
33445 if (pad) {
33446 if (bits > 0) {
33447 result.push((value << (outBits - bits)) & maxV)
33448 }
33449 } else {
33450 if (bits >= inBits) throw new Error('Excess padding')
33451 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33452 }
33453
33454 return result
33455 }
33456
33457 function toWords (bytes) {
33458 return convert(bytes, 8, 5, true)
33459 }
33460
33461 function fromWords (words) {
33462 return convert(words, 5, 8, false)
33463 }
33464
33465 module.exports = { decode, encode, toWords, fromWords }
33466
33467 },{}],37:[function(require,module,exports){
33468 // (public) Constructor
33469 function BigInteger(a, b, c) {
33470 if (!(this instanceof BigInteger))
33471 return new BigInteger(a, b, c)
33472
33473 if (a != null) {
33474 if ("number" == typeof a) this.fromNumber(a, b, c)
33475 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33476 else this.fromString(a, b)
33477 }
33478 }
33479
33480 var proto = BigInteger.prototype
33481
33482 // duck-typed isBigInteger
33483 proto.__bigi = require('../package.json').version
33484 BigInteger.isBigInteger = function (obj, check_ver) {
33485 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33486 }
33487
33488 // Bits per digit
33489 var dbits
33490
33491 // am: Compute w_j += (x*this_i), propagate carries,
33492 // c is initial carry, returns final carry.
33493 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33494 // We need to select the fastest one that works in this environment.
33495
33496 // am1: use a single mult and divide to get the high bits,
33497 // max digit bits should be 26 because
33498 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33499 function am1(i, x, w, j, c, n) {
33500 while (--n >= 0) {
33501 var v = x * this[i++] + w[j] + c
33502 c = Math.floor(v / 0x4000000)
33503 w[j++] = v & 0x3ffffff
33504 }
33505 return c
33506 }
33507 // am2 avoids a big mult-and-extract completely.
33508 // Max digit bits should be <= 30 because we do bitwise ops
33509 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33510 function am2(i, x, w, j, c, n) {
33511 var xl = x & 0x7fff,
33512 xh = x >> 15
33513 while (--n >= 0) {
33514 var l = this[i] & 0x7fff
33515 var h = this[i++] >> 15
33516 var m = xh * l + h * xl
33517 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33518 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33519 w[j++] = l & 0x3fffffff
33520 }
33521 return c
33522 }
33523 // Alternately, set max digit bits to 28 since some
33524 // browsers slow down when dealing with 32-bit numbers.
33525 function am3(i, x, w, j, c, n) {
33526 var xl = x & 0x3fff,
33527 xh = x >> 14
33528 while (--n >= 0) {
33529 var l = this[i] & 0x3fff
33530 var h = this[i++] >> 14
33531 var m = xh * l + h * xl
33532 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33533 c = (l >> 28) + (m >> 14) + xh * h
33534 w[j++] = l & 0xfffffff
33535 }
33536 return c
33537 }
33538
33539 // wtf?
33540 BigInteger.prototype.am = am1
33541 dbits = 26
33542
33543 BigInteger.prototype.DB = dbits
33544 BigInteger.prototype.DM = ((1 << dbits) - 1)
33545 var DV = BigInteger.prototype.DV = (1 << dbits)
33546
33547 var BI_FP = 52
33548 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33549 BigInteger.prototype.F1 = BI_FP - dbits
33550 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33551
33552 // Digit conversions
33553 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33554 var BI_RC = new Array()
33555 var rr, vv
33556 rr = "0".charCodeAt(0)
33557 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33558 rr = "a".charCodeAt(0)
33559 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33560 rr = "A".charCodeAt(0)
33561 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33562
33563 function int2char(n) {
33564 return BI_RM.charAt(n)
33565 }
33566
33567 function intAt(s, i) {
33568 var c = BI_RC[s.charCodeAt(i)]
33569 return (c == null) ? -1 : c
33570 }
33571
33572 // (protected) copy this to r
33573 function bnpCopyTo(r) {
33574 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33575 r.t = this.t
33576 r.s = this.s
33577 }
33578
33579 // (protected) set from integer value x, -DV <= x < DV
33580 function bnpFromInt(x) {
33581 this.t = 1
33582 this.s = (x < 0) ? -1 : 0
33583 if (x > 0) this[0] = x
33584 else if (x < -1) this[0] = x + DV
33585 else this.t = 0
33586 }
33587
33588 // return bigint initialized to value
33589 function nbv(i) {
33590 var r = new BigInteger()
33591 r.fromInt(i)
33592 return r
33593 }
33594
33595 // (protected) set from string and radix
33596 function bnpFromString(s, b) {
33597 var self = this
33598
33599 var k
33600 if (b == 16) k = 4
33601 else if (b == 8) k = 3
33602 else if (b == 256) k = 8; // byte array
33603 else if (b == 2) k = 1
33604 else if (b == 32) k = 5
33605 else if (b == 4) k = 2
33606 else {
33607 self.fromRadix(s, b)
33608 return
33609 }
33610 self.t = 0
33611 self.s = 0
33612 var i = s.length,
33613 mi = false,
33614 sh = 0
33615 while (--i >= 0) {
33616 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33617 if (x < 0) {
33618 if (s.charAt(i) == "-") mi = true
33619 continue
33620 }
33621 mi = false
33622 if (sh == 0)
33623 self[self.t++] = x
33624 else if (sh + k > self.DB) {
33625 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33626 self[self.t++] = (x >> (self.DB - sh))
33627 } else
33628 self[self.t - 1] |= x << sh
33629 sh += k
33630 if (sh >= self.DB) sh -= self.DB
33631 }
33632 if (k == 8 && (s[0] & 0x80) != 0) {
33633 self.s = -1
33634 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33635 }
33636 self.clamp()
33637 if (mi) BigInteger.ZERO.subTo(self, self)
33638 }
33639
33640 // (protected) clamp off excess high words
33641 function bnpClamp() {
33642 var c = this.s & this.DM
33643 while (this.t > 0 && this[this.t - 1] == c)--this.t
33644 }
33645
33646 // (public) return string representation in given radix
33647 function bnToString(b) {
33648 var self = this
33649 if (self.s < 0) return "-" + self.negate()
33650 .toString(b)
33651 var k
33652 if (b == 16) k = 4
33653 else if (b == 8) k = 3
33654 else if (b == 2) k = 1
33655 else if (b == 32) k = 5
33656 else if (b == 4) k = 2
33657 else return self.toRadix(b)
33658 var km = (1 << k) - 1,
33659 d, m = false,
33660 r = "",
33661 i = self.t
33662 var p = self.DB - (i * self.DB) % k
33663 if (i-- > 0) {
33664 if (p < self.DB && (d = self[i] >> p) > 0) {
33665 m = true
33666 r = int2char(d)
33667 }
33668 while (i >= 0) {
33669 if (p < k) {
33670 d = (self[i] & ((1 << p) - 1)) << (k - p)
33671 d |= self[--i] >> (p += self.DB - k)
33672 } else {
33673 d = (self[i] >> (p -= k)) & km
33674 if (p <= 0) {
33675 p += self.DB
33676 --i
33677 }
33678 }
33679 if (d > 0) m = true
33680 if (m) r += int2char(d)
33681 }
33682 }
33683 return m ? r : "0"
33684 }
33685
33686 // (public) -this
33687 function bnNegate() {
33688 var r = new BigInteger()
33689 BigInteger.ZERO.subTo(this, r)
33690 return r
33691 }
33692
33693 // (public) |this|
33694 function bnAbs() {
33695 return (this.s < 0) ? this.negate() : this
33696 }
33697
33698 // (public) return + if this > a, - if this < a, 0 if equal
33699 function bnCompareTo(a) {
33700 var r = this.s - a.s
33701 if (r != 0) return r
33702 var i = this.t
33703 r = i - a.t
33704 if (r != 0) return (this.s < 0) ? -r : r
33705 while (--i >= 0)
33706 if ((r = this[i] - a[i]) != 0) return r
33707 return 0
33708 }
33709
33710 // returns bit length of the integer x
33711 function nbits(x) {
33712 var r = 1,
33713 t
33714 if ((t = x >>> 16) != 0) {
33715 x = t
33716 r += 16
33717 }
33718 if ((t = x >> 8) != 0) {
33719 x = t
33720 r += 8
33721 }
33722 if ((t = x >> 4) != 0) {
33723 x = t
33724 r += 4
33725 }
33726 if ((t = x >> 2) != 0) {
33727 x = t
33728 r += 2
33729 }
33730 if ((t = x >> 1) != 0) {
33731 x = t
33732 r += 1
33733 }
33734 return r
33735 }
33736
33737 // (public) return the number of bits in "this"
33738 function bnBitLength() {
33739 if (this.t <= 0) return 0
33740 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33741 }
33742
33743 // (public) return the number of bytes in "this"
33744 function bnByteLength() {
33745 return this.bitLength() >> 3
33746 }
33747
33748 // (protected) r = this << n*DB
33749 function bnpDLShiftTo(n, r) {
33750 var i
33751 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33752 for (i = n - 1; i >= 0; --i) r[i] = 0
33753 r.t = this.t + n
33754 r.s = this.s
33755 }
33756
33757 // (protected) r = this >> n*DB
33758 function bnpDRShiftTo(n, r) {
33759 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33760 r.t = Math.max(this.t - n, 0)
33761 r.s = this.s
33762 }
33763
33764 // (protected) r = this << n
33765 function bnpLShiftTo(n, r) {
33766 var self = this
33767 var bs = n % self.DB
33768 var cbs = self.DB - bs
33769 var bm = (1 << cbs) - 1
33770 var ds = Math.floor(n / self.DB),
33771 c = (self.s << bs) & self.DM,
33772 i
33773 for (i = self.t - 1; i >= 0; --i) {
33774 r[i + ds + 1] = (self[i] >> cbs) | c
33775 c = (self[i] & bm) << bs
33776 }
33777 for (i = ds - 1; i >= 0; --i) r[i] = 0
33778 r[ds] = c
33779 r.t = self.t + ds + 1
33780 r.s = self.s
33781 r.clamp()
33782 }
33783
33784 // (protected) r = this >> n
33785 function bnpRShiftTo(n, r) {
33786 var self = this
33787 r.s = self.s
33788 var ds = Math.floor(n / self.DB)
33789 if (ds >= self.t) {
33790 r.t = 0
33791 return
33792 }
33793 var bs = n % self.DB
33794 var cbs = self.DB - bs
33795 var bm = (1 << bs) - 1
33796 r[0] = self[ds] >> bs
33797 for (var i = ds + 1; i < self.t; ++i) {
33798 r[i - ds - 1] |= (self[i] & bm) << cbs
33799 r[i - ds] = self[i] >> bs
33800 }
33801 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33802 r.t = self.t - ds
33803 r.clamp()
33804 }
33805
33806 // (protected) r = this - a
33807 function bnpSubTo(a, r) {
33808 var self = this
33809 var i = 0,
33810 c = 0,
33811 m = Math.min(a.t, self.t)
33812 while (i < m) {
33813 c += self[i] - a[i]
33814 r[i++] = c & self.DM
33815 c >>= self.DB
33816 }
33817 if (a.t < self.t) {
33818 c -= a.s
33819 while (i < self.t) {
33820 c += self[i]
33821 r[i++] = c & self.DM
33822 c >>= self.DB
33823 }
33824 c += self.s
33825 } else {
33826 c += self.s
33827 while (i < a.t) {
33828 c -= a[i]
33829 r[i++] = c & self.DM
33830 c >>= self.DB
33831 }
33832 c -= a.s
33833 }
33834 r.s = (c < 0) ? -1 : 0
33835 if (c < -1) r[i++] = self.DV + c
33836 else if (c > 0) r[i++] = c
33837 r.t = i
33838 r.clamp()
33839 }
33840
33841 // (protected) r = this * a, r != this,a (HAC 14.12)
33842 // "this" should be the larger one if appropriate.
33843 function bnpMultiplyTo(a, r) {
33844 var x = this.abs(),
33845 y = a.abs()
33846 var i = x.t
33847 r.t = i + y.t
33848 while (--i >= 0) r[i] = 0
33849 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33850 r.s = 0
33851 r.clamp()
33852 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33853 }
33854
33855 // (protected) r = this^2, r != this (HAC 14.16)
33856 function bnpSquareTo(r) {
33857 var x = this.abs()
33858 var i = r.t = 2 * x.t
33859 while (--i >= 0) r[i] = 0
33860 for (i = 0; i < x.t - 1; ++i) {
33861 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33862 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33863 r[i + x.t] -= x.DV
33864 r[i + x.t + 1] = 1
33865 }
33866 }
33867 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33868 r.s = 0
33869 r.clamp()
33870 }
33871
33872 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33873 // r != q, this != m. q or r may be null.
33874 function bnpDivRemTo(m, q, r) {
33875 var self = this
33876 var pm = m.abs()
33877 if (pm.t <= 0) return
33878 var pt = self.abs()
33879 if (pt.t < pm.t) {
33880 if (q != null) q.fromInt(0)
33881 if (r != null) self.copyTo(r)
33882 return
33883 }
33884 if (r == null) r = new BigInteger()
33885 var y = new BigInteger(),
33886 ts = self.s,
33887 ms = m.s
33888 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33889 if (nsh > 0) {
33890 pm.lShiftTo(nsh, y)
33891 pt.lShiftTo(nsh, r)
33892 } else {
33893 pm.copyTo(y)
33894 pt.copyTo(r)
33895 }
33896 var ys = y.t
33897 var y0 = y[ys - 1]
33898 if (y0 == 0) return
33899 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33900 var d1 = self.FV / yt,
33901 d2 = (1 << self.F1) / yt,
33902 e = 1 << self.F2
33903 var i = r.t,
33904 j = i - ys,
33905 t = (q == null) ? new BigInteger() : q
33906 y.dlShiftTo(j, t)
33907 if (r.compareTo(t) >= 0) {
33908 r[r.t++] = 1
33909 r.subTo(t, r)
33910 }
33911 BigInteger.ONE.dlShiftTo(ys, t)
33912 t.subTo(y, y); // "negative" y so we can replace sub with am later
33913 while (y.t < ys) y[y.t++] = 0
33914 while (--j >= 0) {
33915 // Estimate quotient digit
33916 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33917 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33918 y.dlShiftTo(j, t)
33919 r.subTo(t, r)
33920 while (r[i] < --qd) r.subTo(t, r)
33921 }
33922 }
33923 if (q != null) {
33924 r.drShiftTo(ys, q)
33925 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33926 }
33927 r.t = ys
33928 r.clamp()
33929 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33930 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33931 }
33932
33933 // (public) this mod a
33934 function bnMod(a) {
33935 var r = new BigInteger()
33936 this.abs()
33937 .divRemTo(a, null, r)
33938 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33939 return r
33940 }
33941
33942 // Modular reduction using "classic" algorithm
33943 function Classic(m) {
33944 this.m = m
33945 }
33946
33947 function cConvert(x) {
33948 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33949 else return x
33950 }
33951
33952 function cRevert(x) {
33953 return x
33954 }
33955
33956 function cReduce(x) {
33957 x.divRemTo(this.m, null, x)
33958 }
33959
33960 function cMulTo(x, y, r) {
33961 x.multiplyTo(y, r)
33962 this.reduce(r)
33963 }
33964
33965 function cSqrTo(x, r) {
33966 x.squareTo(r)
33967 this.reduce(r)
33968 }
33969
33970 Classic.prototype.convert = cConvert
33971 Classic.prototype.revert = cRevert
33972 Classic.prototype.reduce = cReduce
33973 Classic.prototype.mulTo = cMulTo
33974 Classic.prototype.sqrTo = cSqrTo
33975
33976 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33977 // justification:
33978 // xy == 1 (mod m)
33979 // xy = 1+km
33980 // xy(2-xy) = (1+km)(1-km)
33981 // x[y(2-xy)] = 1-k^2m^2
33982 // x[y(2-xy)] == 1 (mod m^2)
33983 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33984 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33985 // JS multiply "overflows" differently from C/C++, so care is needed here.
33986 function bnpInvDigit() {
33987 if (this.t < 1) return 0
33988 var x = this[0]
33989 if ((x & 1) == 0) return 0
33990 var y = x & 3; // y == 1/x mod 2^2
33991 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
33992 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
33993 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
33994 // last step - calculate inverse mod DV directly
33995 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
33996 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
33997 // we really want the negative inverse, and -DV < y < DV
33998 return (y > 0) ? this.DV - y : -y
33999 }
34000
34001 // Montgomery reduction
34002 function Montgomery(m) {
34003 this.m = m
34004 this.mp = m.invDigit()
34005 this.mpl = this.mp & 0x7fff
34006 this.mph = this.mp >> 15
34007 this.um = (1 << (m.DB - 15)) - 1
34008 this.mt2 = 2 * m.t
34009 }
34010
34011 // xR mod m
34012 function montConvert(x) {
34013 var r = new BigInteger()
34014 x.abs()
34015 .dlShiftTo(this.m.t, r)
34016 r.divRemTo(this.m, null, r)
34017 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34018 return r
34019 }
34020
34021 // x/R mod m
34022 function montRevert(x) {
34023 var r = new BigInteger()
34024 x.copyTo(r)
34025 this.reduce(r)
34026 return r
34027 }
34028
34029 // x = x/R mod m (HAC 14.32)
34030 function montReduce(x) {
34031 while (x.t <= this.mt2) // pad x so am has enough room later
34032 x[x.t++] = 0
34033 for (var i = 0; i < this.m.t; ++i) {
34034 // faster way of calculating u0 = x[i]*mp mod DV
34035 var j = x[i] & 0x7fff
34036 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34037 // use am to combine the multiply-shift-add into one call
34038 j = i + this.m.t
34039 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34040 // propagate carry
34041 while (x[j] >= x.DV) {
34042 x[j] -= x.DV
34043 x[++j]++
34044 }
34045 }
34046 x.clamp()
34047 x.drShiftTo(this.m.t, x)
34048 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34049 }
34050
34051 // r = "x^2/R mod m"; x != r
34052 function montSqrTo(x, r) {
34053 x.squareTo(r)
34054 this.reduce(r)
34055 }
34056
34057 // r = "xy/R mod m"; x,y != r
34058 function montMulTo(x, y, r) {
34059 x.multiplyTo(y, r)
34060 this.reduce(r)
34061 }
34062
34063 Montgomery.prototype.convert = montConvert
34064 Montgomery.prototype.revert = montRevert
34065 Montgomery.prototype.reduce = montReduce
34066 Montgomery.prototype.mulTo = montMulTo
34067 Montgomery.prototype.sqrTo = montSqrTo
34068
34069 // (protected) true iff this is even
34070 function bnpIsEven() {
34071 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34072 }
34073
34074 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34075 function bnpExp(e, z) {
34076 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34077 var r = new BigInteger(),
34078 r2 = new BigInteger(),
34079 g = z.convert(this),
34080 i = nbits(e) - 1
34081 g.copyTo(r)
34082 while (--i >= 0) {
34083 z.sqrTo(r, r2)
34084 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34085 else {
34086 var t = r
34087 r = r2
34088 r2 = t
34089 }
34090 }
34091 return z.revert(r)
34092 }
34093
34094 // (public) this^e % m, 0 <= e < 2^32
34095 function bnModPowInt(e, m) {
34096 var z
34097 if (e < 256 || m.isEven()) z = new Classic(m)
34098 else z = new Montgomery(m)
34099 return this.exp(e, z)
34100 }
34101
34102 // protected
34103 proto.copyTo = bnpCopyTo
34104 proto.fromInt = bnpFromInt
34105 proto.fromString = bnpFromString
34106 proto.clamp = bnpClamp
34107 proto.dlShiftTo = bnpDLShiftTo
34108 proto.drShiftTo = bnpDRShiftTo
34109 proto.lShiftTo = bnpLShiftTo
34110 proto.rShiftTo = bnpRShiftTo
34111 proto.subTo = bnpSubTo
34112 proto.multiplyTo = bnpMultiplyTo
34113 proto.squareTo = bnpSquareTo
34114 proto.divRemTo = bnpDivRemTo
34115 proto.invDigit = bnpInvDigit
34116 proto.isEven = bnpIsEven
34117 proto.exp = bnpExp
34118
34119 // public
34120 proto.toString = bnToString
34121 proto.negate = bnNegate
34122 proto.abs = bnAbs
34123 proto.compareTo = bnCompareTo
34124 proto.bitLength = bnBitLength
34125 proto.byteLength = bnByteLength
34126 proto.mod = bnMod
34127 proto.modPowInt = bnModPowInt
34128
34129 // (public)
34130 function bnClone() {
34131 var r = new BigInteger()
34132 this.copyTo(r)
34133 return r
34134 }
34135
34136 // (public) return value as integer
34137 function bnIntValue() {
34138 if (this.s < 0) {
34139 if (this.t == 1) return this[0] - this.DV
34140 else if (this.t == 0) return -1
34141 } else if (this.t == 1) return this[0]
34142 else if (this.t == 0) return 0
34143 // assumes 16 < DB < 32
34144 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34145 }
34146
34147 // (public) return value as byte
34148 function bnByteValue() {
34149 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34150 }
34151
34152 // (public) return value as short (assumes DB>=16)
34153 function bnShortValue() {
34154 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34155 }
34156
34157 // (protected) return x s.t. r^x < DV
34158 function bnpChunkSize(r) {
34159 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34160 }
34161
34162 // (public) 0 if this == 0, 1 if this > 0
34163 function bnSigNum() {
34164 if (this.s < 0) return -1
34165 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34166 else return 1
34167 }
34168
34169 // (protected) convert to radix string
34170 function bnpToRadix(b) {
34171 if (b == null) b = 10
34172 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34173 var cs = this.chunkSize(b)
34174 var a = Math.pow(b, cs)
34175 var d = nbv(a),
34176 y = new BigInteger(),
34177 z = new BigInteger(),
34178 r = ""
34179 this.divRemTo(d, y, z)
34180 while (y.signum() > 0) {
34181 r = (a + z.intValue())
34182 .toString(b)
34183 .substr(1) + r
34184 y.divRemTo(d, y, z)
34185 }
34186 return z.intValue()
34187 .toString(b) + r
34188 }
34189
34190 // (protected) convert from radix string
34191 function bnpFromRadix(s, b) {
34192 var self = this
34193 self.fromInt(0)
34194 if (b == null) b = 10
34195 var cs = self.chunkSize(b)
34196 var d = Math.pow(b, cs),
34197 mi = false,
34198 j = 0,
34199 w = 0
34200 for (var i = 0; i < s.length; ++i) {
34201 var x = intAt(s, i)
34202 if (x < 0) {
34203 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34204 continue
34205 }
34206 w = b * w + x
34207 if (++j >= cs) {
34208 self.dMultiply(d)
34209 self.dAddOffset(w, 0)
34210 j = 0
34211 w = 0
34212 }
34213 }
34214 if (j > 0) {
34215 self.dMultiply(Math.pow(b, j))
34216 self.dAddOffset(w, 0)
34217 }
34218 if (mi) BigInteger.ZERO.subTo(self, self)
34219 }
34220
34221 // (protected) alternate constructor
34222 function bnpFromNumber(a, b, c) {
34223 var self = this
34224 if ("number" == typeof b) {
34225 // new BigInteger(int,int,RNG)
34226 if (a < 2) self.fromInt(1)
34227 else {
34228 self.fromNumber(a, c)
34229 if (!self.testBit(a - 1)) // force MSB set
34230 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34231 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34232 while (!self.isProbablePrime(b)) {
34233 self.dAddOffset(2, 0)
34234 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34235 }
34236 }
34237 } else {
34238 // new BigInteger(int,RNG)
34239 var x = new Array(),
34240 t = a & 7
34241 x.length = (a >> 3) + 1
34242 b.nextBytes(x)
34243 if (t > 0) x[0] &= ((1 << t) - 1)
34244 else x[0] = 0
34245 self.fromString(x, 256)
34246 }
34247 }
34248
34249 // (public) convert to bigendian byte array
34250 function bnToByteArray() {
34251 var self = this
34252 var i = self.t,
34253 r = new Array()
34254 r[0] = self.s
34255 var p = self.DB - (i * self.DB) % 8,
34256 d, k = 0
34257 if (i-- > 0) {
34258 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34259 r[k++] = d | (self.s << (self.DB - p))
34260 while (i >= 0) {
34261 if (p < 8) {
34262 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34263 d |= self[--i] >> (p += self.DB - 8)
34264 } else {
34265 d = (self[i] >> (p -= 8)) & 0xff
34266 if (p <= 0) {
34267 p += self.DB
34268 --i
34269 }
34270 }
34271 if ((d & 0x80) != 0) d |= -256
34272 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34273 if (k > 0 || d != self.s) r[k++] = d
34274 }
34275 }
34276 return r
34277 }
34278
34279 function bnEquals(a) {
34280 return (this.compareTo(a) == 0)
34281 }
34282
34283 function bnMin(a) {
34284 return (this.compareTo(a) < 0) ? this : a
34285 }
34286
34287 function bnMax(a) {
34288 return (this.compareTo(a) > 0) ? this : a
34289 }
34290
34291 // (protected) r = this op a (bitwise)
34292 function bnpBitwiseTo(a, op, r) {
34293 var self = this
34294 var i, f, m = Math.min(a.t, self.t)
34295 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34296 if (a.t < self.t) {
34297 f = a.s & self.DM
34298 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34299 r.t = self.t
34300 } else {
34301 f = self.s & self.DM
34302 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34303 r.t = a.t
34304 }
34305 r.s = op(self.s, a.s)
34306 r.clamp()
34307 }
34308
34309 // (public) this & a
34310 function op_and(x, y) {
34311 return x & y
34312 }
34313
34314 function bnAnd(a) {
34315 var r = new BigInteger()
34316 this.bitwiseTo(a, op_and, r)
34317 return r
34318 }
34319
34320 // (public) this | a
34321 function op_or(x, y) {
34322 return x | y
34323 }
34324
34325 function bnOr(a) {
34326 var r = new BigInteger()
34327 this.bitwiseTo(a, op_or, r)
34328 return r
34329 }
34330
34331 // (public) this ^ a
34332 function op_xor(x, y) {
34333 return x ^ y
34334 }
34335
34336 function bnXor(a) {
34337 var r = new BigInteger()
34338 this.bitwiseTo(a, op_xor, r)
34339 return r
34340 }
34341
34342 // (public) this & ~a
34343 function op_andnot(x, y) {
34344 return x & ~y
34345 }
34346
34347 function bnAndNot(a) {
34348 var r = new BigInteger()
34349 this.bitwiseTo(a, op_andnot, r)
34350 return r
34351 }
34352
34353 // (public) ~this
34354 function bnNot() {
34355 var r = new BigInteger()
34356 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34357 r.t = this.t
34358 r.s = ~this.s
34359 return r
34360 }
34361
34362 // (public) this << n
34363 function bnShiftLeft(n) {
34364 var r = new BigInteger()
34365 if (n < 0) this.rShiftTo(-n, r)
34366 else this.lShiftTo(n, r)
34367 return r
34368 }
34369
34370 // (public) this >> n
34371 function bnShiftRight(n) {
34372 var r = new BigInteger()
34373 if (n < 0) this.lShiftTo(-n, r)
34374 else this.rShiftTo(n, r)
34375 return r
34376 }
34377
34378 // return index of lowest 1-bit in x, x < 2^31
34379 function lbit(x) {
34380 if (x == 0) return -1
34381 var r = 0
34382 if ((x & 0xffff) == 0) {
34383 x >>= 16
34384 r += 16
34385 }
34386 if ((x & 0xff) == 0) {
34387 x >>= 8
34388 r += 8
34389 }
34390 if ((x & 0xf) == 0) {
34391 x >>= 4
34392 r += 4
34393 }
34394 if ((x & 3) == 0) {
34395 x >>= 2
34396 r += 2
34397 }
34398 if ((x & 1) == 0)++r
34399 return r
34400 }
34401
34402 // (public) returns index of lowest 1-bit (or -1 if none)
34403 function bnGetLowestSetBit() {
34404 for (var i = 0; i < this.t; ++i)
34405 if (this[i] != 0) return i * this.DB + lbit(this[i])
34406 if (this.s < 0) return this.t * this.DB
34407 return -1
34408 }
34409
34410 // return number of 1 bits in x
34411 function cbit(x) {
34412 var r = 0
34413 while (x != 0) {
34414 x &= x - 1
34415 ++r
34416 }
34417 return r
34418 }
34419
34420 // (public) return number of set bits
34421 function bnBitCount() {
34422 var r = 0,
34423 x = this.s & this.DM
34424 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34425 return r
34426 }
34427
34428 // (public) true iff nth bit is set
34429 function bnTestBit(n) {
34430 var j = Math.floor(n / this.DB)
34431 if (j >= this.t) return (this.s != 0)
34432 return ((this[j] & (1 << (n % this.DB))) != 0)
34433 }
34434
34435 // (protected) this op (1<<n)
34436 function bnpChangeBit(n, op) {
34437 var r = BigInteger.ONE.shiftLeft(n)
34438 this.bitwiseTo(r, op, r)
34439 return r
34440 }
34441
34442 // (public) this | (1<<n)
34443 function bnSetBit(n) {
34444 return this.changeBit(n, op_or)
34445 }
34446
34447 // (public) this & ~(1<<n)
34448 function bnClearBit(n) {
34449 return this.changeBit(n, op_andnot)
34450 }
34451
34452 // (public) this ^ (1<<n)
34453 function bnFlipBit(n) {
34454 return this.changeBit(n, op_xor)
34455 }
34456
34457 // (protected) r = this + a
34458 function bnpAddTo(a, r) {
34459 var self = this
34460
34461 var i = 0,
34462 c = 0,
34463 m = Math.min(a.t, self.t)
34464 while (i < m) {
34465 c += self[i] + a[i]
34466 r[i++] = c & self.DM
34467 c >>= self.DB
34468 }
34469 if (a.t < self.t) {
34470 c += a.s
34471 while (i < self.t) {
34472 c += self[i]
34473 r[i++] = c & self.DM
34474 c >>= self.DB
34475 }
34476 c += self.s
34477 } else {
34478 c += self.s
34479 while (i < a.t) {
34480 c += a[i]
34481 r[i++] = c & self.DM
34482 c >>= self.DB
34483 }
34484 c += a.s
34485 }
34486 r.s = (c < 0) ? -1 : 0
34487 if (c > 0) r[i++] = c
34488 else if (c < -1) r[i++] = self.DV + c
34489 r.t = i
34490 r.clamp()
34491 }
34492
34493 // (public) this + a
34494 function bnAdd(a) {
34495 var r = new BigInteger()
34496 this.addTo(a, r)
34497 return r
34498 }
34499
34500 // (public) this - a
34501 function bnSubtract(a) {
34502 var r = new BigInteger()
34503 this.subTo(a, r)
34504 return r
34505 }
34506
34507 // (public) this * a
34508 function bnMultiply(a) {
34509 var r = new BigInteger()
34510 this.multiplyTo(a, r)
34511 return r
34512 }
34513
34514 // (public) this^2
34515 function bnSquare() {
34516 var r = new BigInteger()
34517 this.squareTo(r)
34518 return r
34519 }
34520
34521 // (public) this / a
34522 function bnDivide(a) {
34523 var r = new BigInteger()
34524 this.divRemTo(a, r, null)
34525 return r
34526 }
34527
34528 // (public) this % a
34529 function bnRemainder(a) {
34530 var r = new BigInteger()
34531 this.divRemTo(a, null, r)
34532 return r
34533 }
34534
34535 // (public) [this/a,this%a]
34536 function bnDivideAndRemainder(a) {
34537 var q = new BigInteger(),
34538 r = new BigInteger()
34539 this.divRemTo(a, q, r)
34540 return new Array(q, r)
34541 }
34542
34543 // (protected) this *= n, this >= 0, 1 < n < DV
34544 function bnpDMultiply(n) {
34545 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34546 ++this.t
34547 this.clamp()
34548 }
34549
34550 // (protected) this += n << w words, this >= 0
34551 function bnpDAddOffset(n, w) {
34552 if (n == 0) return
34553 while (this.t <= w) this[this.t++] = 0
34554 this[w] += n
34555 while (this[w] >= this.DV) {
34556 this[w] -= this.DV
34557 if (++w >= this.t) this[this.t++] = 0
34558 ++this[w]
34559 }
34560 }
34561
34562 // A "null" reducer
34563 function NullExp() {}
34564
34565 function nNop(x) {
34566 return x
34567 }
34568
34569 function nMulTo(x, y, r) {
34570 x.multiplyTo(y, r)
34571 }
34572
34573 function nSqrTo(x, r) {
34574 x.squareTo(r)
34575 }
34576
34577 NullExp.prototype.convert = nNop
34578 NullExp.prototype.revert = nNop
34579 NullExp.prototype.mulTo = nMulTo
34580 NullExp.prototype.sqrTo = nSqrTo
34581
34582 // (public) this^e
34583 function bnPow(e) {
34584 return this.exp(e, new NullExp())
34585 }
34586
34587 // (protected) r = lower n words of "this * a", a.t <= n
34588 // "this" should be the larger one if appropriate.
34589 function bnpMultiplyLowerTo(a, n, r) {
34590 var i = Math.min(this.t + a.t, n)
34591 r.s = 0; // assumes a,this >= 0
34592 r.t = i
34593 while (i > 0) r[--i] = 0
34594 var j
34595 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34596 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34597 r.clamp()
34598 }
34599
34600 // (protected) r = "this * a" without lower n words, n > 0
34601 // "this" should be the larger one if appropriate.
34602 function bnpMultiplyUpperTo(a, n, r) {
34603 --n
34604 var i = r.t = this.t + a.t - n
34605 r.s = 0; // assumes a,this >= 0
34606 while (--i >= 0) r[i] = 0
34607 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34608 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34609 r.clamp()
34610 r.drShiftTo(1, r)
34611 }
34612
34613 // Barrett modular reduction
34614 function Barrett(m) {
34615 // setup Barrett
34616 this.r2 = new BigInteger()
34617 this.q3 = new BigInteger()
34618 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34619 this.mu = this.r2.divide(m)
34620 this.m = m
34621 }
34622
34623 function barrettConvert(x) {
34624 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34625 else if (x.compareTo(this.m) < 0) return x
34626 else {
34627 var r = new BigInteger()
34628 x.copyTo(r)
34629 this.reduce(r)
34630 return r
34631 }
34632 }
34633
34634 function barrettRevert(x) {
34635 return x
34636 }
34637
34638 // x = x mod m (HAC 14.42)
34639 function barrettReduce(x) {
34640 var self = this
34641 x.drShiftTo(self.m.t - 1, self.r2)
34642 if (x.t > self.m.t + 1) {
34643 x.t = self.m.t + 1
34644 x.clamp()
34645 }
34646 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34647 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34648 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34649 x.subTo(self.r2, x)
34650 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34651 }
34652
34653 // r = x^2 mod m; x != r
34654 function barrettSqrTo(x, r) {
34655 x.squareTo(r)
34656 this.reduce(r)
34657 }
34658
34659 // r = x*y mod m; x,y != r
34660 function barrettMulTo(x, y, r) {
34661 x.multiplyTo(y, r)
34662 this.reduce(r)
34663 }
34664
34665 Barrett.prototype.convert = barrettConvert
34666 Barrett.prototype.revert = barrettRevert
34667 Barrett.prototype.reduce = barrettReduce
34668 Barrett.prototype.mulTo = barrettMulTo
34669 Barrett.prototype.sqrTo = barrettSqrTo
34670
34671 // (public) this^e % m (HAC 14.85)
34672 function bnModPow(e, m) {
34673 var i = e.bitLength(),
34674 k, r = nbv(1),
34675 z
34676 if (i <= 0) return r
34677 else if (i < 18) k = 1
34678 else if (i < 48) k = 3
34679 else if (i < 144) k = 4
34680 else if (i < 768) k = 5
34681 else k = 6
34682 if (i < 8)
34683 z = new Classic(m)
34684 else if (m.isEven())
34685 z = new Barrett(m)
34686 else
34687 z = new Montgomery(m)
34688
34689 // precomputation
34690 var g = new Array(),
34691 n = 3,
34692 k1 = k - 1,
34693 km = (1 << k) - 1
34694 g[1] = z.convert(this)
34695 if (k > 1) {
34696 var g2 = new BigInteger()
34697 z.sqrTo(g[1], g2)
34698 while (n <= km) {
34699 g[n] = new BigInteger()
34700 z.mulTo(g2, g[n - 2], g[n])
34701 n += 2
34702 }
34703 }
34704
34705 var j = e.t - 1,
34706 w, is1 = true,
34707 r2 = new BigInteger(),
34708 t
34709 i = nbits(e[j]) - 1
34710 while (j >= 0) {
34711 if (i >= k1) w = (e[j] >> (i - k1)) & km
34712 else {
34713 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34714 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34715 }
34716
34717 n = k
34718 while ((w & 1) == 0) {
34719 w >>= 1
34720 --n
34721 }
34722 if ((i -= n) < 0) {
34723 i += this.DB
34724 --j
34725 }
34726 if (is1) { // ret == 1, don't bother squaring or multiplying it
34727 g[w].copyTo(r)
34728 is1 = false
34729 } else {
34730 while (n > 1) {
34731 z.sqrTo(r, r2)
34732 z.sqrTo(r2, r)
34733 n -= 2
34734 }
34735 if (n > 0) z.sqrTo(r, r2)
34736 else {
34737 t = r
34738 r = r2
34739 r2 = t
34740 }
34741 z.mulTo(r2, g[w], r)
34742 }
34743
34744 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34745 z.sqrTo(r, r2)
34746 t = r
34747 r = r2
34748 r2 = t
34749 if (--i < 0) {
34750 i = this.DB - 1
34751 --j
34752 }
34753 }
34754 }
34755 return z.revert(r)
34756 }
34757
34758 // (public) gcd(this,a) (HAC 14.54)
34759 function bnGCD(a) {
34760 var x = (this.s < 0) ? this.negate() : this.clone()
34761 var y = (a.s < 0) ? a.negate() : a.clone()
34762 if (x.compareTo(y) < 0) {
34763 var t = x
34764 x = y
34765 y = t
34766 }
34767 var i = x.getLowestSetBit(),
34768 g = y.getLowestSetBit()
34769 if (g < 0) return x
34770 if (i < g) g = i
34771 if (g > 0) {
34772 x.rShiftTo(g, x)
34773 y.rShiftTo(g, y)
34774 }
34775 while (x.signum() > 0) {
34776 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34777 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34778 if (x.compareTo(y) >= 0) {
34779 x.subTo(y, x)
34780 x.rShiftTo(1, x)
34781 } else {
34782 y.subTo(x, y)
34783 y.rShiftTo(1, y)
34784 }
34785 }
34786 if (g > 0) y.lShiftTo(g, y)
34787 return y
34788 }
34789
34790 // (protected) this % n, n < 2^26
34791 function bnpModInt(n) {
34792 if (n <= 0) return 0
34793 var d = this.DV % n,
34794 r = (this.s < 0) ? n - 1 : 0
34795 if (this.t > 0)
34796 if (d == 0) r = this[0] % n
34797 else
34798 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34799 return r
34800 }
34801
34802 // (public) 1/this % m (HAC 14.61)
34803 function bnModInverse(m) {
34804 var ac = m.isEven()
34805 if (this.signum() === 0) throw new Error('division by zero')
34806 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34807 var u = m.clone(),
34808 v = this.clone()
34809 var a = nbv(1),
34810 b = nbv(0),
34811 c = nbv(0),
34812 d = nbv(1)
34813 while (u.signum() != 0) {
34814 while (u.isEven()) {
34815 u.rShiftTo(1, u)
34816 if (ac) {
34817 if (!a.isEven() || !b.isEven()) {
34818 a.addTo(this, a)
34819 b.subTo(m, b)
34820 }
34821 a.rShiftTo(1, a)
34822 } else if (!b.isEven()) b.subTo(m, b)
34823 b.rShiftTo(1, b)
34824 }
34825 while (v.isEven()) {
34826 v.rShiftTo(1, v)
34827 if (ac) {
34828 if (!c.isEven() || !d.isEven()) {
34829 c.addTo(this, c)
34830 d.subTo(m, d)
34831 }
34832 c.rShiftTo(1, c)
34833 } else if (!d.isEven()) d.subTo(m, d)
34834 d.rShiftTo(1, d)
34835 }
34836 if (u.compareTo(v) >= 0) {
34837 u.subTo(v, u)
34838 if (ac) a.subTo(c, a)
34839 b.subTo(d, b)
34840 } else {
34841 v.subTo(u, v)
34842 if (ac) c.subTo(a, c)
34843 d.subTo(b, d)
34844 }
34845 }
34846 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34847 while (d.compareTo(m) >= 0) d.subTo(m, d)
34848 while (d.signum() < 0) d.addTo(m, d)
34849 return d
34850 }
34851
34852 var lowprimes = [
34853 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34854 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34855 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34856 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34857 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34858 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34859 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34860 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34861 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34862 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34863 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34864 ]
34865
34866 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34867
34868 // (public) test primality with certainty >= 1-.5^t
34869 function bnIsProbablePrime(t) {
34870 var i, x = this.abs()
34871 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34872 for (i = 0; i < lowprimes.length; ++i)
34873 if (x[0] == lowprimes[i]) return true
34874 return false
34875 }
34876 if (x.isEven()) return false
34877 i = 1
34878 while (i < lowprimes.length) {
34879 var m = lowprimes[i],
34880 j = i + 1
34881 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34882 m = x.modInt(m)
34883 while (i < j) if (m % lowprimes[i++] == 0) return false
34884 }
34885 return x.millerRabin(t)
34886 }
34887
34888 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34889 function bnpMillerRabin(t) {
34890 var n1 = this.subtract(BigInteger.ONE)
34891 var k = n1.getLowestSetBit()
34892 if (k <= 0) return false
34893 var r = n1.shiftRight(k)
34894 t = (t + 1) >> 1
34895 if (t > lowprimes.length) t = lowprimes.length
34896 var a = new BigInteger(null)
34897 var j, bases = []
34898 for (var i = 0; i < t; ++i) {
34899 for (;;) {
34900 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34901 if (bases.indexOf(j) == -1) break
34902 }
34903 bases.push(j)
34904 a.fromInt(j)
34905 var y = a.modPow(r, this)
34906 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34907 var j = 1
34908 while (j++ < k && y.compareTo(n1) != 0) {
34909 y = y.modPowInt(2, this)
34910 if (y.compareTo(BigInteger.ONE) == 0) return false
34911 }
34912 if (y.compareTo(n1) != 0) return false
34913 }
34914 }
34915 return true
34916 }
34917
34918 // protected
34919 proto.chunkSize = bnpChunkSize
34920 proto.toRadix = bnpToRadix
34921 proto.fromRadix = bnpFromRadix
34922 proto.fromNumber = bnpFromNumber
34923 proto.bitwiseTo = bnpBitwiseTo
34924 proto.changeBit = bnpChangeBit
34925 proto.addTo = bnpAddTo
34926 proto.dMultiply = bnpDMultiply
34927 proto.dAddOffset = bnpDAddOffset
34928 proto.multiplyLowerTo = bnpMultiplyLowerTo
34929 proto.multiplyUpperTo = bnpMultiplyUpperTo
34930 proto.modInt = bnpModInt
34931 proto.millerRabin = bnpMillerRabin
34932
34933 // public
34934 proto.clone = bnClone
34935 proto.intValue = bnIntValue
34936 proto.byteValue = bnByteValue
34937 proto.shortValue = bnShortValue
34938 proto.signum = bnSigNum
34939 proto.toByteArray = bnToByteArray
34940 proto.equals = bnEquals
34941 proto.min = bnMin
34942 proto.max = bnMax
34943 proto.and = bnAnd
34944 proto.or = bnOr
34945 proto.xor = bnXor
34946 proto.andNot = bnAndNot
34947 proto.not = bnNot
34948 proto.shiftLeft = bnShiftLeft
34949 proto.shiftRight = bnShiftRight
34950 proto.getLowestSetBit = bnGetLowestSetBit
34951 proto.bitCount = bnBitCount
34952 proto.testBit = bnTestBit
34953 proto.setBit = bnSetBit
34954 proto.clearBit = bnClearBit
34955 proto.flipBit = bnFlipBit
34956 proto.add = bnAdd
34957 proto.subtract = bnSubtract
34958 proto.multiply = bnMultiply
34959 proto.divide = bnDivide
34960 proto.remainder = bnRemainder
34961 proto.divideAndRemainder = bnDivideAndRemainder
34962 proto.modPow = bnModPow
34963 proto.modInverse = bnModInverse
34964 proto.pow = bnPow
34965 proto.gcd = bnGCD
34966 proto.isProbablePrime = bnIsProbablePrime
34967
34968 // JSBN-specific extension
34969 proto.square = bnSquare
34970
34971 // constants
34972 BigInteger.ZERO = nbv(0)
34973 BigInteger.ONE = nbv(1)
34974 BigInteger.valueOf = nbv
34975
34976 module.exports = BigInteger
34977
34978 },{"../package.json":40}],38:[function(require,module,exports){
34979 (function (Buffer){
34980 // FIXME: Kind of a weird way to throw exceptions, consider removing
34981 var assert = require('assert')
34982 var BigInteger = require('./bigi')
34983
34984 /**
34985 * Turns a byte array into a big integer.
34986 *
34987 * This function will interpret a byte array as a big integer in big
34988 * endian notation.
34989 */
34990 BigInteger.fromByteArrayUnsigned = function(byteArray) {
34991 // BigInteger expects a DER integer conformant byte array
34992 if (byteArray[0] & 0x80) {
34993 return new BigInteger([0].concat(byteArray))
34994 }
34995
34996 return new BigInteger(byteArray)
34997 }
34998
34999 /**
35000 * Returns a byte array representation of the big integer.
35001 *
35002 * This returns the absolute of the contained value in big endian
35003 * form. A value of zero results in an empty array.
35004 */
35005 BigInteger.prototype.toByteArrayUnsigned = function() {
35006 var byteArray = this.toByteArray()
35007 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
35008 }
35009
35010 BigInteger.fromDERInteger = function(byteArray) {
35011 return new BigInteger(byteArray)
35012 }
35013
35014 /*
35015 * Converts BigInteger to a DER integer representation.
35016 *
35017 * The format for this value uses the most significant bit as a sign
35018 * bit. If the most significant bit is already set and the integer is
35019 * positive, a 0x00 is prepended.
35020 *
35021 * Examples:
35022 *
35023 * 0 => 0x00
35024 * 1 => 0x01
35025 * -1 => 0xff
35026 * 127 => 0x7f
35027 * -127 => 0x81
35028 * 128 => 0x0080
35029 * -128 => 0x80
35030 * 255 => 0x00ff
35031 * -255 => 0xff01
35032 * 16300 => 0x3fac
35033 * -16300 => 0xc054
35034 * 62300 => 0x00f35c
35035 * -62300 => 0xff0ca4
35036 */
35037 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35038
35039 BigInteger.fromBuffer = function(buffer) {
35040 // BigInteger expects a DER integer conformant byte array
35041 if (buffer[0] & 0x80) {
35042 var byteArray = Array.prototype.slice.call(buffer)
35043
35044 return new BigInteger([0].concat(byteArray))
35045 }
35046
35047 return new BigInteger(buffer)
35048 }
35049
35050 BigInteger.fromHex = function(hex) {
35051 if (hex === '') return BigInteger.ZERO
35052
35053 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35054 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35055 return new BigInteger(hex, 16)
35056 }
35057
35058 BigInteger.prototype.toBuffer = function(size) {
35059 var byteArray = this.toByteArrayUnsigned()
35060 var zeros = []
35061
35062 var padding = size - byteArray.length
35063 while (zeros.length < padding) zeros.push(0)
35064
35065 return new Buffer(zeros.concat(byteArray))
35066 }
35067
35068 BigInteger.prototype.toHex = function(size) {
35069 return this.toBuffer(size).toString('hex')
35070 }
35071
35072 }).call(this,require("buffer").Buffer)
35073 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35074 var BigInteger = require('./bigi')
35075
35076 //addons
35077 require('./convert')
35078
35079 module.exports = BigInteger
35080 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35081 module.exports={
35082 "_args": [
35083 [
35084 "bigi",
35085 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
35086 ]
35087 ],
35088 "_from": "bigi@latest",
35089 "_id": "bigi@1.4.2",
35090 "_inCache": true,
35091 "_installable": true,
35092 "_location": "/bigi",
35093 "_nodeVersion": "6.1.0",
35094 "_npmOperationalInternal": {
35095 "host": "packages-12-west.internal.npmjs.com",
35096 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35097 },
35098 "_npmUser": {
35099 "email": "jprichardson@gmail.com",
35100 "name": "jprichardson"
35101 },
35102 "_npmVersion": "3.8.6",
35103 "_phantomChildren": {},
35104 "_requested": {
35105 "name": "bigi",
35106 "raw": "bigi",
35107 "rawSpec": "",
35108 "scope": null,
35109 "spec": "latest",
35110 "type": "tag"
35111 },
35112 "_requiredBy": [
35113 "#USER",
35114 "/bitcoinjs-lib",
35115 "/ecurve"
35116 ],
35117 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35118 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35119 "_shrinkwrap": null,
35120 "_spec": "bigi",
35121 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
35122 "bugs": {
35123 "url": "https://github.com/cryptocoinjs/bigi/issues"
35124 },
35125 "dependencies": {},
35126 "description": "Big integers.",
35127 "devDependencies": {
35128 "coveralls": "^2.11.2",
35129 "istanbul": "^0.3.5",
35130 "jshint": "^2.5.1",
35131 "mocha": "^2.1.0",
35132 "mochify": "^2.1.0"
35133 },
35134 "directories": {},
35135 "dist": {
35136 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35137 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35138 },
35139 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35140 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35141 "keywords": [
35142 "cryptography",
35143 "math",
35144 "bitcoin",
35145 "arbitrary",
35146 "precision",
35147 "arithmetic",
35148 "big",
35149 "integer",
35150 "int",
35151 "number",
35152 "biginteger",
35153 "bigint",
35154 "bignumber",
35155 "decimal",
35156 "float"
35157 ],
35158 "main": "./lib/index.js",
35159 "maintainers": [
35160 {
35161 "email": "boydb@midnightdesign.ws",
35162 "name": "midnightlightning"
35163 },
35164 {
35165 "email": "sidazhang89@gmail.com",
35166 "name": "sidazhang"
35167 },
35168 {
35169 "email": "npm@shesek.info",
35170 "name": "nadav"
35171 },
35172 {
35173 "email": "jprichardson@gmail.com",
35174 "name": "jprichardson"
35175 }
35176 ],
35177 "name": "bigi",
35178 "optionalDependencies": {},
35179 "readme": "ERROR: No README data found!",
35180 "repository": {
35181 "type": "git",
35182 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35183 },
35184 "scripts": {
35185 "browser-test": "mochify --wd -R spec",
35186 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35187 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35188 "jshint": "jshint --config jshint.json lib/*.js ; true",
35189 "test": "_mocha -- test/*.js",
35190 "unit": "mocha"
35191 },
35192 "testling": {
35193 "browsers": [
35194 "ie/9..latest",
35195 "firefox/latest",
35196 "chrome/latest",
35197 "safari/6.0..latest",
35198 "iphone/6.0..latest",
35199 "android-browser/4.2..latest"
35200 ],
35201 "files": "test/*.js",
35202 "harness": "mocha"
35203 },
35204 "version": "1.4.2"
35205 }
35206
35207 },{}],41:[function(require,module,exports){
35208 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35209 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35210 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35211
35212 var Buffer = require('safe-buffer').Buffer
35213
35214 function check (buffer) {
35215 if (buffer.length < 8) return false
35216 if (buffer.length > 72) return false
35217 if (buffer[0] !== 0x30) return false
35218 if (buffer[1] !== buffer.length - 2) return false
35219 if (buffer[2] !== 0x02) return false
35220
35221 var lenR = buffer[3]
35222 if (lenR === 0) return false
35223 if (5 + lenR >= buffer.length) return false
35224 if (buffer[4 + lenR] !== 0x02) return false
35225
35226 var lenS = buffer[5 + lenR]
35227 if (lenS === 0) return false
35228 if ((6 + lenR + lenS) !== buffer.length) return false
35229
35230 if (buffer[4] & 0x80) return false
35231 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35232
35233 if (buffer[lenR + 6] & 0x80) return false
35234 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35235 return true
35236 }
35237
35238 function decode (buffer) {
35239 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35240 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35241 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35242 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35243 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35244
35245 var lenR = buffer[3]
35246 if (lenR === 0) throw new Error('R length is zero')
35247 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35248 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35249
35250 var lenS = buffer[5 + lenR]
35251 if (lenS === 0) throw new Error('S length is zero')
35252 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35253
35254 if (buffer[4] & 0x80) throw new Error('R value is negative')
35255 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35256
35257 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35258 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35259
35260 // non-BIP66 - extract R, S values
35261 return {
35262 r: buffer.slice(4, 4 + lenR),
35263 s: buffer.slice(6 + lenR)
35264 }
35265 }
35266
35267 /*
35268 * Expects r and s to be positive DER integers.
35269 *
35270 * The DER format uses the most significant bit as a sign bit (& 0x80).
35271 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35272 *
35273 * Examples:
35274 *
35275 * 0 => 0x00
35276 * 1 => 0x01
35277 * -1 => 0xff
35278 * 127 => 0x7f
35279 * -127 => 0x81
35280 * 128 => 0x0080
35281 * -128 => 0x80
35282 * 255 => 0x00ff
35283 * -255 => 0xff01
35284 * 16300 => 0x3fac
35285 * -16300 => 0xc054
35286 * 62300 => 0x00f35c
35287 * -62300 => 0xff0ca4
35288 */
35289 function encode (r, s) {
35290 var lenR = r.length
35291 var lenS = s.length
35292 if (lenR === 0) throw new Error('R length is zero')
35293 if (lenS === 0) throw new Error('S length is zero')
35294 if (lenR > 33) throw new Error('R length is too long')
35295 if (lenS > 33) throw new Error('S length is too long')
35296 if (r[0] & 0x80) throw new Error('R value is negative')
35297 if (s[0] & 0x80) throw new Error('S value is negative')
35298 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35299 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35300
35301 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35302
35303 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35304 signature[0] = 0x30
35305 signature[1] = signature.length - 2
35306 signature[2] = 0x02
35307 signature[3] = r.length
35308 r.copy(signature, 4)
35309 signature[4 + lenR] = 0x02
35310 signature[5 + lenR] = s.length
35311 s.copy(signature, 6 + lenR)
35312
35313 return signature
35314 }
35315
35316 module.exports = {
35317 check: check,
35318 decode: decode,
35319 encode: encode
35320 }
35321
35322 },{"safe-buffer":128}],42:[function(require,module,exports){
35323 module.exports={
35324 "OP_FALSE": 0,
35325 "OP_0": 0,
35326 "OP_PUSHDATA1": 76,
35327 "OP_PUSHDATA2": 77,
35328 "OP_PUSHDATA4": 78,
35329 "OP_1NEGATE": 79,
35330 "OP_RESERVED": 80,
35331 "OP_1": 81,
35332 "OP_TRUE": 81,
35333 "OP_2": 82,
35334 "OP_3": 83,
35335 "OP_4": 84,
35336 "OP_5": 85,
35337 "OP_6": 86,
35338 "OP_7": 87,
35339 "OP_8": 88,
35340 "OP_9": 89,
35341 "OP_10": 90,
35342 "OP_11": 91,
35343 "OP_12": 92,
35344 "OP_13": 93,
35345 "OP_14": 94,
35346 "OP_15": 95,
35347 "OP_16": 96,
35348
35349 "OP_NOP": 97,
35350 "OP_VER": 98,
35351 "OP_IF": 99,
35352 "OP_NOTIF": 100,
35353 "OP_VERIF": 101,
35354 "OP_VERNOTIF": 102,
35355 "OP_ELSE": 103,
35356 "OP_ENDIF": 104,
35357 "OP_VERIFY": 105,
35358 "OP_RETURN": 106,
35359
35360 "OP_TOALTSTACK": 107,
35361 "OP_FROMALTSTACK": 108,
35362 "OP_2DROP": 109,
35363 "OP_2DUP": 110,
35364 "OP_3DUP": 111,
35365 "OP_2OVER": 112,
35366 "OP_2ROT": 113,
35367 "OP_2SWAP": 114,
35368 "OP_IFDUP": 115,
35369 "OP_DEPTH": 116,
35370 "OP_DROP": 117,
35371 "OP_DUP": 118,
35372 "OP_NIP": 119,
35373 "OP_OVER": 120,
35374 "OP_PICK": 121,
35375 "OP_ROLL": 122,
35376 "OP_ROT": 123,
35377 "OP_SWAP": 124,
35378 "OP_TUCK": 125,
35379
35380 "OP_CAT": 126,
35381 "OP_SUBSTR": 127,
35382 "OP_LEFT": 128,
35383 "OP_RIGHT": 129,
35384 "OP_SIZE": 130,
35385
35386 "OP_INVERT": 131,
35387 "OP_AND": 132,
35388 "OP_OR": 133,
35389 "OP_XOR": 134,
35390 "OP_EQUAL": 135,
35391 "OP_EQUALVERIFY": 136,
35392 "OP_RESERVED1": 137,
35393 "OP_RESERVED2": 138,
35394
35395 "OP_1ADD": 139,
35396 "OP_1SUB": 140,
35397 "OP_2MUL": 141,
35398 "OP_2DIV": 142,
35399 "OP_NEGATE": 143,
35400 "OP_ABS": 144,
35401 "OP_NOT": 145,
35402 "OP_0NOTEQUAL": 146,
35403 "OP_ADD": 147,
35404 "OP_SUB": 148,
35405 "OP_MUL": 149,
35406 "OP_DIV": 150,
35407 "OP_MOD": 151,
35408 "OP_LSHIFT": 152,
35409 "OP_RSHIFT": 153,
35410
35411 "OP_BOOLAND": 154,
35412 "OP_BOOLOR": 155,
35413 "OP_NUMEQUAL": 156,
35414 "OP_NUMEQUALVERIFY": 157,
35415 "OP_NUMNOTEQUAL": 158,
35416 "OP_LESSTHAN": 159,
35417 "OP_GREATERTHAN": 160,
35418 "OP_LESSTHANOREQUAL": 161,
35419 "OP_GREATERTHANOREQUAL": 162,
35420 "OP_MIN": 163,
35421 "OP_MAX": 164,
35422
35423 "OP_WITHIN": 165,
35424
35425 "OP_RIPEMD160": 166,
35426 "OP_SHA1": 167,
35427 "OP_SHA256": 168,
35428 "OP_HASH160": 169,
35429 "OP_HASH256": 170,
35430 "OP_CODESEPARATOR": 171,
35431 "OP_CHECKSIG": 172,
35432 "OP_CHECKSIGVERIFY": 173,
35433 "OP_CHECKMULTISIG": 174,
35434 "OP_CHECKMULTISIGVERIFY": 175,
35435
35436 "OP_NOP1": 176,
35437 "OP_NOP2": 177,
35438 "OP_CHECKLOCKTIMEVERIFY": 177,
35439
35440 "OP_NOP3": 178,
35441 "OP_NOP4": 179,
35442 "OP_NOP5": 180,
35443 "OP_NOP6": 181,
35444 "OP_NOP7": 182,
35445 "OP_NOP8": 183,
35446 "OP_NOP9": 184,
35447 "OP_NOP10": 185,
35448
35449 "OP_PUBKEYHASH": 253,
35450 "OP_PUBKEY": 254,
35451 "OP_INVALIDOPCODE": 255
35452 }
35453
35454 },{}],43:[function(require,module,exports){
35455 var OPS = require('./index.json')
35456
35457 var map = {}
35458 for (var op in OPS) {
35459 var code = OPS[op]
35460 map[code] = op
35461 }
35462
35463 module.exports = map
35464
35465 },{"./index.json":42}],44:[function(require,module,exports){
35466 var Buffer = require('safe-buffer').Buffer
35467 var bech32 = require('bech32')
35468 var bs58check = require('bs58check')
35469 var bscript = require('./script')
35470 var btemplates = require('./templates')
35471 var networks = require('./networks')
35472 var typeforce = require('typeforce')
35473 var types = require('./types')
35474
35475 function fromBase58Check (address) {
35476 var payload = bs58check.decode(address)
35477
35478 // TODO: 4.0.0, move to "toOutputScript"
35479 if (payload.length < 21) throw new TypeError(address + ' is too short')
35480 if (payload.length > 21) throw new TypeError(address + ' is too long')
35481
35482 var version = payload.readUInt8(0)
35483 var hash = payload.slice(1)
35484
35485 return { version: version, hash: hash }
35486 }
35487
35488 function fromBech32 (address) {
35489 var result = bech32.decode(address)
35490 var data = bech32.fromWords(result.words.slice(1))
35491
35492 return {
35493 version: result.words[0],
35494 prefix: result.prefix,
35495 data: Buffer.from(data)
35496 }
35497 }
35498
35499 function toBase58Check (hash, version) {
35500 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35501
35502 var payload = Buffer.allocUnsafe(21)
35503 payload.writeUInt8(version, 0)
35504 hash.copy(payload, 1)
35505
35506 return bs58check.encode(payload)
35507 }
35508
35509 function toBech32 (data, version, prefix) {
35510 var words = bech32.toWords(data)
35511 words.unshift(version)
35512
35513 return bech32.encode(prefix, words)
35514 }
35515
35516 function fromOutputScript (outputScript, network) {
35517 network = network || networks.bitcoin
35518
35519 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35520 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35521 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35522 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35523
35524 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35525 }
35526
35527 function toOutputScript (address, network) {
35528 network = network || networks.bitcoin
35529
35530 var decode
35531 try {
35532 decode = fromBase58Check(address)
35533 } catch (e) {}
35534
35535 if (decode) {
35536 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35537 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35538 } else {
35539 try {
35540 decode = fromBech32(address)
35541 } catch (e) {}
35542
35543 if (decode) {
35544 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35545 if (decode.version === 0) {
35546 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35547 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35548 }
35549 }
35550 }
35551
35552 throw new Error(address + ' has no matching Script')
35553 }
35554
35555 module.exports = {
35556 fromBase58Check: fromBase58Check,
35557 fromBech32: fromBech32,
35558 fromOutputScript: fromOutputScript,
35559 toBase58Check: toBase58Check,
35560 toBech32: toBech32,
35561 toOutputScript: toOutputScript
35562 }
35563
35564 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
35565 var Buffer = require('safe-buffer').Buffer
35566 var bcrypto = require('./crypto')
35567 var fastMerkleRoot = require('merkle-lib/fastRoot')
35568 var typeforce = require('typeforce')
35569 var types = require('./types')
35570 var varuint = require('varuint-bitcoin')
35571
35572 var Transaction = require('./transaction')
35573
35574 function Block () {
35575 this.version = 1
35576 this.prevHash = null
35577 this.merkleRoot = null
35578 this.timestamp = 0
35579 this.bits = 0
35580 this.nonce = 0
35581 }
35582
35583 Block.fromBuffer = function (buffer) {
35584 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35585
35586 var offset = 0
35587 function readSlice (n) {
35588 offset += n
35589 return buffer.slice(offset - n, offset)
35590 }
35591
35592 function readUInt32 () {
35593 var i = buffer.readUInt32LE(offset)
35594 offset += 4
35595 return i
35596 }
35597
35598 function readInt32 () {
35599 var i = buffer.readInt32LE(offset)
35600 offset += 4
35601 return i
35602 }
35603
35604 var block = new Block()
35605 block.version = readInt32()
35606 block.prevHash = readSlice(32)
35607 block.merkleRoot = readSlice(32)
35608 block.timestamp = readUInt32()
35609 block.bits = readUInt32()
35610 block.nonce = readUInt32()
35611
35612 if (buffer.length === 80) return block
35613
35614 function readVarInt () {
35615 var vi = varuint.decode(buffer, offset)
35616 offset += varuint.decode.bytes
35617 return vi
35618 }
35619
35620 function readTransaction () {
35621 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35622 offset += tx.byteLength()
35623 return tx
35624 }
35625
35626 var nTransactions = readVarInt()
35627 block.transactions = []
35628
35629 for (var i = 0; i < nTransactions; ++i) {
35630 var tx = readTransaction()
35631 block.transactions.push(tx)
35632 }
35633
35634 return block
35635 }
35636
35637 Block.prototype.byteLength = function (headersOnly) {
35638 if (headersOnly || !this.transactions) return 80
35639
35640 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35641 return a + x.byteLength()
35642 }, 0)
35643 }
35644
35645 Block.fromHex = function (hex) {
35646 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35647 }
35648
35649 Block.prototype.getHash = function () {
35650 return bcrypto.hash256(this.toBuffer(true))
35651 }
35652
35653 Block.prototype.getId = function () {
35654 return this.getHash().reverse().toString('hex')
35655 }
35656
35657 Block.prototype.getUTCDate = function () {
35658 var date = new Date(0) // epoch
35659 date.setUTCSeconds(this.timestamp)
35660
35661 return date
35662 }
35663
35664 // TODO: buffer, offset compatibility
35665 Block.prototype.toBuffer = function (headersOnly) {
35666 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35667
35668 var offset = 0
35669 function writeSlice (slice) {
35670 slice.copy(buffer, offset)
35671 offset += slice.length
35672 }
35673
35674 function writeInt32 (i) {
35675 buffer.writeInt32LE(i, offset)
35676 offset += 4
35677 }
35678 function writeUInt32 (i) {
35679 buffer.writeUInt32LE(i, offset)
35680 offset += 4
35681 }
35682
35683 writeInt32(this.version)
35684 writeSlice(this.prevHash)
35685 writeSlice(this.merkleRoot)
35686 writeUInt32(this.timestamp)
35687 writeUInt32(this.bits)
35688 writeUInt32(this.nonce)
35689
35690 if (headersOnly || !this.transactions) return buffer
35691
35692 varuint.encode(this.transactions.length, buffer, offset)
35693 offset += varuint.encode.bytes
35694
35695 this.transactions.forEach(function (tx) {
35696 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35697 tx.toBuffer(buffer, offset)
35698 offset += txSize
35699 })
35700
35701 return buffer
35702 }
35703
35704 Block.prototype.toHex = function (headersOnly) {
35705 return this.toBuffer(headersOnly).toString('hex')
35706 }
35707
35708 Block.calculateTarget = function (bits) {
35709 var exponent = ((bits & 0xff000000) >> 24) - 3
35710 var mantissa = bits & 0x007fffff
35711 var target = Buffer.alloc(32, 0)
35712 target.writeUInt32BE(mantissa, 28 - exponent)
35713 return target
35714 }
35715
35716 Block.calculateMerkleRoot = function (transactions) {
35717 typeforce([{ getHash: types.Function }], transactions)
35718 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35719
35720 var hashes = transactions.map(function (transaction) {
35721 return transaction.getHash()
35722 })
35723
35724 return fastMerkleRoot(hashes, bcrypto.hash256)
35725 }
35726
35727 Block.prototype.checkMerkleRoot = function () {
35728 if (!this.transactions) return false
35729
35730 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35731 return this.merkleRoot.compare(actualMerkleRoot) === 0
35732 }
35733
35734 Block.prototype.checkProofOfWork = function () {
35735 var hash = this.getHash().reverse()
35736 var target = Block.calculateTarget(this.bits)
35737
35738 return hash.compare(target) <= 0
35739 }
35740
35741 module.exports = Block
35742
35743 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
35744 var pushdata = require('pushdata-bitcoin')
35745 var varuint = require('varuint-bitcoin')
35746
35747 // https://github.com/feross/buffer/blob/master/index.js#L1127
35748 function verifuint (value, max) {
35749 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35750 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35751 if (value > max) throw new Error('RangeError: value out of range')
35752 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35753 }
35754
35755 function readUInt64LE (buffer, offset) {
35756 var a = buffer.readUInt32LE(offset)
35757 var b = buffer.readUInt32LE(offset + 4)
35758 b *= 0x100000000
35759
35760 verifuint(b + a, 0x001fffffffffffff)
35761
35762 return b + a
35763 }
35764
35765 function writeUInt64LE (buffer, value, offset) {
35766 verifuint(value, 0x001fffffffffffff)
35767
35768 buffer.writeInt32LE(value & -1, offset)
35769 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35770 return offset + 8
35771 }
35772
35773 // TODO: remove in 4.0.0?
35774 function readVarInt (buffer, offset) {
35775 var result = varuint.decode(buffer, offset)
35776
35777 return {
35778 number: result,
35779 size: varuint.decode.bytes
35780 }
35781 }
35782
35783 // TODO: remove in 4.0.0?
35784 function writeVarInt (buffer, number, offset) {
35785 varuint.encode(number, buffer, offset)
35786 return varuint.encode.bytes
35787 }
35788
35789 module.exports = {
35790 pushDataSize: pushdata.encodingLength,
35791 readPushDataInt: pushdata.decode,
35792 readUInt64LE: readUInt64LE,
35793 readVarInt: readVarInt,
35794 varIntBuffer: varuint.encode,
35795 varIntSize: varuint.encodingLength,
35796 writePushDataInt: pushdata.encode,
35797 writeUInt64LE: writeUInt64LE,
35798 writeVarInt: writeVarInt
35799 }
35800
35801 },{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
35802 var createHash = require('create-hash')
35803
35804 function ripemd160 (buffer) {
35805 return createHash('rmd160').update(buffer).digest()
35806 }
35807
35808 function sha1 (buffer) {
35809 return createHash('sha1').update(buffer).digest()
35810 }
35811
35812 function sha256 (buffer) {
35813 return createHash('sha256').update(buffer).digest()
35814 }
35815
35816 function hash160 (buffer) {
35817 return ripemd160(sha256(buffer))
35818 }
35819
35820 function hash256 (buffer) {
35821 return sha256(sha256(buffer))
35822 }
35823
35824 module.exports = {
35825 hash160: hash160,
35826 hash256: hash256,
35827 ripemd160: ripemd160,
35828 sha1: sha1,
35829 sha256: sha256
35830 }
35831
35832 },{"create-hash":87}],48:[function(require,module,exports){
35833 var Buffer = require('safe-buffer').Buffer
35834 var createHmac = require('create-hmac')
35835 var typeforce = require('typeforce')
35836 var types = require('./types')
35837
35838 var BigInteger = require('bigi')
35839 var ECSignature = require('./ecsignature')
35840
35841 var ZERO = Buffer.alloc(1, 0)
35842 var ONE = Buffer.alloc(1, 1)
35843
35844 var ecurve = require('ecurve')
35845 var secp256k1 = ecurve.getCurveByName('secp256k1')
35846
35847 // https://tools.ietf.org/html/rfc6979#section-3.2
35848 function deterministicGenerateK (hash, x, checkSig) {
35849 typeforce(types.tuple(
35850 types.Hash256bit,
35851 types.Buffer256bit,
35852 types.Function
35853 ), arguments)
35854
35855 // Step A, ignored as hash already provided
35856 // Step B
35857 // Step C
35858 var k = Buffer.alloc(32, 0)
35859 var v = Buffer.alloc(32, 1)
35860
35861 // Step D
35862 k = createHmac('sha256', k)
35863 .update(v)
35864 .update(ZERO)
35865 .update(x)
35866 .update(hash)
35867 .digest()
35868
35869 // Step E
35870 v = createHmac('sha256', k).update(v).digest()
35871
35872 // Step F
35873 k = createHmac('sha256', k)
35874 .update(v)
35875 .update(ONE)
35876 .update(x)
35877 .update(hash)
35878 .digest()
35879
35880 // Step G
35881 v = createHmac('sha256', k).update(v).digest()
35882
35883 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35884 // Step H2b
35885 v = createHmac('sha256', k).update(v).digest()
35886
35887 var T = BigInteger.fromBuffer(v)
35888
35889 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35890 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35891 k = createHmac('sha256', k)
35892 .update(v)
35893 .update(ZERO)
35894 .digest()
35895
35896 v = createHmac('sha256', k).update(v).digest()
35897
35898 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35899 // Step H2b again
35900 v = createHmac('sha256', k).update(v).digest()
35901 T = BigInteger.fromBuffer(v)
35902 }
35903
35904 return T
35905 }
35906
35907 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35908
35909 function sign (hash, d) {
35910 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35911
35912 var x = d.toBuffer(32)
35913 var e = BigInteger.fromBuffer(hash)
35914 var n = secp256k1.n
35915 var G = secp256k1.G
35916
35917 var r, s
35918 deterministicGenerateK(hash, x, function (k) {
35919 var Q = G.multiply(k)
35920
35921 if (secp256k1.isInfinity(Q)) return false
35922
35923 r = Q.affineX.mod(n)
35924 if (r.signum() === 0) return false
35925
35926 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35927 if (s.signum() === 0) return false
35928
35929 return true
35930 })
35931
35932 // enforce low S values, see bip62: 'low s values in signatures'
35933 if (s.compareTo(N_OVER_TWO) > 0) {
35934 s = n.subtract(s)
35935 }
35936
35937 return new ECSignature(r, s)
35938 }
35939
35940 function verify (hash, signature, Q) {
35941 typeforce(types.tuple(
35942 types.Hash256bit,
35943 types.ECSignature,
35944 types.ECPoint
35945 ), arguments)
35946
35947 var n = secp256k1.n
35948 var G = secp256k1.G
35949
35950 var r = signature.r
35951 var s = signature.s
35952
35953 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35954 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35955 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35956
35957 // 1.4.2 H = Hash(M), already done by the user
35958 // 1.4.3 e = H
35959 var e = BigInteger.fromBuffer(hash)
35960
35961 // Compute s^-1
35962 var sInv = s.modInverse(n)
35963
35964 // 1.4.4 Compute u1 = es^−1 mod n
35965 // u2 = rs^−1 mod n
35966 var u1 = e.multiply(sInv).mod(n)
35967 var u2 = r.multiply(sInv).mod(n)
35968
35969 // 1.4.5 Compute R = (xR, yR)
35970 // R = u1G + u2Q
35971 var R = G.multiplyTwo(u1, Q, u2)
35972
35973 // 1.4.5 (cont.) Enforce R is not at infinity
35974 if (secp256k1.isInfinity(R)) return false
35975
35976 // 1.4.6 Convert the field element R.x to an integer
35977 var xR = R.affineX
35978
35979 // 1.4.7 Set v = xR mod n
35980 var v = xR.mod(n)
35981
35982 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35983 return v.equals(r)
35984 }
35985
35986 module.exports = {
35987 deterministicGenerateK: deterministicGenerateK,
35988 sign: sign,
35989 verify: verify,
35990
35991 // TODO: remove
35992 __curve: secp256k1
35993 }
35994
35995 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
35996 var baddress = require('./address')
35997 var bcrypto = require('./crypto')
35998 var ecdsa = require('./ecdsa')
35999 var randomBytes = require('randombytes')
36000 var typeforce = require('typeforce')
36001 var types = require('./types')
36002 var wif = require('wif')
36003
36004 var NETWORKS = require('./networks')
36005 var BigInteger = require('bigi')
36006
36007 var ecurve = require('ecurve')
36008 var secp256k1 = ecdsa.__curve
36009
36010 function ECPair (d, Q, options) {
36011 if (options) {
36012 typeforce({
36013 compressed: types.maybe(types.Boolean),
36014 network: types.maybe(types.Network)
36015 }, options)
36016 }
36017
36018 options = options || {}
36019
36020 if (d) {
36021 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36022 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36023 if (Q) throw new TypeError('Unexpected publicKey parameter')
36024
36025 this.d = d
36026 } else {
36027 typeforce(types.ECPoint, Q)
36028
36029 this.__Q = Q
36030 }
36031
36032 this.compressed = options.compressed === undefined ? true : options.compressed
36033 this.network = options.network || NETWORKS.bitcoin
36034 }
36035
36036 Object.defineProperty(ECPair.prototype, 'Q', {
36037 get: function () {
36038 if (!this.__Q && this.d) {
36039 this.__Q = secp256k1.G.multiply(this.d)
36040 }
36041
36042 return this.__Q
36043 }
36044 })
36045
36046 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36047 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36048
36049 return new ECPair(null, Q, {
36050 compressed: Q.compressed,
36051 network: network
36052 })
36053 }
36054
36055 ECPair.fromWIF = function (string, network) {
36056 var decoded = wif.decode(string)
36057 var version = decoded.version
36058
36059 // list of networks?
36060 if (types.Array(network)) {
36061 network = network.filter(function (x) {
36062 return version === x.wif
36063 }).pop()
36064
36065 if (!network) throw new Error('Unknown network version')
36066
36067 // otherwise, assume a network object (or default to bitcoin)
36068 } else {
36069 network = network || NETWORKS.bitcoin
36070
36071 if (version !== network.wif) throw new Error('Invalid network version')
36072 }
36073
36074 var d = BigInteger.fromBuffer(decoded.privateKey)
36075
36076 return new ECPair(d, null, {
36077 compressed: decoded.compressed,
36078 network: network
36079 })
36080 }
36081
36082 ECPair.makeRandom = function (options) {
36083 options = options || {}
36084
36085 var rng = options.rng || randomBytes
36086
36087 var d
36088 do {
36089 var buffer = rng(32)
36090 typeforce(types.Buffer256bit, buffer)
36091
36092 d = BigInteger.fromBuffer(buffer)
36093 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36094
36095 return new ECPair(d, null, options)
36096 }
36097
36098 ECPair.prototype.getAddress = function () {
36099 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36100 }
36101
36102 ECPair.prototype.getNetwork = function () {
36103 return this.network
36104 }
36105
36106 ECPair.prototype.getPublicKeyBuffer = function () {
36107 return this.Q.getEncoded(this.compressed)
36108 }
36109
36110 ECPair.prototype.sign = function (hash) {
36111 if (!this.d) throw new Error('Missing private key')
36112
36113 return ecdsa.sign(hash, this.d)
36114 }
36115
36116 ECPair.prototype.toWIF = function () {
36117 if (!this.d) throw new Error('Missing private key')
36118
36119 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36120 }
36121
36122 ECPair.prototype.verify = function (hash, signature) {
36123 return ecdsa.verify(hash, signature, this.Q)
36124 }
36125
36126 module.exports = ECPair
36127
36128 },{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":94,"randombytes":126,"typeforce":139,"wif":142}],50:[function(require,module,exports){
36129 (function (Buffer){
36130 var bip66 = require('bip66')
36131 var typeforce = require('typeforce')
36132 var types = require('./types')
36133
36134 var BigInteger = require('bigi')
36135
36136 function ECSignature (r, s) {
36137 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36138
36139 this.r = r
36140 this.s = s
36141 }
36142
36143 ECSignature.parseCompact = function (buffer) {
36144 typeforce(types.BufferN(65), buffer)
36145
36146 var flagByte = buffer.readUInt8(0) - 27
36147 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36148
36149 var compressed = !!(flagByte & 4)
36150 var recoveryParam = flagByte & 3
36151 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36152
36153 return {
36154 compressed: compressed,
36155 i: recoveryParam,
36156 signature: signature
36157 }
36158 }
36159
36160 ECSignature.fromRSBuffer = function (buffer) {
36161 typeforce(types.BufferN(64), buffer)
36162
36163 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36164 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36165 return new ECSignature(r, s)
36166 }
36167
36168 ECSignature.fromDER = function (buffer) {
36169 var decode = bip66.decode(buffer)
36170 var r = BigInteger.fromDERInteger(decode.r)
36171 var s = BigInteger.fromDERInteger(decode.s)
36172
36173 return new ECSignature(r, s)
36174 }
36175
36176 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36177 ECSignature.parseScriptSignature = function (buffer) {
36178 var hashType = buffer.readUInt8(buffer.length - 1)
36179 var hashTypeMod = hashType & ~0x80
36180
36181 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36182
36183 return {
36184 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36185 hashType: hashType
36186 }
36187 }
36188
36189 ECSignature.prototype.toCompact = function (i, compressed) {
36190 if (compressed) {
36191 i += 4
36192 }
36193
36194 i += 27
36195
36196 var buffer = Buffer.alloc(65)
36197 buffer.writeUInt8(i, 0)
36198 this.toRSBuffer(buffer, 1)
36199 return buffer
36200 }
36201
36202 ECSignature.prototype.toDER = function () {
36203 var r = Buffer.from(this.r.toDERInteger())
36204 var s = Buffer.from(this.s.toDERInteger())
36205
36206 return bip66.encode(r, s)
36207 }
36208
36209 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36210 buffer = buffer || Buffer.alloc(64)
36211 this.r.toBuffer(32).copy(buffer, offset)
36212 this.s.toBuffer(32).copy(buffer, offset + 32)
36213 return buffer
36214 }
36215
36216 ECSignature.prototype.toScriptSignature = function (hashType) {
36217 var hashTypeMod = hashType & ~0x80
36218 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36219
36220 var hashTypeBuffer = Buffer.alloc(1)
36221 hashTypeBuffer.writeUInt8(hashType, 0)
36222
36223 return Buffer.concat([this.toDER(), hashTypeBuffer])
36224 }
36225
36226 module.exports = ECSignature
36227
36228 }).call(this,require("buffer").Buffer)
36229 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
36230 var Buffer = require('safe-buffer').Buffer
36231 var base58check = require('bs58check')
36232 var bcrypto = require('./crypto')
36233 var createHmac = require('create-hmac')
36234 var typeforce = require('typeforce')
36235 var types = require('./types')
36236 var NETWORKS = require('./networks')
36237
36238 var BigInteger = require('bigi')
36239 var ECPair = require('./ecpair')
36240
36241 var ecurve = require('ecurve')
36242 var curve = ecurve.getCurveByName('secp256k1')
36243
36244 function HDNode (keyPair, chainCode) {
36245 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36246
36247 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36248
36249 this.keyPair = keyPair
36250 this.chainCode = chainCode
36251 this.depth = 0
36252 this.index = 0
36253 this.parentFingerprint = 0x00000000
36254 }
36255
36256 HDNode.HIGHEST_BIT = 0x80000000
36257 HDNode.LENGTH = 78
36258 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36259
36260 HDNode.fromSeedBuffer = function (seed, network) {
36261 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36262
36263 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36264 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36265
36266 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36267 var IL = I.slice(0, 32)
36268 var IR = I.slice(32)
36269
36270 // In case IL is 0 or >= n, the master key is invalid
36271 // This is handled by the ECPair constructor
36272 var pIL = BigInteger.fromBuffer(IL)
36273 var keyPair = new ECPair(pIL, null, {
36274 network: network
36275 })
36276
36277 return new HDNode(keyPair, IR)
36278 }
36279
36280 HDNode.fromSeedHex = function (hex, network) {
36281 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36282 }
36283
36284 HDNode.fromBase58 = function (string, networks) {
36285 var buffer = base58check.decode(string)
36286 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36287
36288 // 4 bytes: version bytes
36289 var version = buffer.readUInt32BE(0)
36290 var network
36291
36292 // list of networks?
36293 if (Array.isArray(networks)) {
36294 network = networks.filter(function (x) {
36295 return version === x.bip32.private ||
36296 version === x.bip32.public
36297 }).pop()
36298
36299 if (!network) throw new Error('Unknown network version')
36300
36301 // otherwise, assume a network object (or default to bitcoin)
36302 } else {
36303 network = networks || NETWORKS.bitcoin
36304 }
36305
36306 if (version !== network.bip32.private &&
36307 version !== network.bip32.public) throw new Error('Invalid network version')
36308
36309 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36310 var depth = buffer[4]
36311
36312 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36313 var parentFingerprint = buffer.readUInt32BE(5)
36314 if (depth === 0) {
36315 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36316 }
36317
36318 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36319 // This is encoded in MSB order. (0x00000000 if master key)
36320 var index = buffer.readUInt32BE(9)
36321 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36322
36323 // 32 bytes: the chain code
36324 var chainCode = buffer.slice(13, 45)
36325 var keyPair
36326
36327 // 33 bytes: private key data (0x00 + k)
36328 if (version === network.bip32.private) {
36329 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36330
36331 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36332 keyPair = new ECPair(d, null, { network: network })
36333
36334 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36335 } else {
36336 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36337 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36338
36339 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36340 // If not, the extended public key is invalid.
36341 curve.validate(Q)
36342
36343 keyPair = new ECPair(null, Q, { network: network })
36344 }
36345
36346 var hd = new HDNode(keyPair, chainCode)
36347 hd.depth = depth
36348 hd.index = index
36349 hd.parentFingerprint = parentFingerprint
36350
36351 return hd
36352 }
36353
36354 HDNode.prototype.getAddress = function () {
36355 return this.keyPair.getAddress()
36356 }
36357
36358 HDNode.prototype.getIdentifier = function () {
36359 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36360 }
36361
36362 HDNode.prototype.getFingerprint = function () {
36363 return this.getIdentifier().slice(0, 4)
36364 }
36365
36366 HDNode.prototype.getNetwork = function () {
36367 return this.keyPair.getNetwork()
36368 }
36369
36370 HDNode.prototype.getPublicKeyBuffer = function () {
36371 return this.keyPair.getPublicKeyBuffer()
36372 }
36373
36374 HDNode.prototype.neutered = function () {
36375 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36376 network: this.keyPair.network
36377 })
36378
36379 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36380 neutered.depth = this.depth
36381 neutered.index = this.index
36382 neutered.parentFingerprint = this.parentFingerprint
36383
36384 return neutered
36385 }
36386
36387 HDNode.prototype.sign = function (hash) {
36388 return this.keyPair.sign(hash)
36389 }
36390
36391 HDNode.prototype.verify = function (hash, signature) {
36392 return this.keyPair.verify(hash, signature)
36393 }
36394
36395 HDNode.prototype.toBase58 = function (__isPrivate) {
36396 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36397
36398 // Version
36399 var network = this.keyPair.network
36400 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36401 var buffer = Buffer.allocUnsafe(78)
36402
36403 // 4 bytes: version bytes
36404 buffer.writeUInt32BE(version, 0)
36405
36406 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36407 buffer.writeUInt8(this.depth, 4)
36408
36409 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36410 buffer.writeUInt32BE(this.parentFingerprint, 5)
36411
36412 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36413 // This is encoded in big endian. (0x00000000 if master key)
36414 buffer.writeUInt32BE(this.index, 9)
36415
36416 // 32 bytes: the chain code
36417 this.chainCode.copy(buffer, 13)
36418
36419 // 33 bytes: the public key or private key data
36420 if (!this.isNeutered()) {
36421 // 0x00 + k for private keys
36422 buffer.writeUInt8(0, 45)
36423 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36424
36425 // 33 bytes: the public key
36426 } else {
36427 // X9.62 encoding for public keys
36428 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36429 }
36430
36431 return base58check.encode(buffer)
36432 }
36433
36434 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36435 HDNode.prototype.derive = function (index) {
36436 typeforce(types.UInt32, index)
36437
36438 var isHardened = index >= HDNode.HIGHEST_BIT
36439 var data = Buffer.allocUnsafe(37)
36440
36441 // Hardened child
36442 if (isHardened) {
36443 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36444
36445 // data = 0x00 || ser256(kpar) || ser32(index)
36446 data[0] = 0x00
36447 this.keyPair.d.toBuffer(32).copy(data, 1)
36448 data.writeUInt32BE(index, 33)
36449
36450 // Normal child
36451 } else {
36452 // data = serP(point(kpar)) || ser32(index)
36453 // = serP(Kpar) || ser32(index)
36454 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36455 data.writeUInt32BE(index, 33)
36456 }
36457
36458 var I = createHmac('sha512', this.chainCode).update(data).digest()
36459 var IL = I.slice(0, 32)
36460 var IR = I.slice(32)
36461
36462 var pIL = BigInteger.fromBuffer(IL)
36463
36464 // In case parse256(IL) >= n, proceed with the next value for i
36465 if (pIL.compareTo(curve.n) >= 0) {
36466 return this.derive(index + 1)
36467 }
36468
36469 // Private parent key -> private child key
36470 var derivedKeyPair
36471 if (!this.isNeutered()) {
36472 // ki = parse256(IL) + kpar (mod n)
36473 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36474
36475 // In case ki == 0, proceed with the next value for i
36476 if (ki.signum() === 0) {
36477 return this.derive(index + 1)
36478 }
36479
36480 derivedKeyPair = new ECPair(ki, null, {
36481 network: this.keyPair.network
36482 })
36483
36484 // Public parent key -> public child key
36485 } else {
36486 // Ki = point(parse256(IL)) + Kpar
36487 // = G*IL + Kpar
36488 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36489
36490 // In case Ki is the point at infinity, proceed with the next value for i
36491 if (curve.isInfinity(Ki)) {
36492 return this.derive(index + 1)
36493 }
36494
36495 derivedKeyPair = new ECPair(null, Ki, {
36496 network: this.keyPair.network
36497 })
36498 }
36499
36500 var hd = new HDNode(derivedKeyPair, IR)
36501 hd.depth = this.depth + 1
36502 hd.index = index
36503 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36504
36505 return hd
36506 }
36507
36508 HDNode.prototype.deriveHardened = function (index) {
36509 typeforce(types.UInt31, index)
36510
36511 // Only derives hardened private keys by default
36512 return this.derive(index + HDNode.HIGHEST_BIT)
36513 }
36514
36515 // Private === not neutered
36516 // Public === neutered
36517 HDNode.prototype.isNeutered = function () {
36518 return !(this.keyPair.d)
36519 }
36520
36521 HDNode.prototype.derivePath = function (path) {
36522 typeforce(types.BIP32Path, path)
36523
36524 var splitPath = path.split('/')
36525 if (splitPath[0] === 'm') {
36526 if (this.parentFingerprint) {
36527 throw new Error('Not a master node')
36528 }
36529
36530 splitPath = splitPath.slice(1)
36531 }
36532
36533 return splitPath.reduce(function (prevHd, indexStr) {
36534 var index
36535 if (indexStr.slice(-1) === "'") {
36536 index = parseInt(indexStr.slice(0, -1), 10)
36537 return prevHd.deriveHardened(index)
36538 } else {
36539 index = parseInt(indexStr, 10)
36540 return prevHd.derive(index)
36541 }
36542 }, this)
36543 }
36544
36545 module.exports = HDNode
36546
36547 },{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":85,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],52:[function(require,module,exports){
36548 var script = require('./script')
36549
36550 var templates = require('./templates')
36551 for (var key in templates) {
36552 script[key] = templates[key]
36553 }
36554
36555 module.exports = {
36556 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36557
36558 Block: require('./block'),
36559 ECPair: require('./ecpair'),
36560 ECSignature: require('./ecsignature'),
36561 HDNode: require('./hdnode'),
36562 Transaction: require('./transaction'),
36563 TransactionBuilder: require('./transaction_builder'),
36564
36565 address: require('./address'),
36566 crypto: require('./crypto'),
36567 networks: require('./networks'),
36568 opcodes: require('bitcoin-ops'),
36569 script: script
36570 }
36571
36572 },{"./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){
36573 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36574 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36575
36576 module.exports = {
36577 bitcoin: {
36578 messagePrefix: '\x18Bitcoin Signed Message:\n',
36579 bech32: 'bc',
36580 bip32: {
36581 public: 0x0488b21e,
36582 private: 0x0488ade4
36583 },
36584 pubKeyHash: 0x00,
36585 scriptHash: 0x05,
36586 wif: 0x80
36587 },
36588 testnet: {
36589 messagePrefix: '\x18Bitcoin Signed Message:\n',
36590 bech32: 'tb',
36591 bip32: {
36592 public: 0x043587cf,
36593 private: 0x04358394
36594 },
36595 pubKeyHash: 0x6f,
36596 scriptHash: 0xc4,
36597 wif: 0xef
36598 },
36599 litecoin: {
36600 messagePrefix: '\x19Litecoin Signed Message:\n',
36601 bip32: {
36602 public: 0x019da462,
36603 private: 0x019d9cfe
36604 },
36605 pubKeyHash: 0x30,
36606 scriptHash: 0x32,
36607 wif: 0xb0
36608 }
36609 }
36610
36611 },{}],54:[function(require,module,exports){
36612 var Buffer = require('safe-buffer').Buffer
36613 var bip66 = require('bip66')
36614 var pushdata = require('pushdata-bitcoin')
36615 var typeforce = require('typeforce')
36616 var types = require('./types')
36617 var scriptNumber = require('./script_number')
36618
36619 var OPS = require('bitcoin-ops')
36620 var REVERSE_OPS = require('bitcoin-ops/map')
36621 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36622
36623 function isOPInt (value) {
36624 return types.Number(value) &&
36625 ((value === OPS.OP_0) ||
36626 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36627 (value === OPS.OP_1NEGATE))
36628 }
36629
36630 function isPushOnlyChunk (value) {
36631 return types.Buffer(value) || isOPInt(value)
36632 }
36633
36634 function isPushOnly (value) {
36635 return types.Array(value) && value.every(isPushOnlyChunk)
36636 }
36637
36638 function asMinimalOP (buffer) {
36639 if (buffer.length === 0) return OPS.OP_0
36640 if (buffer.length !== 1) return
36641 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36642 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36643 }
36644
36645 function compile (chunks) {
36646 // TODO: remove me
36647 if (Buffer.isBuffer(chunks)) return chunks
36648
36649 typeforce(types.Array, chunks)
36650
36651 var bufferSize = chunks.reduce(function (accum, chunk) {
36652 // data chunk
36653 if (Buffer.isBuffer(chunk)) {
36654 // adhere to BIP62.3, minimal push policy
36655 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36656 return accum + 1
36657 }
36658
36659 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36660 }
36661
36662 // opcode
36663 return accum + 1
36664 }, 0.0)
36665
36666 var buffer = Buffer.allocUnsafe(bufferSize)
36667 var offset = 0
36668
36669 chunks.forEach(function (chunk) {
36670 // data chunk
36671 if (Buffer.isBuffer(chunk)) {
36672 // adhere to BIP62.3, minimal push policy
36673 var opcode = asMinimalOP(chunk)
36674 if (opcode !== undefined) {
36675 buffer.writeUInt8(opcode, offset)
36676 offset += 1
36677 return
36678 }
36679
36680 offset += pushdata.encode(buffer, chunk.length, offset)
36681 chunk.copy(buffer, offset)
36682 offset += chunk.length
36683
36684 // opcode
36685 } else {
36686 buffer.writeUInt8(chunk, offset)
36687 offset += 1
36688 }
36689 })
36690
36691 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36692 return buffer
36693 }
36694
36695 function decompile (buffer) {
36696 // TODO: remove me
36697 if (types.Array(buffer)) return buffer
36698
36699 typeforce(types.Buffer, buffer)
36700
36701 var chunks = []
36702 var i = 0
36703
36704 while (i < buffer.length) {
36705 var opcode = buffer[i]
36706
36707 // data chunk
36708 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36709 var d = pushdata.decode(buffer, i)
36710
36711 // did reading a pushDataInt fail? empty script
36712 if (d === null) return []
36713 i += d.size
36714
36715 // attempt to read too much data? empty script
36716 if (i + d.number > buffer.length) return []
36717
36718 var data = buffer.slice(i, i + d.number)
36719 i += d.number
36720
36721 // decompile minimally
36722 var op = asMinimalOP(data)
36723 if (op !== undefined) {
36724 chunks.push(op)
36725 } else {
36726 chunks.push(data)
36727 }
36728
36729 // opcode
36730 } else {
36731 chunks.push(opcode)
36732
36733 i += 1
36734 }
36735 }
36736
36737 return chunks
36738 }
36739
36740 function toASM (chunks) {
36741 if (Buffer.isBuffer(chunks)) {
36742 chunks = decompile(chunks)
36743 }
36744
36745 return chunks.map(function (chunk) {
36746 // data?
36747 if (Buffer.isBuffer(chunk)) {
36748 var op = asMinimalOP(chunk)
36749 if (op === undefined) return chunk.toString('hex')
36750 chunk = op
36751 }
36752
36753 // opcode!
36754 return REVERSE_OPS[chunk]
36755 }).join(' ')
36756 }
36757
36758 function fromASM (asm) {
36759 typeforce(types.String, asm)
36760
36761 return compile(asm.split(' ').map(function (chunkStr) {
36762 // opcode?
36763 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36764 typeforce(types.Hex, chunkStr)
36765
36766 // data!
36767 return Buffer.from(chunkStr, 'hex')
36768 }))
36769 }
36770
36771 function toStack (chunks) {
36772 chunks = decompile(chunks)
36773 typeforce(isPushOnly, chunks)
36774
36775 return chunks.map(function (op) {
36776 if (Buffer.isBuffer(op)) return op
36777 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36778
36779 return scriptNumber.encode(op - OP_INT_BASE)
36780 })
36781 }
36782
36783 function isCanonicalPubKey (buffer) {
36784 if (!Buffer.isBuffer(buffer)) return false
36785 if (buffer.length < 33) return false
36786
36787 switch (buffer[0]) {
36788 case 0x02:
36789 case 0x03:
36790 return buffer.length === 33
36791 case 0x04:
36792 return buffer.length === 65
36793 }
36794
36795 return false
36796 }
36797
36798 function isDefinedHashType (hashType) {
36799 var hashTypeMod = hashType & ~0x80
36800
36801 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36802 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36803 }
36804
36805 function isCanonicalSignature (buffer) {
36806 if (!Buffer.isBuffer(buffer)) return false
36807 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36808
36809 return bip66.check(buffer.slice(0, -1))
36810 }
36811
36812 module.exports = {
36813 compile: compile,
36814 decompile: decompile,
36815 fromASM: fromASM,
36816 toASM: toASM,
36817 toStack: toStack,
36818
36819 number: require('./script_number'),
36820
36821 isCanonicalPubKey: isCanonicalPubKey,
36822 isCanonicalSignature: isCanonicalSignature,
36823 isPushOnly: isPushOnly,
36824 isDefinedHashType: isDefinedHashType
36825 }
36826
36827 },{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":125,"safe-buffer":128,"typeforce":139}],55:[function(require,module,exports){
36828 var Buffer = require('safe-buffer').Buffer
36829
36830 function decode (buffer, maxLength, minimal) {
36831 maxLength = maxLength || 4
36832 minimal = minimal === undefined ? true : minimal
36833
36834 var length = buffer.length
36835 if (length === 0) return 0
36836 if (length > maxLength) throw new TypeError('Script number overflow')
36837 if (minimal) {
36838 if ((buffer[length - 1] & 0x7f) === 0) {
36839 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36840 }
36841 }
36842
36843 // 40-bit
36844 if (length === 5) {
36845 var a = buffer.readUInt32LE(0)
36846 var b = buffer.readUInt8(4)
36847
36848 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36849 return (b * 0x100000000) + a
36850 }
36851
36852 var result = 0
36853
36854 // 32-bit / 24-bit / 16-bit / 8-bit
36855 for (var i = 0; i < length; ++i) {
36856 result |= buffer[i] << (8 * i)
36857 }
36858
36859 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36860 return result
36861 }
36862
36863 function scriptNumSize (i) {
36864 return i > 0x7fffffff ? 5
36865 : i > 0x7fffff ? 4
36866 : i > 0x7fff ? 3
36867 : i > 0x7f ? 2
36868 : i > 0x00 ? 1
36869 : 0
36870 }
36871
36872 function encode (number) {
36873 var value = Math.abs(number)
36874 var size = scriptNumSize(value)
36875 var buffer = Buffer.allocUnsafe(size)
36876 var negative = number < 0
36877
36878 for (var i = 0; i < size; ++i) {
36879 buffer.writeUInt8(value & 0xff, i)
36880 value >>= 8
36881 }
36882
36883 if (buffer[size - 1] & 0x80) {
36884 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36885 } else if (negative) {
36886 buffer[size - 1] |= 0x80
36887 }
36888
36889 return buffer
36890 }
36891
36892 module.exports = {
36893 decode: decode,
36894 encode: encode
36895 }
36896
36897 },{"safe-buffer":128}],56:[function(require,module,exports){
36898 var decompile = require('../script').decompile
36899 var multisig = require('./multisig')
36900 var nullData = require('./nulldata')
36901 var pubKey = require('./pubkey')
36902 var pubKeyHash = require('./pubkeyhash')
36903 var scriptHash = require('./scripthash')
36904 var witnessPubKeyHash = require('./witnesspubkeyhash')
36905 var witnessScriptHash = require('./witnessscripthash')
36906 var witnessCommitment = require('./witnesscommitment')
36907
36908 var types = {
36909 MULTISIG: 'multisig',
36910 NONSTANDARD: 'nonstandard',
36911 NULLDATA: 'nulldata',
36912 P2PK: 'pubkey',
36913 P2PKH: 'pubkeyhash',
36914 P2SH: 'scripthash',
36915 P2WPKH: 'witnesspubkeyhash',
36916 P2WSH: 'witnessscripthash',
36917 WITNESS_COMMITMENT: 'witnesscommitment'
36918 }
36919
36920 function classifyOutput (script) {
36921 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36922 if (witnessScriptHash.output.check(script)) return types.P2WSH
36923 if (pubKeyHash.output.check(script)) return types.P2PKH
36924 if (scriptHash.output.check(script)) return types.P2SH
36925
36926 // XXX: optimization, below functions .decompile before use
36927 var chunks = decompile(script)
36928 if (multisig.output.check(chunks)) return types.MULTISIG
36929 if (pubKey.output.check(chunks)) return types.P2PK
36930 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36931 if (nullData.output.check(chunks)) return types.NULLDATA
36932
36933 return types.NONSTANDARD
36934 }
36935
36936 function classifyInput (script, allowIncomplete) {
36937 // XXX: optimization, below functions .decompile before use
36938 var chunks = decompile(script)
36939
36940 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36941 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36942 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36943 if (pubKey.input.check(chunks)) return types.P2PK
36944
36945 return types.NONSTANDARD
36946 }
36947
36948 function classifyWitness (script, allowIncomplete) {
36949 // XXX: optimization, below functions .decompile before use
36950 var chunks = decompile(script)
36951
36952 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36953 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36954
36955 return types.NONSTANDARD
36956 }
36957
36958 module.exports = {
36959 classifyInput: classifyInput,
36960 classifyOutput: classifyOutput,
36961 classifyWitness: classifyWitness,
36962 multisig: multisig,
36963 nullData: nullData,
36964 pubKey: pubKey,
36965 pubKeyHash: pubKeyHash,
36966 scriptHash: scriptHash,
36967 witnessPubKeyHash: witnessPubKeyHash,
36968 witnessScriptHash: witnessScriptHash,
36969 witnessCommitment: witnessCommitment,
36970 types: types
36971 }
36972
36973 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
36974 module.exports = {
36975 input: require('./input'),
36976 output: require('./output')
36977 }
36978
36979 },{"./input":58,"./output":59}],58:[function(require,module,exports){
36980 // OP_0 [signatures ...]
36981
36982 var Buffer = require('safe-buffer').Buffer
36983 var bscript = require('../../script')
36984 var p2mso = require('./output')
36985 var typeforce = require('typeforce')
36986 var OPS = require('bitcoin-ops')
36987
36988 function partialSignature (value) {
36989 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
36990 }
36991
36992 function check (script, allowIncomplete) {
36993 var chunks = bscript.decompile(script)
36994 if (chunks.length < 2) return false
36995 if (chunks[0] !== OPS.OP_0) return false
36996
36997 if (allowIncomplete) {
36998 return chunks.slice(1).every(partialSignature)
36999 }
37000
37001 return chunks.slice(1).every(bscript.isCanonicalSignature)
37002 }
37003 check.toJSON = function () { return 'multisig input' }
37004
37005 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
37006
37007 function encodeStack (signatures, scriptPubKey) {
37008 typeforce([partialSignature], signatures)
37009
37010 if (scriptPubKey) {
37011 var scriptData = p2mso.decode(scriptPubKey)
37012
37013 if (signatures.length < scriptData.m) {
37014 throw new TypeError('Not enough signatures provided')
37015 }
37016
37017 if (signatures.length > scriptData.pubKeys.length) {
37018 throw new TypeError('Too many signatures provided')
37019 }
37020 }
37021
37022 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37023 if (sig === OPS.OP_0) {
37024 return EMPTY_BUFFER
37025 }
37026 return sig
37027 }))
37028 }
37029
37030 function encode (signatures, scriptPubKey) {
37031 return bscript.compile(encodeStack(signatures, scriptPubKey))
37032 }
37033
37034 function decodeStack (stack, allowIncomplete) {
37035 typeforce(check, stack, allowIncomplete)
37036 return stack.slice(1)
37037 }
37038
37039 function decode (buffer, allowIncomplete) {
37040 var stack = bscript.decompile(buffer)
37041 return decodeStack(stack, allowIncomplete)
37042 }
37043
37044 module.exports = {
37045 check: check,
37046 decode: decode,
37047 decodeStack: decodeStack,
37048 encode: encode,
37049 encodeStack: encodeStack
37050 }
37051
37052 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
37053 // m [pubKeys ...] n OP_CHECKMULTISIG
37054
37055 var bscript = require('../../script')
37056 var types = require('../../types')
37057 var typeforce = require('typeforce')
37058 var OPS = require('bitcoin-ops')
37059 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37060
37061 function check (script, allowIncomplete) {
37062 var chunks = bscript.decompile(script)
37063
37064 if (chunks.length < 4) return false
37065 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37066 if (!types.Number(chunks[0])) return false
37067 if (!types.Number(chunks[chunks.length - 2])) return false
37068 var m = chunks[0] - OP_INT_BASE
37069 var n = chunks[chunks.length - 2] - OP_INT_BASE
37070
37071 if (m <= 0) return false
37072 if (n > 16) return false
37073 if (m > n) return false
37074 if (n !== chunks.length - 3) return false
37075 if (allowIncomplete) return true
37076
37077 var keys = chunks.slice(1, -2)
37078 return keys.every(bscript.isCanonicalPubKey)
37079 }
37080 check.toJSON = function () { return 'multi-sig output' }
37081
37082 function encode (m, pubKeys) {
37083 typeforce({
37084 m: types.Number,
37085 pubKeys: [bscript.isCanonicalPubKey]
37086 }, {
37087 m: m,
37088 pubKeys: pubKeys
37089 })
37090
37091 var n = pubKeys.length
37092 if (n < m) throw new TypeError('Not enough pubKeys provided')
37093
37094 return bscript.compile([].concat(
37095 OP_INT_BASE + m,
37096 pubKeys,
37097 OP_INT_BASE + n,
37098 OPS.OP_CHECKMULTISIG
37099 ))
37100 }
37101
37102 function decode (buffer, allowIncomplete) {
37103 var chunks = bscript.decompile(buffer)
37104 typeforce(check, chunks, allowIncomplete)
37105
37106 return {
37107 m: chunks[0] - OP_INT_BASE,
37108 pubKeys: chunks.slice(1, -2)
37109 }
37110 }
37111
37112 module.exports = {
37113 check: check,
37114 decode: decode,
37115 encode: encode
37116 }
37117
37118 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
37119 // OP_RETURN {data}
37120
37121 var bscript = require('../script')
37122 var types = require('../types')
37123 var typeforce = require('typeforce')
37124 var OPS = require('bitcoin-ops')
37125
37126 function check (script) {
37127 var buffer = bscript.compile(script)
37128
37129 return buffer.length > 1 &&
37130 buffer[0] === OPS.OP_RETURN
37131 }
37132 check.toJSON = function () { return 'null data output' }
37133
37134 function encode (data) {
37135 typeforce(types.Buffer, data)
37136
37137 return bscript.compile([OPS.OP_RETURN, data])
37138 }
37139
37140 function decode (buffer) {
37141 typeforce(check, buffer)
37142
37143 return buffer.slice(2)
37144 }
37145
37146 module.exports = {
37147 output: {
37148 check: check,
37149 decode: decode,
37150 encode: encode
37151 }
37152 }
37153
37154 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
37155 arguments[4][57][0].apply(exports,arguments)
37156 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37157 // {signature}
37158
37159 var bscript = require('../../script')
37160 var typeforce = require('typeforce')
37161
37162 function check (script) {
37163 var chunks = bscript.decompile(script)
37164
37165 return chunks.length === 1 &&
37166 bscript.isCanonicalSignature(chunks[0])
37167 }
37168 check.toJSON = function () { return 'pubKey input' }
37169
37170 function encodeStack (signature) {
37171 typeforce(bscript.isCanonicalSignature, signature)
37172 return [signature]
37173 }
37174
37175 function encode (signature) {
37176 return bscript.compile(encodeStack(signature))
37177 }
37178
37179 function decodeStack (stack) {
37180 typeforce(check, stack)
37181 return stack[0]
37182 }
37183
37184 function decode (buffer) {
37185 var stack = bscript.decompile(buffer)
37186 return decodeStack(stack)
37187 }
37188
37189 module.exports = {
37190 check: check,
37191 decode: decode,
37192 decodeStack: decodeStack,
37193 encode: encode,
37194 encodeStack: encodeStack
37195 }
37196
37197 },{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
37198 // {pubKey} OP_CHECKSIG
37199
37200 var bscript = require('../../script')
37201 var typeforce = require('typeforce')
37202 var OPS = require('bitcoin-ops')
37203
37204 function check (script) {
37205 var chunks = bscript.decompile(script)
37206
37207 return chunks.length === 2 &&
37208 bscript.isCanonicalPubKey(chunks[0]) &&
37209 chunks[1] === OPS.OP_CHECKSIG
37210 }
37211 check.toJSON = function () { return 'pubKey output' }
37212
37213 function encode (pubKey) {
37214 typeforce(bscript.isCanonicalPubKey, pubKey)
37215
37216 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37217 }
37218
37219 function decode (buffer) {
37220 var chunks = bscript.decompile(buffer)
37221 typeforce(check, chunks)
37222
37223 return chunks[0]
37224 }
37225
37226 module.exports = {
37227 check: check,
37228 decode: decode,
37229 encode: encode
37230 }
37231
37232 },{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
37233 arguments[4][57][0].apply(exports,arguments)
37234 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37235 // {signature} {pubKey}
37236
37237 var bscript = require('../../script')
37238 var typeforce = require('typeforce')
37239
37240 function check (script) {
37241 var chunks = bscript.decompile(script)
37242
37243 return chunks.length === 2 &&
37244 bscript.isCanonicalSignature(chunks[0]) &&
37245 bscript.isCanonicalPubKey(chunks[1])
37246 }
37247 check.toJSON = function () { return 'pubKeyHash input' }
37248
37249 function encodeStack (signature, pubKey) {
37250 typeforce({
37251 signature: bscript.isCanonicalSignature,
37252 pubKey: bscript.isCanonicalPubKey
37253 }, {
37254 signature: signature,
37255 pubKey: pubKey
37256 })
37257
37258 return [signature, pubKey]
37259 }
37260
37261 function encode (signature, pubKey) {
37262 return bscript.compile(encodeStack(signature, pubKey))
37263 }
37264
37265 function decodeStack (stack) {
37266 typeforce(check, stack)
37267
37268 return {
37269 signature: stack[0],
37270 pubKey: stack[1]
37271 }
37272 }
37273
37274 function decode (buffer) {
37275 var stack = bscript.decompile(buffer)
37276 return decodeStack(stack)
37277 }
37278
37279 module.exports = {
37280 check: check,
37281 decode: decode,
37282 decodeStack: decodeStack,
37283 encode: encode,
37284 encodeStack: encodeStack
37285 }
37286
37287 },{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
37288 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37289
37290 var bscript = require('../../script')
37291 var types = require('../../types')
37292 var typeforce = require('typeforce')
37293 var OPS = require('bitcoin-ops')
37294
37295 function check (script) {
37296 var buffer = bscript.compile(script)
37297
37298 return buffer.length === 25 &&
37299 buffer[0] === OPS.OP_DUP &&
37300 buffer[1] === OPS.OP_HASH160 &&
37301 buffer[2] === 0x14 &&
37302 buffer[23] === OPS.OP_EQUALVERIFY &&
37303 buffer[24] === OPS.OP_CHECKSIG
37304 }
37305 check.toJSON = function () { return 'pubKeyHash output' }
37306
37307 function encode (pubKeyHash) {
37308 typeforce(types.Hash160bit, pubKeyHash)
37309
37310 return bscript.compile([
37311 OPS.OP_DUP,
37312 OPS.OP_HASH160,
37313 pubKeyHash,
37314 OPS.OP_EQUALVERIFY,
37315 OPS.OP_CHECKSIG
37316 ])
37317 }
37318
37319 function decode (buffer) {
37320 typeforce(check, buffer)
37321
37322 return buffer.slice(3, 23)
37323 }
37324
37325 module.exports = {
37326 check: check,
37327 decode: decode,
37328 encode: encode
37329 }
37330
37331 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
37332 arguments[4][57][0].apply(exports,arguments)
37333 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37334 // <scriptSig> {serialized scriptPubKey script}
37335
37336 var Buffer = require('safe-buffer').Buffer
37337 var bscript = require('../../script')
37338 var typeforce = require('typeforce')
37339
37340 var p2ms = require('../multisig/')
37341 var p2pk = require('../pubkey/')
37342 var p2pkh = require('../pubkeyhash/')
37343 var p2wpkho = require('../witnesspubkeyhash/output')
37344 var p2wsho = require('../witnessscripthash/output')
37345
37346 function check (script, allowIncomplete) {
37347 var chunks = bscript.decompile(script)
37348 if (chunks.length < 1) return false
37349
37350 var lastChunk = chunks[chunks.length - 1]
37351 if (!Buffer.isBuffer(lastChunk)) return false
37352
37353 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37354 var redeemScriptChunks = bscript.decompile(lastChunk)
37355
37356 // is redeemScript a valid script?
37357 if (redeemScriptChunks.length === 0) return false
37358
37359 // is redeemScriptSig push only?
37360 if (!bscript.isPushOnly(scriptSigChunks)) return false
37361
37362 // is witness?
37363 if (chunks.length === 1) {
37364 return p2wsho.check(redeemScriptChunks) ||
37365 p2wpkho.check(redeemScriptChunks)
37366 }
37367
37368 // match types
37369 if (p2pkh.input.check(scriptSigChunks) &&
37370 p2pkh.output.check(redeemScriptChunks)) return true
37371
37372 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37373 p2ms.output.check(redeemScriptChunks)) return true
37374
37375 if (p2pk.input.check(scriptSigChunks) &&
37376 p2pk.output.check(redeemScriptChunks)) return true
37377
37378 return false
37379 }
37380 check.toJSON = function () { return 'scriptHash input' }
37381
37382 function encodeStack (redeemScriptStack, redeemScript) {
37383 var serializedScriptPubKey = bscript.compile(redeemScript)
37384
37385 return [].concat(redeemScriptStack, serializedScriptPubKey)
37386 }
37387
37388 function encode (redeemScriptSig, redeemScript) {
37389 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37390
37391 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37392 }
37393
37394 function decodeStack (stack) {
37395 typeforce(check, stack)
37396
37397 return {
37398 redeemScriptStack: stack.slice(0, -1),
37399 redeemScript: stack[stack.length - 1]
37400 }
37401 }
37402
37403 function decode (buffer) {
37404 var stack = bscript.decompile(buffer)
37405 var result = decodeStack(stack)
37406 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37407 delete result.redeemScriptStack
37408 return result
37409 }
37410
37411 module.exports = {
37412 check: check,
37413 decode: decode,
37414 decodeStack: decodeStack,
37415 encode: encode,
37416 encodeStack: encodeStack
37417 }
37418
37419 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
37420 // OP_HASH160 {scriptHash} OP_EQUAL
37421
37422 var bscript = require('../../script')
37423 var types = require('../../types')
37424 var typeforce = require('typeforce')
37425 var OPS = require('bitcoin-ops')
37426
37427 function check (script) {
37428 var buffer = bscript.compile(script)
37429
37430 return buffer.length === 23 &&
37431 buffer[0] === OPS.OP_HASH160 &&
37432 buffer[1] === 0x14 &&
37433 buffer[22] === OPS.OP_EQUAL
37434 }
37435 check.toJSON = function () { return 'scriptHash output' }
37436
37437 function encode (scriptHash) {
37438 typeforce(types.Hash160bit, scriptHash)
37439
37440 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37441 }
37442
37443 function decode (buffer) {
37444 typeforce(check, buffer)
37445
37446 return buffer.slice(2, 22)
37447 }
37448
37449 module.exports = {
37450 check: check,
37451 decode: decode,
37452 encode: encode
37453 }
37454
37455 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
37456 module.exports = {
37457 output: require('./output')
37458 }
37459
37460 },{"./output":71}],71:[function(require,module,exports){
37461 // OP_RETURN {aa21a9ed} {commitment}
37462
37463 var Buffer = require('safe-buffer').Buffer
37464 var bscript = require('../../script')
37465 var types = require('../../types')
37466 var typeforce = require('typeforce')
37467 var OPS = require('bitcoin-ops')
37468
37469 var HEADER = Buffer.from('aa21a9ed', 'hex')
37470
37471 function check (script) {
37472 var buffer = bscript.compile(script)
37473
37474 return buffer.length > 37 &&
37475 buffer[0] === OPS.OP_RETURN &&
37476 buffer[1] === 0x24 &&
37477 buffer.slice(2, 6).equals(HEADER)
37478 }
37479
37480 check.toJSON = function () { return 'Witness commitment output' }
37481
37482 function encode (commitment) {
37483 typeforce(types.Hash256bit, commitment)
37484
37485 var buffer = Buffer.allocUnsafe(36)
37486 HEADER.copy(buffer, 0)
37487 commitment.copy(buffer, 4)
37488
37489 return bscript.compile([OPS.OP_RETURN, buffer])
37490 }
37491
37492 function decode (buffer) {
37493 typeforce(check, buffer)
37494
37495 return bscript.decompile(buffer)[1].slice(4, 36)
37496 }
37497
37498 module.exports = {
37499 check: check,
37500 decode: decode,
37501 encode: encode
37502 }
37503
37504 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
37505 arguments[4][57][0].apply(exports,arguments)
37506 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37507 // {signature} {pubKey}
37508
37509 var bscript = require('../../script')
37510 var typeforce = require('typeforce')
37511
37512 function isCompressedCanonicalPubKey (pubKey) {
37513 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37514 }
37515
37516 function check (script) {
37517 var chunks = bscript.decompile(script)
37518
37519 return chunks.length === 2 &&
37520 bscript.isCanonicalSignature(chunks[0]) &&
37521 isCompressedCanonicalPubKey(chunks[1])
37522 }
37523 check.toJSON = function () { return 'witnessPubKeyHash input' }
37524
37525 function encodeStack (signature, pubKey) {
37526 typeforce({
37527 signature: bscript.isCanonicalSignature,
37528 pubKey: isCompressedCanonicalPubKey
37529 }, {
37530 signature: signature,
37531 pubKey: pubKey
37532 })
37533
37534 return [signature, pubKey]
37535 }
37536
37537 function decodeStack (stack) {
37538 typeforce(check, stack)
37539
37540 return {
37541 signature: stack[0],
37542 pubKey: stack[1]
37543 }
37544 }
37545
37546 module.exports = {
37547 check: check,
37548 decodeStack: decodeStack,
37549 encodeStack: encodeStack
37550 }
37551
37552 },{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
37553 // OP_0 {pubKeyHash}
37554
37555 var bscript = require('../../script')
37556 var types = require('../../types')
37557 var typeforce = require('typeforce')
37558 var OPS = require('bitcoin-ops')
37559
37560 function check (script) {
37561 var buffer = bscript.compile(script)
37562
37563 return buffer.length === 22 &&
37564 buffer[0] === OPS.OP_0 &&
37565 buffer[1] === 0x14
37566 }
37567 check.toJSON = function () { return 'Witness pubKeyHash output' }
37568
37569 function encode (pubKeyHash) {
37570 typeforce(types.Hash160bit, pubKeyHash)
37571
37572 return bscript.compile([OPS.OP_0, pubKeyHash])
37573 }
37574
37575 function decode (buffer) {
37576 typeforce(check, buffer)
37577
37578 return buffer.slice(2)
37579 }
37580
37581 module.exports = {
37582 check: check,
37583 decode: decode,
37584 encode: encode
37585 }
37586
37587 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
37588 arguments[4][57][0].apply(exports,arguments)
37589 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37590 (function (Buffer){
37591 // <scriptSig> {serialized scriptPubKey script}
37592
37593 var bscript = require('../../script')
37594 var types = require('../../types')
37595 var typeforce = require('typeforce')
37596
37597 var p2ms = require('../multisig/')
37598 var p2pk = require('../pubkey/')
37599 var p2pkh = require('../pubkeyhash/')
37600
37601 function check (chunks, allowIncomplete) {
37602 typeforce(types.Array, chunks)
37603 if (chunks.length < 1) return false
37604
37605 var witnessScript = chunks[chunks.length - 1]
37606 if (!Buffer.isBuffer(witnessScript)) return false
37607
37608 var witnessScriptChunks = bscript.decompile(witnessScript)
37609
37610 // is witnessScript a valid script?
37611 if (witnessScriptChunks.length === 0) return false
37612
37613 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37614
37615 // match types
37616 if (p2pkh.input.check(witnessRawScriptSig) &&
37617 p2pkh.output.check(witnessScriptChunks)) return true
37618
37619 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37620 p2ms.output.check(witnessScriptChunks)) return true
37621
37622 if (p2pk.input.check(witnessRawScriptSig) &&
37623 p2pk.output.check(witnessScriptChunks)) return true
37624
37625 return false
37626 }
37627 check.toJSON = function () { return 'witnessScriptHash input' }
37628
37629 function encodeStack (witnessData, witnessScript) {
37630 typeforce({
37631 witnessData: [types.Buffer],
37632 witnessScript: types.Buffer
37633 }, {
37634 witnessData: witnessData,
37635 witnessScript: witnessScript
37636 })
37637
37638 return [].concat(witnessData, witnessScript)
37639 }
37640
37641 function decodeStack (chunks) {
37642 typeforce(check, chunks)
37643 return {
37644 witnessData: chunks.slice(0, -1),
37645 witnessScript: chunks[chunks.length - 1]
37646 }
37647 }
37648
37649 module.exports = {
37650 check: check,
37651 decodeStack: decodeStack,
37652 encodeStack: encodeStack
37653 }
37654
37655 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37656 },{"../../../../../../../../.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":139}],77:[function(require,module,exports){
37657 // OP_0 {scriptHash}
37658
37659 var bscript = require('../../script')
37660 var types = require('../../types')
37661 var typeforce = require('typeforce')
37662 var OPS = require('bitcoin-ops')
37663
37664 function check (script) {
37665 var buffer = bscript.compile(script)
37666
37667 return buffer.length === 34 &&
37668 buffer[0] === OPS.OP_0 &&
37669 buffer[1] === 0x20
37670 }
37671 check.toJSON = function () { return 'Witness scriptHash output' }
37672
37673 function encode (scriptHash) {
37674 typeforce(types.Hash256bit, scriptHash)
37675
37676 return bscript.compile([OPS.OP_0, scriptHash])
37677 }
37678
37679 function decode (buffer) {
37680 typeforce(check, buffer)
37681
37682 return buffer.slice(2)
37683 }
37684
37685 module.exports = {
37686 check: check,
37687 decode: decode,
37688 encode: encode
37689 }
37690
37691 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
37692 var Buffer = require('safe-buffer').Buffer
37693 var bcrypto = require('./crypto')
37694 var bscript = require('./script')
37695 var bufferutils = require('./bufferutils')
37696 var opcodes = require('bitcoin-ops')
37697 var typeforce = require('typeforce')
37698 var types = require('./types')
37699 var varuint = require('varuint-bitcoin')
37700
37701 function varSliceSize (someScript) {
37702 var length = someScript.length
37703
37704 return varuint.encodingLength(length) + length
37705 }
37706
37707 function vectorSize (someVector) {
37708 var length = someVector.length
37709
37710 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37711 return sum + varSliceSize(witness)
37712 }, 0)
37713 }
37714
37715 function Transaction () {
37716 this.version = 1
37717 this.locktime = 0
37718 this.ins = []
37719 this.outs = []
37720 }
37721
37722 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37723 Transaction.SIGHASH_ALL = 0x01
37724 Transaction.SIGHASH_NONE = 0x02
37725 Transaction.SIGHASH_SINGLE = 0x03
37726 Transaction.SIGHASH_ANYONECANPAY = 0x80
37727 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37728 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37729
37730 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37731 var EMPTY_WITNESS = []
37732 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37733 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37734 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37735 var BLANK_OUTPUT = {
37736 script: EMPTY_SCRIPT,
37737 valueBuffer: VALUE_UINT64_MAX
37738 }
37739
37740 Transaction.fromBuffer = function (buffer, __noStrict) {
37741 var offset = 0
37742 function readSlice (n) {
37743 offset += n
37744 return buffer.slice(offset - n, offset)
37745 }
37746
37747 function readUInt32 () {
37748 var i = buffer.readUInt32LE(offset)
37749 offset += 4
37750 return i
37751 }
37752
37753 function readInt32 () {
37754 var i = buffer.readInt32LE(offset)
37755 offset += 4
37756 return i
37757 }
37758
37759 function readUInt64 () {
37760 var i = bufferutils.readUInt64LE(buffer, offset)
37761 offset += 8
37762 return i
37763 }
37764
37765 function readVarInt () {
37766 var vi = varuint.decode(buffer, offset)
37767 offset += varuint.decode.bytes
37768 return vi
37769 }
37770
37771 function readVarSlice () {
37772 return readSlice(readVarInt())
37773 }
37774
37775 function readVector () {
37776 var count = readVarInt()
37777 var vector = []
37778 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37779 return vector
37780 }
37781
37782 var tx = new Transaction()
37783 tx.version = readInt32()
37784
37785 var marker = buffer.readUInt8(offset)
37786 var flag = buffer.readUInt8(offset + 1)
37787
37788 var hasWitnesses = false
37789 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37790 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37791 offset += 2
37792 hasWitnesses = true
37793 }
37794
37795 var vinLen = readVarInt()
37796 for (var i = 0; i < vinLen; ++i) {
37797 tx.ins.push({
37798 hash: readSlice(32),
37799 index: readUInt32(),
37800 script: readVarSlice(),
37801 sequence: readUInt32(),
37802 witness: EMPTY_WITNESS
37803 })
37804 }
37805
37806 var voutLen = readVarInt()
37807 for (i = 0; i < voutLen; ++i) {
37808 tx.outs.push({
37809 value: readUInt64(),
37810 script: readVarSlice()
37811 })
37812 }
37813
37814 if (hasWitnesses) {
37815 for (i = 0; i < vinLen; ++i) {
37816 tx.ins[i].witness = readVector()
37817 }
37818
37819 // was this pointless?
37820 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37821 }
37822
37823 tx.locktime = readUInt32()
37824
37825 if (__noStrict) return tx
37826 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37827
37828 return tx
37829 }
37830
37831 Transaction.fromHex = function (hex) {
37832 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37833 }
37834
37835 Transaction.isCoinbaseHash = function (buffer) {
37836 typeforce(types.Hash256bit, buffer)
37837 for (var i = 0; i < 32; ++i) {
37838 if (buffer[i] !== 0) return false
37839 }
37840 return true
37841 }
37842
37843 Transaction.prototype.isCoinbase = function () {
37844 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37845 }
37846
37847 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37848 typeforce(types.tuple(
37849 types.Hash256bit,
37850 types.UInt32,
37851 types.maybe(types.UInt32),
37852 types.maybe(types.Buffer)
37853 ), arguments)
37854
37855 if (types.Null(sequence)) {
37856 sequence = Transaction.DEFAULT_SEQUENCE
37857 }
37858
37859 // Add the input and return the input's index
37860 return (this.ins.push({
37861 hash: hash,
37862 index: index,
37863 script: scriptSig || EMPTY_SCRIPT,
37864 sequence: sequence,
37865 witness: EMPTY_WITNESS
37866 }) - 1)
37867 }
37868
37869 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37870 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37871
37872 // Add the output and return the output's index
37873 return (this.outs.push({
37874 script: scriptPubKey,
37875 value: value
37876 }) - 1)
37877 }
37878
37879 Transaction.prototype.hasWitnesses = function () {
37880 return this.ins.some(function (x) {
37881 return x.witness.length !== 0
37882 })
37883 }
37884
37885 Transaction.prototype.weight = function () {
37886 var base = this.__byteLength(false)
37887 var total = this.__byteLength(true)
37888 return base * 3 + total
37889 }
37890
37891 Transaction.prototype.virtualSize = function () {
37892 return Math.ceil(this.weight() / 4)
37893 }
37894
37895 Transaction.prototype.byteLength = function () {
37896 return this.__byteLength(true)
37897 }
37898
37899 Transaction.prototype.__byteLength = function (__allowWitness) {
37900 var hasWitnesses = __allowWitness && this.hasWitnesses()
37901
37902 return (
37903 (hasWitnesses ? 10 : 8) +
37904 varuint.encodingLength(this.ins.length) +
37905 varuint.encodingLength(this.outs.length) +
37906 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37907 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37908 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37909 )
37910 }
37911
37912 Transaction.prototype.clone = function () {
37913 var newTx = new Transaction()
37914 newTx.version = this.version
37915 newTx.locktime = this.locktime
37916
37917 newTx.ins = this.ins.map(function (txIn) {
37918 return {
37919 hash: txIn.hash,
37920 index: txIn.index,
37921 script: txIn.script,
37922 sequence: txIn.sequence,
37923 witness: txIn.witness
37924 }
37925 })
37926
37927 newTx.outs = this.outs.map(function (txOut) {
37928 return {
37929 script: txOut.script,
37930 value: txOut.value
37931 }
37932 })
37933
37934 return newTx
37935 }
37936
37937 /**
37938 * Hash transaction for signing a specific input.
37939 *
37940 * Bitcoin uses a different hash for each signed transaction input.
37941 * This method copies the transaction, makes the necessary changes based on the
37942 * hashType, and then hashes the result.
37943 * This hash can then be used to sign the provided transaction input.
37944 */
37945 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37946 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37947
37948 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37949 if (inIndex >= this.ins.length) return ONE
37950
37951 // ignore OP_CODESEPARATOR
37952 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37953 return x !== opcodes.OP_CODESEPARATOR
37954 }))
37955
37956 var txTmp = this.clone()
37957
37958 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37959 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37960 txTmp.outs = []
37961
37962 // ignore sequence numbers (except at inIndex)
37963 txTmp.ins.forEach(function (input, i) {
37964 if (i === inIndex) return
37965
37966 input.sequence = 0
37967 })
37968
37969 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37970 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37971 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37972 if (inIndex >= this.outs.length) return ONE
37973
37974 // truncate outputs after
37975 txTmp.outs.length = inIndex + 1
37976
37977 // "blank" outputs before
37978 for (var i = 0; i < inIndex; i++) {
37979 txTmp.outs[i] = BLANK_OUTPUT
37980 }
37981
37982 // ignore sequence numbers (except at inIndex)
37983 txTmp.ins.forEach(function (input, y) {
37984 if (y === inIndex) return
37985
37986 input.sequence = 0
37987 })
37988 }
37989
37990 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
37991 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
37992 txTmp.ins = [txTmp.ins[inIndex]]
37993 txTmp.ins[0].script = ourScript
37994
37995 // SIGHASH_ALL: only ignore input scripts
37996 } else {
37997 // "blank" others input scripts
37998 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
37999 txTmp.ins[inIndex].script = ourScript
38000 }
38001
38002 // serialize and hash
38003 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
38004 buffer.writeInt32LE(hashType, buffer.length - 4)
38005 txTmp.__toBuffer(buffer, 0, false)
38006
38007 return bcrypto.hash256(buffer)
38008 }
38009
38010 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38011 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38012
38013 var tbuffer, toffset
38014 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38015 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38016 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38017 function writeVarInt (i) {
38018 varuint.encode(i, tbuffer, toffset)
38019 toffset += varuint.encode.bytes
38020 }
38021 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38022
38023 var hashOutputs = ZERO
38024 var hashPrevouts = ZERO
38025 var hashSequence = ZERO
38026
38027 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38028 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38029 toffset = 0
38030
38031 this.ins.forEach(function (txIn) {
38032 writeSlice(txIn.hash)
38033 writeUInt32(txIn.index)
38034 })
38035
38036 hashPrevouts = bcrypto.hash256(tbuffer)
38037 }
38038
38039 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38040 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38041 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38042 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38043 toffset = 0
38044
38045 this.ins.forEach(function (txIn) {
38046 writeUInt32(txIn.sequence)
38047 })
38048
38049 hashSequence = bcrypto.hash256(tbuffer)
38050 }
38051
38052 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38053 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38054 var txOutsSize = this.outs.reduce(function (sum, output) {
38055 return sum + 8 + varSliceSize(output.script)
38056 }, 0)
38057
38058 tbuffer = Buffer.allocUnsafe(txOutsSize)
38059 toffset = 0
38060
38061 this.outs.forEach(function (out) {
38062 writeUInt64(out.value)
38063 writeVarSlice(out.script)
38064 })
38065
38066 hashOutputs = bcrypto.hash256(tbuffer)
38067 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38068 var output = this.outs[inIndex]
38069
38070 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38071 toffset = 0
38072 writeUInt64(output.value)
38073 writeVarSlice(output.script)
38074
38075 hashOutputs = bcrypto.hash256(tbuffer)
38076 }
38077
38078 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38079 toffset = 0
38080
38081 var input = this.ins[inIndex]
38082 writeUInt32(this.version)
38083 writeSlice(hashPrevouts)
38084 writeSlice(hashSequence)
38085 writeSlice(input.hash)
38086 writeUInt32(input.index)
38087 writeVarSlice(prevOutScript)
38088 writeUInt64(value)
38089 writeUInt32(input.sequence)
38090 writeSlice(hashOutputs)
38091 writeUInt32(this.locktime)
38092 writeUInt32(hashType)
38093 return bcrypto.hash256(tbuffer)
38094 }
38095
38096 Transaction.prototype.getHash = function () {
38097 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38098 }
38099
38100 Transaction.prototype.getId = function () {
38101 // transaction hash's are displayed in reverse order
38102 return this.getHash().reverse().toString('hex')
38103 }
38104
38105 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38106 return this.__toBuffer(buffer, initialOffset, true)
38107 }
38108
38109 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38110 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38111
38112 var offset = initialOffset || 0
38113 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38114 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38115 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38116 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38117 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38118 function writeVarInt (i) {
38119 varuint.encode(i, buffer, offset)
38120 offset += varuint.encode.bytes
38121 }
38122 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38123 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38124
38125 writeInt32(this.version)
38126
38127 var hasWitnesses = __allowWitness && this.hasWitnesses()
38128
38129 if (hasWitnesses) {
38130 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38131 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38132 }
38133
38134 writeVarInt(this.ins.length)
38135
38136 this.ins.forEach(function (txIn) {
38137 writeSlice(txIn.hash)
38138 writeUInt32(txIn.index)
38139 writeVarSlice(txIn.script)
38140 writeUInt32(txIn.sequence)
38141 })
38142
38143 writeVarInt(this.outs.length)
38144 this.outs.forEach(function (txOut) {
38145 if (!txOut.valueBuffer) {
38146 writeUInt64(txOut.value)
38147 } else {
38148 writeSlice(txOut.valueBuffer)
38149 }
38150
38151 writeVarSlice(txOut.script)
38152 })
38153
38154 if (hasWitnesses) {
38155 this.ins.forEach(function (input) {
38156 writeVector(input.witness)
38157 })
38158 }
38159
38160 writeUInt32(this.locktime)
38161
38162 // avoid slicing unless necessary
38163 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38164 return buffer
38165 }
38166
38167 Transaction.prototype.toHex = function () {
38168 return this.toBuffer().toString('hex')
38169 }
38170
38171 Transaction.prototype.setInputScript = function (index, scriptSig) {
38172 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38173
38174 this.ins[index].script = scriptSig
38175 }
38176
38177 Transaction.prototype.setWitness = function (index, witness) {
38178 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38179
38180 this.ins[index].witness = witness
38181 }
38182
38183 module.exports = Transaction
38184
38185 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
38186 var Buffer = require('safe-buffer').Buffer
38187 var baddress = require('./address')
38188 var bcrypto = require('./crypto')
38189 var bscript = require('./script')
38190 var btemplates = require('./templates')
38191 var networks = require('./networks')
38192 var ops = require('bitcoin-ops')
38193 var typeforce = require('typeforce')
38194 var types = require('./types')
38195 var scriptTypes = btemplates.types
38196 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38197 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38198
38199 var ECPair = require('./ecpair')
38200 var ECSignature = require('./ecsignature')
38201 var Transaction = require('./transaction')
38202
38203 function supportedType (type) {
38204 return SIGNABLE.indexOf(type) !== -1
38205 }
38206
38207 function supportedP2SHType (type) {
38208 return P2SH.indexOf(type) !== -1
38209 }
38210
38211 function extractChunks (type, chunks, script) {
38212 var pubKeys = []
38213 var signatures = []
38214 switch (type) {
38215 case scriptTypes.P2PKH:
38216 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38217 pubKeys = chunks.slice(1)
38218 signatures = chunks.slice(0, 1)
38219 break
38220
38221 case scriptTypes.P2PK:
38222 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38223 signatures = chunks.slice(0, 1)
38224 break
38225
38226 case scriptTypes.MULTISIG:
38227 if (script) {
38228 var multisig = btemplates.multisig.output.decode(script)
38229 pubKeys = multisig.pubKeys
38230 }
38231
38232 signatures = chunks.slice(1).map(function (chunk) {
38233 return chunk.length === 0 ? undefined : chunk
38234 })
38235 break
38236 }
38237
38238 return {
38239 pubKeys: pubKeys,
38240 signatures: signatures
38241 }
38242 }
38243 function expandInput (scriptSig, witnessStack) {
38244 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38245
38246 var prevOutScript
38247 var prevOutType
38248 var scriptType
38249 var script
38250 var redeemScript
38251 var witnessScript
38252 var witnessScriptType
38253 var redeemScriptType
38254 var witness = false
38255 var p2wsh = false
38256 var p2sh = false
38257 var witnessProgram
38258 var chunks
38259
38260 var scriptSigChunks = bscript.decompile(scriptSig)
38261 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38262 if (sigType === scriptTypes.P2SH) {
38263 p2sh = true
38264 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38265 redeemScriptType = btemplates.classifyOutput(redeemScript)
38266 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38267 prevOutType = scriptTypes.P2SH
38268 script = redeemScript
38269 }
38270
38271 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38272 if (classifyWitness === scriptTypes.P2WSH) {
38273 witnessScript = witnessStack[witnessStack.length - 1]
38274 witnessScriptType = btemplates.classifyOutput(witnessScript)
38275 p2wsh = true
38276 witness = true
38277 if (scriptSig.length === 0) {
38278 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38279 prevOutType = scriptTypes.P2WSH
38280 if (redeemScript !== undefined) {
38281 throw new Error('Redeem script given when unnecessary')
38282 }
38283 // bare witness
38284 } else {
38285 if (!redeemScript) {
38286 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38287 }
38288 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38289 if (!redeemScript.equals(witnessProgram)) {
38290 throw new Error('Redeem script didn\'t match witnessScript')
38291 }
38292 }
38293
38294 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38295 throw new Error('unsupported witness script')
38296 }
38297
38298 script = witnessScript
38299 scriptType = witnessScriptType
38300 chunks = witnessStack.slice(0, -1)
38301 } else if (classifyWitness === scriptTypes.P2WPKH) {
38302 witness = true
38303 var key = witnessStack[witnessStack.length - 1]
38304 var keyHash = bcrypto.hash160(key)
38305 if (scriptSig.length === 0) {
38306 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38307 prevOutType = scriptTypes.P2WPKH
38308 if (typeof redeemScript !== 'undefined') {
38309 throw new Error('Redeem script given when unnecessary')
38310 }
38311 } else {
38312 if (!redeemScript) {
38313 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38314 }
38315 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38316 if (!redeemScript.equals(witnessProgram)) {
38317 throw new Error('Redeem script did not have the right witness program')
38318 }
38319 }
38320
38321 scriptType = scriptTypes.P2PKH
38322 chunks = witnessStack
38323 } else if (redeemScript) {
38324 if (!supportedP2SHType(redeemScriptType)) {
38325 throw new Error('Bad redeemscript!')
38326 }
38327
38328 script = redeemScript
38329 scriptType = redeemScriptType
38330 chunks = scriptSigChunks.slice(0, -1)
38331 } else {
38332 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38333 chunks = scriptSigChunks
38334 }
38335
38336 var expanded = extractChunks(scriptType, chunks, script)
38337
38338 var result = {
38339 pubKeys: expanded.pubKeys,
38340 signatures: expanded.signatures,
38341 prevOutScript: prevOutScript,
38342 prevOutType: prevOutType,
38343 signType: scriptType,
38344 signScript: script,
38345 witness: Boolean(witness)
38346 }
38347
38348 if (p2sh) {
38349 result.redeemScript = redeemScript
38350 result.redeemScriptType = redeemScriptType
38351 }
38352
38353 if (p2wsh) {
38354 result.witnessScript = witnessScript
38355 result.witnessScriptType = witnessScriptType
38356 }
38357
38358 return result
38359 }
38360
38361 // could be done in expandInput, but requires the original Transaction for hashForSignature
38362 function fixMultisigOrder (input, transaction, vin) {
38363 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38364 if (input.pubKeys.length === input.signatures.length) return
38365
38366 var unmatched = input.signatures.concat()
38367
38368 input.signatures = input.pubKeys.map(function (pubKey) {
38369 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38370 var match
38371
38372 // check for a signature
38373 unmatched.some(function (signature, i) {
38374 // skip if undefined || OP_0
38375 if (!signature) return false
38376
38377 // TODO: avoid O(n) hashForSignature
38378 var parsed = ECSignature.parseScriptSignature(signature)
38379 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38380
38381 // skip if signature does not match pubKey
38382 if (!keyPair.verify(hash, parsed.signature)) return false
38383
38384 // remove matched signature from unmatched
38385 unmatched[i] = undefined
38386 match = signature
38387
38388 return true
38389 })
38390
38391 return match
38392 })
38393 }
38394
38395 function expandOutput (script, scriptType, ourPubKey) {
38396 typeforce(types.Buffer, script)
38397
38398 var scriptChunks = bscript.decompile(script)
38399 if (!scriptType) {
38400 scriptType = btemplates.classifyOutput(script)
38401 }
38402
38403 var pubKeys = []
38404
38405 switch (scriptType) {
38406 // does our hash160(pubKey) match the output scripts?
38407 case scriptTypes.P2PKH:
38408 if (!ourPubKey) break
38409
38410 var pkh1 = scriptChunks[2]
38411 var pkh2 = bcrypto.hash160(ourPubKey)
38412 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38413 break
38414
38415 // does our hash160(pubKey) match the output scripts?
38416 case scriptTypes.P2WPKH:
38417 if (!ourPubKey) break
38418
38419 var wpkh1 = scriptChunks[1]
38420 var wpkh2 = bcrypto.hash160(ourPubKey)
38421 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38422 break
38423
38424 case scriptTypes.P2PK:
38425 pubKeys = scriptChunks.slice(0, 1)
38426 break
38427
38428 case scriptTypes.MULTISIG:
38429 pubKeys = scriptChunks.slice(1, -2)
38430 break
38431
38432 default: return { scriptType: scriptType }
38433 }
38434
38435 return {
38436 pubKeys: pubKeys,
38437 scriptType: scriptType,
38438 signatures: pubKeys.map(function () { return undefined })
38439 }
38440 }
38441
38442 function checkP2SHInput (input, redeemScriptHash) {
38443 if (input.prevOutType) {
38444 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38445
38446 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38447 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38448 }
38449 }
38450
38451 function checkP2WSHInput (input, witnessScriptHash) {
38452 if (input.prevOutType) {
38453 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38454
38455 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38456 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38457 }
38458 }
38459
38460 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38461 var expanded
38462 var prevOutType
38463 var prevOutScript
38464
38465 var p2sh = false
38466 var p2shType
38467 var redeemScriptHash
38468
38469 var witness = false
38470 var p2wsh = false
38471 var witnessType
38472 var witnessScriptHash
38473
38474 var signType
38475 var signScript
38476
38477 if (redeemScript && witnessScript) {
38478 redeemScriptHash = bcrypto.hash160(redeemScript)
38479 witnessScriptHash = bcrypto.sha256(witnessScript)
38480 checkP2SHInput(input, redeemScriptHash)
38481
38482 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38483
38484 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38485 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38486
38487 prevOutType = btemplates.types.P2SH
38488 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38489 p2sh = witness = p2wsh = true
38490 p2shType = btemplates.types.P2WSH
38491 signType = witnessType = expanded.scriptType
38492 signScript = witnessScript
38493 } else if (redeemScript) {
38494 redeemScriptHash = bcrypto.hash160(redeemScript)
38495 checkP2SHInput(input, redeemScriptHash)
38496
38497 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38498 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38499
38500 prevOutType = btemplates.types.P2SH
38501 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38502 p2sh = true
38503 signType = p2shType = expanded.scriptType
38504 signScript = redeemScript
38505 witness = signType === btemplates.types.P2WPKH
38506 } else if (witnessScript) {
38507 witnessScriptHash = bcrypto.sha256(witnessScript)
38508 checkP2WSHInput(input, witnessScriptHash)
38509
38510 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38511 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38512
38513 prevOutType = btemplates.types.P2WSH
38514 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38515 witness = p2wsh = true
38516 signType = witnessType = expanded.scriptType
38517 signScript = witnessScript
38518 } else if (input.prevOutType) {
38519 // embedded scripts are not possible without a redeemScript
38520 if (input.prevOutType === scriptTypes.P2SH ||
38521 input.prevOutType === scriptTypes.P2WSH) {
38522 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38523 }
38524
38525 prevOutType = input.prevOutType
38526 prevOutScript = input.prevOutScript
38527 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38528 if (!expanded.pubKeys) return
38529
38530 witness = (input.prevOutType === scriptTypes.P2WPKH)
38531 signType = prevOutType
38532 signScript = prevOutScript
38533 } else {
38534 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38535 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38536
38537 prevOutType = scriptTypes.P2PKH
38538 witness = false
38539 signType = prevOutType
38540 signScript = prevOutScript
38541 }
38542
38543 if (signType === scriptTypes.P2WPKH) {
38544 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38545 }
38546
38547 if (p2sh) {
38548 input.redeemScript = redeemScript
38549 input.redeemScriptType = p2shType
38550 }
38551
38552 if (p2wsh) {
38553 input.witnessScript = witnessScript
38554 input.witnessScriptType = witnessType
38555 }
38556
38557 input.pubKeys = expanded.pubKeys
38558 input.signatures = expanded.signatures
38559 input.signScript = signScript
38560 input.signType = signType
38561 input.prevOutScript = prevOutScript
38562 input.prevOutType = prevOutType
38563 input.witness = witness
38564 }
38565
38566 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38567 if (type === scriptTypes.P2PKH) {
38568 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38569 } else if (type === scriptTypes.P2PK) {
38570 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38571 } else if (type === scriptTypes.MULTISIG) {
38572 if (signatures.length > 0) {
38573 signatures = signatures.map(function (signature) {
38574 return signature || ops.OP_0
38575 })
38576 if (!allowIncomplete) {
38577 // remove blank signatures
38578 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38579 }
38580
38581 return btemplates.multisig.input.encodeStack(signatures)
38582 }
38583 } else {
38584 throw new Error('Not yet supported')
38585 }
38586
38587 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38588 return []
38589 }
38590
38591 function buildInput (input, allowIncomplete) {
38592 var scriptType = input.prevOutType
38593 var sig = []
38594 var witness = []
38595
38596 if (supportedType(scriptType)) {
38597 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38598 }
38599
38600 var p2sh = false
38601 if (scriptType === btemplates.types.P2SH) {
38602 // We can remove this error later when we have a guarantee prepareInput
38603 // rejects unsignable scripts - it MUST be signable at this point.
38604 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38605 throw new Error('Impossible to sign this type')
38606 }
38607
38608 if (supportedType(input.redeemScriptType)) {
38609 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38610 }
38611
38612 // If it wasn't SIGNABLE, it's witness, defer to that
38613 if (input.redeemScriptType) {
38614 p2sh = true
38615 scriptType = input.redeemScriptType
38616 }
38617 }
38618
38619 switch (scriptType) {
38620 // P2WPKH is a special case of P2PKH
38621 case btemplates.types.P2WPKH:
38622 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38623 break
38624
38625 case btemplates.types.P2WSH:
38626 // We can remove this check later
38627 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38628 throw new Error('Impossible to sign this type')
38629 }
38630
38631 if (supportedType(input.witnessScriptType)) {
38632 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38633 witness.push(input.witnessScript)
38634 scriptType = input.witnessScriptType
38635 }
38636
38637 break
38638 }
38639
38640 // append redeemScript if necessary
38641 if (p2sh) {
38642 sig.push(input.redeemScript)
38643 }
38644
38645 return {
38646 type: scriptType,
38647 script: bscript.compile(sig),
38648 witness: witness
38649 }
38650 }
38651
38652 function TransactionBuilder (network, maximumFeeRate) {
38653 this.prevTxMap = {}
38654 this.network = network || networks.bitcoin
38655
38656 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38657 this.maximumFeeRate = maximumFeeRate || 1000
38658
38659 this.inputs = []
38660 this.tx = new Transaction()
38661 }
38662
38663 TransactionBuilder.prototype.setLockTime = function (locktime) {
38664 typeforce(types.UInt32, locktime)
38665
38666 // if any signatures exist, throw
38667 if (this.inputs.some(function (input) {
38668 if (!input.signatures) return false
38669
38670 return input.signatures.some(function (s) { return s })
38671 })) {
38672 throw new Error('No, this would invalidate signatures')
38673 }
38674
38675 this.tx.locktime = locktime
38676 }
38677
38678 TransactionBuilder.prototype.setVersion = function (version) {
38679 typeforce(types.UInt32, version)
38680
38681 // XXX: this might eventually become more complex depending on what the versions represent
38682 this.tx.version = version
38683 }
38684
38685 TransactionBuilder.fromTransaction = function (transaction, network) {
38686 var txb = new TransactionBuilder(network)
38687
38688 // Copy transaction fields
38689 txb.setVersion(transaction.version)
38690 txb.setLockTime(transaction.locktime)
38691
38692 // Copy outputs (done first to avoid signature invalidation)
38693 transaction.outs.forEach(function (txOut) {
38694 txb.addOutput(txOut.script, txOut.value)
38695 })
38696
38697 // Copy inputs
38698 transaction.ins.forEach(function (txIn) {
38699 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38700 sequence: txIn.sequence,
38701 script: txIn.script,
38702 witness: txIn.witness
38703 })
38704 })
38705
38706 // fix some things not possible through the public API
38707 txb.inputs.forEach(function (input, i) {
38708 fixMultisigOrder(input, transaction, i)
38709 })
38710
38711 return txb
38712 }
38713
38714 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38715 if (!this.__canModifyInputs()) {
38716 throw new Error('No, this would invalidate signatures')
38717 }
38718
38719 var value
38720
38721 // is it a hex string?
38722 if (typeof txHash === 'string') {
38723 // transaction hashs's are displayed in reverse order, un-reverse it
38724 txHash = Buffer.from(txHash, 'hex').reverse()
38725
38726 // is it a Transaction object?
38727 } else if (txHash instanceof Transaction) {
38728 var txOut = txHash.outs[vout]
38729 prevOutScript = txOut.script
38730 value = txOut.value
38731
38732 txHash = txHash.getHash()
38733 }
38734
38735 return this.__addInputUnsafe(txHash, vout, {
38736 sequence: sequence,
38737 prevOutScript: prevOutScript,
38738 value: value
38739 })
38740 }
38741
38742 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38743 if (Transaction.isCoinbaseHash(txHash)) {
38744 throw new Error('coinbase inputs not supported')
38745 }
38746
38747 var prevTxOut = txHash.toString('hex') + ':' + vout
38748 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38749
38750 var input = {}
38751
38752 // derive what we can from the scriptSig
38753 if (options.script !== undefined) {
38754 input = expandInput(options.script, options.witness || [])
38755 }
38756
38757 // if an input value was given, retain it
38758 if (options.value !== undefined) {
38759 input.value = options.value
38760 }
38761
38762 // derive what we can from the previous transactions output script
38763 if (!input.prevOutScript && options.prevOutScript) {
38764 var prevOutType
38765
38766 if (!input.pubKeys && !input.signatures) {
38767 var expanded = expandOutput(options.prevOutScript)
38768
38769 if (expanded.pubKeys) {
38770 input.pubKeys = expanded.pubKeys
38771 input.signatures = expanded.signatures
38772 }
38773
38774 prevOutType = expanded.scriptType
38775 }
38776
38777 input.prevOutScript = options.prevOutScript
38778 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38779 }
38780
38781 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38782 this.inputs[vin] = input
38783 this.prevTxMap[prevTxOut] = vin
38784 return vin
38785 }
38786
38787 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38788 if (!this.__canModifyOutputs()) {
38789 throw new Error('No, this would invalidate signatures')
38790 }
38791
38792 // Attempt to get a script if it's a base58 address string
38793 if (typeof scriptPubKey === 'string') {
38794 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38795 }
38796
38797 return this.tx.addOutput(scriptPubKey, value)
38798 }
38799
38800 TransactionBuilder.prototype.build = function () {
38801 return this.__build(false)
38802 }
38803 TransactionBuilder.prototype.buildIncomplete = function () {
38804 return this.__build(true)
38805 }
38806
38807 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38808 if (!allowIncomplete) {
38809 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38810 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38811 }
38812
38813 var tx = this.tx.clone()
38814 // Create script signatures from inputs
38815 this.inputs.forEach(function (input, i) {
38816 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38817 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38818 var result = buildInput(input, allowIncomplete)
38819
38820 // skip if no result
38821 if (!allowIncomplete) {
38822 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38823 throw new Error(result.type + ' not supported')
38824 }
38825 }
38826
38827 tx.setInputScript(i, result.script)
38828 tx.setWitness(i, result.witness)
38829 })
38830
38831 if (!allowIncomplete) {
38832 // do not rely on this, its merely a last resort
38833 if (this.__overMaximumFees(tx.virtualSize())) {
38834 throw new Error('Transaction has absurd fees')
38835 }
38836 }
38837
38838 return tx
38839 }
38840
38841 function canSign (input) {
38842 return input.prevOutScript !== undefined &&
38843 input.signScript !== undefined &&
38844 input.pubKeys !== undefined &&
38845 input.signatures !== undefined &&
38846 input.signatures.length === input.pubKeys.length &&
38847 input.pubKeys.length > 0 &&
38848 (
38849 input.witness === false ||
38850 (input.witness === true && input.value !== undefined)
38851 )
38852 }
38853
38854 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38855 // TODO: remove keyPair.network matching in 4.0.0
38856 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38857 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38858 hashType = hashType || Transaction.SIGHASH_ALL
38859
38860 var input = this.inputs[vin]
38861
38862 // if redeemScript was previously provided, enforce consistency
38863 if (input.redeemScript !== undefined &&
38864 redeemScript &&
38865 !input.redeemScript.equals(redeemScript)) {
38866 throw new Error('Inconsistent redeemScript')
38867 }
38868
38869 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38870 if (!canSign(input)) {
38871 if (witnessValue !== undefined) {
38872 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38873 typeforce(types.Satoshi, witnessValue)
38874 input.value = witnessValue
38875 }
38876
38877 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38878 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38879 }
38880
38881 // ready to sign
38882 var signatureHash
38883 if (input.witness) {
38884 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38885 } else {
38886 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38887 }
38888
38889 // enforce in order signing of public keys
38890 var signed = input.pubKeys.some(function (pubKey, i) {
38891 if (!kpPubKey.equals(pubKey)) return false
38892 if (input.signatures[i]) throw new Error('Signature already exists')
38893 if (kpPubKey.length !== 33 &&
38894 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38895
38896 var signature = keyPair.sign(signatureHash)
38897 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38898
38899 input.signatures[i] = signature.toScriptSignature(hashType)
38900 return true
38901 })
38902
38903 if (!signed) throw new Error('Key pair cannot sign for this input')
38904 }
38905
38906 function signatureHashType (buffer) {
38907 return buffer.readUInt8(buffer.length - 1)
38908 }
38909
38910 TransactionBuilder.prototype.__canModifyInputs = function () {
38911 return this.inputs.every(function (input) {
38912 // any signatures?
38913 if (input.signatures === undefined) return true
38914
38915 return input.signatures.every(function (signature) {
38916 if (!signature) return true
38917 var hashType = signatureHashType(signature)
38918
38919 // if SIGHASH_ANYONECANPAY is set, signatures would not
38920 // be invalidated by more inputs
38921 return hashType & Transaction.SIGHASH_ANYONECANPAY
38922 })
38923 })
38924 }
38925
38926 TransactionBuilder.prototype.__canModifyOutputs = function () {
38927 var nInputs = this.tx.ins.length
38928 var nOutputs = this.tx.outs.length
38929
38930 return this.inputs.every(function (input) {
38931 if (input.signatures === undefined) return true
38932
38933 return input.signatures.every(function (signature) {
38934 if (!signature) return true
38935 var hashType = signatureHashType(signature)
38936
38937 var hashTypeMod = hashType & 0x1f
38938 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38939 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38940 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38941 // some signatures would be invalidated by the addition
38942 // of more outputs
38943 return nInputs <= nOutputs
38944 }
38945 })
38946 })
38947 }
38948
38949 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38950 // not all inputs will have .value defined
38951 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38952
38953 // but all outputs do, and if we have any input value
38954 // we can immediately determine if the outputs are too small
38955 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38956 var fee = incoming - outgoing
38957 var feeRate = fee / bytes
38958
38959 return feeRate > this.maximumFeeRate
38960 }
38961
38962 module.exports = TransactionBuilder
38963
38964 },{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],80:[function(require,module,exports){
38965 var typeforce = require('typeforce')
38966
38967 var UINT31_MAX = Math.pow(2, 31) - 1
38968 function UInt31 (value) {
38969 return typeforce.UInt32(value) && value <= UINT31_MAX
38970 }
38971
38972 function BIP32Path (value) {
38973 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38974 }
38975 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
38976
38977 var SATOSHI_MAX = 21 * 1e14
38978 function Satoshi (value) {
38979 return typeforce.UInt53(value) && value <= SATOSHI_MAX
38980 }
38981
38982 // external dependent types
38983 var BigInt = typeforce.quacksLike('BigInteger')
38984 var ECPoint = typeforce.quacksLike('Point')
38985
38986 // exposed, external API
38987 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
38988 var Network = typeforce.compile({
38989 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
38990 bip32: {
38991 public: typeforce.UInt32,
38992 private: typeforce.UInt32
38993 },
38994 pubKeyHash: typeforce.UInt8,
38995 scriptHash: typeforce.UInt8,
38996 wif: typeforce.UInt8
38997 })
38998
38999 // extend typeforce types with ours
39000 var types = {
39001 BigInt: BigInt,
39002 BIP32Path: BIP32Path,
39003 Buffer256bit: typeforce.BufferN(32),
39004 ECPoint: ECPoint,
39005 ECSignature: ECSignature,
39006 Hash160bit: typeforce.BufferN(20),
39007 Hash256bit: typeforce.BufferN(32),
39008 Network: Network,
39009 Satoshi: Satoshi,
39010 UInt31: UInt31
39011 }
39012
39013 for (var typeName in typeforce) {
39014 types[typeName] = typeforce[typeName]
39015 }
39016
39017 module.exports = types
39018
39019 },{"typeforce":139}],81:[function(require,module,exports){
39020 (function (module, exports) {
39021 'use strict';
39022
39023 // Utils
39024 function assert (val, msg) {
39025 if (!val) throw new Error(msg || 'Assertion failed');
39026 }
39027
39028 // Could use `inherits` module, but don't want to move from single file
39029 // architecture yet.
39030 function inherits (ctor, superCtor) {
39031 ctor.super_ = superCtor;
39032 var TempCtor = function () {};
39033 TempCtor.prototype = superCtor.prototype;
39034 ctor.prototype = new TempCtor();
39035 ctor.prototype.constructor = ctor;
39036 }
39037
39038 // BN
39039
39040 function BN (number, base, endian) {
39041 if (BN.isBN(number)) {
39042 return number;
39043 }
39044
39045 this.negative = 0;
39046 this.words = null;
39047 this.length = 0;
39048
39049 // Reduction context
39050 this.red = null;
39051
39052 if (number !== null) {
39053 if (base === 'le' || base === 'be') {
39054 endian = base;
39055 base = 10;
39056 }
39057
39058 this._init(number || 0, base || 10, endian || 'be');
39059 }
39060 }
39061 if (typeof module === 'object') {
39062 module.exports = BN;
39063 } else {
39064 exports.BN = BN;
39065 }
39066
39067 BN.BN = BN;
39068 BN.wordSize = 26;
39069
39070 var Buffer;
39071 try {
39072 Buffer = require('buf' + 'fer').Buffer;
39073 } catch (e) {
39074 }
39075
39076 BN.isBN = function isBN (num) {
39077 if (num instanceof BN) {
39078 return true;
39079 }
39080
39081 return num !== null && typeof num === 'object' &&
39082 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
39083 };
39084
39085 BN.max = function max (left, right) {
39086 if (left.cmp(right) > 0) return left;
39087 return right;
39088 };
39089
39090 BN.min = function min (left, right) {
39091 if (left.cmp(right) < 0) return left;
39092 return right;
39093 };
39094
39095 BN.prototype._init = function init (number, base, endian) {
39096 if (typeof number === 'number') {
39097 return this._initNumber(number, base, endian);
39098 }
39099
39100 if (typeof number === 'object') {
39101 return this._initArray(number, base, endian);
39102 }
39103
39104 if (base === 'hex') {
39105 base = 16;
39106 }
39107 assert(base === (base | 0) && base >= 2 && base <= 36);
39108
39109 number = number.toString().replace(/\s+/g, '');
39110 var start = 0;
39111 if (number[0] === '-') {
39112 start++;
39113 }
39114
39115 if (base === 16) {
39116 this._parseHex(number, start);
39117 } else {
39118 this._parseBase(number, base, start);
39119 }
39120
39121 if (number[0] === '-') {
39122 this.negative = 1;
39123 }
39124
39125 this.strip();
39126
39127 if (endian !== 'le') return;
39128
39129 this._initArray(this.toArray(), base, endian);
39130 };
39131
39132 BN.prototype._initNumber = function _initNumber (number, base, endian) {
39133 if (number < 0) {
39134 this.negative = 1;
39135 number = -number;
39136 }
39137 if (number < 0x4000000) {
39138 this.words = [ number & 0x3ffffff ];
39139 this.length = 1;
39140 } else if (number < 0x10000000000000) {
39141 this.words = [
39142 number & 0x3ffffff,
39143 (number / 0x4000000) & 0x3ffffff
39144 ];
39145 this.length = 2;
39146 } else {
39147 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
39148 this.words = [
39149 number & 0x3ffffff,
39150 (number / 0x4000000) & 0x3ffffff,
39151 1
39152 ];
39153 this.length = 3;
39154 }
39155
39156 if (endian !== 'le') return;
39157
39158 // Reverse the bytes
39159 this._initArray(this.toArray(), base, endian);
39160 };
39161
39162 BN.prototype._initArray = function _initArray (number, base, endian) {
39163 // Perhaps a Uint8Array
39164 assert(typeof number.length === 'number');
39165 if (number.length <= 0) {
39166 this.words = [ 0 ];
39167 this.length = 1;
39168 return this;
39169 }
39170
39171 this.length = Math.ceil(number.length / 3);
39172 this.words = new Array(this.length);
39173 for (var i = 0; i < this.length; i++) {
39174 this.words[i] = 0;
39175 }
39176
39177 var j, w;
39178 var off = 0;
39179 if (endian === 'be') {
39180 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
39181 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
39182 this.words[j] |= (w << off) & 0x3ffffff;
39183 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39184 off += 24;
39185 if (off >= 26) {
39186 off -= 26;
39187 j++;
39188 }
39189 }
39190 } else if (endian === 'le') {
39191 for (i = 0, j = 0; i < number.length; i += 3) {
39192 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
39193 this.words[j] |= (w << off) & 0x3ffffff;
39194 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39195 off += 24;
39196 if (off >= 26) {
39197 off -= 26;
39198 j++;
39199 }
39200 }
39201 }
39202 return this.strip();
39203 };
39204
39205 function parseHex (str, start, end) {
39206 var r = 0;
39207 var len = Math.min(str.length, end);
39208 for (var i = start; i < len; i++) {
39209 var c = str.charCodeAt(i) - 48;
39210
39211 r <<= 4;
39212
39213 // 'a' - 'f'
39214 if (c >= 49 && c <= 54) {
39215 r |= c - 49 + 0xa;
39216
39217 // 'A' - 'F'
39218 } else if (c >= 17 && c <= 22) {
39219 r |= c - 17 + 0xa;
39220
39221 // '0' - '9'
39222 } else {
39223 r |= c & 0xf;
39224 }
39225 }
39226 return r;
39227 }
39228
39229 BN.prototype._parseHex = function _parseHex (number, start) {
39230 // Create possibly bigger array to ensure that it fits the number
39231 this.length = Math.ceil((number.length - start) / 6);
39232 this.words = new Array(this.length);
39233 for (var i = 0; i < this.length; i++) {
39234 this.words[i] = 0;
39235 }
39236
39237 var j, w;
39238 // Scan 24-bit chunks and add them to the number
39239 var off = 0;
39240 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
39241 w = parseHex(number, i, i + 6);
39242 this.words[j] |= (w << off) & 0x3ffffff;
39243 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
39244 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39245 off += 24;
39246 if (off >= 26) {
39247 off -= 26;
39248 j++;
39249 }
39250 }
39251 if (i + 6 !== start) {
39252 w = parseHex(number, start, i + 6);
39253 this.words[j] |= (w << off) & 0x3ffffff;
39254 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39255 }
39256 this.strip();
39257 };
39258
39259 function parseBase (str, start, end, mul) {
39260 var r = 0;
39261 var len = Math.min(str.length, end);
39262 for (var i = start; i < len; i++) {
39263 var c = str.charCodeAt(i) - 48;
39264
39265 r *= mul;
39266
39267 // 'a'
39268 if (c >= 49) {
39269 r += c - 49 + 0xa;
39270
39271 // 'A'
39272 } else if (c >= 17) {
39273 r += c - 17 + 0xa;
39274
39275 // '0' - '9'
39276 } else {
39277 r += c;
39278 }
39279 }
39280 return r;
39281 }
39282
39283 BN.prototype._parseBase = function _parseBase (number, base, start) {
39284 // Initialize as zero
39285 this.words = [ 0 ];
39286 this.length = 1;
39287
39288 // Find length of limb in base
39289 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
39290 limbLen++;
39291 }
39292 limbLen--;
39293 limbPow = (limbPow / base) | 0;
39294
39295 var total = number.length - start;
39296 var mod = total % limbLen;
39297 var end = Math.min(total, total - mod) + start;
39298
39299 var word = 0;
39300 for (var i = start; i < end; i += limbLen) {
39301 word = parseBase(number, i, i + limbLen, base);
39302
39303 this.imuln(limbPow);
39304 if (this.words[0] + word < 0x4000000) {
39305 this.words[0] += word;
39306 } else {
39307 this._iaddn(word);
39308 }
39309 }
39310
39311 if (mod !== 0) {
39312 var pow = 1;
39313 word = parseBase(number, i, number.length, base);
39314
39315 for (i = 0; i < mod; i++) {
39316 pow *= base;
39317 }
39318
39319 this.imuln(pow);
39320 if (this.words[0] + word < 0x4000000) {
39321 this.words[0] += word;
39322 } else {
39323 this._iaddn(word);
39324 }
39325 }
39326 };
39327
39328 BN.prototype.copy = function copy (dest) {
39329 dest.words = new Array(this.length);
39330 for (var i = 0; i < this.length; i++) {
39331 dest.words[i] = this.words[i];
39332 }
39333 dest.length = this.length;
39334 dest.negative = this.negative;
39335 dest.red = this.red;
39336 };
39337
39338 BN.prototype.clone = function clone () {
39339 var r = new BN(null);
39340 this.copy(r);
39341 return r;
39342 };
39343
39344 BN.prototype._expand = function _expand (size) {
39345 while (this.length < size) {
39346 this.words[this.length++] = 0;
39347 }
39348 return this;
39349 };
39350
39351 // Remove leading `0` from `this`
39352 BN.prototype.strip = function strip () {
39353 while (this.length > 1 && this.words[this.length - 1] === 0) {
39354 this.length--;
39355 }
39356 return this._normSign();
39357 };
39358
39359 BN.prototype._normSign = function _normSign () {
39360 // -0 = 0
39361 if (this.length === 1 && this.words[0] === 0) {
39362 this.negative = 0;
39363 }
39364 return this;
39365 };
39366
39367 BN.prototype.inspect = function inspect () {
39368 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
39369 };
39370
39371 /*
39372
39373 var zeros = [];
39374 var groupSizes = [];
39375 var groupBases = [];
39376
39377 var s = '';
39378 var i = -1;
39379 while (++i < BN.wordSize) {
39380 zeros[i] = s;
39381 s += '0';
39382 }
39383 groupSizes[0] = 0;
39384 groupSizes[1] = 0;
39385 groupBases[0] = 0;
39386 groupBases[1] = 0;
39387 var base = 2 - 1;
39388 while (++base < 36 + 1) {
39389 var groupSize = 0;
39390 var groupBase = 1;
39391 while (groupBase < (1 << BN.wordSize) / base) {
39392 groupBase *= base;
39393 groupSize += 1;
39394 }
39395 groupSizes[base] = groupSize;
39396 groupBases[base] = groupBase;
39397 }
39398
39399 */
39400
39401 var zeros = [
39402 '',
39403 '0',
39404 '00',
39405 '000',
39406 '0000',
39407 '00000',
39408 '000000',
39409 '0000000',
39410 '00000000',
39411 '000000000',
39412 '0000000000',
39413 '00000000000',
39414 '000000000000',
39415 '0000000000000',
39416 '00000000000000',
39417 '000000000000000',
39418 '0000000000000000',
39419 '00000000000000000',
39420 '000000000000000000',
39421 '0000000000000000000',
39422 '00000000000000000000',
39423 '000000000000000000000',
39424 '0000000000000000000000',
39425 '00000000000000000000000',
39426 '000000000000000000000000',
39427 '0000000000000000000000000'
39428 ];
39429
39430 var groupSizes = [
39431 0, 0,
39432 25, 16, 12, 11, 10, 9, 8,
39433 8, 7, 7, 7, 7, 6, 6,
39434 6, 6, 6, 6, 6, 5, 5,
39435 5, 5, 5, 5, 5, 5, 5,
39436 5, 5, 5, 5, 5, 5, 5
39437 ];
39438
39439 var groupBases = [
39440 0, 0,
39441 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
39442 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
39443 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
39444 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
39445 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
39446 ];
39447
39448 BN.prototype.toString = function toString (base, padding) {
39449 base = base || 10;
39450 padding = padding | 0 || 1;
39451
39452 var out;
39453 if (base === 16 || base === 'hex') {
39454 out = '';
39455 var off = 0;
39456 var carry = 0;
39457 for (var i = 0; i < this.length; i++) {
39458 var w = this.words[i];
39459 var word = (((w << off) | carry) & 0xffffff).toString(16);
39460 carry = (w >>> (24 - off)) & 0xffffff;
39461 if (carry !== 0 || i !== this.length - 1) {
39462 out = zeros[6 - word.length] + word + out;
39463 } else {
39464 out = word + out;
39465 }
39466 off += 2;
39467 if (off >= 26) {
39468 off -= 26;
39469 i--;
39470 }
39471 }
39472 if (carry !== 0) {
39473 out = carry.toString(16) + out;
39474 }
39475 while (out.length % padding !== 0) {
39476 out = '0' + out;
39477 }
39478 if (this.negative !== 0) {
39479 out = '-' + out;
39480 }
39481 return out;
39482 }
39483
39484 if (base === (base | 0) && base >= 2 && base <= 36) {
39485 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39486 var groupSize = groupSizes[base];
39487 // var groupBase = Math.pow(base, groupSize);
39488 var groupBase = groupBases[base];
39489 out = '';
39490 var c = this.clone();
39491 c.negative = 0;
39492 while (!c.isZero()) {
39493 var r = c.modn(groupBase).toString(base);
39494 c = c.idivn(groupBase);
39495
39496 if (!c.isZero()) {
39497 out = zeros[groupSize - r.length] + r + out;
39498 } else {
39499 out = r + out;
39500 }
39501 }
39502 if (this.isZero()) {
39503 out = '0' + out;
39504 }
39505 while (out.length % padding !== 0) {
39506 out = '0' + out;
39507 }
39508 if (this.negative !== 0) {
39509 out = '-' + out;
39510 }
39511 return out;
39512 }
39513
39514 assert(false, 'Base should be between 2 and 36');
39515 };
39516
39517 BN.prototype.toNumber = function toNumber () {
39518 var ret = this.words[0];
39519 if (this.length === 2) {
39520 ret += this.words[1] * 0x4000000;
39521 } else if (this.length === 3 && this.words[2] === 0x01) {
39522 // NOTE: at this stage it is known that the top bit is set
39523 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39524 } else if (this.length > 2) {
39525 assert(false, 'Number can only safely store up to 53 bits');
39526 }
39527 return (this.negative !== 0) ? -ret : ret;
39528 };
39529
39530 BN.prototype.toJSON = function toJSON () {
39531 return this.toString(16);
39532 };
39533
39534 BN.prototype.toBuffer = function toBuffer (endian, length) {
39535 assert(typeof Buffer !== 'undefined');
39536 return this.toArrayLike(Buffer, endian, length);
39537 };
39538
39539 BN.prototype.toArray = function toArray (endian, length) {
39540 return this.toArrayLike(Array, endian, length);
39541 };
39542
39543 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39544 var byteLength = this.byteLength();
39545 var reqLength = length || Math.max(1, byteLength);
39546 assert(byteLength <= reqLength, 'byte array longer than desired length');
39547 assert(reqLength > 0, 'Requested array length <= 0');
39548
39549 this.strip();
39550 var littleEndian = endian === 'le';
39551 var res = new ArrayType(reqLength);
39552
39553 var b, i;
39554 var q = this.clone();
39555 if (!littleEndian) {
39556 // Assume big-endian
39557 for (i = 0; i < reqLength - byteLength; i++) {
39558 res[i] = 0;
39559 }
39560
39561 for (i = 0; !q.isZero(); i++) {
39562 b = q.andln(0xff);
39563 q.iushrn(8);
39564
39565 res[reqLength - i - 1] = b;
39566 }
39567 } else {
39568 for (i = 0; !q.isZero(); i++) {
39569 b = q.andln(0xff);
39570 q.iushrn(8);
39571
39572 res[i] = b;
39573 }
39574
39575 for (; i < reqLength; i++) {
39576 res[i] = 0;
39577 }
39578 }
39579
39580 return res;
39581 };
39582
39583 if (Math.clz32) {
39584 BN.prototype._countBits = function _countBits (w) {
39585 return 32 - Math.clz32(w);
39586 };
39587 } else {
39588 BN.prototype._countBits = function _countBits (w) {
39589 var t = w;
39590 var r = 0;
39591 if (t >= 0x1000) {
39592 r += 13;
39593 t >>>= 13;
39594 }
39595 if (t >= 0x40) {
39596 r += 7;
39597 t >>>= 7;
39598 }
39599 if (t >= 0x8) {
39600 r += 4;
39601 t >>>= 4;
39602 }
39603 if (t >= 0x02) {
39604 r += 2;
39605 t >>>= 2;
39606 }
39607 return r + t;
39608 };
39609 }
39610
39611 BN.prototype._zeroBits = function _zeroBits (w) {
39612 // Short-cut
39613 if (w === 0) return 26;
39614
39615 var t = w;
39616 var r = 0;
39617 if ((t & 0x1fff) === 0) {
39618 r += 13;
39619 t >>>= 13;
39620 }
39621 if ((t & 0x7f) === 0) {
39622 r += 7;
39623 t >>>= 7;
39624 }
39625 if ((t & 0xf) === 0) {
39626 r += 4;
39627 t >>>= 4;
39628 }
39629 if ((t & 0x3) === 0) {
39630 r += 2;
39631 t >>>= 2;
39632 }
39633 if ((t & 0x1) === 0) {
39634 r++;
39635 }
39636 return r;
39637 };
39638
39639 // Return number of used bits in a BN
39640 BN.prototype.bitLength = function bitLength () {
39641 var w = this.words[this.length - 1];
39642 var hi = this._countBits(w);
39643 return (this.length - 1) * 26 + hi;
39644 };
39645
39646 function toBitArray (num) {
39647 var w = new Array(num.bitLength());
39648
39649 for (var bit = 0; bit < w.length; bit++) {
39650 var off = (bit / 26) | 0;
39651 var wbit = bit % 26;
39652
39653 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
39654 }
39655
39656 return w;
39657 }
39658
39659 // Number of trailing zero bits
39660 BN.prototype.zeroBits = function zeroBits () {
39661 if (this.isZero()) return 0;
39662
39663 var r = 0;
39664 for (var i = 0; i < this.length; i++) {
39665 var b = this._zeroBits(this.words[i]);
39666 r += b;
39667 if (b !== 26) break;
39668 }
39669 return r;
39670 };
39671
39672 BN.prototype.byteLength = function byteLength () {
39673 return Math.ceil(this.bitLength() / 8);
39674 };
39675
39676 BN.prototype.toTwos = function toTwos (width) {
39677 if (this.negative !== 0) {
39678 return this.abs().inotn(width).iaddn(1);
39679 }
39680 return this.clone();
39681 };
39682
39683 BN.prototype.fromTwos = function fromTwos (width) {
39684 if (this.testn(width - 1)) {
39685 return this.notn(width).iaddn(1).ineg();
39686 }
39687 return this.clone();
39688 };
39689
39690 BN.prototype.isNeg = function isNeg () {
39691 return this.negative !== 0;
39692 };
39693
39694 // Return negative clone of `this`
39695 BN.prototype.neg = function neg () {
39696 return this.clone().ineg();
39697 };
39698
39699 BN.prototype.ineg = function ineg () {
39700 if (!this.isZero()) {
39701 this.negative ^= 1;
39702 }
39703
39704 return this;
39705 };
39706
39707 // Or `num` with `this` in-place
39708 BN.prototype.iuor = function iuor (num) {
39709 while (this.length < num.length) {
39710 this.words[this.length++] = 0;
39711 }
39712
39713 for (var i = 0; i < num.length; i++) {
39714 this.words[i] = this.words[i] | num.words[i];
39715 }
39716
39717 return this.strip();
39718 };
39719
39720 BN.prototype.ior = function ior (num) {
39721 assert((this.negative | num.negative) === 0);
39722 return this.iuor(num);
39723 };
39724
39725 // Or `num` with `this`
39726 BN.prototype.or = function or (num) {
39727 if (this.length > num.length) return this.clone().ior(num);
39728 return num.clone().ior(this);
39729 };
39730
39731 BN.prototype.uor = function uor (num) {
39732 if (this.length > num.length) return this.clone().iuor(num);
39733 return num.clone().iuor(this);
39734 };
39735
39736 // And `num` with `this` in-place
39737 BN.prototype.iuand = function iuand (num) {
39738 // b = min-length(num, this)
39739 var b;
39740 if (this.length > num.length) {
39741 b = num;
39742 } else {
39743 b = this;
39744 }
39745
39746 for (var i = 0; i < b.length; i++) {
39747 this.words[i] = this.words[i] & num.words[i];
39748 }
39749
39750 this.length = b.length;
39751
39752 return this.strip();
39753 };
39754
39755 BN.prototype.iand = function iand (num) {
39756 assert((this.negative | num.negative) === 0);
39757 return this.iuand(num);
39758 };
39759
39760 // And `num` with `this`
39761 BN.prototype.and = function and (num) {
39762 if (this.length > num.length) return this.clone().iand(num);
39763 return num.clone().iand(this);
39764 };
39765
39766 BN.prototype.uand = function uand (num) {
39767 if (this.length > num.length) return this.clone().iuand(num);
39768 return num.clone().iuand(this);
39769 };
39770
39771 // Xor `num` with `this` in-place
39772 BN.prototype.iuxor = function iuxor (num) {
39773 // a.length > b.length
39774 var a;
39775 var b;
39776 if (this.length > num.length) {
39777 a = this;
39778 b = num;
39779 } else {
39780 a = num;
39781 b = this;
39782 }
39783
39784 for (var i = 0; i < b.length; i++) {
39785 this.words[i] = a.words[i] ^ b.words[i];
39786 }
39787
39788 if (this !== a) {
39789 for (; i < a.length; i++) {
39790 this.words[i] = a.words[i];
39791 }
39792 }
39793
39794 this.length = a.length;
39795
39796 return this.strip();
39797 };
39798
39799 BN.prototype.ixor = function ixor (num) {
39800 assert((this.negative | num.negative) === 0);
39801 return this.iuxor(num);
39802 };
39803
39804 // Xor `num` with `this`
39805 BN.prototype.xor = function xor (num) {
39806 if (this.length > num.length) return this.clone().ixor(num);
39807 return num.clone().ixor(this);
39808 };
39809
39810 BN.prototype.uxor = function uxor (num) {
39811 if (this.length > num.length) return this.clone().iuxor(num);
39812 return num.clone().iuxor(this);
39813 };
39814
39815 // Not ``this`` with ``width`` bitwidth
39816 BN.prototype.inotn = function inotn (width) {
39817 assert(typeof width === 'number' && width >= 0);
39818
39819 var bytesNeeded = Math.ceil(width / 26) | 0;
39820 var bitsLeft = width % 26;
39821
39822 // Extend the buffer with leading zeroes
39823 this._expand(bytesNeeded);
39824
39825 if (bitsLeft > 0) {
39826 bytesNeeded--;
39827 }
39828
39829 // Handle complete words
39830 for (var i = 0; i < bytesNeeded; i++) {
39831 this.words[i] = ~this.words[i] & 0x3ffffff;
39832 }
39833
39834 // Handle the residue
39835 if (bitsLeft > 0) {
39836 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
39837 }
39838
39839 // And remove leading zeroes
39840 return this.strip();
39841 };
39842
39843 BN.prototype.notn = function notn (width) {
39844 return this.clone().inotn(width);
39845 };
39846
39847 // Set `bit` of `this`
39848 BN.prototype.setn = function setn (bit, val) {
39849 assert(typeof bit === 'number' && bit >= 0);
39850
39851 var off = (bit / 26) | 0;
39852 var wbit = bit % 26;
39853
39854 this._expand(off + 1);
39855
39856 if (val) {
39857 this.words[off] = this.words[off] | (1 << wbit);
39858 } else {
39859 this.words[off] = this.words[off] & ~(1 << wbit);
39860 }
39861
39862 return this.strip();
39863 };
39864
39865 // Add `num` to `this` in-place
39866 BN.prototype.iadd = function iadd (num) {
39867 var r;
39868
39869 // negative + positive
39870 if (this.negative !== 0 && num.negative === 0) {
39871 this.negative = 0;
39872 r = this.isub(num);
39873 this.negative ^= 1;
39874 return this._normSign();
39875
39876 // positive + negative
39877 } else if (this.negative === 0 && num.negative !== 0) {
39878 num.negative = 0;
39879 r = this.isub(num);
39880 num.negative = 1;
39881 return r._normSign();
39882 }
39883
39884 // a.length > b.length
39885 var a, b;
39886 if (this.length > num.length) {
39887 a = this;
39888 b = num;
39889 } else {
39890 a = num;
39891 b = this;
39892 }
39893
39894 var carry = 0;
39895 for (var i = 0; i < b.length; i++) {
39896 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39897 this.words[i] = r & 0x3ffffff;
39898 carry = r >>> 26;
39899 }
39900 for (; carry !== 0 && i < a.length; i++) {
39901 r = (a.words[i] | 0) + carry;
39902 this.words[i] = r & 0x3ffffff;
39903 carry = r >>> 26;
39904 }
39905
39906 this.length = a.length;
39907 if (carry !== 0) {
39908 this.words[this.length] = carry;
39909 this.length++;
39910 // Copy the rest of the words
39911 } else if (a !== this) {
39912 for (; i < a.length; i++) {
39913 this.words[i] = a.words[i];
39914 }
39915 }
39916
39917 return this;
39918 };
39919
39920 // Add `num` to `this`
39921 BN.prototype.add = function add (num) {
39922 var res;
39923 if (num.negative !== 0 && this.negative === 0) {
39924 num.negative = 0;
39925 res = this.sub(num);
39926 num.negative ^= 1;
39927 return res;
39928 } else if (num.negative === 0 && this.negative !== 0) {
39929 this.negative = 0;
39930 res = num.sub(this);
39931 this.negative = 1;
39932 return res;
39933 }
39934
39935 if (this.length > num.length) return this.clone().iadd(num);
39936
39937 return num.clone().iadd(this);
39938 };
39939
39940 // Subtract `num` from `this` in-place
39941 BN.prototype.isub = function isub (num) {
39942 // this - (-num) = this + num
39943 if (num.negative !== 0) {
39944 num.negative = 0;
39945 var r = this.iadd(num);
39946 num.negative = 1;
39947 return r._normSign();
39948
39949 // -this - num = -(this + num)
39950 } else if (this.negative !== 0) {
39951 this.negative = 0;
39952 this.iadd(num);
39953 this.negative = 1;
39954 return this._normSign();
39955 }
39956
39957 // At this point both numbers are positive
39958 var cmp = this.cmp(num);
39959
39960 // Optimization - zeroify
39961 if (cmp === 0) {
39962 this.negative = 0;
39963 this.length = 1;
39964 this.words[0] = 0;
39965 return this;
39966 }
39967
39968 // a > b
39969 var a, b;
39970 if (cmp > 0) {
39971 a = this;
39972 b = num;
39973 } else {
39974 a = num;
39975 b = this;
39976 }
39977
39978 var carry = 0;
39979 for (var i = 0; i < b.length; i++) {
39980 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39981 carry = r >> 26;
39982 this.words[i] = r & 0x3ffffff;
39983 }
39984 for (; carry !== 0 && i < a.length; i++) {
39985 r = (a.words[i] | 0) + carry;
39986 carry = r >> 26;
39987 this.words[i] = r & 0x3ffffff;
39988 }
39989
39990 // Copy rest of the words
39991 if (carry === 0 && i < a.length && a !== this) {
39992 for (; i < a.length; i++) {
39993 this.words[i] = a.words[i];
39994 }
39995 }
39996
39997 this.length = Math.max(this.length, i);
39998
39999 if (a !== this) {
40000 this.negative = 1;
40001 }
40002
40003 return this.strip();
40004 };
40005
40006 // Subtract `num` from `this`
40007 BN.prototype.sub = function sub (num) {
40008 return this.clone().isub(num);
40009 };
40010
40011 function smallMulTo (self, num, out) {
40012 out.negative = num.negative ^ self.negative;
40013 var len = (self.length + num.length) | 0;
40014 out.length = len;
40015 len = (len - 1) | 0;
40016
40017 // Peel one iteration (compiler can't do it, because of code complexity)
40018 var a = self.words[0] | 0;
40019 var b = num.words[0] | 0;
40020 var r = a * b;
40021
40022 var lo = r & 0x3ffffff;
40023 var carry = (r / 0x4000000) | 0;
40024 out.words[0] = lo;
40025
40026 for (var k = 1; k < len; k++) {
40027 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40028 // note that ncarry could be >= 0x3ffffff
40029 var ncarry = carry >>> 26;
40030 var rword = carry & 0x3ffffff;
40031 var maxJ = Math.min(k, num.length - 1);
40032 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40033 var i = (k - j) | 0;
40034 a = self.words[i] | 0;
40035 b = num.words[j] | 0;
40036 r = a * b + rword;
40037 ncarry += (r / 0x4000000) | 0;
40038 rword = r & 0x3ffffff;
40039 }
40040 out.words[k] = rword | 0;
40041 carry = ncarry | 0;
40042 }
40043 if (carry !== 0) {
40044 out.words[k] = carry | 0;
40045 } else {
40046 out.length--;
40047 }
40048
40049 return out.strip();
40050 }
40051
40052 // TODO(indutny): it may be reasonable to omit it for users who don't need
40053 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
40054 // multiplication (like elliptic secp256k1).
40055 var comb10MulTo = function comb10MulTo (self, num, out) {
40056 var a = self.words;
40057 var b = num.words;
40058 var o = out.words;
40059 var c = 0;
40060 var lo;
40061 var mid;
40062 var hi;
40063 var a0 = a[0] | 0;
40064 var al0 = a0 & 0x1fff;
40065 var ah0 = a0 >>> 13;
40066 var a1 = a[1] | 0;
40067 var al1 = a1 & 0x1fff;
40068 var ah1 = a1 >>> 13;
40069 var a2 = a[2] | 0;
40070 var al2 = a2 & 0x1fff;
40071 var ah2 = a2 >>> 13;
40072 var a3 = a[3] | 0;
40073 var al3 = a3 & 0x1fff;
40074 var ah3 = a3 >>> 13;
40075 var a4 = a[4] | 0;
40076 var al4 = a4 & 0x1fff;
40077 var ah4 = a4 >>> 13;
40078 var a5 = a[5] | 0;
40079 var al5 = a5 & 0x1fff;
40080 var ah5 = a5 >>> 13;
40081 var a6 = a[6] | 0;
40082 var al6 = a6 & 0x1fff;
40083 var ah6 = a6 >>> 13;
40084 var a7 = a[7] | 0;
40085 var al7 = a7 & 0x1fff;
40086 var ah7 = a7 >>> 13;
40087 var a8 = a[8] | 0;
40088 var al8 = a8 & 0x1fff;
40089 var ah8 = a8 >>> 13;
40090 var a9 = a[9] | 0;
40091 var al9 = a9 & 0x1fff;
40092 var ah9 = a9 >>> 13;
40093 var b0 = b[0] | 0;
40094 var bl0 = b0 & 0x1fff;
40095 var bh0 = b0 >>> 13;
40096 var b1 = b[1] | 0;
40097 var bl1 = b1 & 0x1fff;
40098 var bh1 = b1 >>> 13;
40099 var b2 = b[2] | 0;
40100 var bl2 = b2 & 0x1fff;
40101 var bh2 = b2 >>> 13;
40102 var b3 = b[3] | 0;
40103 var bl3 = b3 & 0x1fff;
40104 var bh3 = b3 >>> 13;
40105 var b4 = b[4] | 0;
40106 var bl4 = b4 & 0x1fff;
40107 var bh4 = b4 >>> 13;
40108 var b5 = b[5] | 0;
40109 var bl5 = b5 & 0x1fff;
40110 var bh5 = b5 >>> 13;
40111 var b6 = b[6] | 0;
40112 var bl6 = b6 & 0x1fff;
40113 var bh6 = b6 >>> 13;
40114 var b7 = b[7] | 0;
40115 var bl7 = b7 & 0x1fff;
40116 var bh7 = b7 >>> 13;
40117 var b8 = b[8] | 0;
40118 var bl8 = b8 & 0x1fff;
40119 var bh8 = b8 >>> 13;
40120 var b9 = b[9] | 0;
40121 var bl9 = b9 & 0x1fff;
40122 var bh9 = b9 >>> 13;
40123
40124 out.negative = self.negative ^ num.negative;
40125 out.length = 19;
40126 /* k = 0 */
40127 lo = Math.imul(al0, bl0);
40128 mid = Math.imul(al0, bh0);
40129 mid = (mid + Math.imul(ah0, bl0)) | 0;
40130 hi = Math.imul(ah0, bh0);
40131 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40132 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
40133 w0 &= 0x3ffffff;
40134 /* k = 1 */
40135 lo = Math.imul(al1, bl0);
40136 mid = Math.imul(al1, bh0);
40137 mid = (mid + Math.imul(ah1, bl0)) | 0;
40138 hi = Math.imul(ah1, bh0);
40139 lo = (lo + Math.imul(al0, bl1)) | 0;
40140 mid = (mid + Math.imul(al0, bh1)) | 0;
40141 mid = (mid + Math.imul(ah0, bl1)) | 0;
40142 hi = (hi + Math.imul(ah0, bh1)) | 0;
40143 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40144 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
40145 w1 &= 0x3ffffff;
40146 /* k = 2 */
40147 lo = Math.imul(al2, bl0);
40148 mid = Math.imul(al2, bh0);
40149 mid = (mid + Math.imul(ah2, bl0)) | 0;
40150 hi = Math.imul(ah2, bh0);
40151 lo = (lo + Math.imul(al1, bl1)) | 0;
40152 mid = (mid + Math.imul(al1, bh1)) | 0;
40153 mid = (mid + Math.imul(ah1, bl1)) | 0;
40154 hi = (hi + Math.imul(ah1, bh1)) | 0;
40155 lo = (lo + Math.imul(al0, bl2)) | 0;
40156 mid = (mid + Math.imul(al0, bh2)) | 0;
40157 mid = (mid + Math.imul(ah0, bl2)) | 0;
40158 hi = (hi + Math.imul(ah0, bh2)) | 0;
40159 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40160 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
40161 w2 &= 0x3ffffff;
40162 /* k = 3 */
40163 lo = Math.imul(al3, bl0);
40164 mid = Math.imul(al3, bh0);
40165 mid = (mid + Math.imul(ah3, bl0)) | 0;
40166 hi = Math.imul(ah3, bh0);
40167 lo = (lo + Math.imul(al2, bl1)) | 0;
40168 mid = (mid + Math.imul(al2, bh1)) | 0;
40169 mid = (mid + Math.imul(ah2, bl1)) | 0;
40170 hi = (hi + Math.imul(ah2, bh1)) | 0;
40171 lo = (lo + Math.imul(al1, bl2)) | 0;
40172 mid = (mid + Math.imul(al1, bh2)) | 0;
40173 mid = (mid + Math.imul(ah1, bl2)) | 0;
40174 hi = (hi + Math.imul(ah1, bh2)) | 0;
40175 lo = (lo + Math.imul(al0, bl3)) | 0;
40176 mid = (mid + Math.imul(al0, bh3)) | 0;
40177 mid = (mid + Math.imul(ah0, bl3)) | 0;
40178 hi = (hi + Math.imul(ah0, bh3)) | 0;
40179 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40180 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
40181 w3 &= 0x3ffffff;
40182 /* k = 4 */
40183 lo = Math.imul(al4, bl0);
40184 mid = Math.imul(al4, bh0);
40185 mid = (mid + Math.imul(ah4, bl0)) | 0;
40186 hi = Math.imul(ah4, bh0);
40187 lo = (lo + Math.imul(al3, bl1)) | 0;
40188 mid = (mid + Math.imul(al3, bh1)) | 0;
40189 mid = (mid + Math.imul(ah3, bl1)) | 0;
40190 hi = (hi + Math.imul(ah3, bh1)) | 0;
40191 lo = (lo + Math.imul(al2, bl2)) | 0;
40192 mid = (mid + Math.imul(al2, bh2)) | 0;
40193 mid = (mid + Math.imul(ah2, bl2)) | 0;
40194 hi = (hi + Math.imul(ah2, bh2)) | 0;
40195 lo = (lo + Math.imul(al1, bl3)) | 0;
40196 mid = (mid + Math.imul(al1, bh3)) | 0;
40197 mid = (mid + Math.imul(ah1, bl3)) | 0;
40198 hi = (hi + Math.imul(ah1, bh3)) | 0;
40199 lo = (lo + Math.imul(al0, bl4)) | 0;
40200 mid = (mid + Math.imul(al0, bh4)) | 0;
40201 mid = (mid + Math.imul(ah0, bl4)) | 0;
40202 hi = (hi + Math.imul(ah0, bh4)) | 0;
40203 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40204 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
40205 w4 &= 0x3ffffff;
40206 /* k = 5 */
40207 lo = Math.imul(al5, bl0);
40208 mid = Math.imul(al5, bh0);
40209 mid = (mid + Math.imul(ah5, bl0)) | 0;
40210 hi = Math.imul(ah5, bh0);
40211 lo = (lo + Math.imul(al4, bl1)) | 0;
40212 mid = (mid + Math.imul(al4, bh1)) | 0;
40213 mid = (mid + Math.imul(ah4, bl1)) | 0;
40214 hi = (hi + Math.imul(ah4, bh1)) | 0;
40215 lo = (lo + Math.imul(al3, bl2)) | 0;
40216 mid = (mid + Math.imul(al3, bh2)) | 0;
40217 mid = (mid + Math.imul(ah3, bl2)) | 0;
40218 hi = (hi + Math.imul(ah3, bh2)) | 0;
40219 lo = (lo + Math.imul(al2, bl3)) | 0;
40220 mid = (mid + Math.imul(al2, bh3)) | 0;
40221 mid = (mid + Math.imul(ah2, bl3)) | 0;
40222 hi = (hi + Math.imul(ah2, bh3)) | 0;
40223 lo = (lo + Math.imul(al1, bl4)) | 0;
40224 mid = (mid + Math.imul(al1, bh4)) | 0;
40225 mid = (mid + Math.imul(ah1, bl4)) | 0;
40226 hi = (hi + Math.imul(ah1, bh4)) | 0;
40227 lo = (lo + Math.imul(al0, bl5)) | 0;
40228 mid = (mid + Math.imul(al0, bh5)) | 0;
40229 mid = (mid + Math.imul(ah0, bl5)) | 0;
40230 hi = (hi + Math.imul(ah0, bh5)) | 0;
40231 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40232 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
40233 w5 &= 0x3ffffff;
40234 /* k = 6 */
40235 lo = Math.imul(al6, bl0);
40236 mid = Math.imul(al6, bh0);
40237 mid = (mid + Math.imul(ah6, bl0)) | 0;
40238 hi = Math.imul(ah6, bh0);
40239 lo = (lo + Math.imul(al5, bl1)) | 0;
40240 mid = (mid + Math.imul(al5, bh1)) | 0;
40241 mid = (mid + Math.imul(ah5, bl1)) | 0;
40242 hi = (hi + Math.imul(ah5, bh1)) | 0;
40243 lo = (lo + Math.imul(al4, bl2)) | 0;
40244 mid = (mid + Math.imul(al4, bh2)) | 0;
40245 mid = (mid + Math.imul(ah4, bl2)) | 0;
40246 hi = (hi + Math.imul(ah4, bh2)) | 0;
40247 lo = (lo + Math.imul(al3, bl3)) | 0;
40248 mid = (mid + Math.imul(al3, bh3)) | 0;
40249 mid = (mid + Math.imul(ah3, bl3)) | 0;
40250 hi = (hi + Math.imul(ah3, bh3)) | 0;
40251 lo = (lo + Math.imul(al2, bl4)) | 0;
40252 mid = (mid + Math.imul(al2, bh4)) | 0;
40253 mid = (mid + Math.imul(ah2, bl4)) | 0;
40254 hi = (hi + Math.imul(ah2, bh4)) | 0;
40255 lo = (lo + Math.imul(al1, bl5)) | 0;
40256 mid = (mid + Math.imul(al1, bh5)) | 0;
40257 mid = (mid + Math.imul(ah1, bl5)) | 0;
40258 hi = (hi + Math.imul(ah1, bh5)) | 0;
40259 lo = (lo + Math.imul(al0, bl6)) | 0;
40260 mid = (mid + Math.imul(al0, bh6)) | 0;
40261 mid = (mid + Math.imul(ah0, bl6)) | 0;
40262 hi = (hi + Math.imul(ah0, bh6)) | 0;
40263 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40264 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
40265 w6 &= 0x3ffffff;
40266 /* k = 7 */
40267 lo = Math.imul(al7, bl0);
40268 mid = Math.imul(al7, bh0);
40269 mid = (mid + Math.imul(ah7, bl0)) | 0;
40270 hi = Math.imul(ah7, bh0);
40271 lo = (lo + Math.imul(al6, bl1)) | 0;
40272 mid = (mid + Math.imul(al6, bh1)) | 0;
40273 mid = (mid + Math.imul(ah6, bl1)) | 0;
40274 hi = (hi + Math.imul(ah6, bh1)) | 0;
40275 lo = (lo + Math.imul(al5, bl2)) | 0;
40276 mid = (mid + Math.imul(al5, bh2)) | 0;
40277 mid = (mid + Math.imul(ah5, bl2)) | 0;
40278 hi = (hi + Math.imul(ah5, bh2)) | 0;
40279 lo = (lo + Math.imul(al4, bl3)) | 0;
40280 mid = (mid + Math.imul(al4, bh3)) | 0;
40281 mid = (mid + Math.imul(ah4, bl3)) | 0;
40282 hi = (hi + Math.imul(ah4, bh3)) | 0;
40283 lo = (lo + Math.imul(al3, bl4)) | 0;
40284 mid = (mid + Math.imul(al3, bh4)) | 0;
40285 mid = (mid + Math.imul(ah3, bl4)) | 0;
40286 hi = (hi + Math.imul(ah3, bh4)) | 0;
40287 lo = (lo + Math.imul(al2, bl5)) | 0;
40288 mid = (mid + Math.imul(al2, bh5)) | 0;
40289 mid = (mid + Math.imul(ah2, bl5)) | 0;
40290 hi = (hi + Math.imul(ah2, bh5)) | 0;
40291 lo = (lo + Math.imul(al1, bl6)) | 0;
40292 mid = (mid + Math.imul(al1, bh6)) | 0;
40293 mid = (mid + Math.imul(ah1, bl6)) | 0;
40294 hi = (hi + Math.imul(ah1, bh6)) | 0;
40295 lo = (lo + Math.imul(al0, bl7)) | 0;
40296 mid = (mid + Math.imul(al0, bh7)) | 0;
40297 mid = (mid + Math.imul(ah0, bl7)) | 0;
40298 hi = (hi + Math.imul(ah0, bh7)) | 0;
40299 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40300 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
40301 w7 &= 0x3ffffff;
40302 /* k = 8 */
40303 lo = Math.imul(al8, bl0);
40304 mid = Math.imul(al8, bh0);
40305 mid = (mid + Math.imul(ah8, bl0)) | 0;
40306 hi = Math.imul(ah8, bh0);
40307 lo = (lo + Math.imul(al7, bl1)) | 0;
40308 mid = (mid + Math.imul(al7, bh1)) | 0;
40309 mid = (mid + Math.imul(ah7, bl1)) | 0;
40310 hi = (hi + Math.imul(ah7, bh1)) | 0;
40311 lo = (lo + Math.imul(al6, bl2)) | 0;
40312 mid = (mid + Math.imul(al6, bh2)) | 0;
40313 mid = (mid + Math.imul(ah6, bl2)) | 0;
40314 hi = (hi + Math.imul(ah6, bh2)) | 0;
40315 lo = (lo + Math.imul(al5, bl3)) | 0;
40316 mid = (mid + Math.imul(al5, bh3)) | 0;
40317 mid = (mid + Math.imul(ah5, bl3)) | 0;
40318 hi = (hi + Math.imul(ah5, bh3)) | 0;
40319 lo = (lo + Math.imul(al4, bl4)) | 0;
40320 mid = (mid + Math.imul(al4, bh4)) | 0;
40321 mid = (mid + Math.imul(ah4, bl4)) | 0;
40322 hi = (hi + Math.imul(ah4, bh4)) | 0;
40323 lo = (lo + Math.imul(al3, bl5)) | 0;
40324 mid = (mid + Math.imul(al3, bh5)) | 0;
40325 mid = (mid + Math.imul(ah3, bl5)) | 0;
40326 hi = (hi + Math.imul(ah3, bh5)) | 0;
40327 lo = (lo + Math.imul(al2, bl6)) | 0;
40328 mid = (mid + Math.imul(al2, bh6)) | 0;
40329 mid = (mid + Math.imul(ah2, bl6)) | 0;
40330 hi = (hi + Math.imul(ah2, bh6)) | 0;
40331 lo = (lo + Math.imul(al1, bl7)) | 0;
40332 mid = (mid + Math.imul(al1, bh7)) | 0;
40333 mid = (mid + Math.imul(ah1, bl7)) | 0;
40334 hi = (hi + Math.imul(ah1, bh7)) | 0;
40335 lo = (lo + Math.imul(al0, bl8)) | 0;
40336 mid = (mid + Math.imul(al0, bh8)) | 0;
40337 mid = (mid + Math.imul(ah0, bl8)) | 0;
40338 hi = (hi + Math.imul(ah0, bh8)) | 0;
40339 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40340 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
40341 w8 &= 0x3ffffff;
40342 /* k = 9 */
40343 lo = Math.imul(al9, bl0);
40344 mid = Math.imul(al9, bh0);
40345 mid = (mid + Math.imul(ah9, bl0)) | 0;
40346 hi = Math.imul(ah9, bh0);
40347 lo = (lo + Math.imul(al8, bl1)) | 0;
40348 mid = (mid + Math.imul(al8, bh1)) | 0;
40349 mid = (mid + Math.imul(ah8, bl1)) | 0;
40350 hi = (hi + Math.imul(ah8, bh1)) | 0;
40351 lo = (lo + Math.imul(al7, bl2)) | 0;
40352 mid = (mid + Math.imul(al7, bh2)) | 0;
40353 mid = (mid + Math.imul(ah7, bl2)) | 0;
40354 hi = (hi + Math.imul(ah7, bh2)) | 0;
40355 lo = (lo + Math.imul(al6, bl3)) | 0;
40356 mid = (mid + Math.imul(al6, bh3)) | 0;
40357 mid = (mid + Math.imul(ah6, bl3)) | 0;
40358 hi = (hi + Math.imul(ah6, bh3)) | 0;
40359 lo = (lo + Math.imul(al5, bl4)) | 0;
40360 mid = (mid + Math.imul(al5, bh4)) | 0;
40361 mid = (mid + Math.imul(ah5, bl4)) | 0;
40362 hi = (hi + Math.imul(ah5, bh4)) | 0;
40363 lo = (lo + Math.imul(al4, bl5)) | 0;
40364 mid = (mid + Math.imul(al4, bh5)) | 0;
40365 mid = (mid + Math.imul(ah4, bl5)) | 0;
40366 hi = (hi + Math.imul(ah4, bh5)) | 0;
40367 lo = (lo + Math.imul(al3, bl6)) | 0;
40368 mid = (mid + Math.imul(al3, bh6)) | 0;
40369 mid = (mid + Math.imul(ah3, bl6)) | 0;
40370 hi = (hi + Math.imul(ah3, bh6)) | 0;
40371 lo = (lo + Math.imul(al2, bl7)) | 0;
40372 mid = (mid + Math.imul(al2, bh7)) | 0;
40373 mid = (mid + Math.imul(ah2, bl7)) | 0;
40374 hi = (hi + Math.imul(ah2, bh7)) | 0;
40375 lo = (lo + Math.imul(al1, bl8)) | 0;
40376 mid = (mid + Math.imul(al1, bh8)) | 0;
40377 mid = (mid + Math.imul(ah1, bl8)) | 0;
40378 hi = (hi + Math.imul(ah1, bh8)) | 0;
40379 lo = (lo + Math.imul(al0, bl9)) | 0;
40380 mid = (mid + Math.imul(al0, bh9)) | 0;
40381 mid = (mid + Math.imul(ah0, bl9)) | 0;
40382 hi = (hi + Math.imul(ah0, bh9)) | 0;
40383 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40384 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
40385 w9 &= 0x3ffffff;
40386 /* k = 10 */
40387 lo = Math.imul(al9, bl1);
40388 mid = Math.imul(al9, bh1);
40389 mid = (mid + Math.imul(ah9, bl1)) | 0;
40390 hi = Math.imul(ah9, bh1);
40391 lo = (lo + Math.imul(al8, bl2)) | 0;
40392 mid = (mid + Math.imul(al8, bh2)) | 0;
40393 mid = (mid + Math.imul(ah8, bl2)) | 0;
40394 hi = (hi + Math.imul(ah8, bh2)) | 0;
40395 lo = (lo + Math.imul(al7, bl3)) | 0;
40396 mid = (mid + Math.imul(al7, bh3)) | 0;
40397 mid = (mid + Math.imul(ah7, bl3)) | 0;
40398 hi = (hi + Math.imul(ah7, bh3)) | 0;
40399 lo = (lo + Math.imul(al6, bl4)) | 0;
40400 mid = (mid + Math.imul(al6, bh4)) | 0;
40401 mid = (mid + Math.imul(ah6, bl4)) | 0;
40402 hi = (hi + Math.imul(ah6, bh4)) | 0;
40403 lo = (lo + Math.imul(al5, bl5)) | 0;
40404 mid = (mid + Math.imul(al5, bh5)) | 0;
40405 mid = (mid + Math.imul(ah5, bl5)) | 0;
40406 hi = (hi + Math.imul(ah5, bh5)) | 0;
40407 lo = (lo + Math.imul(al4, bl6)) | 0;
40408 mid = (mid + Math.imul(al4, bh6)) | 0;
40409 mid = (mid + Math.imul(ah4, bl6)) | 0;
40410 hi = (hi + Math.imul(ah4, bh6)) | 0;
40411 lo = (lo + Math.imul(al3, bl7)) | 0;
40412 mid = (mid + Math.imul(al3, bh7)) | 0;
40413 mid = (mid + Math.imul(ah3, bl7)) | 0;
40414 hi = (hi + Math.imul(ah3, bh7)) | 0;
40415 lo = (lo + Math.imul(al2, bl8)) | 0;
40416 mid = (mid + Math.imul(al2, bh8)) | 0;
40417 mid = (mid + Math.imul(ah2, bl8)) | 0;
40418 hi = (hi + Math.imul(ah2, bh8)) | 0;
40419 lo = (lo + Math.imul(al1, bl9)) | 0;
40420 mid = (mid + Math.imul(al1, bh9)) | 0;
40421 mid = (mid + Math.imul(ah1, bl9)) | 0;
40422 hi = (hi + Math.imul(ah1, bh9)) | 0;
40423 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40424 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
40425 w10 &= 0x3ffffff;
40426 /* k = 11 */
40427 lo = Math.imul(al9, bl2);
40428 mid = Math.imul(al9, bh2);
40429 mid = (mid + Math.imul(ah9, bl2)) | 0;
40430 hi = Math.imul(ah9, bh2);
40431 lo = (lo + Math.imul(al8, bl3)) | 0;
40432 mid = (mid + Math.imul(al8, bh3)) | 0;
40433 mid = (mid + Math.imul(ah8, bl3)) | 0;
40434 hi = (hi + Math.imul(ah8, bh3)) | 0;
40435 lo = (lo + Math.imul(al7, bl4)) | 0;
40436 mid = (mid + Math.imul(al7, bh4)) | 0;
40437 mid = (mid + Math.imul(ah7, bl4)) | 0;
40438 hi = (hi + Math.imul(ah7, bh4)) | 0;
40439 lo = (lo + Math.imul(al6, bl5)) | 0;
40440 mid = (mid + Math.imul(al6, bh5)) | 0;
40441 mid = (mid + Math.imul(ah6, bl5)) | 0;
40442 hi = (hi + Math.imul(ah6, bh5)) | 0;
40443 lo = (lo + Math.imul(al5, bl6)) | 0;
40444 mid = (mid + Math.imul(al5, bh6)) | 0;
40445 mid = (mid + Math.imul(ah5, bl6)) | 0;
40446 hi = (hi + Math.imul(ah5, bh6)) | 0;
40447 lo = (lo + Math.imul(al4, bl7)) | 0;
40448 mid = (mid + Math.imul(al4, bh7)) | 0;
40449 mid = (mid + Math.imul(ah4, bl7)) | 0;
40450 hi = (hi + Math.imul(ah4, bh7)) | 0;
40451 lo = (lo + Math.imul(al3, bl8)) | 0;
40452 mid = (mid + Math.imul(al3, bh8)) | 0;
40453 mid = (mid + Math.imul(ah3, bl8)) | 0;
40454 hi = (hi + Math.imul(ah3, bh8)) | 0;
40455 lo = (lo + Math.imul(al2, bl9)) | 0;
40456 mid = (mid + Math.imul(al2, bh9)) | 0;
40457 mid = (mid + Math.imul(ah2, bl9)) | 0;
40458 hi = (hi + Math.imul(ah2, bh9)) | 0;
40459 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40460 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40461 w11 &= 0x3ffffff;
40462 /* k = 12 */
40463 lo = Math.imul(al9, bl3);
40464 mid = Math.imul(al9, bh3);
40465 mid = (mid + Math.imul(ah9, bl3)) | 0;
40466 hi = Math.imul(ah9, bh3);
40467 lo = (lo + Math.imul(al8, bl4)) | 0;
40468 mid = (mid + Math.imul(al8, bh4)) | 0;
40469 mid = (mid + Math.imul(ah8, bl4)) | 0;
40470 hi = (hi + Math.imul(ah8, bh4)) | 0;
40471 lo = (lo + Math.imul(al7, bl5)) | 0;
40472 mid = (mid + Math.imul(al7, bh5)) | 0;
40473 mid = (mid + Math.imul(ah7, bl5)) | 0;
40474 hi = (hi + Math.imul(ah7, bh5)) | 0;
40475 lo = (lo + Math.imul(al6, bl6)) | 0;
40476 mid = (mid + Math.imul(al6, bh6)) | 0;
40477 mid = (mid + Math.imul(ah6, bl6)) | 0;
40478 hi = (hi + Math.imul(ah6, bh6)) | 0;
40479 lo = (lo + Math.imul(al5, bl7)) | 0;
40480 mid = (mid + Math.imul(al5, bh7)) | 0;
40481 mid = (mid + Math.imul(ah5, bl7)) | 0;
40482 hi = (hi + Math.imul(ah5, bh7)) | 0;
40483 lo = (lo + Math.imul(al4, bl8)) | 0;
40484 mid = (mid + Math.imul(al4, bh8)) | 0;
40485 mid = (mid + Math.imul(ah4, bl8)) | 0;
40486 hi = (hi + Math.imul(ah4, bh8)) | 0;
40487 lo = (lo + Math.imul(al3, bl9)) | 0;
40488 mid = (mid + Math.imul(al3, bh9)) | 0;
40489 mid = (mid + Math.imul(ah3, bl9)) | 0;
40490 hi = (hi + Math.imul(ah3, bh9)) | 0;
40491 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40492 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40493 w12 &= 0x3ffffff;
40494 /* k = 13 */
40495 lo = Math.imul(al9, bl4);
40496 mid = Math.imul(al9, bh4);
40497 mid = (mid + Math.imul(ah9, bl4)) | 0;
40498 hi = Math.imul(ah9, bh4);
40499 lo = (lo + Math.imul(al8, bl5)) | 0;
40500 mid = (mid + Math.imul(al8, bh5)) | 0;
40501 mid = (mid + Math.imul(ah8, bl5)) | 0;
40502 hi = (hi + Math.imul(ah8, bh5)) | 0;
40503 lo = (lo + Math.imul(al7, bl6)) | 0;
40504 mid = (mid + Math.imul(al7, bh6)) | 0;
40505 mid = (mid + Math.imul(ah7, bl6)) | 0;
40506 hi = (hi + Math.imul(ah7, bh6)) | 0;
40507 lo = (lo + Math.imul(al6, bl7)) | 0;
40508 mid = (mid + Math.imul(al6, bh7)) | 0;
40509 mid = (mid + Math.imul(ah6, bl7)) | 0;
40510 hi = (hi + Math.imul(ah6, bh7)) | 0;
40511 lo = (lo + Math.imul(al5, bl8)) | 0;
40512 mid = (mid + Math.imul(al5, bh8)) | 0;
40513 mid = (mid + Math.imul(ah5, bl8)) | 0;
40514 hi = (hi + Math.imul(ah5, bh8)) | 0;
40515 lo = (lo + Math.imul(al4, bl9)) | 0;
40516 mid = (mid + Math.imul(al4, bh9)) | 0;
40517 mid = (mid + Math.imul(ah4, bl9)) | 0;
40518 hi = (hi + Math.imul(ah4, bh9)) | 0;
40519 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40520 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40521 w13 &= 0x3ffffff;
40522 /* k = 14 */
40523 lo = Math.imul(al9, bl5);
40524 mid = Math.imul(al9, bh5);
40525 mid = (mid + Math.imul(ah9, bl5)) | 0;
40526 hi = Math.imul(ah9, bh5);
40527 lo = (lo + Math.imul(al8, bl6)) | 0;
40528 mid = (mid + Math.imul(al8, bh6)) | 0;
40529 mid = (mid + Math.imul(ah8, bl6)) | 0;
40530 hi = (hi + Math.imul(ah8, bh6)) | 0;
40531 lo = (lo + Math.imul(al7, bl7)) | 0;
40532 mid = (mid + Math.imul(al7, bh7)) | 0;
40533 mid = (mid + Math.imul(ah7, bl7)) | 0;
40534 hi = (hi + Math.imul(ah7, bh7)) | 0;
40535 lo = (lo + Math.imul(al6, bl8)) | 0;
40536 mid = (mid + Math.imul(al6, bh8)) | 0;
40537 mid = (mid + Math.imul(ah6, bl8)) | 0;
40538 hi = (hi + Math.imul(ah6, bh8)) | 0;
40539 lo = (lo + Math.imul(al5, bl9)) | 0;
40540 mid = (mid + Math.imul(al5, bh9)) | 0;
40541 mid = (mid + Math.imul(ah5, bl9)) | 0;
40542 hi = (hi + Math.imul(ah5, bh9)) | 0;
40543 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40544 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40545 w14 &= 0x3ffffff;
40546 /* k = 15 */
40547 lo = Math.imul(al9, bl6);
40548 mid = Math.imul(al9, bh6);
40549 mid = (mid + Math.imul(ah9, bl6)) | 0;
40550 hi = Math.imul(ah9, bh6);
40551 lo = (lo + Math.imul(al8, bl7)) | 0;
40552 mid = (mid + Math.imul(al8, bh7)) | 0;
40553 mid = (mid + Math.imul(ah8, bl7)) | 0;
40554 hi = (hi + Math.imul(ah8, bh7)) | 0;
40555 lo = (lo + Math.imul(al7, bl8)) | 0;
40556 mid = (mid + Math.imul(al7, bh8)) | 0;
40557 mid = (mid + Math.imul(ah7, bl8)) | 0;
40558 hi = (hi + Math.imul(ah7, bh8)) | 0;
40559 lo = (lo + Math.imul(al6, bl9)) | 0;
40560 mid = (mid + Math.imul(al6, bh9)) | 0;
40561 mid = (mid + Math.imul(ah6, bl9)) | 0;
40562 hi = (hi + Math.imul(ah6, bh9)) | 0;
40563 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40564 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40565 w15 &= 0x3ffffff;
40566 /* k = 16 */
40567 lo = Math.imul(al9, bl7);
40568 mid = Math.imul(al9, bh7);
40569 mid = (mid + Math.imul(ah9, bl7)) | 0;
40570 hi = Math.imul(ah9, bh7);
40571 lo = (lo + Math.imul(al8, bl8)) | 0;
40572 mid = (mid + Math.imul(al8, bh8)) | 0;
40573 mid = (mid + Math.imul(ah8, bl8)) | 0;
40574 hi = (hi + Math.imul(ah8, bh8)) | 0;
40575 lo = (lo + Math.imul(al7, bl9)) | 0;
40576 mid = (mid + Math.imul(al7, bh9)) | 0;
40577 mid = (mid + Math.imul(ah7, bl9)) | 0;
40578 hi = (hi + Math.imul(ah7, bh9)) | 0;
40579 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40580 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40581 w16 &= 0x3ffffff;
40582 /* k = 17 */
40583 lo = Math.imul(al9, bl8);
40584 mid = Math.imul(al9, bh8);
40585 mid = (mid + Math.imul(ah9, bl8)) | 0;
40586 hi = Math.imul(ah9, bh8);
40587 lo = (lo + Math.imul(al8, bl9)) | 0;
40588 mid = (mid + Math.imul(al8, bh9)) | 0;
40589 mid = (mid + Math.imul(ah8, bl9)) | 0;
40590 hi = (hi + Math.imul(ah8, bh9)) | 0;
40591 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40592 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40593 w17 &= 0x3ffffff;
40594 /* k = 18 */
40595 lo = Math.imul(al9, bl9);
40596 mid = Math.imul(al9, bh9);
40597 mid = (mid + Math.imul(ah9, bl9)) | 0;
40598 hi = Math.imul(ah9, bh9);
40599 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40600 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40601 w18 &= 0x3ffffff;
40602 o[0] = w0;
40603 o[1] = w1;
40604 o[2] = w2;
40605 o[3] = w3;
40606 o[4] = w4;
40607 o[5] = w5;
40608 o[6] = w6;
40609 o[7] = w7;
40610 o[8] = w8;
40611 o[9] = w9;
40612 o[10] = w10;
40613 o[11] = w11;
40614 o[12] = w12;
40615 o[13] = w13;
40616 o[14] = w14;
40617 o[15] = w15;
40618 o[16] = w16;
40619 o[17] = w17;
40620 o[18] = w18;
40621 if (c !== 0) {
40622 o[19] = c;
40623 out.length++;
40624 }
40625 return out;
40626 };
40627
40628 // Polyfill comb
40629 if (!Math.imul) {
40630 comb10MulTo = smallMulTo;
40631 }
40632
40633 function bigMulTo (self, num, out) {
40634 out.negative = num.negative ^ self.negative;
40635 out.length = self.length + num.length;
40636
40637 var carry = 0;
40638 var hncarry = 0;
40639 for (var k = 0; k < out.length - 1; k++) {
40640 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40641 // note that ncarry could be >= 0x3ffffff
40642 var ncarry = hncarry;
40643 hncarry = 0;
40644 var rword = carry & 0x3ffffff;
40645 var maxJ = Math.min(k, num.length - 1);
40646 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40647 var i = k - j;
40648 var a = self.words[i] | 0;
40649 var b = num.words[j] | 0;
40650 var r = a * b;
40651
40652 var lo = r & 0x3ffffff;
40653 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40654 lo = (lo + rword) | 0;
40655 rword = lo & 0x3ffffff;
40656 ncarry = (ncarry + (lo >>> 26)) | 0;
40657
40658 hncarry += ncarry >>> 26;
40659 ncarry &= 0x3ffffff;
40660 }
40661 out.words[k] = rword;
40662 carry = ncarry;
40663 ncarry = hncarry;
40664 }
40665 if (carry !== 0) {
40666 out.words[k] = carry;
40667 } else {
40668 out.length--;
40669 }
40670
40671 return out.strip();
40672 }
40673
40674 function jumboMulTo (self, num, out) {
40675 var fftm = new FFTM();
40676 return fftm.mulp(self, num, out);
40677 }
40678
40679 BN.prototype.mulTo = function mulTo (num, out) {
40680 var res;
40681 var len = this.length + num.length;
40682 if (this.length === 10 && num.length === 10) {
40683 res = comb10MulTo(this, num, out);
40684 } else if (len < 63) {
40685 res = smallMulTo(this, num, out);
40686 } else if (len < 1024) {
40687 res = bigMulTo(this, num, out);
40688 } else {
40689 res = jumboMulTo(this, num, out);
40690 }
40691
40692 return res;
40693 };
40694
40695 // Cooley-Tukey algorithm for FFT
40696 // slightly revisited to rely on looping instead of recursion
40697
40698 function FFTM (x, y) {
40699 this.x = x;
40700 this.y = y;
40701 }
40702
40703 FFTM.prototype.makeRBT = function makeRBT (N) {
40704 var t = new Array(N);
40705 var l = BN.prototype._countBits(N) - 1;
40706 for (var i = 0; i < N; i++) {
40707 t[i] = this.revBin(i, l, N);
40708 }
40709
40710 return t;
40711 };
40712
40713 // Returns binary-reversed representation of `x`
40714 FFTM.prototype.revBin = function revBin (x, l, N) {
40715 if (x === 0 || x === N - 1) return x;
40716
40717 var rb = 0;
40718 for (var i = 0; i < l; i++) {
40719 rb |= (x & 1) << (l - i - 1);
40720 x >>= 1;
40721 }
40722
40723 return rb;
40724 };
40725
40726 // Performs "tweedling" phase, therefore 'emulating'
40727 // behaviour of the recursive algorithm
40728 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40729 for (var i = 0; i < N; i++) {
40730 rtws[i] = rws[rbt[i]];
40731 itws[i] = iws[rbt[i]];
40732 }
40733 };
40734
40735 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40736 this.permute(rbt, rws, iws, rtws, itws, N);
40737
40738 for (var s = 1; s < N; s <<= 1) {
40739 var l = s << 1;
40740
40741 var rtwdf = Math.cos(2 * Math.PI / l);
40742 var itwdf = Math.sin(2 * Math.PI / l);
40743
40744 for (var p = 0; p < N; p += l) {
40745 var rtwdf_ = rtwdf;
40746 var itwdf_ = itwdf;
40747
40748 for (var j = 0; j < s; j++) {
40749 var re = rtws[p + j];
40750 var ie = itws[p + j];
40751
40752 var ro = rtws[p + j + s];
40753 var io = itws[p + j + s];
40754
40755 var rx = rtwdf_ * ro - itwdf_ * io;
40756
40757 io = rtwdf_ * io + itwdf_ * ro;
40758 ro = rx;
40759
40760 rtws[p + j] = re + ro;
40761 itws[p + j] = ie + io;
40762
40763 rtws[p + j + s] = re - ro;
40764 itws[p + j + s] = ie - io;
40765
40766 /* jshint maxdepth : false */
40767 if (j !== l) {
40768 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40769
40770 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40771 rtwdf_ = rx;
40772 }
40773 }
40774 }
40775 }
40776 };
40777
40778 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40779 var N = Math.max(m, n) | 1;
40780 var odd = N & 1;
40781 var i = 0;
40782 for (N = N / 2 | 0; N; N = N >>> 1) {
40783 i++;
40784 }
40785
40786 return 1 << i + 1 + odd;
40787 };
40788
40789 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40790 if (N <= 1) return;
40791
40792 for (var i = 0; i < N / 2; i++) {
40793 var t = rws[i];
40794
40795 rws[i] = rws[N - i - 1];
40796 rws[N - i - 1] = t;
40797
40798 t = iws[i];
40799
40800 iws[i] = -iws[N - i - 1];
40801 iws[N - i - 1] = -t;
40802 }
40803 };
40804
40805 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40806 var carry = 0;
40807 for (var i = 0; i < N / 2; i++) {
40808 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40809 Math.round(ws[2 * i] / N) +
40810 carry;
40811
40812 ws[i] = w & 0x3ffffff;
40813
40814 if (w < 0x4000000) {
40815 carry = 0;
40816 } else {
40817 carry = w / 0x4000000 | 0;
40818 }
40819 }
40820
40821 return ws;
40822 };
40823
40824 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40825 var carry = 0;
40826 for (var i = 0; i < len; i++) {
40827 carry = carry + (ws[i] | 0);
40828
40829 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40830 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40831 }
40832
40833 // Pad with zeroes
40834 for (i = 2 * len; i < N; ++i) {
40835 rws[i] = 0;
40836 }
40837
40838 assert(carry === 0);
40839 assert((carry & ~0x1fff) === 0);
40840 };
40841
40842 FFTM.prototype.stub = function stub (N) {
40843 var ph = new Array(N);
40844 for (var i = 0; i < N; i++) {
40845 ph[i] = 0;
40846 }
40847
40848 return ph;
40849 };
40850
40851 FFTM.prototype.mulp = function mulp (x, y, out) {
40852 var N = 2 * this.guessLen13b(x.length, y.length);
40853
40854 var rbt = this.makeRBT(N);
40855
40856 var _ = this.stub(N);
40857
40858 var rws = new Array(N);
40859 var rwst = new Array(N);
40860 var iwst = new Array(N);
40861
40862 var nrws = new Array(N);
40863 var nrwst = new Array(N);
40864 var niwst = new Array(N);
40865
40866 var rmws = out.words;
40867 rmws.length = N;
40868
40869 this.convert13b(x.words, x.length, rws, N);
40870 this.convert13b(y.words, y.length, nrws, N);
40871
40872 this.transform(rws, _, rwst, iwst, N, rbt);
40873 this.transform(nrws, _, nrwst, niwst, N, rbt);
40874
40875 for (var i = 0; i < N; i++) {
40876 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40877 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40878 rwst[i] = rx;
40879 }
40880
40881 this.conjugate(rwst, iwst, N);
40882 this.transform(rwst, iwst, rmws, _, N, rbt);
40883 this.conjugate(rmws, _, N);
40884 this.normalize13b(rmws, N);
40885
40886 out.negative = x.negative ^ y.negative;
40887 out.length = x.length + y.length;
40888 return out.strip();
40889 };
40890
40891 // Multiply `this` by `num`
40892 BN.prototype.mul = function mul (num) {
40893 var out = new BN(null);
40894 out.words = new Array(this.length + num.length);
40895 return this.mulTo(num, out);
40896 };
40897
40898 // Multiply employing FFT
40899 BN.prototype.mulf = function mulf (num) {
40900 var out = new BN(null);
40901 out.words = new Array(this.length + num.length);
40902 return jumboMulTo(this, num, out);
40903 };
40904
40905 // In-place Multiplication
40906 BN.prototype.imul = function imul (num) {
40907 return this.clone().mulTo(num, this);
40908 };
40909
40910 BN.prototype.imuln = function imuln (num) {
40911 assert(typeof num === 'number');
40912 assert(num < 0x4000000);
40913
40914 // Carry
40915 var carry = 0;
40916 for (var i = 0; i < this.length; i++) {
40917 var w = (this.words[i] | 0) * num;
40918 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40919 carry >>= 26;
40920 carry += (w / 0x4000000) | 0;
40921 // NOTE: lo is 27bit maximum
40922 carry += lo >>> 26;
40923 this.words[i] = lo & 0x3ffffff;
40924 }
40925
40926 if (carry !== 0) {
40927 this.words[i] = carry;
40928 this.length++;
40929 }
40930
40931 return this;
40932 };
40933
40934 BN.prototype.muln = function muln (num) {
40935 return this.clone().imuln(num);
40936 };
40937
40938 // `this` * `this`
40939 BN.prototype.sqr = function sqr () {
40940 return this.mul(this);
40941 };
40942
40943 // `this` * `this` in-place
40944 BN.prototype.isqr = function isqr () {
40945 return this.imul(this.clone());
40946 };
40947
40948 // Math.pow(`this`, `num`)
40949 BN.prototype.pow = function pow (num) {
40950 var w = toBitArray(num);
40951 if (w.length === 0) return new BN(1);
40952
40953 // Skip leading zeroes
40954 var res = this;
40955 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40956 if (w[i] !== 0) break;
40957 }
40958
40959 if (++i < w.length) {
40960 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40961 if (w[i] === 0) continue;
40962
40963 res = res.mul(q);
40964 }
40965 }
40966
40967 return res;
40968 };
40969
40970 // Shift-left in-place
40971 BN.prototype.iushln = function iushln (bits) {
40972 assert(typeof bits === 'number' && bits >= 0);
40973 var r = bits % 26;
40974 var s = (bits - r) / 26;
40975 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40976 var i;
40977
40978 if (r !== 0) {
40979 var carry = 0;
40980
40981 for (i = 0; i < this.length; i++) {
40982 var newCarry = this.words[i] & carryMask;
40983 var c = ((this.words[i] | 0) - newCarry) << r;
40984 this.words[i] = c | carry;
40985 carry = newCarry >>> (26 - r);
40986 }
40987
40988 if (carry) {
40989 this.words[i] = carry;
40990 this.length++;
40991 }
40992 }
40993
40994 if (s !== 0) {
40995 for (i = this.length - 1; i >= 0; i--) {
40996 this.words[i + s] = this.words[i];
40997 }
40998
40999 for (i = 0; i < s; i++) {
41000 this.words[i] = 0;
41001 }
41002
41003 this.length += s;
41004 }
41005
41006 return this.strip();
41007 };
41008
41009 BN.prototype.ishln = function ishln (bits) {
41010 // TODO(indutny): implement me
41011 assert(this.negative === 0);
41012 return this.iushln(bits);
41013 };
41014
41015 // Shift-right in-place
41016 // NOTE: `hint` is a lowest bit before trailing zeroes
41017 // NOTE: if `extended` is present - it will be filled with destroyed bits
41018 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
41019 assert(typeof bits === 'number' && bits >= 0);
41020 var h;
41021 if (hint) {
41022 h = (hint - (hint % 26)) / 26;
41023 } else {
41024 h = 0;
41025 }
41026
41027 var r = bits % 26;
41028 var s = Math.min((bits - r) / 26, this.length);
41029 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41030 var maskedWords = extended;
41031
41032 h -= s;
41033 h = Math.max(0, h);
41034
41035 // Extended mode, copy masked part
41036 if (maskedWords) {
41037 for (var i = 0; i < s; i++) {
41038 maskedWords.words[i] = this.words[i];
41039 }
41040 maskedWords.length = s;
41041 }
41042
41043 if (s === 0) {
41044 // No-op, we should not move anything at all
41045 } else if (this.length > s) {
41046 this.length -= s;
41047 for (i = 0; i < this.length; i++) {
41048 this.words[i] = this.words[i + s];
41049 }
41050 } else {
41051 this.words[0] = 0;
41052 this.length = 1;
41053 }
41054
41055 var carry = 0;
41056 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
41057 var word = this.words[i] | 0;
41058 this.words[i] = (carry << (26 - r)) | (word >>> r);
41059 carry = word & mask;
41060 }
41061
41062 // Push carried bits as a mask
41063 if (maskedWords && carry !== 0) {
41064 maskedWords.words[maskedWords.length++] = carry;
41065 }
41066
41067 if (this.length === 0) {
41068 this.words[0] = 0;
41069 this.length = 1;
41070 }
41071
41072 return this.strip();
41073 };
41074
41075 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
41076 // TODO(indutny): implement me
41077 assert(this.negative === 0);
41078 return this.iushrn(bits, hint, extended);
41079 };
41080
41081 // Shift-left
41082 BN.prototype.shln = function shln (bits) {
41083 return this.clone().ishln(bits);
41084 };
41085
41086 BN.prototype.ushln = function ushln (bits) {
41087 return this.clone().iushln(bits);
41088 };
41089
41090 // Shift-right
41091 BN.prototype.shrn = function shrn (bits) {
41092 return this.clone().ishrn(bits);
41093 };
41094
41095 BN.prototype.ushrn = function ushrn (bits) {
41096 return this.clone().iushrn(bits);
41097 };
41098
41099 // Test if n bit is set
41100 BN.prototype.testn = function testn (bit) {
41101 assert(typeof bit === 'number' && bit >= 0);
41102 var r = bit % 26;
41103 var s = (bit - r) / 26;
41104 var q = 1 << r;
41105
41106 // Fast case: bit is much higher than all existing words
41107 if (this.length <= s) return false;
41108
41109 // Check bit and return
41110 var w = this.words[s];
41111
41112 return !!(w & q);
41113 };
41114
41115 // Return only lowers bits of number (in-place)
41116 BN.prototype.imaskn = function imaskn (bits) {
41117 assert(typeof bits === 'number' && bits >= 0);
41118 var r = bits % 26;
41119 var s = (bits - r) / 26;
41120
41121 assert(this.negative === 0, 'imaskn works only with positive numbers');
41122
41123 if (this.length <= s) {
41124 return this;
41125 }
41126
41127 if (r !== 0) {
41128 s++;
41129 }
41130 this.length = Math.min(s, this.length);
41131
41132 if (r !== 0) {
41133 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41134 this.words[this.length - 1] &= mask;
41135 }
41136
41137 return this.strip();
41138 };
41139
41140 // Return only lowers bits of number
41141 BN.prototype.maskn = function maskn (bits) {
41142 return this.clone().imaskn(bits);
41143 };
41144
41145 // Add plain number `num` to `this`
41146 BN.prototype.iaddn = function iaddn (num) {
41147 assert(typeof num === 'number');
41148 assert(num < 0x4000000);
41149 if (num < 0) return this.isubn(-num);
41150
41151 // Possible sign change
41152 if (this.negative !== 0) {
41153 if (this.length === 1 && (this.words[0] | 0) < num) {
41154 this.words[0] = num - (this.words[0] | 0);
41155 this.negative = 0;
41156 return this;
41157 }
41158
41159 this.negative = 0;
41160 this.isubn(num);
41161 this.negative = 1;
41162 return this;
41163 }
41164
41165 // Add without checks
41166 return this._iaddn(num);
41167 };
41168
41169 BN.prototype._iaddn = function _iaddn (num) {
41170 this.words[0] += num;
41171
41172 // Carry
41173 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
41174 this.words[i] -= 0x4000000;
41175 if (i === this.length - 1) {
41176 this.words[i + 1] = 1;
41177 } else {
41178 this.words[i + 1]++;
41179 }
41180 }
41181 this.length = Math.max(this.length, i + 1);
41182
41183 return this;
41184 };
41185
41186 // Subtract plain number `num` from `this`
41187 BN.prototype.isubn = function isubn (num) {
41188 assert(typeof num === 'number');
41189 assert(num < 0x4000000);
41190 if (num < 0) return this.iaddn(-num);
41191
41192 if (this.negative !== 0) {
41193 this.negative = 0;
41194 this.iaddn(num);
41195 this.negative = 1;
41196 return this;
41197 }
41198
41199 this.words[0] -= num;
41200
41201 if (this.length === 1 && this.words[0] < 0) {
41202 this.words[0] = -this.words[0];
41203 this.negative = 1;
41204 } else {
41205 // Carry
41206 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
41207 this.words[i] += 0x4000000;
41208 this.words[i + 1] -= 1;
41209 }
41210 }
41211
41212 return this.strip();
41213 };
41214
41215 BN.prototype.addn = function addn (num) {
41216 return this.clone().iaddn(num);
41217 };
41218
41219 BN.prototype.subn = function subn (num) {
41220 return this.clone().isubn(num);
41221 };
41222
41223 BN.prototype.iabs = function iabs () {
41224 this.negative = 0;
41225
41226 return this;
41227 };
41228
41229 BN.prototype.abs = function abs () {
41230 return this.clone().iabs();
41231 };
41232
41233 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
41234 var len = num.length + shift;
41235 var i;
41236
41237 this._expand(len);
41238
41239 var w;
41240 var carry = 0;
41241 for (i = 0; i < num.length; i++) {
41242 w = (this.words[i + shift] | 0) + carry;
41243 var right = (num.words[i] | 0) * mul;
41244 w -= right & 0x3ffffff;
41245 carry = (w >> 26) - ((right / 0x4000000) | 0);
41246 this.words[i + shift] = w & 0x3ffffff;
41247 }
41248 for (; i < this.length - shift; i++) {
41249 w = (this.words[i + shift] | 0) + carry;
41250 carry = w >> 26;
41251 this.words[i + shift] = w & 0x3ffffff;
41252 }
41253
41254 if (carry === 0) return this.strip();
41255
41256 // Subtraction overflow
41257 assert(carry === -1);
41258 carry = 0;
41259 for (i = 0; i < this.length; i++) {
41260 w = -(this.words[i] | 0) + carry;
41261 carry = w >> 26;
41262 this.words[i] = w & 0x3ffffff;
41263 }
41264 this.negative = 1;
41265
41266 return this.strip();
41267 };
41268
41269 BN.prototype._wordDiv = function _wordDiv (num, mode) {
41270 var shift = this.length - num.length;
41271
41272 var a = this.clone();
41273 var b = num;
41274
41275 // Normalize
41276 var bhi = b.words[b.length - 1] | 0;
41277 var bhiBits = this._countBits(bhi);
41278 shift = 26 - bhiBits;
41279 if (shift !== 0) {
41280 b = b.ushln(shift);
41281 a.iushln(shift);
41282 bhi = b.words[b.length - 1] | 0;
41283 }
41284
41285 // Initialize quotient
41286 var m = a.length - b.length;
41287 var q;
41288
41289 if (mode !== 'mod') {
41290 q = new BN(null);
41291 q.length = m + 1;
41292 q.words = new Array(q.length);
41293 for (var i = 0; i < q.length; i++) {
41294 q.words[i] = 0;
41295 }
41296 }
41297
41298 var diff = a.clone()._ishlnsubmul(b, 1, m);
41299 if (diff.negative === 0) {
41300 a = diff;
41301 if (q) {
41302 q.words[m] = 1;
41303 }
41304 }
41305
41306 for (var j = m - 1; j >= 0; j--) {
41307 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
41308 (a.words[b.length + j - 1] | 0);
41309
41310 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
41311 // (0x7ffffff)
41312 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
41313
41314 a._ishlnsubmul(b, qj, j);
41315 while (a.negative !== 0) {
41316 qj--;
41317 a.negative = 0;
41318 a._ishlnsubmul(b, 1, j);
41319 if (!a.isZero()) {
41320 a.negative ^= 1;
41321 }
41322 }
41323 if (q) {
41324 q.words[j] = qj;
41325 }
41326 }
41327 if (q) {
41328 q.strip();
41329 }
41330 a.strip();
41331
41332 // Denormalize
41333 if (mode !== 'div' && shift !== 0) {
41334 a.iushrn(shift);
41335 }
41336
41337 return {
41338 div: q || null,
41339 mod: a
41340 };
41341 };
41342
41343 // NOTE: 1) `mode` can be set to `mod` to request mod only,
41344 // to `div` to request div only, or be absent to
41345 // request both div & mod
41346 // 2) `positive` is true if unsigned mod is requested
41347 BN.prototype.divmod = function divmod (num, mode, positive) {
41348 assert(!num.isZero());
41349
41350 if (this.isZero()) {
41351 return {
41352 div: new BN(0),
41353 mod: new BN(0)
41354 };
41355 }
41356
41357 var div, mod, res;
41358 if (this.negative !== 0 && num.negative === 0) {
41359 res = this.neg().divmod(num, mode);
41360
41361 if (mode !== 'mod') {
41362 div = res.div.neg();
41363 }
41364
41365 if (mode !== 'div') {
41366 mod = res.mod.neg();
41367 if (positive && mod.negative !== 0) {
41368 mod.iadd(num);
41369 }
41370 }
41371
41372 return {
41373 div: div,
41374 mod: mod
41375 };
41376 }
41377
41378 if (this.negative === 0 && num.negative !== 0) {
41379 res = this.divmod(num.neg(), mode);
41380
41381 if (mode !== 'mod') {
41382 div = res.div.neg();
41383 }
41384
41385 return {
41386 div: div,
41387 mod: res.mod
41388 };
41389 }
41390
41391 if ((this.negative & num.negative) !== 0) {
41392 res = this.neg().divmod(num.neg(), mode);
41393
41394 if (mode !== 'div') {
41395 mod = res.mod.neg();
41396 if (positive && mod.negative !== 0) {
41397 mod.isub(num);
41398 }
41399 }
41400
41401 return {
41402 div: res.div,
41403 mod: mod
41404 };
41405 }
41406
41407 // Both numbers are positive at this point
41408
41409 // Strip both numbers to approximate shift value
41410 if (num.length > this.length || this.cmp(num) < 0) {
41411 return {
41412 div: new BN(0),
41413 mod: this
41414 };
41415 }
41416
41417 // Very short reduction
41418 if (num.length === 1) {
41419 if (mode === 'div') {
41420 return {
41421 div: this.divn(num.words[0]),
41422 mod: null
41423 };
41424 }
41425
41426 if (mode === 'mod') {
41427 return {
41428 div: null,
41429 mod: new BN(this.modn(num.words[0]))
41430 };
41431 }
41432
41433 return {
41434 div: this.divn(num.words[0]),
41435 mod: new BN(this.modn(num.words[0]))
41436 };
41437 }
41438
41439 return this._wordDiv(num, mode);
41440 };
41441
41442 // Find `this` / `num`
41443 BN.prototype.div = function div (num) {
41444 return this.divmod(num, 'div', false).div;
41445 };
41446
41447 // Find `this` % `num`
41448 BN.prototype.mod = function mod (num) {
41449 return this.divmod(num, 'mod', false).mod;
41450 };
41451
41452 BN.prototype.umod = function umod (num) {
41453 return this.divmod(num, 'mod', true).mod;
41454 };
41455
41456 // Find Round(`this` / `num`)
41457 BN.prototype.divRound = function divRound (num) {
41458 var dm = this.divmod(num);
41459
41460 // Fast case - exact division
41461 if (dm.mod.isZero()) return dm.div;
41462
41463 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
41464
41465 var half = num.ushrn(1);
41466 var r2 = num.andln(1);
41467 var cmp = mod.cmp(half);
41468
41469 // Round down
41470 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
41471
41472 // Round up
41473 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41474 };
41475
41476 BN.prototype.modn = function modn (num) {
41477 assert(num <= 0x3ffffff);
41478 var p = (1 << 26) % num;
41479
41480 var acc = 0;
41481 for (var i = this.length - 1; i >= 0; i--) {
41482 acc = (p * acc + (this.words[i] | 0)) % num;
41483 }
41484
41485 return acc;
41486 };
41487
41488 // In-place division by number
41489 BN.prototype.idivn = function idivn (num) {
41490 assert(num <= 0x3ffffff);
41491
41492 var carry = 0;
41493 for (var i = this.length - 1; i >= 0; i--) {
41494 var w = (this.words[i] | 0) + carry * 0x4000000;
41495 this.words[i] = (w / num) | 0;
41496 carry = w % num;
41497 }
41498
41499 return this.strip();
41500 };
41501
41502 BN.prototype.divn = function divn (num) {
41503 return this.clone().idivn(num);
41504 };
41505
41506 BN.prototype.egcd = function egcd (p) {
41507 assert(p.negative === 0);
41508 assert(!p.isZero());
41509
41510 var x = this;
41511 var y = p.clone();
41512
41513 if (x.negative !== 0) {
41514 x = x.umod(p);
41515 } else {
41516 x = x.clone();
41517 }
41518
41519 // A * x + B * y = x
41520 var A = new BN(1);
41521 var B = new BN(0);
41522
41523 // C * x + D * y = y
41524 var C = new BN(0);
41525 var D = new BN(1);
41526
41527 var g = 0;
41528
41529 while (x.isEven() && y.isEven()) {
41530 x.iushrn(1);
41531 y.iushrn(1);
41532 ++g;
41533 }
41534
41535 var yp = y.clone();
41536 var xp = x.clone();
41537
41538 while (!x.isZero()) {
41539 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41540 if (i > 0) {
41541 x.iushrn(i);
41542 while (i-- > 0) {
41543 if (A.isOdd() || B.isOdd()) {
41544 A.iadd(yp);
41545 B.isub(xp);
41546 }
41547
41548 A.iushrn(1);
41549 B.iushrn(1);
41550 }
41551 }
41552
41553 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41554 if (j > 0) {
41555 y.iushrn(j);
41556 while (j-- > 0) {
41557 if (C.isOdd() || D.isOdd()) {
41558 C.iadd(yp);
41559 D.isub(xp);
41560 }
41561
41562 C.iushrn(1);
41563 D.iushrn(1);
41564 }
41565 }
41566
41567 if (x.cmp(y) >= 0) {
41568 x.isub(y);
41569 A.isub(C);
41570 B.isub(D);
41571 } else {
41572 y.isub(x);
41573 C.isub(A);
41574 D.isub(B);
41575 }
41576 }
41577
41578 return {
41579 a: C,
41580 b: D,
41581 gcd: y.iushln(g)
41582 };
41583 };
41584
41585 // This is reduced incarnation of the binary EEA
41586 // above, designated to invert members of the
41587 // _prime_ fields F(p) at a maximal speed
41588 BN.prototype._invmp = function _invmp (p) {
41589 assert(p.negative === 0);
41590 assert(!p.isZero());
41591
41592 var a = this;
41593 var b = p.clone();
41594
41595 if (a.negative !== 0) {
41596 a = a.umod(p);
41597 } else {
41598 a = a.clone();
41599 }
41600
41601 var x1 = new BN(1);
41602 var x2 = new BN(0);
41603
41604 var delta = b.clone();
41605
41606 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41607 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41608 if (i > 0) {
41609 a.iushrn(i);
41610 while (i-- > 0) {
41611 if (x1.isOdd()) {
41612 x1.iadd(delta);
41613 }
41614
41615 x1.iushrn(1);
41616 }
41617 }
41618
41619 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41620 if (j > 0) {
41621 b.iushrn(j);
41622 while (j-- > 0) {
41623 if (x2.isOdd()) {
41624 x2.iadd(delta);
41625 }
41626
41627 x2.iushrn(1);
41628 }
41629 }
41630
41631 if (a.cmp(b) >= 0) {
41632 a.isub(b);
41633 x1.isub(x2);
41634 } else {
41635 b.isub(a);
41636 x2.isub(x1);
41637 }
41638 }
41639
41640 var res;
41641 if (a.cmpn(1) === 0) {
41642 res = x1;
41643 } else {
41644 res = x2;
41645 }
41646
41647 if (res.cmpn(0) < 0) {
41648 res.iadd(p);
41649 }
41650
41651 return res;
41652 };
41653
41654 BN.prototype.gcd = function gcd (num) {
41655 if (this.isZero()) return num.abs();
41656 if (num.isZero()) return this.abs();
41657
41658 var a = this.clone();
41659 var b = num.clone();
41660 a.negative = 0;
41661 b.negative = 0;
41662
41663 // Remove common factor of two
41664 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41665 a.iushrn(1);
41666 b.iushrn(1);
41667 }
41668
41669 do {
41670 while (a.isEven()) {
41671 a.iushrn(1);
41672 }
41673 while (b.isEven()) {
41674 b.iushrn(1);
41675 }
41676
41677 var r = a.cmp(b);
41678 if (r < 0) {
41679 // Swap `a` and `b` to make `a` always bigger than `b`
41680 var t = a;
41681 a = b;
41682 b = t;
41683 } else if (r === 0 || b.cmpn(1) === 0) {
41684 break;
41685 }
41686
41687 a.isub(b);
41688 } while (true);
41689
41690 return b.iushln(shift);
41691 };
41692
41693 // Invert number in the field F(num)
41694 BN.prototype.invm = function invm (num) {
41695 return this.egcd(num).a.umod(num);
41696 };
41697
41698 BN.prototype.isEven = function isEven () {
41699 return (this.words[0] & 1) === 0;
41700 };
41701
41702 BN.prototype.isOdd = function isOdd () {
41703 return (this.words[0] & 1) === 1;
41704 };
41705
41706 // And first word and num
41707 BN.prototype.andln = function andln (num) {
41708 return this.words[0] & num;
41709 };
41710
41711 // Increment at the bit position in-line
41712 BN.prototype.bincn = function bincn (bit) {
41713 assert(typeof bit === 'number');
41714 var r = bit % 26;
41715 var s = (bit - r) / 26;
41716 var q = 1 << r;
41717
41718 // Fast case: bit is much higher than all existing words
41719 if (this.length <= s) {
41720 this._expand(s + 1);
41721 this.words[s] |= q;
41722 return this;
41723 }
41724
41725 // Add bit and propagate, if needed
41726 var carry = q;
41727 for (var i = s; carry !== 0 && i < this.length; i++) {
41728 var w = this.words[i] | 0;
41729 w += carry;
41730 carry = w >>> 26;
41731 w &= 0x3ffffff;
41732 this.words[i] = w;
41733 }
41734 if (carry !== 0) {
41735 this.words[i] = carry;
41736 this.length++;
41737 }
41738 return this;
41739 };
41740
41741 BN.prototype.isZero = function isZero () {
41742 return this.length === 1 && this.words[0] === 0;
41743 };
41744
41745 BN.prototype.cmpn = function cmpn (num) {
41746 var negative = num < 0;
41747
41748 if (this.negative !== 0 && !negative) return -1;
41749 if (this.negative === 0 && negative) return 1;
41750
41751 this.strip();
41752
41753 var res;
41754 if (this.length > 1) {
41755 res = 1;
41756 } else {
41757 if (negative) {
41758 num = -num;
41759 }
41760
41761 assert(num <= 0x3ffffff, 'Number is too big');
41762
41763 var w = this.words[0] | 0;
41764 res = w === num ? 0 : w < num ? -1 : 1;
41765 }
41766 if (this.negative !== 0) return -res | 0;
41767 return res;
41768 };
41769
41770 // Compare two numbers and return:
41771 // 1 - if `this` > `num`
41772 // 0 - if `this` == `num`
41773 // -1 - if `this` < `num`
41774 BN.prototype.cmp = function cmp (num) {
41775 if (this.negative !== 0 && num.negative === 0) return -1;
41776 if (this.negative === 0 && num.negative !== 0) return 1;
41777
41778 var res = this.ucmp(num);
41779 if (this.negative !== 0) return -res | 0;
41780 return res;
41781 };
41782
41783 // Unsigned comparison
41784 BN.prototype.ucmp = function ucmp (num) {
41785 // At this point both numbers have the same sign
41786 if (this.length > num.length) return 1;
41787 if (this.length < num.length) return -1;
41788
41789 var res = 0;
41790 for (var i = this.length - 1; i >= 0; i--) {
41791 var a = this.words[i] | 0;
41792 var b = num.words[i] | 0;
41793
41794 if (a === b) continue;
41795 if (a < b) {
41796 res = -1;
41797 } else if (a > b) {
41798 res = 1;
41799 }
41800 break;
41801 }
41802 return res;
41803 };
41804
41805 BN.prototype.gtn = function gtn (num) {
41806 return this.cmpn(num) === 1;
41807 };
41808
41809 BN.prototype.gt = function gt (num) {
41810 return this.cmp(num) === 1;
41811 };
41812
41813 BN.prototype.gten = function gten (num) {
41814 return this.cmpn(num) >= 0;
41815 };
41816
41817 BN.prototype.gte = function gte (num) {
41818 return this.cmp(num) >= 0;
41819 };
41820
41821 BN.prototype.ltn = function ltn (num) {
41822 return this.cmpn(num) === -1;
41823 };
41824
41825 BN.prototype.lt = function lt (num) {
41826 return this.cmp(num) === -1;
41827 };
41828
41829 BN.prototype.lten = function lten (num) {
41830 return this.cmpn(num) <= 0;
41831 };
41832
41833 BN.prototype.lte = function lte (num) {
41834 return this.cmp(num) <= 0;
41835 };
41836
41837 BN.prototype.eqn = function eqn (num) {
41838 return this.cmpn(num) === 0;
41839 };
41840
41841 BN.prototype.eq = function eq (num) {
41842 return this.cmp(num) === 0;
41843 };
41844
41845 //
41846 // A reduce context, could be using montgomery or something better, depending
41847 // on the `m` itself.
41848 //
41849 BN.red = function red (num) {
41850 return new Red(num);
41851 };
41852
41853 BN.prototype.toRed = function toRed (ctx) {
41854 assert(!this.red, 'Already a number in reduction context');
41855 assert(this.negative === 0, 'red works only with positives');
41856 return ctx.convertTo(this)._forceRed(ctx);
41857 };
41858
41859 BN.prototype.fromRed = function fromRed () {
41860 assert(this.red, 'fromRed works only with numbers in reduction context');
41861 return this.red.convertFrom(this);
41862 };
41863
41864 BN.prototype._forceRed = function _forceRed (ctx) {
41865 this.red = ctx;
41866 return this;
41867 };
41868
41869 BN.prototype.forceRed = function forceRed (ctx) {
41870 assert(!this.red, 'Already a number in reduction context');
41871 return this._forceRed(ctx);
41872 };
41873
41874 BN.prototype.redAdd = function redAdd (num) {
41875 assert(this.red, 'redAdd works only with red numbers');
41876 return this.red.add(this, num);
41877 };
41878
41879 BN.prototype.redIAdd = function redIAdd (num) {
41880 assert(this.red, 'redIAdd works only with red numbers');
41881 return this.red.iadd(this, num);
41882 };
41883
41884 BN.prototype.redSub = function redSub (num) {
41885 assert(this.red, 'redSub works only with red numbers');
41886 return this.red.sub(this, num);
41887 };
41888
41889 BN.prototype.redISub = function redISub (num) {
41890 assert(this.red, 'redISub works only with red numbers');
41891 return this.red.isub(this, num);
41892 };
41893
41894 BN.prototype.redShl = function redShl (num) {
41895 assert(this.red, 'redShl works only with red numbers');
41896 return this.red.shl(this, num);
41897 };
41898
41899 BN.prototype.redMul = function redMul (num) {
41900 assert(this.red, 'redMul works only with red numbers');
41901 this.red._verify2(this, num);
41902 return this.red.mul(this, num);
41903 };
41904
41905 BN.prototype.redIMul = function redIMul (num) {
41906 assert(this.red, 'redMul works only with red numbers');
41907 this.red._verify2(this, num);
41908 return this.red.imul(this, num);
41909 };
41910
41911 BN.prototype.redSqr = function redSqr () {
41912 assert(this.red, 'redSqr works only with red numbers');
41913 this.red._verify1(this);
41914 return this.red.sqr(this);
41915 };
41916
41917 BN.prototype.redISqr = function redISqr () {
41918 assert(this.red, 'redISqr works only with red numbers');
41919 this.red._verify1(this);
41920 return this.red.isqr(this);
41921 };
41922
41923 // Square root over p
41924 BN.prototype.redSqrt = function redSqrt () {
41925 assert(this.red, 'redSqrt works only with red numbers');
41926 this.red._verify1(this);
41927 return this.red.sqrt(this);
41928 };
41929
41930 BN.prototype.redInvm = function redInvm () {
41931 assert(this.red, 'redInvm works only with red numbers');
41932 this.red._verify1(this);
41933 return this.red.invm(this);
41934 };
41935
41936 // Return negative clone of `this` % `red modulo`
41937 BN.prototype.redNeg = function redNeg () {
41938 assert(this.red, 'redNeg works only with red numbers');
41939 this.red._verify1(this);
41940 return this.red.neg(this);
41941 };
41942
41943 BN.prototype.redPow = function redPow (num) {
41944 assert(this.red && !num.red, 'redPow(normalNum)');
41945 this.red._verify1(this);
41946 return this.red.pow(this, num);
41947 };
41948
41949 // Prime numbers with efficient reduction
41950 var primes = {
41951 k256: null,
41952 p224: null,
41953 p192: null,
41954 p25519: null
41955 };
41956
41957 // Pseudo-Mersenne prime
41958 function MPrime (name, p) {
41959 // P = 2 ^ N - K
41960 this.name = name;
41961 this.p = new BN(p, 16);
41962 this.n = this.p.bitLength();
41963 this.k = new BN(1).iushln(this.n).isub(this.p);
41964
41965 this.tmp = this._tmp();
41966 }
41967
41968 MPrime.prototype._tmp = function _tmp () {
41969 var tmp = new BN(null);
41970 tmp.words = new Array(Math.ceil(this.n / 13));
41971 return tmp;
41972 };
41973
41974 MPrime.prototype.ireduce = function ireduce (num) {
41975 // Assumes that `num` is less than `P^2`
41976 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41977 var r = num;
41978 var rlen;
41979
41980 do {
41981 this.split(r, this.tmp);
41982 r = this.imulK(r);
41983 r = r.iadd(this.tmp);
41984 rlen = r.bitLength();
41985 } while (rlen > this.n);
41986
41987 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41988 if (cmp === 0) {
41989 r.words[0] = 0;
41990 r.length = 1;
41991 } else if (cmp > 0) {
41992 r.isub(this.p);
41993 } else {
41994 r.strip();
41995 }
41996
41997 return r;
41998 };
41999
42000 MPrime.prototype.split = function split (input, out) {
42001 input.iushrn(this.n, 0, out);
42002 };
42003
42004 MPrime.prototype.imulK = function imulK (num) {
42005 return num.imul(this.k);
42006 };
42007
42008 function K256 () {
42009 MPrime.call(
42010 this,
42011 'k256',
42012 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
42013 }
42014 inherits(K256, MPrime);
42015
42016 K256.prototype.split = function split (input, output) {
42017 // 256 = 9 * 26 + 22
42018 var mask = 0x3fffff;
42019
42020 var outLen = Math.min(input.length, 9);
42021 for (var i = 0; i < outLen; i++) {
42022 output.words[i] = input.words[i];
42023 }
42024 output.length = outLen;
42025
42026 if (input.length <= 9) {
42027 input.words[0] = 0;
42028 input.length = 1;
42029 return;
42030 }
42031
42032 // Shift by 9 limbs
42033 var prev = input.words[9];
42034 output.words[output.length++] = prev & mask;
42035
42036 for (i = 10; i < input.length; i++) {
42037 var next = input.words[i] | 0;
42038 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
42039 prev = next;
42040 }
42041 prev >>>= 22;
42042 input.words[i - 10] = prev;
42043 if (prev === 0 && input.length > 10) {
42044 input.length -= 10;
42045 } else {
42046 input.length -= 9;
42047 }
42048 };
42049
42050 K256.prototype.imulK = function imulK (num) {
42051 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
42052 num.words[num.length] = 0;
42053 num.words[num.length + 1] = 0;
42054 num.length += 2;
42055
42056 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
42057 var lo = 0;
42058 for (var i = 0; i < num.length; i++) {
42059 var w = num.words[i] | 0;
42060 lo += w * 0x3d1;
42061 num.words[i] = lo & 0x3ffffff;
42062 lo = w * 0x40 + ((lo / 0x4000000) | 0);
42063 }
42064
42065 // Fast length reduction
42066 if (num.words[num.length - 1] === 0) {
42067 num.length--;
42068 if (num.words[num.length - 1] === 0) {
42069 num.length--;
42070 }
42071 }
42072 return num;
42073 };
42074
42075 function P224 () {
42076 MPrime.call(
42077 this,
42078 'p224',
42079 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
42080 }
42081 inherits(P224, MPrime);
42082
42083 function P192 () {
42084 MPrime.call(
42085 this,
42086 'p192',
42087 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
42088 }
42089 inherits(P192, MPrime);
42090
42091 function P25519 () {
42092 // 2 ^ 255 - 19
42093 MPrime.call(
42094 this,
42095 '25519',
42096 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
42097 }
42098 inherits(P25519, MPrime);
42099
42100 P25519.prototype.imulK = function imulK (num) {
42101 // K = 0x13
42102 var carry = 0;
42103 for (var i = 0; i < num.length; i++) {
42104 var hi = (num.words[i] | 0) * 0x13 + carry;
42105 var lo = hi & 0x3ffffff;
42106 hi >>>= 26;
42107
42108 num.words[i] = lo;
42109 carry = hi;
42110 }
42111 if (carry !== 0) {
42112 num.words[num.length++] = carry;
42113 }
42114 return num;
42115 };
42116
42117 // Exported mostly for testing purposes, use plain name instead
42118 BN._prime = function prime (name) {
42119 // Cached version of prime
42120 if (primes[name]) return primes[name];
42121
42122 var prime;
42123 if (name === 'k256') {
42124 prime = new K256();
42125 } else if (name === 'p224') {
42126 prime = new P224();
42127 } else if (name === 'p192') {
42128 prime = new P192();
42129 } else if (name === 'p25519') {
42130 prime = new P25519();
42131 } else {
42132 throw new Error('Unknown prime ' + name);
42133 }
42134 primes[name] = prime;
42135
42136 return prime;
42137 };
42138
42139 //
42140 // Base reduction engine
42141 //
42142 function Red (m) {
42143 if (typeof m === 'string') {
42144 var prime = BN._prime(m);
42145 this.m = prime.p;
42146 this.prime = prime;
42147 } else {
42148 assert(m.gtn(1), 'modulus must be greater than 1');
42149 this.m = m;
42150 this.prime = null;
42151 }
42152 }
42153
42154 Red.prototype._verify1 = function _verify1 (a) {
42155 assert(a.negative === 0, 'red works only with positives');
42156 assert(a.red, 'red works only with red numbers');
42157 };
42158
42159 Red.prototype._verify2 = function _verify2 (a, b) {
42160 assert((a.negative | b.negative) === 0, 'red works only with positives');
42161 assert(a.red && a.red === b.red,
42162 'red works only with red numbers');
42163 };
42164
42165 Red.prototype.imod = function imod (a) {
42166 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
42167 return a.umod(this.m)._forceRed(this);
42168 };
42169
42170 Red.prototype.neg = function neg (a) {
42171 if (a.isZero()) {
42172 return a.clone();
42173 }
42174
42175 return this.m.sub(a)._forceRed(this);
42176 };
42177
42178 Red.prototype.add = function add (a, b) {
42179 this._verify2(a, b);
42180
42181 var res = a.add(b);
42182 if (res.cmp(this.m) >= 0) {
42183 res.isub(this.m);
42184 }
42185 return res._forceRed(this);
42186 };
42187
42188 Red.prototype.iadd = function iadd (a, b) {
42189 this._verify2(a, b);
42190
42191 var res = a.iadd(b);
42192 if (res.cmp(this.m) >= 0) {
42193 res.isub(this.m);
42194 }
42195 return res;
42196 };
42197
42198 Red.prototype.sub = function sub (a, b) {
42199 this._verify2(a, b);
42200
42201 var res = a.sub(b);
42202 if (res.cmpn(0) < 0) {
42203 res.iadd(this.m);
42204 }
42205 return res._forceRed(this);
42206 };
42207
42208 Red.prototype.isub = function isub (a, b) {
42209 this._verify2(a, b);
42210
42211 var res = a.isub(b);
42212 if (res.cmpn(0) < 0) {
42213 res.iadd(this.m);
42214 }
42215 return res;
42216 };
42217
42218 Red.prototype.shl = function shl (a, num) {
42219 this._verify1(a);
42220 return this.imod(a.ushln(num));
42221 };
42222
42223 Red.prototype.imul = function imul (a, b) {
42224 this._verify2(a, b);
42225 return this.imod(a.imul(b));
42226 };
42227
42228 Red.prototype.mul = function mul (a, b) {
42229 this._verify2(a, b);
42230 return this.imod(a.mul(b));
42231 };
42232
42233 Red.prototype.isqr = function isqr (a) {
42234 return this.imul(a, a.clone());
42235 };
42236
42237 Red.prototype.sqr = function sqr (a) {
42238 return this.mul(a, a);
42239 };
42240
42241 Red.prototype.sqrt = function sqrt (a) {
42242 if (a.isZero()) return a.clone();
42243
42244 var mod3 = this.m.andln(3);
42245 assert(mod3 % 2 === 1);
42246
42247 // Fast case
42248 if (mod3 === 3) {
42249 var pow = this.m.add(new BN(1)).iushrn(2);
42250 return this.pow(a, pow);
42251 }
42252
42253 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
42254 //
42255 // Find Q and S, that Q * 2 ^ S = (P - 1)
42256 var q = this.m.subn(1);
42257 var s = 0;
42258 while (!q.isZero() && q.andln(1) === 0) {
42259 s++;
42260 q.iushrn(1);
42261 }
42262 assert(!q.isZero());
42263
42264 var one = new BN(1).toRed(this);
42265 var nOne = one.redNeg();
42266
42267 // Find quadratic non-residue
42268 // NOTE: Max is such because of generalized Riemann hypothesis.
42269 var lpow = this.m.subn(1).iushrn(1);
42270 var z = this.m.bitLength();
42271 z = new BN(2 * z * z).toRed(this);
42272
42273 while (this.pow(z, lpow).cmp(nOne) !== 0) {
42274 z.redIAdd(nOne);
42275 }
42276
42277 var c = this.pow(z, q);
42278 var r = this.pow(a, q.addn(1).iushrn(1));
42279 var t = this.pow(a, q);
42280 var m = s;
42281 while (t.cmp(one) !== 0) {
42282 var tmp = t;
42283 for (var i = 0; tmp.cmp(one) !== 0; i++) {
42284 tmp = tmp.redSqr();
42285 }
42286 assert(i < m);
42287 var b = this.pow(c, new BN(1).iushln(m - i - 1));
42288
42289 r = r.redMul(b);
42290 c = b.redSqr();
42291 t = t.redMul(c);
42292 m = i;
42293 }
42294
42295 return r;
42296 };
42297
42298 Red.prototype.invm = function invm (a) {
42299 var inv = a._invmp(this.m);
42300 if (inv.negative !== 0) {
42301 inv.negative = 0;
42302 return this.imod(inv).redNeg();
42303 } else {
42304 return this.imod(inv);
42305 }
42306 };
42307
42308 Red.prototype.pow = function pow (a, num) {
42309 if (num.isZero()) return new BN(1);
42310 if (num.cmpn(1) === 0) return a.clone();
42311
42312 var windowSize = 4;
42313 var wnd = new Array(1 << windowSize);
42314 wnd[0] = new BN(1).toRed(this);
42315 wnd[1] = a;
42316 for (var i = 2; i < wnd.length; i++) {
42317 wnd[i] = this.mul(wnd[i - 1], a);
42318 }
42319
42320 var res = wnd[0];
42321 var current = 0;
42322 var currentLen = 0;
42323 var start = num.bitLength() % 26;
42324 if (start === 0) {
42325 start = 26;
42326 }
42327
42328 for (i = num.length - 1; i >= 0; i--) {
42329 var word = num.words[i];
42330 for (var j = start - 1; j >= 0; j--) {
42331 var bit = (word >> j) & 1;
42332 if (res !== wnd[0]) {
42333 res = this.sqr(res);
42334 }
42335
42336 if (bit === 0 && current === 0) {
42337 currentLen = 0;
42338 continue;
42339 }
42340
42341 current <<= 1;
42342 current |= bit;
42343 currentLen++;
42344 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
42345
42346 res = this.mul(res, wnd[current]);
42347 currentLen = 0;
42348 current = 0;
42349 }
42350 start = 26;
42351 }
42352
42353 return res;
42354 };
42355
42356 Red.prototype.convertTo = function convertTo (num) {
42357 var r = num.umod(this.m);
42358
42359 return r === num ? r.clone() : r;
42360 };
42361
42362 Red.prototype.convertFrom = function convertFrom (num) {
42363 var res = num.clone();
42364 res.red = null;
42365 return res;
42366 };
42367
42368 //
42369 // Montgomery method engine
42370 //
42371
42372 BN.mont = function mont (num) {
42373 return new Mont(num);
42374 };
42375
42376 function Mont (m) {
42377 Red.call(this, m);
42378
42379 this.shift = this.m.bitLength();
42380 if (this.shift % 26 !== 0) {
42381 this.shift += 26 - (this.shift % 26);
42382 }
42383
42384 this.r = new BN(1).iushln(this.shift);
42385 this.r2 = this.imod(this.r.sqr());
42386 this.rinv = this.r._invmp(this.m);
42387
42388 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
42389 this.minv = this.minv.umod(this.r);
42390 this.minv = this.r.sub(this.minv);
42391 }
42392 inherits(Mont, Red);
42393
42394 Mont.prototype.convertTo = function convertTo (num) {
42395 return this.imod(num.ushln(this.shift));
42396 };
42397
42398 Mont.prototype.convertFrom = function convertFrom (num) {
42399 var r = this.imod(num.mul(this.rinv));
42400 r.red = null;
42401 return r;
42402 };
42403
42404 Mont.prototype.imul = function imul (a, b) {
42405 if (a.isZero() || b.isZero()) {
42406 a.words[0] = 0;
42407 a.length = 1;
42408 return a;
42409 }
42410
42411 var t = a.imul(b);
42412 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42413 var u = t.isub(c).iushrn(this.shift);
42414 var res = u;
42415
42416 if (u.cmp(this.m) >= 0) {
42417 res = u.isub(this.m);
42418 } else if (u.cmpn(0) < 0) {
42419 res = u.iadd(this.m);
42420 }
42421
42422 return res._forceRed(this);
42423 };
42424
42425 Mont.prototype.mul = function mul (a, b) {
42426 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
42427
42428 var t = a.mul(b);
42429 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42430 var u = t.isub(c).iushrn(this.shift);
42431 var res = u;
42432 if (u.cmp(this.m) >= 0) {
42433 res = u.isub(this.m);
42434 } else if (u.cmpn(0) < 0) {
42435 res = u.iadd(this.m);
42436 }
42437
42438 return res._forceRed(this);
42439 };
42440
42441 Mont.prototype.invm = function invm (a) {
42442 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
42443 var res = this.imod(a._invmp(this.m).mul(this.r2));
42444 return res._forceRed(this);
42445 };
42446 })(typeof module === 'undefined' || module, this);
42447
42448 },{}],82:[function(require,module,exports){
42449 var r;
42450
42451 module.exports = function rand(len) {
42452 if (!r)
42453 r = new Rand(null);
42454
42455 return r.generate(len);
42456 };
42457
42458 function Rand(rand) {
42459 this.rand = rand;
42460 }
42461 module.exports.Rand = Rand;
42462
42463 Rand.prototype.generate = function generate(len) {
42464 return this._rand(len);
42465 };
42466
42467 // Emulate crypto API using randy
42468 Rand.prototype._rand = function _rand(n) {
42469 if (this.rand.getBytes)
42470 return this.rand.getBytes(n);
42471
42472 var res = new Uint8Array(n);
42473 for (var i = 0; i < res.length; i++)
42474 res[i] = this.rand.getByte();
42475 return res;
42476 };
42477
42478 if (typeof self === 'object') {
42479 if (self.crypto && self.crypto.getRandomValues) {
42480 // Modern browsers
42481 Rand.prototype._rand = function _rand(n) {
42482 var arr = new Uint8Array(n);
42483 self.crypto.getRandomValues(arr);
42484 return arr;
42485 };
42486 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42487 // IE
42488 Rand.prototype._rand = function _rand(n) {
42489 var arr = new Uint8Array(n);
42490 self.msCrypto.getRandomValues(arr);
42491 return arr;
42492 };
42493
42494 // Safari's WebWorkers do not have `crypto`
42495 } else if (typeof window === 'object') {
42496 // Old junk
42497 Rand.prototype._rand = function() {
42498 throw new Error('Not implemented yet');
42499 };
42500 }
42501 } else {
42502 // Node.js or Web worker with no crypto support
42503 try {
42504 var crypto = require('crypto');
42505 if (typeof crypto.randomBytes !== 'function')
42506 throw new Error('Not supported');
42507
42508 Rand.prototype._rand = function _rand(n) {
42509 return crypto.randomBytes(n);
42510 };
42511 } catch (e) {
42512 }
42513 }
42514
42515 },{"crypto":3}],83:[function(require,module,exports){
42516 var basex = require('base-x')
42517 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
42518
42519 module.exports = basex(ALPHABET)
42520
42521 },{"base-x":35}],84:[function(require,module,exports){
42522 (function (Buffer){
42523 'use strict'
42524
42525 var base58 = require('bs58')
42526
42527 module.exports = function (checksumFn) {
42528 // Encode a buffer as a base58-check encoded string
42529 function encode (payload) {
42530 var checksum = checksumFn(payload)
42531
42532 return base58.encode(Buffer.concat([
42533 payload,
42534 checksum
42535 ], payload.length + 4))
42536 }
42537
42538 function decodeRaw (buffer) {
42539 var payload = buffer.slice(0, -4)
42540 var checksum = buffer.slice(-4)
42541 var newChecksum = checksumFn(payload)
42542
42543 if (checksum[0] ^ newChecksum[0] |
42544 checksum[1] ^ newChecksum[1] |
42545 checksum[2] ^ newChecksum[2] |
42546 checksum[3] ^ newChecksum[3]) return
42547
42548 return payload
42549 }
42550
42551 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
42552 function decodeUnsafe (string) {
42553 var buffer = base58.decodeUnsafe(string)
42554 if (!buffer) return
42555
42556 return decodeRaw(buffer)
42557 }
42558
42559 function decode (string) {
42560 var buffer = base58.decode(string)
42561 var payload = decodeRaw(buffer, checksumFn)
42562 if (!payload) throw new Error('Invalid checksum')
42563 return payload
42564 }
42565
42566 return {
42567 encode: encode,
42568 decode: decode,
42569 decodeUnsafe: decodeUnsafe
42570 }
42571 }
42572
42573 }).call(this,require("buffer").Buffer)
42574 },{"bs58":83,"buffer":5}],85:[function(require,module,exports){
42575 'use strict'
42576
42577 var createHash = require('create-hash')
42578 var bs58checkBase = require('./base')
42579
42580 // SHA256(SHA256(buffer))
42581 function sha256x2 (buffer) {
42582 var tmp = createHash('sha256').update(buffer).digest()
42583 return createHash('sha256').update(tmp).digest()
42584 }
42585
42586 module.exports = bs58checkBase(sha256x2)
42587
42588 },{"./base":84,"create-hash":87}],86:[function(require,module,exports){
42589 var Buffer = require('safe-buffer').Buffer
42590 var Transform = require('stream').Transform
42591 var StringDecoder = require('string_decoder').StringDecoder
42592 var inherits = require('inherits')
42593
42594 function CipherBase (hashMode) {
42595 Transform.call(this)
42596 this.hashMode = typeof hashMode === 'string'
42597 if (this.hashMode) {
42598 this[hashMode] = this._finalOrDigest
42599 } else {
42600 this.final = this._finalOrDigest
42601 }
42602 if (this._final) {
42603 this.__final = this._final
42604 this._final = null
42605 }
42606 this._decoder = null
42607 this._encoding = null
42608 }
42609 inherits(CipherBase, Transform)
42610
42611 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42612 if (typeof data === 'string') {
42613 data = Buffer.from(data, inputEnc)
42614 }
42615
42616 var outData = this._update(data)
42617 if (this.hashMode) return this
42618
42619 if (outputEnc) {
42620 outData = this._toString(outData, outputEnc)
42621 }
42622
42623 return outData
42624 }
42625
42626 CipherBase.prototype.setAutoPadding = function () {}
42627 CipherBase.prototype.getAuthTag = function () {
42628 throw new Error('trying to get auth tag in unsupported state')
42629 }
42630
42631 CipherBase.prototype.setAuthTag = function () {
42632 throw new Error('trying to set auth tag in unsupported state')
42633 }
42634
42635 CipherBase.prototype.setAAD = function () {
42636 throw new Error('trying to set aad in unsupported state')
42637 }
42638
42639 CipherBase.prototype._transform = function (data, _, next) {
42640 var err
42641 try {
42642 if (this.hashMode) {
42643 this._update(data)
42644 } else {
42645 this.push(this._update(data))
42646 }
42647 } catch (e) {
42648 err = e
42649 } finally {
42650 next(err)
42651 }
42652 }
42653 CipherBase.prototype._flush = function (done) {
42654 var err
42655 try {
42656 this.push(this.__final())
42657 } catch (e) {
42658 err = e
42659 }
42660
42661 done(err)
42662 }
42663 CipherBase.prototype._finalOrDigest = function (outputEnc) {
42664 var outData = this.__final() || Buffer.alloc(0)
42665 if (outputEnc) {
42666 outData = this._toString(outData, outputEnc, true)
42667 }
42668 return outData
42669 }
42670
42671 CipherBase.prototype._toString = function (value, enc, fin) {
42672 if (!this._decoder) {
42673 this._decoder = new StringDecoder(enc)
42674 this._encoding = enc
42675 }
42676
42677 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
42678
42679 var out = this._decoder.write(value)
42680 if (fin) {
42681 out += this._decoder.end()
42682 }
42683
42684 return out
42685 }
42686
42687 module.exports = CipherBase
42688
42689 },{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
42690 (function (Buffer){
42691 'use strict'
42692 var inherits = require('inherits')
42693 var md5 = require('./md5')
42694 var RIPEMD160 = require('ripemd160')
42695 var sha = require('sha.js')
42696
42697 var Base = require('cipher-base')
42698
42699 function HashNoConstructor (hash) {
42700 Base.call(this, 'digest')
42701
42702 this._hash = hash
42703 this.buffers = []
42704 }
42705
42706 inherits(HashNoConstructor, Base)
42707
42708 HashNoConstructor.prototype._update = function (data) {
42709 this.buffers.push(data)
42710 }
42711
42712 HashNoConstructor.prototype._final = function () {
42713 var buf = Buffer.concat(this.buffers)
42714 var r = this._hash(buf)
42715 this.buffers = null
42716
42717 return r
42718 }
42719
42720 function Hash (hash) {
42721 Base.call(this, 'digest')
42722
42723 this._hash = hash
42724 }
42725
42726 inherits(Hash, Base)
42727
42728 Hash.prototype._update = function (data) {
42729 this._hash.update(data)
42730 }
42731
42732 Hash.prototype._final = function () {
42733 return this._hash.digest()
42734 }
42735
42736 module.exports = function createHash (alg) {
42737 alg = alg.toLowerCase()
42738 if (alg === 'md5') return new HashNoConstructor(md5)
42739 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
42740
42741 return new Hash(sha(alg))
42742 }
42743
42744 }).call(this,require("buffer").Buffer)
42745 },{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
42746 (function (Buffer){
42747 'use strict'
42748 var intSize = 4
42749 var zeroBuffer = new Buffer(intSize)
42750 zeroBuffer.fill(0)
42751
42752 var charSize = 8
42753 var hashSize = 16
42754
42755 function toArray (buf) {
42756 if ((buf.length % intSize) !== 0) {
42757 var len = buf.length + (intSize - (buf.length % intSize))
42758 buf = Buffer.concat([buf, zeroBuffer], len)
42759 }
42760
42761 var arr = new Array(buf.length >>> 2)
42762 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
42763 arr[j] = buf.readInt32LE(i)
42764 }
42765
42766 return arr
42767 }
42768
42769 module.exports = function hash (buf, fn) {
42770 var arr = fn(toArray(buf), buf.length * charSize)
42771 buf = new Buffer(hashSize)
42772 for (var i = 0; i < arr.length; i++) {
42773 buf.writeInt32LE(arr[i], i << 2, true)
42774 }
42775 return buf
42776 }
42777
42778 }).call(this,require("buffer").Buffer)
42779 },{"buffer":5}],89:[function(require,module,exports){
42780 'use strict'
42781 /*
42782 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42783 * Digest Algorithm, as defined in RFC 1321.
42784 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42785 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42786 * Distributed under the BSD License
42787 * See http://pajhome.org.uk/crypt/md5 for more info.
42788 */
42789
42790 var makeHash = require('./make-hash')
42791
42792 /*
42793 * Calculate the MD5 of an array of little-endian words, and a bit length
42794 */
42795 function core_md5 (x, len) {
42796 /* append padding */
42797 x[len >> 5] |= 0x80 << ((len) % 32)
42798 x[(((len + 64) >>> 9) << 4) + 14] = len
42799
42800 var a = 1732584193
42801 var b = -271733879
42802 var c = -1732584194
42803 var d = 271733878
42804
42805 for (var i = 0; i < x.length; i += 16) {
42806 var olda = a
42807 var oldb = b
42808 var oldc = c
42809 var oldd = d
42810
42811 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
42812 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
42813 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
42814 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
42815 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
42816 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
42817 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
42818 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
42819 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
42820 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
42821 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
42822 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
42823 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
42824 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
42825 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
42826 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
42827
42828 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
42829 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
42830 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
42831 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
42832 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
42833 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
42834 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
42835 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
42836 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
42837 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
42838 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
42839 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
42840 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
42841 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
42842 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
42843 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
42844
42845 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
42846 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
42847 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
42848 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
42849 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
42850 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
42851 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
42852 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
42853 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
42854 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
42855 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
42856 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
42857 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
42858 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
42859 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
42860 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
42861
42862 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
42863 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
42864 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
42865 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
42866 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
42867 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
42868 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
42869 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
42870 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
42871 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
42872 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
42873 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
42874 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
42875 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
42876 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
42877 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
42878
42879 a = safe_add(a, olda)
42880 b = safe_add(b, oldb)
42881 c = safe_add(c, oldc)
42882 d = safe_add(d, oldd)
42883 }
42884
42885 return [a, b, c, d]
42886 }
42887
42888 /*
42889 * These functions implement the four basic operations the algorithm uses.
42890 */
42891 function md5_cmn (q, a, b, x, s, t) {
42892 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
42893 }
42894
42895 function md5_ff (a, b, c, d, x, s, t) {
42896 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
42897 }
42898
42899 function md5_gg (a, b, c, d, x, s, t) {
42900 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
42901 }
42902
42903 function md5_hh (a, b, c, d, x, s, t) {
42904 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
42905 }
42906
42907 function md5_ii (a, b, c, d, x, s, t) {
42908 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
42909 }
42910
42911 /*
42912 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42913 * to work around bugs in some JS interpreters.
42914 */
42915 function safe_add (x, y) {
42916 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
42917 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
42918 return (msw << 16) | (lsw & 0xFFFF)
42919 }
42920
42921 /*
42922 * Bitwise rotate a 32-bit number to the left.
42923 */
42924 function bit_rol (num, cnt) {
42925 return (num << cnt) | (num >>> (32 - cnt))
42926 }
42927
42928 module.exports = function md5 (buf) {
42929 return makeHash(buf, core_md5)
42930 }
42931
42932 },{"./make-hash":88}],90:[function(require,module,exports){
42933 'use strict'
42934 var inherits = require('inherits')
42935 var Legacy = require('./legacy')
42936 var Base = require('cipher-base')
42937 var Buffer = require('safe-buffer').Buffer
42938 var md5 = require('create-hash/md5')
42939 var RIPEMD160 = require('ripemd160')
42940
42941 var sha = require('sha.js')
42942
42943 var ZEROS = Buffer.alloc(128)
42944
42945 function Hmac (alg, key) {
42946 Base.call(this, 'digest')
42947 if (typeof key === 'string') {
42948 key = Buffer.from(key)
42949 }
42950
42951 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
42952
42953 this._alg = alg
42954 this._key = key
42955 if (key.length > blocksize) {
42956 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42957 key = hash.update(key).digest()
42958 } else if (key.length < blocksize) {
42959 key = Buffer.concat([key, ZEROS], blocksize)
42960 }
42961
42962 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42963 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42964
42965 for (var i = 0; i < blocksize; i++) {
42966 ipad[i] = key[i] ^ 0x36
42967 opad[i] = key[i] ^ 0x5C
42968 }
42969 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42970 this._hash.update(ipad)
42971 }
42972
42973 inherits(Hmac, Base)
42974
42975 Hmac.prototype._update = function (data) {
42976 this._hash.update(data)
42977 }
42978
42979 Hmac.prototype._final = function () {
42980 var h = this._hash.digest()
42981 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
42982 return hash.update(this._opad).update(h).digest()
42983 }
42984
42985 module.exports = function createHmac (alg, key) {
42986 alg = alg.toLowerCase()
42987 if (alg === 'rmd160' || alg === 'ripemd160') {
42988 return new Hmac('rmd160', key)
42989 }
42990 if (alg === 'md5') {
42991 return new Legacy(md5, key)
42992 }
42993 return new Hmac(alg, key)
42994 }
42995
42996 },{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
42997 'use strict'
42998 var inherits = require('inherits')
42999 var Buffer = require('safe-buffer').Buffer
43000
43001 var Base = require('cipher-base')
43002
43003 var ZEROS = Buffer.alloc(128)
43004 var blocksize = 64
43005
43006 function Hmac (alg, key) {
43007 Base.call(this, 'digest')
43008 if (typeof key === 'string') {
43009 key = Buffer.from(key)
43010 }
43011
43012 this._alg = alg
43013 this._key = key
43014
43015 if (key.length > blocksize) {
43016 key = alg(key)
43017 } else if (key.length < blocksize) {
43018 key = Buffer.concat([key, ZEROS], blocksize)
43019 }
43020
43021 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
43022 var opad = this._opad = Buffer.allocUnsafe(blocksize)
43023
43024 for (var i = 0; i < blocksize; i++) {
43025 ipad[i] = key[i] ^ 0x36
43026 opad[i] = key[i] ^ 0x5C
43027 }
43028
43029 this._hash = [ipad]
43030 }
43031
43032 inherits(Hmac, Base)
43033
43034 Hmac.prototype._update = function (data) {
43035 this._hash.push(data)
43036 }
43037
43038 Hmac.prototype._final = function () {
43039 var h = this._alg(Buffer.concat(this._hash))
43040 return this._alg(Buffer.concat([this._opad, h]))
43041 }
43042 module.exports = Hmac
43043
43044 },{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
43045 var assert = require('assert')
43046 var BigInteger = require('bigi')
43047
43048 var Point = require('./point')
43049
43050 function Curve (p, a, b, Gx, Gy, n, h) {
43051 this.p = p
43052 this.a = a
43053 this.b = b
43054 this.G = Point.fromAffine(this, Gx, Gy)
43055 this.n = n
43056 this.h = h
43057
43058 this.infinity = new Point(this, null, null, BigInteger.ZERO)
43059
43060 // result caching
43061 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
43062
43063 // determine size of p in bytes
43064 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
43065 }
43066
43067 Curve.prototype.pointFromX = function (isOdd, x) {
43068 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
43069 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
43070
43071 var y = beta
43072 if (beta.isEven() ^ !isOdd) {
43073 y = this.p.subtract(y) // -y % p
43074 }
43075
43076 return Point.fromAffine(this, x, y)
43077 }
43078
43079 Curve.prototype.isInfinity = function (Q) {
43080 if (Q === this.infinity) return true
43081
43082 return Q.z.signum() === 0 && Q.y.signum() !== 0
43083 }
43084
43085 Curve.prototype.isOnCurve = function (Q) {
43086 if (this.isInfinity(Q)) return true
43087
43088 var x = Q.affineX
43089 var y = Q.affineY
43090 var a = this.a
43091 var b = this.b
43092 var p = this.p
43093
43094 // Check that xQ and yQ are integers in the interval [0, p - 1]
43095 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
43096 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
43097
43098 // and check that y^2 = x^3 + ax + b (mod p)
43099 var lhs = y.square().mod(p)
43100 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
43101 return lhs.equals(rhs)
43102 }
43103
43104 /**
43105 * Validate an elliptic curve point.
43106 *
43107 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
43108 */
43109 Curve.prototype.validate = function (Q) {
43110 // Check Q != O
43111 assert(!this.isInfinity(Q), 'Point is at infinity')
43112 assert(this.isOnCurve(Q), 'Point is not on the curve')
43113
43114 // Check nQ = O (where Q is a scalar multiple of G)
43115 var nQ = Q.multiply(this.n)
43116 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
43117
43118 return true
43119 }
43120
43121 module.exports = Curve
43122
43123 },{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
43124 module.exports={
43125 "secp128r1": {
43126 "p": "fffffffdffffffffffffffffffffffff",
43127 "a": "fffffffdfffffffffffffffffffffffc",
43128 "b": "e87579c11079f43dd824993c2cee5ed3",
43129 "n": "fffffffe0000000075a30d1b9038a115",
43130 "h": "01",
43131 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
43132 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
43133 },
43134 "secp160k1": {
43135 "p": "fffffffffffffffffffffffffffffffeffffac73",
43136 "a": "00",
43137 "b": "07",
43138 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
43139 "h": "01",
43140 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
43141 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
43142 },
43143 "secp160r1": {
43144 "p": "ffffffffffffffffffffffffffffffff7fffffff",
43145 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
43146 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
43147 "n": "0100000000000000000001f4c8f927aed3ca752257",
43148 "h": "01",
43149 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
43150 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
43151 },
43152 "secp192k1": {
43153 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
43154 "a": "00",
43155 "b": "03",
43156 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
43157 "h": "01",
43158 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
43159 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
43160 },
43161 "secp192r1": {
43162 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
43163 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
43164 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
43165 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
43166 "h": "01",
43167 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
43168 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
43169 },
43170 "secp256k1": {
43171 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
43172 "a": "00",
43173 "b": "07",
43174 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43175 "h": "01",
43176 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
43177 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
43178 },
43179 "secp256r1": {
43180 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
43181 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
43182 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
43183 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
43184 "h": "01",
43185 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
43186 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
43187 }
43188 }
43189
43190 },{}],94:[function(require,module,exports){
43191 var Point = require('./point')
43192 var Curve = require('./curve')
43193
43194 var getCurveByName = require('./names')
43195
43196 module.exports = {
43197 Curve: Curve,
43198 Point: Point,
43199 getCurveByName: getCurveByName
43200 }
43201
43202 },{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
43203 var BigInteger = require('bigi')
43204
43205 var curves = require('./curves.json')
43206 var Curve = require('./curve')
43207
43208 function getCurveByName (name) {
43209 var curve = curves[name]
43210 if (!curve) return null
43211
43212 var p = new BigInteger(curve.p, 16)
43213 var a = new BigInteger(curve.a, 16)
43214 var b = new BigInteger(curve.b, 16)
43215 var n = new BigInteger(curve.n, 16)
43216 var h = new BigInteger(curve.h, 16)
43217 var Gx = new BigInteger(curve.Gx, 16)
43218 var Gy = new BigInteger(curve.Gy, 16)
43219
43220 return new Curve(p, a, b, Gx, Gy, n, h)
43221 }
43222
43223 module.exports = getCurveByName
43224
43225 },{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
43226 (function (Buffer){
43227 var assert = require('assert')
43228 var BigInteger = require('bigi')
43229
43230 var THREE = BigInteger.valueOf(3)
43231
43232 function Point (curve, x, y, z) {
43233 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
43234
43235 this.curve = curve
43236 this.x = x
43237 this.y = y
43238 this.z = z
43239 this._zInv = null
43240
43241 this.compressed = true
43242 }
43243
43244 Object.defineProperty(Point.prototype, 'zInv', {
43245 get: function () {
43246 if (this._zInv === null) {
43247 this._zInv = this.z.modInverse(this.curve.p)
43248 }
43249
43250 return this._zInv
43251 }
43252 })
43253
43254 Object.defineProperty(Point.prototype, 'affineX', {
43255 get: function () {
43256 return this.x.multiply(this.zInv).mod(this.curve.p)
43257 }
43258 })
43259
43260 Object.defineProperty(Point.prototype, 'affineY', {
43261 get: function () {
43262 return this.y.multiply(this.zInv).mod(this.curve.p)
43263 }
43264 })
43265
43266 Point.fromAffine = function (curve, x, y) {
43267 return new Point(curve, x, y, BigInteger.ONE)
43268 }
43269
43270 Point.prototype.equals = function (other) {
43271 if (other === this) return true
43272 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
43273 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
43274
43275 // u = Y2 * Z1 - Y1 * Z2
43276 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
43277
43278 if (u.signum() !== 0) return false
43279
43280 // v = X2 * Z1 - X1 * Z2
43281 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
43282
43283 return v.signum() === 0
43284 }
43285
43286 Point.prototype.negate = function () {
43287 var y = this.curve.p.subtract(this.y)
43288
43289 return new Point(this.curve, this.x, y, this.z)
43290 }
43291
43292 Point.prototype.add = function (b) {
43293 if (this.curve.isInfinity(this)) return b
43294 if (this.curve.isInfinity(b)) return this
43295
43296 var x1 = this.x
43297 var y1 = this.y
43298 var x2 = b.x
43299 var y2 = b.y
43300
43301 // u = Y2 * Z1 - Y1 * Z2
43302 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
43303 // v = X2 * Z1 - X1 * Z2
43304 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
43305
43306 if (v.signum() === 0) {
43307 if (u.signum() === 0) {
43308 return this.twice() // this == b, so double
43309 }
43310
43311 return this.curve.infinity // this = -b, so infinity
43312 }
43313
43314 var v2 = v.square()
43315 var v3 = v2.multiply(v)
43316 var x1v2 = x1.multiply(v2)
43317 var zu2 = u.square().multiply(this.z)
43318
43319 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
43320 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
43321 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
43322 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)
43323 // z3 = v^3 * z1 * z2
43324 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
43325
43326 return new Point(this.curve, x3, y3, z3)
43327 }
43328
43329 Point.prototype.twice = function () {
43330 if (this.curve.isInfinity(this)) return this
43331 if (this.y.signum() === 0) return this.curve.infinity
43332
43333 var x1 = this.x
43334 var y1 = this.y
43335
43336 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
43337 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
43338 var a = this.curve.a
43339
43340 // w = 3 * x1^2 + a * z1^2
43341 var w = x1.square().multiply(THREE)
43342
43343 if (a.signum() !== 0) {
43344 w = w.add(this.z.square().multiply(a))
43345 }
43346
43347 w = w.mod(this.curve.p)
43348 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
43349 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
43350 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
43351 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
43352 // z3 = 8 * (y1 * z1)^3
43353 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
43354
43355 return new Point(this.curve, x3, y3, z3)
43356 }
43357
43358 // Simple NAF (Non-Adjacent Form) multiplication algorithm
43359 // TODO: modularize the multiplication algorithm
43360 Point.prototype.multiply = function (k) {
43361 if (this.curve.isInfinity(this)) return this
43362 if (k.signum() === 0) return this.curve.infinity
43363
43364 var e = k
43365 var h = e.multiply(THREE)
43366
43367 var neg = this.negate()
43368 var R = this
43369
43370 for (var i = h.bitLength() - 2; i > 0; --i) {
43371 var hBit = h.testBit(i)
43372 var eBit = e.testBit(i)
43373
43374 R = R.twice()
43375
43376 if (hBit !== eBit) {
43377 R = R.add(hBit ? this : neg)
43378 }
43379 }
43380
43381 return R
43382 }
43383
43384 // Compute this*j + x*k (simultaneous multiplication)
43385 Point.prototype.multiplyTwo = function (j, x, k) {
43386 var i = Math.max(j.bitLength(), k.bitLength()) - 1
43387 var R = this.curve.infinity
43388 var both = this.add(x)
43389
43390 while (i >= 0) {
43391 var jBit = j.testBit(i)
43392 var kBit = k.testBit(i)
43393
43394 R = R.twice()
43395
43396 if (jBit) {
43397 if (kBit) {
43398 R = R.add(both)
43399 } else {
43400 R = R.add(this)
43401 }
43402 } else if (kBit) {
43403 R = R.add(x)
43404 }
43405 --i
43406 }
43407
43408 return R
43409 }
43410
43411 Point.prototype.getEncoded = function (compressed) {
43412 if (compressed == null) compressed = this.compressed
43413 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
43414
43415 var x = this.affineX
43416 var y = this.affineY
43417 var byteLength = this.curve.pLength
43418 var buffer
43419
43420 // 0x02/0x03 | X
43421 if (compressed) {
43422 buffer = new Buffer(1 + byteLength)
43423 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
43424
43425 // 0x04 | X | Y
43426 } else {
43427 buffer = new Buffer(1 + byteLength + byteLength)
43428 buffer.writeUInt8(0x04, 0)
43429
43430 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
43431 }
43432
43433 x.toBuffer(byteLength).copy(buffer, 1)
43434
43435 return buffer
43436 }
43437
43438 Point.decodeFrom = function (curve, buffer) {
43439 var type = buffer.readUInt8(0)
43440 var compressed = (type !== 4)
43441
43442 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
43443 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
43444
43445 var Q
43446 if (compressed) {
43447 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
43448 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
43449
43450 var isOdd = (type === 0x03)
43451 Q = curve.pointFromX(isOdd, x)
43452 } else {
43453 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
43454
43455 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
43456 Q = Point.fromAffine(curve, x, y)
43457 }
43458
43459 Q.compressed = compressed
43460 return Q
43461 }
43462
43463 Point.prototype.toString = function () {
43464 if (this.curve.isInfinity(this)) return '(INFINITY)'
43465
43466 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
43467 }
43468
43469 module.exports = Point
43470
43471 }).call(this,require("buffer").Buffer)
43472 },{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
43473 'use strict';
43474
43475 var elliptic = exports;
43476
43477 elliptic.version = require('../package.json').version;
43478 elliptic.utils = require('./elliptic/utils');
43479 elliptic.rand = require('brorand');
43480 elliptic.curve = require('./elliptic/curve');
43481 elliptic.curves = require('./elliptic/curves');
43482
43483 // Protocols
43484 elliptic.ec = require('./elliptic/ec');
43485 elliptic.eddsa = require('./elliptic/eddsa');
43486
43487 },{"../package.json":112,"./elliptic/curve":100,"./elliptic/curves":103,"./elliptic/ec":104,"./elliptic/eddsa":107,"./elliptic/utils":111,"brorand":82}],98:[function(require,module,exports){
43488 'use strict';
43489
43490 var BN = require('bn.js');
43491 var elliptic = require('../../elliptic');
43492 var utils = elliptic.utils;
43493 var getNAF = utils.getNAF;
43494 var getJSF = utils.getJSF;
43495 var assert = utils.assert;
43496
43497 function BaseCurve(type, conf) {
43498 this.type = type;
43499 this.p = new BN(conf.p, 16);
43500
43501 // Use Montgomery, when there is no fast reduction for the prime
43502 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
43503
43504 // Useful for many curves
43505 this.zero = new BN(0).toRed(this.red);
43506 this.one = new BN(1).toRed(this.red);
43507 this.two = new BN(2).toRed(this.red);
43508
43509 // Curve configuration, optional
43510 this.n = conf.n && new BN(conf.n, 16);
43511 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
43512
43513 // Temporary arrays
43514 this._wnafT1 = new Array(4);
43515 this._wnafT2 = new Array(4);
43516 this._wnafT3 = new Array(4);
43517 this._wnafT4 = new Array(4);
43518
43519 // Generalized Greg Maxwell's trick
43520 var adjustCount = this.n && this.p.div(this.n);
43521 if (!adjustCount || adjustCount.cmpn(100) > 0) {
43522 this.redN = null;
43523 } else {
43524 this._maxwellTrick = true;
43525 this.redN = this.n.toRed(this.red);
43526 }
43527 }
43528 module.exports = BaseCurve;
43529
43530 BaseCurve.prototype.point = function point() {
43531 throw new Error('Not implemented');
43532 };
43533
43534 BaseCurve.prototype.validate = function validate() {
43535 throw new Error('Not implemented');
43536 };
43537
43538 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
43539 assert(p.precomputed);
43540 var doubles = p._getDoubles();
43541
43542 var naf = getNAF(k, 1);
43543 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
43544 I /= 3;
43545
43546 // Translate into more windowed form
43547 var repr = [];
43548 for (var j = 0; j < naf.length; j += doubles.step) {
43549 var nafW = 0;
43550 for (var k = j + doubles.step - 1; k >= j; k--)
43551 nafW = (nafW << 1) + naf[k];
43552 repr.push(nafW);
43553 }
43554
43555 var a = this.jpoint(null, null, null);
43556 var b = this.jpoint(null, null, null);
43557 for (var i = I; i > 0; i--) {
43558 for (var j = 0; j < repr.length; j++) {
43559 var nafW = repr[j];
43560 if (nafW === i)
43561 b = b.mixedAdd(doubles.points[j]);
43562 else if (nafW === -i)
43563 b = b.mixedAdd(doubles.points[j].neg());
43564 }
43565 a = a.add(b);
43566 }
43567 return a.toP();
43568 };
43569
43570 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
43571 var w = 4;
43572
43573 // Precompute window
43574 var nafPoints = p._getNAFPoints(w);
43575 w = nafPoints.wnd;
43576 var wnd = nafPoints.points;
43577
43578 // Get NAF form
43579 var naf = getNAF(k, w);
43580
43581 // Add `this`*(N+1) for every w-NAF index
43582 var acc = this.jpoint(null, null, null);
43583 for (var i = naf.length - 1; i >= 0; i--) {
43584 // Count zeroes
43585 for (var k = 0; i >= 0 && naf[i] === 0; i--)
43586 k++;
43587 if (i >= 0)
43588 k++;
43589 acc = acc.dblp(k);
43590
43591 if (i < 0)
43592 break;
43593 var z = naf[i];
43594 assert(z !== 0);
43595 if (p.type === 'affine') {
43596 // J +- P
43597 if (z > 0)
43598 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
43599 else
43600 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
43601 } else {
43602 // J +- J
43603 if (z > 0)
43604 acc = acc.add(wnd[(z - 1) >> 1]);
43605 else
43606 acc = acc.add(wnd[(-z - 1) >> 1].neg());
43607 }
43608 }
43609 return p.type === 'affine' ? acc.toP() : acc;
43610 };
43611
43612 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
43613 points,
43614 coeffs,
43615 len,
43616 jacobianResult) {
43617 var wndWidth = this._wnafT1;
43618 var wnd = this._wnafT2;
43619 var naf = this._wnafT3;
43620
43621 // Fill all arrays
43622 var max = 0;
43623 for (var i = 0; i < len; i++) {
43624 var p = points[i];
43625 var nafPoints = p._getNAFPoints(defW);
43626 wndWidth[i] = nafPoints.wnd;
43627 wnd[i] = nafPoints.points;
43628 }
43629
43630 // Comb small window NAFs
43631 for (var i = len - 1; i >= 1; i -= 2) {
43632 var a = i - 1;
43633 var b = i;
43634 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
43635 naf[a] = getNAF(coeffs[a], wndWidth[a]);
43636 naf[b] = getNAF(coeffs[b], wndWidth[b]);
43637 max = Math.max(naf[a].length, max);
43638 max = Math.max(naf[b].length, max);
43639 continue;
43640 }
43641
43642 var comb = [
43643 points[a], /* 1 */
43644 null, /* 3 */
43645 null, /* 5 */
43646 points[b] /* 7 */
43647 ];
43648
43649 // Try to avoid Projective points, if possible
43650 if (points[a].y.cmp(points[b].y) === 0) {
43651 comb[1] = points[a].add(points[b]);
43652 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43653 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
43654 comb[1] = points[a].toJ().mixedAdd(points[b]);
43655 comb[2] = points[a].add(points[b].neg());
43656 } else {
43657 comb[1] = points[a].toJ().mixedAdd(points[b]);
43658 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43659 }
43660
43661 var index = [
43662 -3, /* -1 -1 */
43663 -1, /* -1 0 */
43664 -5, /* -1 1 */
43665 -7, /* 0 -1 */
43666 0, /* 0 0 */
43667 7, /* 0 1 */
43668 5, /* 1 -1 */
43669 1, /* 1 0 */
43670 3 /* 1 1 */
43671 ];
43672
43673 var jsf = getJSF(coeffs[a], coeffs[b]);
43674 max = Math.max(jsf[0].length, max);
43675 naf[a] = new Array(max);
43676 naf[b] = new Array(max);
43677 for (var j = 0; j < max; j++) {
43678 var ja = jsf[0][j] | 0;
43679 var jb = jsf[1][j] | 0;
43680
43681 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
43682 naf[b][j] = 0;
43683 wnd[a] = comb;
43684 }
43685 }
43686
43687 var acc = this.jpoint(null, null, null);
43688 var tmp = this._wnafT4;
43689 for (var i = max; i >= 0; i--) {
43690 var k = 0;
43691
43692 while (i >= 0) {
43693 var zero = true;
43694 for (var j = 0; j < len; j++) {
43695 tmp[j] = naf[j][i] | 0;
43696 if (tmp[j] !== 0)
43697 zero = false;
43698 }
43699 if (!zero)
43700 break;
43701 k++;
43702 i--;
43703 }
43704 if (i >= 0)
43705 k++;
43706 acc = acc.dblp(k);
43707 if (i < 0)
43708 break;
43709
43710 for (var j = 0; j < len; j++) {
43711 var z = tmp[j];
43712 var p;
43713 if (z === 0)
43714 continue;
43715 else if (z > 0)
43716 p = wnd[j][(z - 1) >> 1];
43717 else if (z < 0)
43718 p = wnd[j][(-z - 1) >> 1].neg();
43719
43720 if (p.type === 'affine')
43721 acc = acc.mixedAdd(p);
43722 else
43723 acc = acc.add(p);
43724 }
43725 }
43726 // Zeroify references
43727 for (var i = 0; i < len; i++)
43728 wnd[i] = null;
43729
43730 if (jacobianResult)
43731 return acc;
43732 else
43733 return acc.toP();
43734 };
43735
43736 function BasePoint(curve, type) {
43737 this.curve = curve;
43738 this.type = type;
43739 this.precomputed = null;
43740 }
43741 BaseCurve.BasePoint = BasePoint;
43742
43743 BasePoint.prototype.eq = function eq(/*other*/) {
43744 throw new Error('Not implemented');
43745 };
43746
43747 BasePoint.prototype.validate = function validate() {
43748 return this.curve.validate(this);
43749 };
43750
43751 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43752 bytes = utils.toArray(bytes, enc);
43753
43754 var len = this.p.byteLength();
43755
43756 // uncompressed, hybrid-odd, hybrid-even
43757 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
43758 bytes.length - 1 === 2 * len) {
43759 if (bytes[0] === 0x06)
43760 assert(bytes[bytes.length - 1] % 2 === 0);
43761 else if (bytes[0] === 0x07)
43762 assert(bytes[bytes.length - 1] % 2 === 1);
43763
43764 var res = this.point(bytes.slice(1, 1 + len),
43765 bytes.slice(1 + len, 1 + 2 * len));
43766
43767 return res;
43768 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
43769 bytes.length - 1 === len) {
43770 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
43771 }
43772 throw new Error('Unknown point format');
43773 };
43774
43775 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
43776 return this.encode(enc, true);
43777 };
43778
43779 BasePoint.prototype._encode = function _encode(compact) {
43780 var len = this.curve.p.byteLength();
43781 var x = this.getX().toArray('be', len);
43782
43783 if (compact)
43784 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
43785
43786 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
43787 };
43788
43789 BasePoint.prototype.encode = function encode(enc, compact) {
43790 return utils.encode(this._encode(compact), enc);
43791 };
43792
43793 BasePoint.prototype.precompute = function precompute(power) {
43794 if (this.precomputed)
43795 return this;
43796
43797 var precomputed = {
43798 doubles: null,
43799 naf: null,
43800 beta: null
43801 };
43802 precomputed.naf = this._getNAFPoints(8);
43803 precomputed.doubles = this._getDoubles(4, power);
43804 precomputed.beta = this._getBeta();
43805 this.precomputed = precomputed;
43806
43807 return this;
43808 };
43809
43810 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
43811 if (!this.precomputed)
43812 return false;
43813
43814 var doubles = this.precomputed.doubles;
43815 if (!doubles)
43816 return false;
43817
43818 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
43819 };
43820
43821 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
43822 if (this.precomputed && this.precomputed.doubles)
43823 return this.precomputed.doubles;
43824
43825 var doubles = [ this ];
43826 var acc = this;
43827 for (var i = 0; i < power; i += step) {
43828 for (var j = 0; j < step; j++)
43829 acc = acc.dbl();
43830 doubles.push(acc);
43831 }
43832 return {
43833 step: step,
43834 points: doubles
43835 };
43836 };
43837
43838 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
43839 if (this.precomputed && this.precomputed.naf)
43840 return this.precomputed.naf;
43841
43842 var res = [ this ];
43843 var max = (1 << wnd) - 1;
43844 var dbl = max === 1 ? null : this.dbl();
43845 for (var i = 1; i < max; i++)
43846 res[i] = res[i - 1].add(dbl);
43847 return {
43848 wnd: wnd,
43849 points: res
43850 };
43851 };
43852
43853 BasePoint.prototype._getBeta = function _getBeta() {
43854 return null;
43855 };
43856
43857 BasePoint.prototype.dblp = function dblp(k) {
43858 var r = this;
43859 for (var i = 0; i < k; i++)
43860 r = r.dbl();
43861 return r;
43862 };
43863
43864 },{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
43865 'use strict';
43866
43867 var curve = require('../curve');
43868 var elliptic = require('../../elliptic');
43869 var BN = require('bn.js');
43870 var inherits = require('inherits');
43871 var Base = curve.base;
43872
43873 var assert = elliptic.utils.assert;
43874
43875 function EdwardsCurve(conf) {
43876 // NOTE: Important as we are creating point in Base.call()
43877 this.twisted = (conf.a | 0) !== 1;
43878 this.mOneA = this.twisted && (conf.a | 0) === -1;
43879 this.extended = this.mOneA;
43880
43881 Base.call(this, 'edwards', conf);
43882
43883 this.a = new BN(conf.a, 16).umod(this.red.m);
43884 this.a = this.a.toRed(this.red);
43885 this.c = new BN(conf.c, 16).toRed(this.red);
43886 this.c2 = this.c.redSqr();
43887 this.d = new BN(conf.d, 16).toRed(this.red);
43888 this.dd = this.d.redAdd(this.d);
43889
43890 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
43891 this.oneC = (conf.c | 0) === 1;
43892 }
43893 inherits(EdwardsCurve, Base);
43894 module.exports = EdwardsCurve;
43895
43896 EdwardsCurve.prototype._mulA = function _mulA(num) {
43897 if (this.mOneA)
43898 return num.redNeg();
43899 else
43900 return this.a.redMul(num);
43901 };
43902
43903 EdwardsCurve.prototype._mulC = function _mulC(num) {
43904 if (this.oneC)
43905 return num;
43906 else
43907 return this.c.redMul(num);
43908 };
43909
43910 // Just for compatibility with Short curve
43911 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
43912 return this.point(x, y, z, t);
43913 };
43914
43915 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
43916 x = new BN(x, 16);
43917 if (!x.red)
43918 x = x.toRed(this.red);
43919
43920 var x2 = x.redSqr();
43921 var rhs = this.c2.redSub(this.a.redMul(x2));
43922 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
43923
43924 var y2 = rhs.redMul(lhs.redInvm());
43925 var y = y2.redSqrt();
43926 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43927 throw new Error('invalid point');
43928
43929 var isOdd = y.fromRed().isOdd();
43930 if (odd && !isOdd || !odd && isOdd)
43931 y = y.redNeg();
43932
43933 return this.point(x, y);
43934 };
43935
43936 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
43937 y = new BN(y, 16);
43938 if (!y.red)
43939 y = y.toRed(this.red);
43940
43941 // x^2 = (y^2 - 1) / (d y^2 + 1)
43942 var y2 = y.redSqr();
43943 var lhs = y2.redSub(this.one);
43944 var rhs = y2.redMul(this.d).redAdd(this.one);
43945 var x2 = lhs.redMul(rhs.redInvm());
43946
43947 if (x2.cmp(this.zero) === 0) {
43948 if (odd)
43949 throw new Error('invalid point');
43950 else
43951 return this.point(this.zero, y);
43952 }
43953
43954 var x = x2.redSqrt();
43955 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
43956 throw new Error('invalid point');
43957
43958 if (x.isOdd() !== odd)
43959 x = x.redNeg();
43960
43961 return this.point(x, y);
43962 };
43963
43964 EdwardsCurve.prototype.validate = function validate(point) {
43965 if (point.isInfinity())
43966 return true;
43967
43968 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
43969 point.normalize();
43970
43971 var x2 = point.x.redSqr();
43972 var y2 = point.y.redSqr();
43973 var lhs = x2.redMul(this.a).redAdd(y2);
43974 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
43975
43976 return lhs.cmp(rhs) === 0;
43977 };
43978
43979 function Point(curve, x, y, z, t) {
43980 Base.BasePoint.call(this, curve, 'projective');
43981 if (x === null && y === null && z === null) {
43982 this.x = this.curve.zero;
43983 this.y = this.curve.one;
43984 this.z = this.curve.one;
43985 this.t = this.curve.zero;
43986 this.zOne = true;
43987 } else {
43988 this.x = new BN(x, 16);
43989 this.y = new BN(y, 16);
43990 this.z = z ? new BN(z, 16) : this.curve.one;
43991 this.t = t && new BN(t, 16);
43992 if (!this.x.red)
43993 this.x = this.x.toRed(this.curve.red);
43994 if (!this.y.red)
43995 this.y = this.y.toRed(this.curve.red);
43996 if (!this.z.red)
43997 this.z = this.z.toRed(this.curve.red);
43998 if (this.t && !this.t.red)
43999 this.t = this.t.toRed(this.curve.red);
44000 this.zOne = this.z === this.curve.one;
44001
44002 // Use extended coordinates
44003 if (this.curve.extended && !this.t) {
44004 this.t = this.x.redMul(this.y);
44005 if (!this.zOne)
44006 this.t = this.t.redMul(this.z.redInvm());
44007 }
44008 }
44009 }
44010 inherits(Point, Base.BasePoint);
44011
44012 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44013 return Point.fromJSON(this, obj);
44014 };
44015
44016 EdwardsCurve.prototype.point = function point(x, y, z, t) {
44017 return new Point(this, x, y, z, t);
44018 };
44019
44020 Point.fromJSON = function fromJSON(curve, obj) {
44021 return new Point(curve, obj[0], obj[1], obj[2]);
44022 };
44023
44024 Point.prototype.inspect = function inspect() {
44025 if (this.isInfinity())
44026 return '<EC Point Infinity>';
44027 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44028 ' y: ' + this.y.fromRed().toString(16, 2) +
44029 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44030 };
44031
44032 Point.prototype.isInfinity = function isInfinity() {
44033 // XXX This code assumes that zero is always zero in red
44034 return this.x.cmpn(0) === 0 &&
44035 this.y.cmp(this.z) === 0;
44036 };
44037
44038 Point.prototype._extDbl = function _extDbl() {
44039 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44040 // #doubling-dbl-2008-hwcd
44041 // 4M + 4S
44042
44043 // A = X1^2
44044 var a = this.x.redSqr();
44045 // B = Y1^2
44046 var b = this.y.redSqr();
44047 // C = 2 * Z1^2
44048 var c = this.z.redSqr();
44049 c = c.redIAdd(c);
44050 // D = a * A
44051 var d = this.curve._mulA(a);
44052 // E = (X1 + Y1)^2 - A - B
44053 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
44054 // G = D + B
44055 var g = d.redAdd(b);
44056 // F = G - C
44057 var f = g.redSub(c);
44058 // H = D - B
44059 var h = d.redSub(b);
44060 // X3 = E * F
44061 var nx = e.redMul(f);
44062 // Y3 = G * H
44063 var ny = g.redMul(h);
44064 // T3 = E * H
44065 var nt = e.redMul(h);
44066 // Z3 = F * G
44067 var nz = f.redMul(g);
44068 return this.curve.point(nx, ny, nz, nt);
44069 };
44070
44071 Point.prototype._projDbl = function _projDbl() {
44072 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44073 // #doubling-dbl-2008-bbjlp
44074 // #doubling-dbl-2007-bl
44075 // and others
44076 // Generally 3M + 4S or 2M + 4S
44077
44078 // B = (X1 + Y1)^2
44079 var b = this.x.redAdd(this.y).redSqr();
44080 // C = X1^2
44081 var c = this.x.redSqr();
44082 // D = Y1^2
44083 var d = this.y.redSqr();
44084
44085 var nx;
44086 var ny;
44087 var nz;
44088 if (this.curve.twisted) {
44089 // E = a * C
44090 var e = this.curve._mulA(c);
44091 // F = E + D
44092 var f = e.redAdd(d);
44093 if (this.zOne) {
44094 // X3 = (B - C - D) * (F - 2)
44095 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
44096 // Y3 = F * (E - D)
44097 ny = f.redMul(e.redSub(d));
44098 // Z3 = F^2 - 2 * F
44099 nz = f.redSqr().redSub(f).redSub(f);
44100 } else {
44101 // H = Z1^2
44102 var h = this.z.redSqr();
44103 // J = F - 2 * H
44104 var j = f.redSub(h).redISub(h);
44105 // X3 = (B-C-D)*J
44106 nx = b.redSub(c).redISub(d).redMul(j);
44107 // Y3 = F * (E - D)
44108 ny = f.redMul(e.redSub(d));
44109 // Z3 = F * J
44110 nz = f.redMul(j);
44111 }
44112 } else {
44113 // E = C + D
44114 var e = c.redAdd(d);
44115 // H = (c * Z1)^2
44116 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
44117 // J = E - 2 * H
44118 var j = e.redSub(h).redSub(h);
44119 // X3 = c * (B - E) * J
44120 nx = this.curve._mulC(b.redISub(e)).redMul(j);
44121 // Y3 = c * E * (C - D)
44122 ny = this.curve._mulC(e).redMul(c.redISub(d));
44123 // Z3 = E * J
44124 nz = e.redMul(j);
44125 }
44126 return this.curve.point(nx, ny, nz);
44127 };
44128
44129 Point.prototype.dbl = function dbl() {
44130 if (this.isInfinity())
44131 return this;
44132
44133 // Double in extended coordinates
44134 if (this.curve.extended)
44135 return this._extDbl();
44136 else
44137 return this._projDbl();
44138 };
44139
44140 Point.prototype._extAdd = function _extAdd(p) {
44141 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44142 // #addition-add-2008-hwcd-3
44143 // 8M
44144
44145 // A = (Y1 - X1) * (Y2 - X2)
44146 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
44147 // B = (Y1 + X1) * (Y2 + X2)
44148 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
44149 // C = T1 * k * T2
44150 var c = this.t.redMul(this.curve.dd).redMul(p.t);
44151 // D = Z1 * 2 * Z2
44152 var d = this.z.redMul(p.z.redAdd(p.z));
44153 // E = B - A
44154 var e = b.redSub(a);
44155 // F = D - C
44156 var f = d.redSub(c);
44157 // G = D + C
44158 var g = d.redAdd(c);
44159 // H = B + A
44160 var h = b.redAdd(a);
44161 // X3 = E * F
44162 var nx = e.redMul(f);
44163 // Y3 = G * H
44164 var ny = g.redMul(h);
44165 // T3 = E * H
44166 var nt = e.redMul(h);
44167 // Z3 = F * G
44168 var nz = f.redMul(g);
44169 return this.curve.point(nx, ny, nz, nt);
44170 };
44171
44172 Point.prototype._projAdd = function _projAdd(p) {
44173 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44174 // #addition-add-2008-bbjlp
44175 // #addition-add-2007-bl
44176 // 10M + 1S
44177
44178 // A = Z1 * Z2
44179 var a = this.z.redMul(p.z);
44180 // B = A^2
44181 var b = a.redSqr();
44182 // C = X1 * X2
44183 var c = this.x.redMul(p.x);
44184 // D = Y1 * Y2
44185 var d = this.y.redMul(p.y);
44186 // E = d * C * D
44187 var e = this.curve.d.redMul(c).redMul(d);
44188 // F = B - E
44189 var f = b.redSub(e);
44190 // G = B + E
44191 var g = b.redAdd(e);
44192 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
44193 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
44194 var nx = a.redMul(f).redMul(tmp);
44195 var ny;
44196 var nz;
44197 if (this.curve.twisted) {
44198 // Y3 = A * G * (D - a * C)
44199 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
44200 // Z3 = F * G
44201 nz = f.redMul(g);
44202 } else {
44203 // Y3 = A * G * (D - C)
44204 ny = a.redMul(g).redMul(d.redSub(c));
44205 // Z3 = c * F * G
44206 nz = this.curve._mulC(f).redMul(g);
44207 }
44208 return this.curve.point(nx, ny, nz);
44209 };
44210
44211 Point.prototype.add = function add(p) {
44212 if (this.isInfinity())
44213 return p;
44214 if (p.isInfinity())
44215 return this;
44216
44217 if (this.curve.extended)
44218 return this._extAdd(p);
44219 else
44220 return this._projAdd(p);
44221 };
44222
44223 Point.prototype.mul = function mul(k) {
44224 if (this._hasDoubles(k))
44225 return this.curve._fixedNafMul(this, k);
44226 else
44227 return this.curve._wnafMul(this, k);
44228 };
44229
44230 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
44231 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
44232 };
44233
44234 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
44235 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
44236 };
44237
44238 Point.prototype.normalize = function normalize() {
44239 if (this.zOne)
44240 return this;
44241
44242 // Normalize coordinates
44243 var zi = this.z.redInvm();
44244 this.x = this.x.redMul(zi);
44245 this.y = this.y.redMul(zi);
44246 if (this.t)
44247 this.t = this.t.redMul(zi);
44248 this.z = this.curve.one;
44249 this.zOne = true;
44250 return this;
44251 };
44252
44253 Point.prototype.neg = function neg() {
44254 return this.curve.point(this.x.redNeg(),
44255 this.y,
44256 this.z,
44257 this.t && this.t.redNeg());
44258 };
44259
44260 Point.prototype.getX = function getX() {
44261 this.normalize();
44262 return this.x.fromRed();
44263 };
44264
44265 Point.prototype.getY = function getY() {
44266 this.normalize();
44267 return this.y.fromRed();
44268 };
44269
44270 Point.prototype.eq = function eq(other) {
44271 return this === other ||
44272 this.getX().cmp(other.getX()) === 0 &&
44273 this.getY().cmp(other.getY()) === 0;
44274 };
44275
44276 Point.prototype.eqXToP = function eqXToP(x) {
44277 var rx = x.toRed(this.curve.red).redMul(this.z);
44278 if (this.x.cmp(rx) === 0)
44279 return true;
44280
44281 var xc = x.clone();
44282 var t = this.curve.redN.redMul(this.z);
44283 for (;;) {
44284 xc.iadd(this.curve.n);
44285 if (xc.cmp(this.curve.p) >= 0)
44286 return false;
44287
44288 rx.redIAdd(t);
44289 if (this.x.cmp(rx) === 0)
44290 return true;
44291 }
44292 return false;
44293 };
44294
44295 // Compatibility with BaseCurve
44296 Point.prototype.toP = Point.prototype.normalize;
44297 Point.prototype.mixedAdd = Point.prototype.add;
44298
44299 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
44300 'use strict';
44301
44302 var curve = exports;
44303
44304 curve.base = require('./base');
44305 curve.short = require('./short');
44306 curve.mont = require('./mont');
44307 curve.edwards = require('./edwards');
44308
44309 },{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
44310 'use strict';
44311
44312 var curve = require('../curve');
44313 var BN = require('bn.js');
44314 var inherits = require('inherits');
44315 var Base = curve.base;
44316
44317 var elliptic = require('../../elliptic');
44318 var utils = elliptic.utils;
44319
44320 function MontCurve(conf) {
44321 Base.call(this, 'mont', conf);
44322
44323 this.a = new BN(conf.a, 16).toRed(this.red);
44324 this.b = new BN(conf.b, 16).toRed(this.red);
44325 this.i4 = new BN(4).toRed(this.red).redInvm();
44326 this.two = new BN(2).toRed(this.red);
44327 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
44328 }
44329 inherits(MontCurve, Base);
44330 module.exports = MontCurve;
44331
44332 MontCurve.prototype.validate = function validate(point) {
44333 var x = point.normalize().x;
44334 var x2 = x.redSqr();
44335 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
44336 var y = rhs.redSqrt();
44337
44338 return y.redSqr().cmp(rhs) === 0;
44339 };
44340
44341 function Point(curve, x, z) {
44342 Base.BasePoint.call(this, curve, 'projective');
44343 if (x === null && z === null) {
44344 this.x = this.curve.one;
44345 this.z = this.curve.zero;
44346 } else {
44347 this.x = new BN(x, 16);
44348 this.z = new BN(z, 16);
44349 if (!this.x.red)
44350 this.x = this.x.toRed(this.curve.red);
44351 if (!this.z.red)
44352 this.z = this.z.toRed(this.curve.red);
44353 }
44354 }
44355 inherits(Point, Base.BasePoint);
44356
44357 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
44358 return this.point(utils.toArray(bytes, enc), 1);
44359 };
44360
44361 MontCurve.prototype.point = function point(x, z) {
44362 return new Point(this, x, z);
44363 };
44364
44365 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44366 return Point.fromJSON(this, obj);
44367 };
44368
44369 Point.prototype.precompute = function precompute() {
44370 // No-op
44371 };
44372
44373 Point.prototype._encode = function _encode() {
44374 return this.getX().toArray('be', this.curve.p.byteLength());
44375 };
44376
44377 Point.fromJSON = function fromJSON(curve, obj) {
44378 return new Point(curve, obj[0], obj[1] || curve.one);
44379 };
44380
44381 Point.prototype.inspect = function inspect() {
44382 if (this.isInfinity())
44383 return '<EC Point Infinity>';
44384 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44385 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44386 };
44387
44388 Point.prototype.isInfinity = function isInfinity() {
44389 // XXX This code assumes that zero is always zero in red
44390 return this.z.cmpn(0) === 0;
44391 };
44392
44393 Point.prototype.dbl = function dbl() {
44394 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
44395 // 2M + 2S + 4A
44396
44397 // A = X1 + Z1
44398 var a = this.x.redAdd(this.z);
44399 // AA = A^2
44400 var aa = a.redSqr();
44401 // B = X1 - Z1
44402 var b = this.x.redSub(this.z);
44403 // BB = B^2
44404 var bb = b.redSqr();
44405 // C = AA - BB
44406 var c = aa.redSub(bb);
44407 // X3 = AA * BB
44408 var nx = aa.redMul(bb);
44409 // Z3 = C * (BB + A24 * C)
44410 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
44411 return this.curve.point(nx, nz);
44412 };
44413
44414 Point.prototype.add = function add() {
44415 throw new Error('Not supported on Montgomery curve');
44416 };
44417
44418 Point.prototype.diffAdd = function diffAdd(p, diff) {
44419 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
44420 // 4M + 2S + 6A
44421
44422 // A = X2 + Z2
44423 var a = this.x.redAdd(this.z);
44424 // B = X2 - Z2
44425 var b = this.x.redSub(this.z);
44426 // C = X3 + Z3
44427 var c = p.x.redAdd(p.z);
44428 // D = X3 - Z3
44429 var d = p.x.redSub(p.z);
44430 // DA = D * A
44431 var da = d.redMul(a);
44432 // CB = C * B
44433 var cb = c.redMul(b);
44434 // X5 = Z1 * (DA + CB)^2
44435 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
44436 // Z5 = X1 * (DA - CB)^2
44437 var nz = diff.x.redMul(da.redISub(cb).redSqr());
44438 return this.curve.point(nx, nz);
44439 };
44440
44441 Point.prototype.mul = function mul(k) {
44442 var t = k.clone();
44443 var a = this; // (N / 2) * Q + Q
44444 var b = this.curve.point(null, null); // (N / 2) * Q
44445 var c = this; // Q
44446
44447 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
44448 bits.push(t.andln(1));
44449
44450 for (var i = bits.length - 1; i >= 0; i--) {
44451 if (bits[i] === 0) {
44452 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
44453 a = a.diffAdd(b, c);
44454 // N * Q = 2 * ((N / 2) * Q + Q))
44455 b = b.dbl();
44456 } else {
44457 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
44458 b = a.diffAdd(b, c);
44459 // N * Q + Q = 2 * ((N / 2) * Q + Q)
44460 a = a.dbl();
44461 }
44462 }
44463 return b;
44464 };
44465
44466 Point.prototype.mulAdd = function mulAdd() {
44467 throw new Error('Not supported on Montgomery curve');
44468 };
44469
44470 Point.prototype.jumlAdd = function jumlAdd() {
44471 throw new Error('Not supported on Montgomery curve');
44472 };
44473
44474 Point.prototype.eq = function eq(other) {
44475 return this.getX().cmp(other.getX()) === 0;
44476 };
44477
44478 Point.prototype.normalize = function normalize() {
44479 this.x = this.x.redMul(this.z.redInvm());
44480 this.z = this.curve.one;
44481 return this;
44482 };
44483
44484 Point.prototype.getX = function getX() {
44485 // Normalize coordinates
44486 this.normalize();
44487
44488 return this.x.fromRed();
44489 };
44490
44491 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
44492 'use strict';
44493
44494 var curve = require('../curve');
44495 var elliptic = require('../../elliptic');
44496 var BN = require('bn.js');
44497 var inherits = require('inherits');
44498 var Base = curve.base;
44499
44500 var assert = elliptic.utils.assert;
44501
44502 function ShortCurve(conf) {
44503 Base.call(this, 'short', conf);
44504
44505 this.a = new BN(conf.a, 16).toRed(this.red);
44506 this.b = new BN(conf.b, 16).toRed(this.red);
44507 this.tinv = this.two.redInvm();
44508
44509 this.zeroA = this.a.fromRed().cmpn(0) === 0;
44510 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
44511
44512 // If the curve is endomorphic, precalculate beta and lambda
44513 this.endo = this._getEndomorphism(conf);
44514 this._endoWnafT1 = new Array(4);
44515 this._endoWnafT2 = new Array(4);
44516 }
44517 inherits(ShortCurve, Base);
44518 module.exports = ShortCurve;
44519
44520 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
44521 // No efficient endomorphism
44522 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
44523 return;
44524
44525 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
44526 var beta;
44527 var lambda;
44528 if (conf.beta) {
44529 beta = new BN(conf.beta, 16).toRed(this.red);
44530 } else {
44531 var betas = this._getEndoRoots(this.p);
44532 // Choose the smallest beta
44533 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
44534 beta = beta.toRed(this.red);
44535 }
44536 if (conf.lambda) {
44537 lambda = new BN(conf.lambda, 16);
44538 } else {
44539 // Choose the lambda that is matching selected beta
44540 var lambdas = this._getEndoRoots(this.n);
44541 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
44542 lambda = lambdas[0];
44543 } else {
44544 lambda = lambdas[1];
44545 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
44546 }
44547 }
44548
44549 // Get basis vectors, used for balanced length-two representation
44550 var basis;
44551 if (conf.basis) {
44552 basis = conf.basis.map(function(vec) {
44553 return {
44554 a: new BN(vec.a, 16),
44555 b: new BN(vec.b, 16)
44556 };
44557 });
44558 } else {
44559 basis = this._getEndoBasis(lambda);
44560 }
44561
44562 return {
44563 beta: beta,
44564 lambda: lambda,
44565 basis: basis
44566 };
44567 };
44568
44569 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
44570 // Find roots of for x^2 + x + 1 in F
44571 // Root = (-1 +- Sqrt(-3)) / 2
44572 //
44573 var red = num === this.p ? this.red : BN.mont(num);
44574 var tinv = new BN(2).toRed(red).redInvm();
44575 var ntinv = tinv.redNeg();
44576
44577 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
44578
44579 var l1 = ntinv.redAdd(s).fromRed();
44580 var l2 = ntinv.redSub(s).fromRed();
44581 return [ l1, l2 ];
44582 };
44583
44584 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
44585 // aprxSqrt >= sqrt(this.n)
44586 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
44587
44588 // 3.74
44589 // Run EGCD, until r(L + 1) < aprxSqrt
44590 var u = lambda;
44591 var v = this.n.clone();
44592 var x1 = new BN(1);
44593 var y1 = new BN(0);
44594 var x2 = new BN(0);
44595 var y2 = new BN(1);
44596
44597 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
44598 var a0;
44599 var b0;
44600 // First vector
44601 var a1;
44602 var b1;
44603 // Second vector
44604 var a2;
44605 var b2;
44606
44607 var prevR;
44608 var i = 0;
44609 var r;
44610 var x;
44611 while (u.cmpn(0) !== 0) {
44612 var q = v.div(u);
44613 r = v.sub(q.mul(u));
44614 x = x2.sub(q.mul(x1));
44615 var y = y2.sub(q.mul(y1));
44616
44617 if (!a1 && r.cmp(aprxSqrt) < 0) {
44618 a0 = prevR.neg();
44619 b0 = x1;
44620 a1 = r.neg();
44621 b1 = x;
44622 } else if (a1 && ++i === 2) {
44623 break;
44624 }
44625 prevR = r;
44626
44627 v = u;
44628 u = r;
44629 x2 = x1;
44630 x1 = x;
44631 y2 = y1;
44632 y1 = y;
44633 }
44634 a2 = r.neg();
44635 b2 = x;
44636
44637 var len1 = a1.sqr().add(b1.sqr());
44638 var len2 = a2.sqr().add(b2.sqr());
44639 if (len2.cmp(len1) >= 0) {
44640 a2 = a0;
44641 b2 = b0;
44642 }
44643
44644 // Normalize signs
44645 if (a1.negative) {
44646 a1 = a1.neg();
44647 b1 = b1.neg();
44648 }
44649 if (a2.negative) {
44650 a2 = a2.neg();
44651 b2 = b2.neg();
44652 }
44653
44654 return [
44655 { a: a1, b: b1 },
44656 { a: a2, b: b2 }
44657 ];
44658 };
44659
44660 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
44661 var basis = this.endo.basis;
44662 var v1 = basis[0];
44663 var v2 = basis[1];
44664
44665 var c1 = v2.b.mul(k).divRound(this.n);
44666 var c2 = v1.b.neg().mul(k).divRound(this.n);
44667
44668 var p1 = c1.mul(v1.a);
44669 var p2 = c2.mul(v2.a);
44670 var q1 = c1.mul(v1.b);
44671 var q2 = c2.mul(v2.b);
44672
44673 // Calculate answer
44674 var k1 = k.sub(p1).sub(p2);
44675 var k2 = q1.add(q2).neg();
44676 return { k1: k1, k2: k2 };
44677 };
44678
44679 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
44680 x = new BN(x, 16);
44681 if (!x.red)
44682 x = x.toRed(this.red);
44683
44684 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
44685 var y = y2.redSqrt();
44686 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
44687 throw new Error('invalid point');
44688
44689 // XXX Is there any way to tell if the number is odd without converting it
44690 // to non-red form?
44691 var isOdd = y.fromRed().isOdd();
44692 if (odd && !isOdd || !odd && isOdd)
44693 y = y.redNeg();
44694
44695 return this.point(x, y);
44696 };
44697
44698 ShortCurve.prototype.validate = function validate(point) {
44699 if (point.inf)
44700 return true;
44701
44702 var x = point.x;
44703 var y = point.y;
44704
44705 var ax = this.a.redMul(x);
44706 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
44707 return y.redSqr().redISub(rhs).cmpn(0) === 0;
44708 };
44709
44710 ShortCurve.prototype._endoWnafMulAdd =
44711 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
44712 var npoints = this._endoWnafT1;
44713 var ncoeffs = this._endoWnafT2;
44714 for (var i = 0; i < points.length; i++) {
44715 var split = this._endoSplit(coeffs[i]);
44716 var p = points[i];
44717 var beta = p._getBeta();
44718
44719 if (split.k1.negative) {
44720 split.k1.ineg();
44721 p = p.neg(true);
44722 }
44723 if (split.k2.negative) {
44724 split.k2.ineg();
44725 beta = beta.neg(true);
44726 }
44727
44728 npoints[i * 2] = p;
44729 npoints[i * 2 + 1] = beta;
44730 ncoeffs[i * 2] = split.k1;
44731 ncoeffs[i * 2 + 1] = split.k2;
44732 }
44733 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
44734
44735 // Clean-up references to points and coefficients
44736 for (var j = 0; j < i * 2; j++) {
44737 npoints[j] = null;
44738 ncoeffs[j] = null;
44739 }
44740 return res;
44741 };
44742
44743 function Point(curve, x, y, isRed) {
44744 Base.BasePoint.call(this, curve, 'affine');
44745 if (x === null && y === null) {
44746 this.x = null;
44747 this.y = null;
44748 this.inf = true;
44749 } else {
44750 this.x = new BN(x, 16);
44751 this.y = new BN(y, 16);
44752 // Force redgomery representation when loading from JSON
44753 if (isRed) {
44754 this.x.forceRed(this.curve.red);
44755 this.y.forceRed(this.curve.red);
44756 }
44757 if (!this.x.red)
44758 this.x = this.x.toRed(this.curve.red);
44759 if (!this.y.red)
44760 this.y = this.y.toRed(this.curve.red);
44761 this.inf = false;
44762 }
44763 }
44764 inherits(Point, Base.BasePoint);
44765
44766 ShortCurve.prototype.point = function point(x, y, isRed) {
44767 return new Point(this, x, y, isRed);
44768 };
44769
44770 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
44771 return Point.fromJSON(this, obj, red);
44772 };
44773
44774 Point.prototype._getBeta = function _getBeta() {
44775 if (!this.curve.endo)
44776 return;
44777
44778 var pre = this.precomputed;
44779 if (pre && pre.beta)
44780 return pre.beta;
44781
44782 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
44783 if (pre) {
44784 var curve = this.curve;
44785 var endoMul = function(p) {
44786 return curve.point(p.x.redMul(curve.endo.beta), p.y);
44787 };
44788 pre.beta = beta;
44789 beta.precomputed = {
44790 beta: null,
44791 naf: pre.naf && {
44792 wnd: pre.naf.wnd,
44793 points: pre.naf.points.map(endoMul)
44794 },
44795 doubles: pre.doubles && {
44796 step: pre.doubles.step,
44797 points: pre.doubles.points.map(endoMul)
44798 }
44799 };
44800 }
44801 return beta;
44802 };
44803
44804 Point.prototype.toJSON = function toJSON() {
44805 if (!this.precomputed)
44806 return [ this.x, this.y ];
44807
44808 return [ this.x, this.y, this.precomputed && {
44809 doubles: this.precomputed.doubles && {
44810 step: this.precomputed.doubles.step,
44811 points: this.precomputed.doubles.points.slice(1)
44812 },
44813 naf: this.precomputed.naf && {
44814 wnd: this.precomputed.naf.wnd,
44815 points: this.precomputed.naf.points.slice(1)
44816 }
44817 } ];
44818 };
44819
44820 Point.fromJSON = function fromJSON(curve, obj, red) {
44821 if (typeof obj === 'string')
44822 obj = JSON.parse(obj);
44823 var res = curve.point(obj[0], obj[1], red);
44824 if (!obj[2])
44825 return res;
44826
44827 function obj2point(obj) {
44828 return curve.point(obj[0], obj[1], red);
44829 }
44830
44831 var pre = obj[2];
44832 res.precomputed = {
44833 beta: null,
44834 doubles: pre.doubles && {
44835 step: pre.doubles.step,
44836 points: [ res ].concat(pre.doubles.points.map(obj2point))
44837 },
44838 naf: pre.naf && {
44839 wnd: pre.naf.wnd,
44840 points: [ res ].concat(pre.naf.points.map(obj2point))
44841 }
44842 };
44843 return res;
44844 };
44845
44846 Point.prototype.inspect = function inspect() {
44847 if (this.isInfinity())
44848 return '<EC Point Infinity>';
44849 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44850 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
44851 };
44852
44853 Point.prototype.isInfinity = function isInfinity() {
44854 return this.inf;
44855 };
44856
44857 Point.prototype.add = function add(p) {
44858 // O + P = P
44859 if (this.inf)
44860 return p;
44861
44862 // P + O = P
44863 if (p.inf)
44864 return this;
44865
44866 // P + P = 2P
44867 if (this.eq(p))
44868 return this.dbl();
44869
44870 // P + (-P) = O
44871 if (this.neg().eq(p))
44872 return this.curve.point(null, null);
44873
44874 // P + Q = O
44875 if (this.x.cmp(p.x) === 0)
44876 return this.curve.point(null, null);
44877
44878 var c = this.y.redSub(p.y);
44879 if (c.cmpn(0) !== 0)
44880 c = c.redMul(this.x.redSub(p.x).redInvm());
44881 var nx = c.redSqr().redISub(this.x).redISub(p.x);
44882 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44883 return this.curve.point(nx, ny);
44884 };
44885
44886 Point.prototype.dbl = function dbl() {
44887 if (this.inf)
44888 return this;
44889
44890 // 2P = O
44891 var ys1 = this.y.redAdd(this.y);
44892 if (ys1.cmpn(0) === 0)
44893 return this.curve.point(null, null);
44894
44895 var a = this.curve.a;
44896
44897 var x2 = this.x.redSqr();
44898 var dyinv = ys1.redInvm();
44899 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
44900
44901 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
44902 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44903 return this.curve.point(nx, ny);
44904 };
44905
44906 Point.prototype.getX = function getX() {
44907 return this.x.fromRed();
44908 };
44909
44910 Point.prototype.getY = function getY() {
44911 return this.y.fromRed();
44912 };
44913
44914 Point.prototype.mul = function mul(k) {
44915 k = new BN(k, 16);
44916
44917 if (this._hasDoubles(k))
44918 return this.curve._fixedNafMul(this, k);
44919 else if (this.curve.endo)
44920 return this.curve._endoWnafMulAdd([ this ], [ k ]);
44921 else
44922 return this.curve._wnafMul(this, k);
44923 };
44924
44925 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
44926 var points = [ this, p2 ];
44927 var coeffs = [ k1, k2 ];
44928 if (this.curve.endo)
44929 return this.curve._endoWnafMulAdd(points, coeffs);
44930 else
44931 return this.curve._wnafMulAdd(1, points, coeffs, 2);
44932 };
44933
44934 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
44935 var points = [ this, p2 ];
44936 var coeffs = [ k1, k2 ];
44937 if (this.curve.endo)
44938 return this.curve._endoWnafMulAdd(points, coeffs, true);
44939 else
44940 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
44941 };
44942
44943 Point.prototype.eq = function eq(p) {
44944 return this === p ||
44945 this.inf === p.inf &&
44946 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
44947 };
44948
44949 Point.prototype.neg = function neg(_precompute) {
44950 if (this.inf)
44951 return this;
44952
44953 var res = this.curve.point(this.x, this.y.redNeg());
44954 if (_precompute && this.precomputed) {
44955 var pre = this.precomputed;
44956 var negate = function(p) {
44957 return p.neg();
44958 };
44959 res.precomputed = {
44960 naf: pre.naf && {
44961 wnd: pre.naf.wnd,
44962 points: pre.naf.points.map(negate)
44963 },
44964 doubles: pre.doubles && {
44965 step: pre.doubles.step,
44966 points: pre.doubles.points.map(negate)
44967 }
44968 };
44969 }
44970 return res;
44971 };
44972
44973 Point.prototype.toJ = function toJ() {
44974 if (this.inf)
44975 return this.curve.jpoint(null, null, null);
44976
44977 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
44978 return res;
44979 };
44980
44981 function JPoint(curve, x, y, z) {
44982 Base.BasePoint.call(this, curve, 'jacobian');
44983 if (x === null && y === null && z === null) {
44984 this.x = this.curve.one;
44985 this.y = this.curve.one;
44986 this.z = new BN(0);
44987 } else {
44988 this.x = new BN(x, 16);
44989 this.y = new BN(y, 16);
44990 this.z = new BN(z, 16);
44991 }
44992 if (!this.x.red)
44993 this.x = this.x.toRed(this.curve.red);
44994 if (!this.y.red)
44995 this.y = this.y.toRed(this.curve.red);
44996 if (!this.z.red)
44997 this.z = this.z.toRed(this.curve.red);
44998
44999 this.zOne = this.z === this.curve.one;
45000 }
45001 inherits(JPoint, Base.BasePoint);
45002
45003 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
45004 return new JPoint(this, x, y, z);
45005 };
45006
45007 JPoint.prototype.toP = function toP() {
45008 if (this.isInfinity())
45009 return this.curve.point(null, null);
45010
45011 var zinv = this.z.redInvm();
45012 var zinv2 = zinv.redSqr();
45013 var ax = this.x.redMul(zinv2);
45014 var ay = this.y.redMul(zinv2).redMul(zinv);
45015
45016 return this.curve.point(ax, ay);
45017 };
45018
45019 JPoint.prototype.neg = function neg() {
45020 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
45021 };
45022
45023 JPoint.prototype.add = function add(p) {
45024 // O + P = P
45025 if (this.isInfinity())
45026 return p;
45027
45028 // P + O = P
45029 if (p.isInfinity())
45030 return this;
45031
45032 // 12M + 4S + 7A
45033 var pz2 = p.z.redSqr();
45034 var z2 = this.z.redSqr();
45035 var u1 = this.x.redMul(pz2);
45036 var u2 = p.x.redMul(z2);
45037 var s1 = this.y.redMul(pz2.redMul(p.z));
45038 var s2 = p.y.redMul(z2.redMul(this.z));
45039
45040 var h = u1.redSub(u2);
45041 var r = s1.redSub(s2);
45042 if (h.cmpn(0) === 0) {
45043 if (r.cmpn(0) !== 0)
45044 return this.curve.jpoint(null, null, null);
45045 else
45046 return this.dbl();
45047 }
45048
45049 var h2 = h.redSqr();
45050 var h3 = h2.redMul(h);
45051 var v = u1.redMul(h2);
45052
45053 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45054 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45055 var nz = this.z.redMul(p.z).redMul(h);
45056
45057 return this.curve.jpoint(nx, ny, nz);
45058 };
45059
45060 JPoint.prototype.mixedAdd = function mixedAdd(p) {
45061 // O + P = P
45062 if (this.isInfinity())
45063 return p.toJ();
45064
45065 // P + O = P
45066 if (p.isInfinity())
45067 return this;
45068
45069 // 8M + 3S + 7A
45070 var z2 = this.z.redSqr();
45071 var u1 = this.x;
45072 var u2 = p.x.redMul(z2);
45073 var s1 = this.y;
45074 var s2 = p.y.redMul(z2).redMul(this.z);
45075
45076 var h = u1.redSub(u2);
45077 var r = s1.redSub(s2);
45078 if (h.cmpn(0) === 0) {
45079 if (r.cmpn(0) !== 0)
45080 return this.curve.jpoint(null, null, null);
45081 else
45082 return this.dbl();
45083 }
45084
45085 var h2 = h.redSqr();
45086 var h3 = h2.redMul(h);
45087 var v = u1.redMul(h2);
45088
45089 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45090 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45091 var nz = this.z.redMul(h);
45092
45093 return this.curve.jpoint(nx, ny, nz);
45094 };
45095
45096 JPoint.prototype.dblp = function dblp(pow) {
45097 if (pow === 0)
45098 return this;
45099 if (this.isInfinity())
45100 return this;
45101 if (!pow)
45102 return this.dbl();
45103
45104 if (this.curve.zeroA || this.curve.threeA) {
45105 var r = this;
45106 for (var i = 0; i < pow; i++)
45107 r = r.dbl();
45108 return r;
45109 }
45110
45111 // 1M + 2S + 1A + N * (4S + 5M + 8A)
45112 // N = 1 => 6M + 6S + 9A
45113 var a = this.curve.a;
45114 var tinv = this.curve.tinv;
45115
45116 var jx = this.x;
45117 var jy = this.y;
45118 var jz = this.z;
45119 var jz4 = jz.redSqr().redSqr();
45120
45121 // Reuse results
45122 var jyd = jy.redAdd(jy);
45123 for (var i = 0; i < pow; i++) {
45124 var jx2 = jx.redSqr();
45125 var jyd2 = jyd.redSqr();
45126 var jyd4 = jyd2.redSqr();
45127 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45128
45129 var t1 = jx.redMul(jyd2);
45130 var nx = c.redSqr().redISub(t1.redAdd(t1));
45131 var t2 = t1.redISub(nx);
45132 var dny = c.redMul(t2);
45133 dny = dny.redIAdd(dny).redISub(jyd4);
45134 var nz = jyd.redMul(jz);
45135 if (i + 1 < pow)
45136 jz4 = jz4.redMul(jyd4);
45137
45138 jx = nx;
45139 jz = nz;
45140 jyd = dny;
45141 }
45142
45143 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
45144 };
45145
45146 JPoint.prototype.dbl = function dbl() {
45147 if (this.isInfinity())
45148 return this;
45149
45150 if (this.curve.zeroA)
45151 return this._zeroDbl();
45152 else if (this.curve.threeA)
45153 return this._threeDbl();
45154 else
45155 return this._dbl();
45156 };
45157
45158 JPoint.prototype._zeroDbl = function _zeroDbl() {
45159 var nx;
45160 var ny;
45161 var nz;
45162 // Z = 1
45163 if (this.zOne) {
45164 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45165 // #doubling-mdbl-2007-bl
45166 // 1M + 5S + 14A
45167
45168 // XX = X1^2
45169 var xx = this.x.redSqr();
45170 // YY = Y1^2
45171 var yy = this.y.redSqr();
45172 // YYYY = YY^2
45173 var yyyy = yy.redSqr();
45174 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45175 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45176 s = s.redIAdd(s);
45177 // M = 3 * XX + a; a = 0
45178 var m = xx.redAdd(xx).redIAdd(xx);
45179 // T = M ^ 2 - 2*S
45180 var t = m.redSqr().redISub(s).redISub(s);
45181
45182 // 8 * YYYY
45183 var yyyy8 = yyyy.redIAdd(yyyy);
45184 yyyy8 = yyyy8.redIAdd(yyyy8);
45185 yyyy8 = yyyy8.redIAdd(yyyy8);
45186
45187 // X3 = T
45188 nx = t;
45189 // Y3 = M * (S - T) - 8 * YYYY
45190 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45191 // Z3 = 2*Y1
45192 nz = this.y.redAdd(this.y);
45193 } else {
45194 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45195 // #doubling-dbl-2009-l
45196 // 2M + 5S + 13A
45197
45198 // A = X1^2
45199 var a = this.x.redSqr();
45200 // B = Y1^2
45201 var b = this.y.redSqr();
45202 // C = B^2
45203 var c = b.redSqr();
45204 // D = 2 * ((X1 + B)^2 - A - C)
45205 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
45206 d = d.redIAdd(d);
45207 // E = 3 * A
45208 var e = a.redAdd(a).redIAdd(a);
45209 // F = E^2
45210 var f = e.redSqr();
45211
45212 // 8 * C
45213 var c8 = c.redIAdd(c);
45214 c8 = c8.redIAdd(c8);
45215 c8 = c8.redIAdd(c8);
45216
45217 // X3 = F - 2 * D
45218 nx = f.redISub(d).redISub(d);
45219 // Y3 = E * (D - X3) - 8 * C
45220 ny = e.redMul(d.redISub(nx)).redISub(c8);
45221 // Z3 = 2 * Y1 * Z1
45222 nz = this.y.redMul(this.z);
45223 nz = nz.redIAdd(nz);
45224 }
45225
45226 return this.curve.jpoint(nx, ny, nz);
45227 };
45228
45229 JPoint.prototype._threeDbl = function _threeDbl() {
45230 var nx;
45231 var ny;
45232 var nz;
45233 // Z = 1
45234 if (this.zOne) {
45235 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
45236 // #doubling-mdbl-2007-bl
45237 // 1M + 5S + 15A
45238
45239 // XX = X1^2
45240 var xx = this.x.redSqr();
45241 // YY = Y1^2
45242 var yy = this.y.redSqr();
45243 // YYYY = YY^2
45244 var yyyy = yy.redSqr();
45245 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45246 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45247 s = s.redIAdd(s);
45248 // M = 3 * XX + a
45249 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
45250 // T = M^2 - 2 * S
45251 var t = m.redSqr().redISub(s).redISub(s);
45252 // X3 = T
45253 nx = t;
45254 // Y3 = M * (S - T) - 8 * YYYY
45255 var yyyy8 = yyyy.redIAdd(yyyy);
45256 yyyy8 = yyyy8.redIAdd(yyyy8);
45257 yyyy8 = yyyy8.redIAdd(yyyy8);
45258 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45259 // Z3 = 2 * Y1
45260 nz = this.y.redAdd(this.y);
45261 } else {
45262 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
45263 // 3M + 5S
45264
45265 // delta = Z1^2
45266 var delta = this.z.redSqr();
45267 // gamma = Y1^2
45268 var gamma = this.y.redSqr();
45269 // beta = X1 * gamma
45270 var beta = this.x.redMul(gamma);
45271 // alpha = 3 * (X1 - delta) * (X1 + delta)
45272 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
45273 alpha = alpha.redAdd(alpha).redIAdd(alpha);
45274 // X3 = alpha^2 - 8 * beta
45275 var beta4 = beta.redIAdd(beta);
45276 beta4 = beta4.redIAdd(beta4);
45277 var beta8 = beta4.redAdd(beta4);
45278 nx = alpha.redSqr().redISub(beta8);
45279 // Z3 = (Y1 + Z1)^2 - gamma - delta
45280 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
45281 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
45282 var ggamma8 = gamma.redSqr();
45283 ggamma8 = ggamma8.redIAdd(ggamma8);
45284 ggamma8 = ggamma8.redIAdd(ggamma8);
45285 ggamma8 = ggamma8.redIAdd(ggamma8);
45286 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
45287 }
45288
45289 return this.curve.jpoint(nx, ny, nz);
45290 };
45291
45292 JPoint.prototype._dbl = function _dbl() {
45293 var a = this.curve.a;
45294
45295 // 4M + 6S + 10A
45296 var jx = this.x;
45297 var jy = this.y;
45298 var jz = this.z;
45299 var jz4 = jz.redSqr().redSqr();
45300
45301 var jx2 = jx.redSqr();
45302 var jy2 = jy.redSqr();
45303
45304 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45305
45306 var jxd4 = jx.redAdd(jx);
45307 jxd4 = jxd4.redIAdd(jxd4);
45308 var t1 = jxd4.redMul(jy2);
45309 var nx = c.redSqr().redISub(t1.redAdd(t1));
45310 var t2 = t1.redISub(nx);
45311
45312 var jyd8 = jy2.redSqr();
45313 jyd8 = jyd8.redIAdd(jyd8);
45314 jyd8 = jyd8.redIAdd(jyd8);
45315 jyd8 = jyd8.redIAdd(jyd8);
45316 var ny = c.redMul(t2).redISub(jyd8);
45317 var nz = jy.redAdd(jy).redMul(jz);
45318
45319 return this.curve.jpoint(nx, ny, nz);
45320 };
45321
45322 JPoint.prototype.trpl = function trpl() {
45323 if (!this.curve.zeroA)
45324 return this.dbl().add(this);
45325
45326 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
45327 // 5M + 10S + ...
45328
45329 // XX = X1^2
45330 var xx = this.x.redSqr();
45331 // YY = Y1^2
45332 var yy = this.y.redSqr();
45333 // ZZ = Z1^2
45334 var zz = this.z.redSqr();
45335 // YYYY = YY^2
45336 var yyyy = yy.redSqr();
45337 // M = 3 * XX + a * ZZ2; a = 0
45338 var m = xx.redAdd(xx).redIAdd(xx);
45339 // MM = M^2
45340 var mm = m.redSqr();
45341 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
45342 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45343 e = e.redIAdd(e);
45344 e = e.redAdd(e).redIAdd(e);
45345 e = e.redISub(mm);
45346 // EE = E^2
45347 var ee = e.redSqr();
45348 // T = 16*YYYY
45349 var t = yyyy.redIAdd(yyyy);
45350 t = t.redIAdd(t);
45351 t = t.redIAdd(t);
45352 t = t.redIAdd(t);
45353 // U = (M + E)^2 - MM - EE - T
45354 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
45355 // X3 = 4 * (X1 * EE - 4 * YY * U)
45356 var yyu4 = yy.redMul(u);
45357 yyu4 = yyu4.redIAdd(yyu4);
45358 yyu4 = yyu4.redIAdd(yyu4);
45359 var nx = this.x.redMul(ee).redISub(yyu4);
45360 nx = nx.redIAdd(nx);
45361 nx = nx.redIAdd(nx);
45362 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
45363 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
45364 ny = ny.redIAdd(ny);
45365 ny = ny.redIAdd(ny);
45366 ny = ny.redIAdd(ny);
45367 // Z3 = (Z1 + E)^2 - ZZ - EE
45368 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
45369
45370 return this.curve.jpoint(nx, ny, nz);
45371 };
45372
45373 JPoint.prototype.mul = function mul(k, kbase) {
45374 k = new BN(k, kbase);
45375
45376 return this.curve._wnafMul(this, k);
45377 };
45378
45379 JPoint.prototype.eq = function eq(p) {
45380 if (p.type === 'affine')
45381 return this.eq(p.toJ());
45382
45383 if (this === p)
45384 return true;
45385
45386 // x1 * z2^2 == x2 * z1^2
45387 var z2 = this.z.redSqr();
45388 var pz2 = p.z.redSqr();
45389 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
45390 return false;
45391
45392 // y1 * z2^3 == y2 * z1^3
45393 var z3 = z2.redMul(this.z);
45394 var pz3 = pz2.redMul(p.z);
45395 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
45396 };
45397
45398 JPoint.prototype.eqXToP = function eqXToP(x) {
45399 var zs = this.z.redSqr();
45400 var rx = x.toRed(this.curve.red).redMul(zs);
45401 if (this.x.cmp(rx) === 0)
45402 return true;
45403
45404 var xc = x.clone();
45405 var t = this.curve.redN.redMul(zs);
45406 for (;;) {
45407 xc.iadd(this.curve.n);
45408 if (xc.cmp(this.curve.p) >= 0)
45409 return false;
45410
45411 rx.redIAdd(t);
45412 if (this.x.cmp(rx) === 0)
45413 return true;
45414 }
45415 return false;
45416 };
45417
45418 JPoint.prototype.inspect = function inspect() {
45419 if (this.isInfinity())
45420 return '<EC JPoint Infinity>';
45421 return '<EC JPoint x: ' + this.x.toString(16, 2) +
45422 ' y: ' + this.y.toString(16, 2) +
45423 ' z: ' + this.z.toString(16, 2) + '>';
45424 };
45425
45426 JPoint.prototype.isInfinity = function isInfinity() {
45427 // XXX This code assumes that zero is always zero in red
45428 return this.z.cmpn(0) === 0;
45429 };
45430
45431 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
45432 'use strict';
45433
45434 var curves = exports;
45435
45436 var hash = require('hash.js');
45437 var elliptic = require('../elliptic');
45438
45439 var assert = elliptic.utils.assert;
45440
45441 function PresetCurve(options) {
45442 if (options.type === 'short')
45443 this.curve = new elliptic.curve.short(options);
45444 else if (options.type === 'edwards')
45445 this.curve = new elliptic.curve.edwards(options);
45446 else
45447 this.curve = new elliptic.curve.mont(options);
45448 this.g = this.curve.g;
45449 this.n = this.curve.n;
45450 this.hash = options.hash;
45451
45452 assert(this.g.validate(), 'Invalid curve');
45453 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
45454 }
45455 curves.PresetCurve = PresetCurve;
45456
45457 function defineCurve(name, options) {
45458 Object.defineProperty(curves, name, {
45459 configurable: true,
45460 enumerable: true,
45461 get: function() {
45462 var curve = new PresetCurve(options);
45463 Object.defineProperty(curves, name, {
45464 configurable: true,
45465 enumerable: true,
45466 value: curve
45467 });
45468 return curve;
45469 }
45470 });
45471 }
45472
45473 defineCurve('p192', {
45474 type: 'short',
45475 prime: 'p192',
45476 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
45477 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
45478 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
45479 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
45480 hash: hash.sha256,
45481 gRed: false,
45482 g: [
45483 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
45484 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
45485 ]
45486 });
45487
45488 defineCurve('p224', {
45489 type: 'short',
45490 prime: 'p224',
45491 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
45492 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
45493 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
45494 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
45495 hash: hash.sha256,
45496 gRed: false,
45497 g: [
45498 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
45499 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
45500 ]
45501 });
45502
45503 defineCurve('p256', {
45504 type: 'short',
45505 prime: null,
45506 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
45507 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
45508 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
45509 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
45510 hash: hash.sha256,
45511 gRed: false,
45512 g: [
45513 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
45514 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
45515 ]
45516 });
45517
45518 defineCurve('p384', {
45519 type: 'short',
45520 prime: null,
45521 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45522 'fffffffe ffffffff 00000000 00000000 ffffffff',
45523 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45524 'fffffffe ffffffff 00000000 00000000 fffffffc',
45525 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
45526 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
45527 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
45528 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
45529 hash: hash.sha384,
45530 gRed: false,
45531 g: [
45532 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
45533 '5502f25d bf55296c 3a545e38 72760ab7',
45534 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
45535 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
45536 ]
45537 });
45538
45539 defineCurve('p521', {
45540 type: 'short',
45541 prime: null,
45542 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45543 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45544 'ffffffff ffffffff ffffffff ffffffff ffffffff',
45545 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45546 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45547 'ffffffff ffffffff ffffffff ffffffff fffffffc',
45548 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
45549 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
45550 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
45551 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45552 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
45553 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
45554 hash: hash.sha512,
45555 gRed: false,
45556 g: [
45557 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
45558 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
45559 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
45560 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
45561 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
45562 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
45563 ]
45564 });
45565
45566 defineCurve('curve25519', {
45567 type: 'mont',
45568 prime: 'p25519',
45569 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45570 a: '76d06',
45571 b: '1',
45572 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45573 hash: hash.sha256,
45574 gRed: false,
45575 g: [
45576 '9'
45577 ]
45578 });
45579
45580 defineCurve('ed25519', {
45581 type: 'edwards',
45582 prime: 'p25519',
45583 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45584 a: '-1',
45585 c: '1',
45586 // -121665 * (121666^(-1)) (mod P)
45587 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
45588 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45589 hash: hash.sha256,
45590 gRed: false,
45591 g: [
45592 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
45593
45594 // 4/5
45595 '6666666666666666666666666666666666666666666666666666666666666658'
45596 ]
45597 });
45598
45599 var pre;
45600 try {
45601 pre = require('./precomputed/secp256k1');
45602 } catch (e) {
45603 pre = undefined;
45604 }
45605
45606 defineCurve('secp256k1', {
45607 type: 'short',
45608 prime: 'k256',
45609 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
45610 a: '0',
45611 b: '7',
45612 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
45613 h: '1',
45614 hash: hash.sha256,
45615
45616 // Precomputed endomorphism
45617 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
45618 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
45619 basis: [
45620 {
45621 a: '3086d221a7d46bcde86c90e49284eb15',
45622 b: '-e4437ed6010e88286f547fa90abfe4c3'
45623 },
45624 {
45625 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
45626 b: '3086d221a7d46bcde86c90e49284eb15'
45627 }
45628 ],
45629
45630 gRed: false,
45631 g: [
45632 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
45633 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
45634 pre
45635 ]
45636 });
45637
45638 },{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
45639 'use strict';
45640
45641 var BN = require('bn.js');
45642 var HmacDRBG = require('hmac-drbg');
45643 var elliptic = require('../../elliptic');
45644 var utils = elliptic.utils;
45645 var assert = utils.assert;
45646
45647 var KeyPair = require('./key');
45648 var Signature = require('./signature');
45649
45650 function EC(options) {
45651 if (!(this instanceof EC))
45652 return new EC(options);
45653
45654 // Shortcut `elliptic.ec(curve-name)`
45655 if (typeof options === 'string') {
45656 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
45657
45658 options = elliptic.curves[options];
45659 }
45660
45661 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
45662 if (options instanceof elliptic.curves.PresetCurve)
45663 options = { curve: options };
45664
45665 this.curve = options.curve.curve;
45666 this.n = this.curve.n;
45667 this.nh = this.n.ushrn(1);
45668 this.g = this.curve.g;
45669
45670 // Point on curve
45671 this.g = options.curve.g;
45672 this.g.precompute(options.curve.n.bitLength() + 1);
45673
45674 // Hash for function for DRBG
45675 this.hash = options.hash || options.curve.hash;
45676 }
45677 module.exports = EC;
45678
45679 EC.prototype.keyPair = function keyPair(options) {
45680 return new KeyPair(this, options);
45681 };
45682
45683 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
45684 return KeyPair.fromPrivate(this, priv, enc);
45685 };
45686
45687 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
45688 return KeyPair.fromPublic(this, pub, enc);
45689 };
45690
45691 EC.prototype.genKeyPair = function genKeyPair(options) {
45692 if (!options)
45693 options = {};
45694
45695 // Instantiate Hmac_DRBG
45696 var drbg = new HmacDRBG({
45697 hash: this.hash,
45698 pers: options.pers,
45699 persEnc: options.persEnc || 'utf8',
45700 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
45701 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
45702 nonce: this.n.toArray()
45703 });
45704
45705 var bytes = this.n.byteLength();
45706 var ns2 = this.n.sub(new BN(2));
45707 do {
45708 var priv = new BN(drbg.generate(bytes));
45709 if (priv.cmp(ns2) > 0)
45710 continue;
45711
45712 priv.iaddn(1);
45713 return this.keyFromPrivate(priv);
45714 } while (true);
45715 };
45716
45717 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
45718 var delta = msg.byteLength() * 8 - this.n.bitLength();
45719 if (delta > 0)
45720 msg = msg.ushrn(delta);
45721 if (!truncOnly && msg.cmp(this.n) >= 0)
45722 return msg.sub(this.n);
45723 else
45724 return msg;
45725 };
45726
45727 EC.prototype.sign = function sign(msg, key, enc, options) {
45728 if (typeof enc === 'object') {
45729 options = enc;
45730 enc = null;
45731 }
45732 if (!options)
45733 options = {};
45734
45735 key = this.keyFromPrivate(key, enc);
45736 msg = this._truncateToN(new BN(msg, 16));
45737
45738 // Zero-extend key to provide enough entropy
45739 var bytes = this.n.byteLength();
45740 var bkey = key.getPrivate().toArray('be', bytes);
45741
45742 // Zero-extend nonce to have the same byte size as N
45743 var nonce = msg.toArray('be', bytes);
45744
45745 // Instantiate Hmac_DRBG
45746 var drbg = new HmacDRBG({
45747 hash: this.hash,
45748 entropy: bkey,
45749 nonce: nonce,
45750 pers: options.pers,
45751 persEnc: options.persEnc || 'utf8'
45752 });
45753
45754 // Number of bytes to generate
45755 var ns1 = this.n.sub(new BN(1));
45756
45757 for (var iter = 0; true; iter++) {
45758 var k = options.k ?
45759 options.k(iter) :
45760 new BN(drbg.generate(this.n.byteLength()));
45761 k = this._truncateToN(k, true);
45762 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
45763 continue;
45764
45765 var kp = this.g.mul(k);
45766 if (kp.isInfinity())
45767 continue;
45768
45769 var kpX = kp.getX();
45770 var r = kpX.umod(this.n);
45771 if (r.cmpn(0) === 0)
45772 continue;
45773
45774 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
45775 s = s.umod(this.n);
45776 if (s.cmpn(0) === 0)
45777 continue;
45778
45779 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
45780 (kpX.cmp(r) !== 0 ? 2 : 0);
45781
45782 // Use complement of `s`, if it is > `n / 2`
45783 if (options.canonical && s.cmp(this.nh) > 0) {
45784 s = this.n.sub(s);
45785 recoveryParam ^= 1;
45786 }
45787
45788 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
45789 }
45790 };
45791
45792 EC.prototype.verify = function verify(msg, signature, key, enc) {
45793 msg = this._truncateToN(new BN(msg, 16));
45794 key = this.keyFromPublic(key, enc);
45795 signature = new Signature(signature, 'hex');
45796
45797 // Perform primitive values validation
45798 var r = signature.r;
45799 var s = signature.s;
45800 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
45801 return false;
45802 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
45803 return false;
45804
45805 // Validate signature
45806 var sinv = s.invm(this.n);
45807 var u1 = sinv.mul(msg).umod(this.n);
45808 var u2 = sinv.mul(r).umod(this.n);
45809
45810 if (!this.curve._maxwellTrick) {
45811 var p = this.g.mulAdd(u1, key.getPublic(), u2);
45812 if (p.isInfinity())
45813 return false;
45814
45815 return p.getX().umod(this.n).cmp(r) === 0;
45816 }
45817
45818 // NOTE: Greg Maxwell's trick, inspired by:
45819 // https://git.io/vad3K
45820
45821 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
45822 if (p.isInfinity())
45823 return false;
45824
45825 // Compare `p.x` of Jacobian point with `r`,
45826 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
45827 // inverse of `p.z^2`
45828 return p.eqXToP(r);
45829 };
45830
45831 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
45832 assert((3 & j) === j, 'The recovery param is more than two bits');
45833 signature = new Signature(signature, enc);
45834
45835 var n = this.n;
45836 var e = new BN(msg);
45837 var r = signature.r;
45838 var s = signature.s;
45839
45840 // A set LSB signifies that the y-coordinate is odd
45841 var isYOdd = j & 1;
45842 var isSecondKey = j >> 1;
45843 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
45844 throw new Error('Unable to find sencond key candinate');
45845
45846 // 1.1. Let x = r + jn.
45847 if (isSecondKey)
45848 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
45849 else
45850 r = this.curve.pointFromX(r, isYOdd);
45851
45852 var rInv = signature.r.invm(n);
45853 var s1 = n.sub(e).mul(rInv).umod(n);
45854 var s2 = s.mul(rInv).umod(n);
45855
45856 // 1.6.1 Compute Q = r^-1 (sR - eG)
45857 // Q = r^-1 (sR + -eG)
45858 return this.g.mulAdd(s1, r, s2);
45859 };
45860
45861 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
45862 signature = new Signature(signature, enc);
45863 if (signature.recoveryParam !== null)
45864 return signature.recoveryParam;
45865
45866 for (var i = 0; i < 4; i++) {
45867 var Qprime;
45868 try {
45869 Qprime = this.recoverPubKey(e, signature, i);
45870 } catch (e) {
45871 continue;
45872 }
45873
45874 if (Qprime.eq(Q))
45875 return i;
45876 }
45877 throw new Error('Unable to find valid recovery factor');
45878 };
45879
45880 },{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
45881 'use strict';
45882
45883 var BN = require('bn.js');
45884 var elliptic = require('../../elliptic');
45885 var utils = elliptic.utils;
45886 var assert = utils.assert;
45887
45888 function KeyPair(ec, options) {
45889 this.ec = ec;
45890 this.priv = null;
45891 this.pub = null;
45892
45893 // KeyPair(ec, { priv: ..., pub: ... })
45894 if (options.priv)
45895 this._importPrivate(options.priv, options.privEnc);
45896 if (options.pub)
45897 this._importPublic(options.pub, options.pubEnc);
45898 }
45899 module.exports = KeyPair;
45900
45901 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
45902 if (pub instanceof KeyPair)
45903 return pub;
45904
45905 return new KeyPair(ec, {
45906 pub: pub,
45907 pubEnc: enc
45908 });
45909 };
45910
45911 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
45912 if (priv instanceof KeyPair)
45913 return priv;
45914
45915 return new KeyPair(ec, {
45916 priv: priv,
45917 privEnc: enc
45918 });
45919 };
45920
45921 KeyPair.prototype.validate = function validate() {
45922 var pub = this.getPublic();
45923
45924 if (pub.isInfinity())
45925 return { result: false, reason: 'Invalid public key' };
45926 if (!pub.validate())
45927 return { result: false, reason: 'Public key is not a point' };
45928 if (!pub.mul(this.ec.curve.n).isInfinity())
45929 return { result: false, reason: 'Public key * N != O' };
45930
45931 return { result: true, reason: null };
45932 };
45933
45934 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
45935 // compact is optional argument
45936 if (typeof compact === 'string') {
45937 enc = compact;
45938 compact = null;
45939 }
45940
45941 if (!this.pub)
45942 this.pub = this.ec.g.mul(this.priv);
45943
45944 if (!enc)
45945 return this.pub;
45946
45947 return this.pub.encode(enc, compact);
45948 };
45949
45950 KeyPair.prototype.getPrivate = function getPrivate(enc) {
45951 if (enc === 'hex')
45952 return this.priv.toString(16, 2);
45953 else
45954 return this.priv;
45955 };
45956
45957 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
45958 this.priv = new BN(key, enc || 16);
45959
45960 // Ensure that the priv won't be bigger than n, otherwise we may fail
45961 // in fixed multiplication method
45962 this.priv = this.priv.umod(this.ec.curve.n);
45963 };
45964
45965 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
45966 if (key.x || key.y) {
45967 // Montgomery points only have an `x` coordinate.
45968 // Weierstrass/Edwards points on the other hand have both `x` and
45969 // `y` coordinates.
45970 if (this.ec.curve.type === 'mont') {
45971 assert(key.x, 'Need x coordinate');
45972 } else if (this.ec.curve.type === 'short' ||
45973 this.ec.curve.type === 'edwards') {
45974 assert(key.x && key.y, 'Need both x and y coordinate');
45975 }
45976 this.pub = this.ec.curve.point(key.x, key.y);
45977 return;
45978 }
45979 this.pub = this.ec.curve.decodePoint(key, enc);
45980 };
45981
45982 // ECDH
45983 KeyPair.prototype.derive = function derive(pub) {
45984 return pub.mul(this.priv).getX();
45985 };
45986
45987 // ECDSA
45988 KeyPair.prototype.sign = function sign(msg, enc, options) {
45989 return this.ec.sign(msg, this, enc, options);
45990 };
45991
45992 KeyPair.prototype.verify = function verify(msg, signature) {
45993 return this.ec.verify(msg, signature, this);
45994 };
45995
45996 KeyPair.prototype.inspect = function inspect() {
45997 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
45998 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
45999 };
46000
46001 },{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
46002 'use strict';
46003
46004 var BN = require('bn.js');
46005
46006 var elliptic = require('../../elliptic');
46007 var utils = elliptic.utils;
46008 var assert = utils.assert;
46009
46010 function Signature(options, enc) {
46011 if (options instanceof Signature)
46012 return options;
46013
46014 if (this._importDER(options, enc))
46015 return;
46016
46017 assert(options.r && options.s, 'Signature without r or s');
46018 this.r = new BN(options.r, 16);
46019 this.s = new BN(options.s, 16);
46020 if (options.recoveryParam === undefined)
46021 this.recoveryParam = null;
46022 else
46023 this.recoveryParam = options.recoveryParam;
46024 }
46025 module.exports = Signature;
46026
46027 function Position() {
46028 this.place = 0;
46029 }
46030
46031 function getLength(buf, p) {
46032 var initial = buf[p.place++];
46033 if (!(initial & 0x80)) {
46034 return initial;
46035 }
46036 var octetLen = initial & 0xf;
46037 var val = 0;
46038 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
46039 val <<= 8;
46040 val |= buf[off];
46041 }
46042 p.place = off;
46043 return val;
46044 }
46045
46046 function rmPadding(buf) {
46047 var i = 0;
46048 var len = buf.length - 1;
46049 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
46050 i++;
46051 }
46052 if (i === 0) {
46053 return buf;
46054 }
46055 return buf.slice(i);
46056 }
46057
46058 Signature.prototype._importDER = function _importDER(data, enc) {
46059 data = utils.toArray(data, enc);
46060 var p = new Position();
46061 if (data[p.place++] !== 0x30) {
46062 return false;
46063 }
46064 var len = getLength(data, p);
46065 if ((len + p.place) !== data.length) {
46066 return false;
46067 }
46068 if (data[p.place++] !== 0x02) {
46069 return false;
46070 }
46071 var rlen = getLength(data, p);
46072 var r = data.slice(p.place, rlen + p.place);
46073 p.place += rlen;
46074 if (data[p.place++] !== 0x02) {
46075 return false;
46076 }
46077 var slen = getLength(data, p);
46078 if (data.length !== slen + p.place) {
46079 return false;
46080 }
46081 var s = data.slice(p.place, slen + p.place);
46082 if (r[0] === 0 && (r[1] & 0x80)) {
46083 r = r.slice(1);
46084 }
46085 if (s[0] === 0 && (s[1] & 0x80)) {
46086 s = s.slice(1);
46087 }
46088
46089 this.r = new BN(r);
46090 this.s = new BN(s);
46091 this.recoveryParam = null;
46092
46093 return true;
46094 };
46095
46096 function constructLength(arr, len) {
46097 if (len < 0x80) {
46098 arr.push(len);
46099 return;
46100 }
46101 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
46102 arr.push(octets | 0x80);
46103 while (--octets) {
46104 arr.push((len >>> (octets << 3)) & 0xff);
46105 }
46106 arr.push(len);
46107 }
46108
46109 Signature.prototype.toDER = function toDER(enc) {
46110 var r = this.r.toArray();
46111 var s = this.s.toArray();
46112
46113 // Pad values
46114 if (r[0] & 0x80)
46115 r = [ 0 ].concat(r);
46116 // Pad values
46117 if (s[0] & 0x80)
46118 s = [ 0 ].concat(s);
46119
46120 r = rmPadding(r);
46121 s = rmPadding(s);
46122
46123 while (!s[0] && !(s[1] & 0x80)) {
46124 s = s.slice(1);
46125 }
46126 var arr = [ 0x02 ];
46127 constructLength(arr, r.length);
46128 arr = arr.concat(r);
46129 arr.push(0x02);
46130 constructLength(arr, s.length);
46131 var backHalf = arr.concat(s);
46132 var res = [ 0x30 ];
46133 constructLength(res, backHalf.length);
46134 res = res.concat(backHalf);
46135 return utils.encode(res, enc);
46136 };
46137
46138 },{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
46139 'use strict';
46140
46141 var hash = require('hash.js');
46142 var elliptic = require('../../elliptic');
46143 var utils = elliptic.utils;
46144 var assert = utils.assert;
46145 var parseBytes = utils.parseBytes;
46146 var KeyPair = require('./key');
46147 var Signature = require('./signature');
46148
46149 function EDDSA(curve) {
46150 assert(curve === 'ed25519', 'only tested with ed25519 so far');
46151
46152 if (!(this instanceof EDDSA))
46153 return new EDDSA(curve);
46154
46155 var curve = elliptic.curves[curve].curve;
46156 this.curve = curve;
46157 this.g = curve.g;
46158 this.g.precompute(curve.n.bitLength() + 1);
46159
46160 this.pointClass = curve.point().constructor;
46161 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
46162 this.hash = hash.sha512;
46163 }
46164
46165 module.exports = EDDSA;
46166
46167 /**
46168 * @param {Array|String} message - message bytes
46169 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
46170 * @returns {Signature} - signature
46171 */
46172 EDDSA.prototype.sign = function sign(message, secret) {
46173 message = parseBytes(message);
46174 var key = this.keyFromSecret(secret);
46175 var r = this.hashInt(key.messagePrefix(), message);
46176 var R = this.g.mul(r);
46177 var Rencoded = this.encodePoint(R);
46178 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
46179 .mul(key.priv());
46180 var S = r.add(s_).umod(this.curve.n);
46181 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
46182 };
46183
46184 /**
46185 * @param {Array} message - message bytes
46186 * @param {Array|String|Signature} sig - sig bytes
46187 * @param {Array|String|Point|KeyPair} pub - public key
46188 * @returns {Boolean} - true if public key matches sig of message
46189 */
46190 EDDSA.prototype.verify = function verify(message, sig, pub) {
46191 message = parseBytes(message);
46192 sig = this.makeSignature(sig);
46193 var key = this.keyFromPublic(pub);
46194 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
46195 var SG = this.g.mul(sig.S());
46196 var RplusAh = sig.R().add(key.pub().mul(h));
46197 return RplusAh.eq(SG);
46198 };
46199
46200 EDDSA.prototype.hashInt = function hashInt() {
46201 var hash = this.hash();
46202 for (var i = 0; i < arguments.length; i++)
46203 hash.update(arguments[i]);
46204 return utils.intFromLE(hash.digest()).umod(this.curve.n);
46205 };
46206
46207 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
46208 return KeyPair.fromPublic(this, pub);
46209 };
46210
46211 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
46212 return KeyPair.fromSecret(this, secret);
46213 };
46214
46215 EDDSA.prototype.makeSignature = function makeSignature(sig) {
46216 if (sig instanceof Signature)
46217 return sig;
46218 return new Signature(this, sig);
46219 };
46220
46221 /**
46222 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
46223 *
46224 * EDDSA defines methods for encoding and decoding points and integers. These are
46225 * helper convenience methods, that pass along to utility functions implied
46226 * parameters.
46227 *
46228 */
46229 EDDSA.prototype.encodePoint = function encodePoint(point) {
46230 var enc = point.getY().toArray('le', this.encodingLength);
46231 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
46232 return enc;
46233 };
46234
46235 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
46236 bytes = utils.parseBytes(bytes);
46237
46238 var lastIx = bytes.length - 1;
46239 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
46240 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
46241
46242 var y = utils.intFromLE(normed);
46243 return this.curve.pointFromY(y, xIsOdd);
46244 };
46245
46246 EDDSA.prototype.encodeInt = function encodeInt(num) {
46247 return num.toArray('le', this.encodingLength);
46248 };
46249
46250 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
46251 return utils.intFromLE(bytes);
46252 };
46253
46254 EDDSA.prototype.isPoint = function isPoint(val) {
46255 return val instanceof this.pointClass;
46256 };
46257
46258 },{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
46259 'use strict';
46260
46261 var elliptic = require('../../elliptic');
46262 var utils = elliptic.utils;
46263 var assert = utils.assert;
46264 var parseBytes = utils.parseBytes;
46265 var cachedProperty = utils.cachedProperty;
46266
46267 /**
46268 * @param {EDDSA} eddsa - instance
46269 * @param {Object} params - public/private key parameters
46270 *
46271 * @param {Array<Byte>} [params.secret] - secret seed bytes
46272 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
46273 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
46274 *
46275 */
46276 function KeyPair(eddsa, params) {
46277 this.eddsa = eddsa;
46278 this._secret = parseBytes(params.secret);
46279 if (eddsa.isPoint(params.pub))
46280 this._pub = params.pub;
46281 else
46282 this._pubBytes = parseBytes(params.pub);
46283 }
46284
46285 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
46286 if (pub instanceof KeyPair)
46287 return pub;
46288 return new KeyPair(eddsa, { pub: pub });
46289 };
46290
46291 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
46292 if (secret instanceof KeyPair)
46293 return secret;
46294 return new KeyPair(eddsa, { secret: secret });
46295 };
46296
46297 KeyPair.prototype.secret = function secret() {
46298 return this._secret;
46299 };
46300
46301 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
46302 return this.eddsa.encodePoint(this.pub());
46303 });
46304
46305 cachedProperty(KeyPair, 'pub', function pub() {
46306 if (this._pubBytes)
46307 return this.eddsa.decodePoint(this._pubBytes);
46308 return this.eddsa.g.mul(this.priv());
46309 });
46310
46311 cachedProperty(KeyPair, 'privBytes', function privBytes() {
46312 var eddsa = this.eddsa;
46313 var hash = this.hash();
46314 var lastIx = eddsa.encodingLength - 1;
46315
46316 var a = hash.slice(0, eddsa.encodingLength);
46317 a[0] &= 248;
46318 a[lastIx] &= 127;
46319 a[lastIx] |= 64;
46320
46321 return a;
46322 });
46323
46324 cachedProperty(KeyPair, 'priv', function priv() {
46325 return this.eddsa.decodeInt(this.privBytes());
46326 });
46327
46328 cachedProperty(KeyPair, 'hash', function hash() {
46329 return this.eddsa.hash().update(this.secret()).digest();
46330 });
46331
46332 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
46333 return this.hash().slice(this.eddsa.encodingLength);
46334 });
46335
46336 KeyPair.prototype.sign = function sign(message) {
46337 assert(this._secret, 'KeyPair can only verify');
46338 return this.eddsa.sign(message, this);
46339 };
46340
46341 KeyPair.prototype.verify = function verify(message, sig) {
46342 return this.eddsa.verify(message, sig, this);
46343 };
46344
46345 KeyPair.prototype.getSecret = function getSecret(enc) {
46346 assert(this._secret, 'KeyPair is public only');
46347 return utils.encode(this.secret(), enc);
46348 };
46349
46350 KeyPair.prototype.getPublic = function getPublic(enc) {
46351 return utils.encode(this.pubBytes(), enc);
46352 };
46353
46354 module.exports = KeyPair;
46355
46356 },{"../../elliptic":97}],109:[function(require,module,exports){
46357 'use strict';
46358
46359 var BN = require('bn.js');
46360 var elliptic = require('../../elliptic');
46361 var utils = elliptic.utils;
46362 var assert = utils.assert;
46363 var cachedProperty = utils.cachedProperty;
46364 var parseBytes = utils.parseBytes;
46365
46366 /**
46367 * @param {EDDSA} eddsa - eddsa instance
46368 * @param {Array<Bytes>|Object} sig -
46369 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
46370 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
46371 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
46372 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
46373 */
46374 function Signature(eddsa, sig) {
46375 this.eddsa = eddsa;
46376
46377 if (typeof sig !== 'object')
46378 sig = parseBytes(sig);
46379
46380 if (Array.isArray(sig)) {
46381 sig = {
46382 R: sig.slice(0, eddsa.encodingLength),
46383 S: sig.slice(eddsa.encodingLength)
46384 };
46385 }
46386
46387 assert(sig.R && sig.S, 'Signature without R or S');
46388
46389 if (eddsa.isPoint(sig.R))
46390 this._R = sig.R;
46391 if (sig.S instanceof BN)
46392 this._S = sig.S;
46393
46394 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
46395 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
46396 }
46397
46398 cachedProperty(Signature, 'S', function S() {
46399 return this.eddsa.decodeInt(this.Sencoded());
46400 });
46401
46402 cachedProperty(Signature, 'R', function R() {
46403 return this.eddsa.decodePoint(this.Rencoded());
46404 });
46405
46406 cachedProperty(Signature, 'Rencoded', function Rencoded() {
46407 return this.eddsa.encodePoint(this.R());
46408 });
46409
46410 cachedProperty(Signature, 'Sencoded', function Sencoded() {
46411 return this.eddsa.encodeInt(this.S());
46412 });
46413
46414 Signature.prototype.toBytes = function toBytes() {
46415 return this.Rencoded().concat(this.Sencoded());
46416 };
46417
46418 Signature.prototype.toHex = function toHex() {
46419 return utils.encode(this.toBytes(), 'hex').toUpperCase();
46420 };
46421
46422 module.exports = Signature;
46423
46424 },{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
46425 module.exports = {
46426 doubles: {
46427 step: 4,
46428 points: [
46429 [
46430 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
46431 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
46432 ],
46433 [
46434 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
46435 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
46436 ],
46437 [
46438 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
46439 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
46440 ],
46441 [
46442 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
46443 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
46444 ],
46445 [
46446 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
46447 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
46448 ],
46449 [
46450 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
46451 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
46452 ],
46453 [
46454 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
46455 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
46456 ],
46457 [
46458 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
46459 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
46460 ],
46461 [
46462 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
46463 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
46464 ],
46465 [
46466 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
46467 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
46468 ],
46469 [
46470 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
46471 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
46472 ],
46473 [
46474 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
46475 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
46476 ],
46477 [
46478 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
46479 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
46480 ],
46481 [
46482 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
46483 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
46484 ],
46485 [
46486 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
46487 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
46488 ],
46489 [
46490 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
46491 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
46492 ],
46493 [
46494 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
46495 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
46496 ],
46497 [
46498 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
46499 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
46500 ],
46501 [
46502 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
46503 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
46504 ],
46505 [
46506 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
46507 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
46508 ],
46509 [
46510 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
46511 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
46512 ],
46513 [
46514 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
46515 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
46516 ],
46517 [
46518 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
46519 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
46520 ],
46521 [
46522 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
46523 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
46524 ],
46525 [
46526 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
46527 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
46528 ],
46529 [
46530 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
46531 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
46532 ],
46533 [
46534 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
46535 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
46536 ],
46537 [
46538 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
46539 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
46540 ],
46541 [
46542 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
46543 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
46544 ],
46545 [
46546 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
46547 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
46548 ],
46549 [
46550 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
46551 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
46552 ],
46553 [
46554 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
46555 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
46556 ],
46557 [
46558 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
46559 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
46560 ],
46561 [
46562 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
46563 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
46564 ],
46565 [
46566 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
46567 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
46568 ],
46569 [
46570 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
46571 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
46572 ],
46573 [
46574 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
46575 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
46576 ],
46577 [
46578 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
46579 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
46580 ],
46581 [
46582 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
46583 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
46584 ],
46585 [
46586 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
46587 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
46588 ],
46589 [
46590 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
46591 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
46592 ],
46593 [
46594 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
46595 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
46596 ],
46597 [
46598 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
46599 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
46600 ],
46601 [
46602 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
46603 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
46604 ],
46605 [
46606 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
46607 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
46608 ],
46609 [
46610 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
46611 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
46612 ],
46613 [
46614 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
46615 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
46616 ],
46617 [
46618 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
46619 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
46620 ],
46621 [
46622 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
46623 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
46624 ],
46625 [
46626 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
46627 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
46628 ],
46629 [
46630 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
46631 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
46632 ],
46633 [
46634 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
46635 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
46636 ],
46637 [
46638 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
46639 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
46640 ],
46641 [
46642 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
46643 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
46644 ],
46645 [
46646 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
46647 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
46648 ],
46649 [
46650 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
46651 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
46652 ],
46653 [
46654 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
46655 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
46656 ],
46657 [
46658 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
46659 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
46660 ],
46661 [
46662 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
46663 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
46664 ],
46665 [
46666 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
46667 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
46668 ],
46669 [
46670 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
46671 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
46672 ],
46673 [
46674 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
46675 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
46676 ],
46677 [
46678 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
46679 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
46680 ],
46681 [
46682 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
46683 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
46684 ],
46685 [
46686 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
46687 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
46688 ]
46689 ]
46690 },
46691 naf: {
46692 wnd: 7,
46693 points: [
46694 [
46695 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
46696 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
46697 ],
46698 [
46699 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
46700 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
46701 ],
46702 [
46703 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
46704 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
46705 ],
46706 [
46707 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
46708 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
46709 ],
46710 [
46711 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
46712 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
46713 ],
46714 [
46715 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
46716 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
46717 ],
46718 [
46719 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
46720 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
46721 ],
46722 [
46723 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
46724 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
46725 ],
46726 [
46727 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
46728 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
46729 ],
46730 [
46731 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
46732 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
46733 ],
46734 [
46735 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
46736 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
46737 ],
46738 [
46739 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
46740 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
46741 ],
46742 [
46743 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
46744 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
46745 ],
46746 [
46747 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
46748 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
46749 ],
46750 [
46751 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
46752 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
46753 ],
46754 [
46755 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
46756 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
46757 ],
46758 [
46759 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
46760 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
46761 ],
46762 [
46763 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
46764 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
46765 ],
46766 [
46767 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
46768 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
46769 ],
46770 [
46771 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
46772 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
46773 ],
46774 [
46775 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
46776 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
46777 ],
46778 [
46779 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
46780 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
46781 ],
46782 [
46783 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
46784 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
46785 ],
46786 [
46787 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
46788 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
46789 ],
46790 [
46791 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
46792 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
46793 ],
46794 [
46795 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
46796 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
46797 ],
46798 [
46799 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
46800 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
46801 ],
46802 [
46803 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
46804 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
46805 ],
46806 [
46807 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
46808 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
46809 ],
46810 [
46811 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
46812 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
46813 ],
46814 [
46815 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
46816 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
46817 ],
46818 [
46819 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
46820 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
46821 ],
46822 [
46823 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
46824 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
46825 ],
46826 [
46827 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
46828 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
46829 ],
46830 [
46831 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
46832 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
46833 ],
46834 [
46835 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
46836 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
46837 ],
46838 [
46839 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
46840 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
46841 ],
46842 [
46843 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
46844 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
46845 ],
46846 [
46847 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
46848 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
46849 ],
46850 [
46851 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
46852 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
46853 ],
46854 [
46855 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
46856 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
46857 ],
46858 [
46859 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
46860 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
46861 ],
46862 [
46863 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
46864 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
46865 ],
46866 [
46867 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
46868 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
46869 ],
46870 [
46871 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
46872 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
46873 ],
46874 [
46875 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
46876 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
46877 ],
46878 [
46879 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
46880 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
46881 ],
46882 [
46883 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
46884 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
46885 ],
46886 [
46887 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
46888 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
46889 ],
46890 [
46891 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
46892 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
46893 ],
46894 [
46895 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
46896 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
46897 ],
46898 [
46899 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
46900 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
46901 ],
46902 [
46903 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
46904 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
46905 ],
46906 [
46907 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
46908 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
46909 ],
46910 [
46911 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
46912 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
46913 ],
46914 [
46915 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
46916 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
46917 ],
46918 [
46919 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
46920 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
46921 ],
46922 [
46923 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
46924 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
46925 ],
46926 [
46927 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
46928 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
46929 ],
46930 [
46931 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
46932 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
46933 ],
46934 [
46935 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
46936 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
46937 ],
46938 [
46939 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
46940 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
46941 ],
46942 [
46943 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
46944 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
46945 ],
46946 [
46947 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
46948 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
46949 ],
46950 [
46951 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
46952 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
46953 ],
46954 [
46955 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
46956 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
46957 ],
46958 [
46959 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46960 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46961 ],
46962 [
46963 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46964 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46965 ],
46966 [
46967 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46968 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46969 ],
46970 [
46971 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46972 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46973 ],
46974 [
46975 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46976 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46977 ],
46978 [
46979 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46980 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46981 ],
46982 [
46983 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46984 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46985 ],
46986 [
46987 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46988 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46989 ],
46990 [
46991 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46992 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46993 ],
46994 [
46995 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46996 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46997 ],
46998 [
46999 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
47000 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
47001 ],
47002 [
47003 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
47004 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
47005 ],
47006 [
47007 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
47008 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
47009 ],
47010 [
47011 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
47012 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
47013 ],
47014 [
47015 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
47016 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
47017 ],
47018 [
47019 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
47020 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
47021 ],
47022 [
47023 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
47024 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
47025 ],
47026 [
47027 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
47028 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
47029 ],
47030 [
47031 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
47032 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
47033 ],
47034 [
47035 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
47036 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
47037 ],
47038 [
47039 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
47040 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
47041 ],
47042 [
47043 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
47044 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
47045 ],
47046 [
47047 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
47048 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
47049 ],
47050 [
47051 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
47052 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
47053 ],
47054 [
47055 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
47056 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
47057 ],
47058 [
47059 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
47060 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
47061 ],
47062 [
47063 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
47064 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
47065 ],
47066 [
47067 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
47068 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
47069 ],
47070 [
47071 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
47072 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
47073 ],
47074 [
47075 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
47076 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
47077 ],
47078 [
47079 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
47080 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
47081 ],
47082 [
47083 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
47084 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
47085 ],
47086 [
47087 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
47088 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
47089 ],
47090 [
47091 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
47092 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
47093 ],
47094 [
47095 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
47096 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
47097 ],
47098 [
47099 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
47100 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
47101 ],
47102 [
47103 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
47104 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
47105 ],
47106 [
47107 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
47108 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
47109 ],
47110 [
47111 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
47112 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
47113 ],
47114 [
47115 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
47116 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
47117 ],
47118 [
47119 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
47120 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
47121 ],
47122 [
47123 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
47124 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
47125 ],
47126 [
47127 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
47128 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
47129 ],
47130 [
47131 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
47132 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
47133 ],
47134 [
47135 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
47136 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
47137 ],
47138 [
47139 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
47140 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
47141 ],
47142 [
47143 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
47144 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
47145 ],
47146 [
47147 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
47148 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
47149 ],
47150 [
47151 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
47152 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
47153 ],
47154 [
47155 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
47156 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
47157 ],
47158 [
47159 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
47160 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
47161 ],
47162 [
47163 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
47164 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
47165 ],
47166 [
47167 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
47168 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
47169 ],
47170 [
47171 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
47172 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
47173 ],
47174 [
47175 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
47176 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
47177 ],
47178 [
47179 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
47180 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
47181 ],
47182 [
47183 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
47184 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
47185 ],
47186 [
47187 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
47188 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
47189 ],
47190 [
47191 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
47192 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
47193 ],
47194 [
47195 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
47196 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
47197 ],
47198 [
47199 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
47200 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
47201 ]
47202 ]
47203 }
47204 };
47205
47206 },{}],111:[function(require,module,exports){
47207 'use strict';
47208
47209 var utils = exports;
47210 var BN = require('bn.js');
47211 var minAssert = require('minimalistic-assert');
47212 var minUtils = require('minimalistic-crypto-utils');
47213
47214 utils.assert = minAssert;
47215 utils.toArray = minUtils.toArray;
47216 utils.zero2 = minUtils.zero2;
47217 utils.toHex = minUtils.toHex;
47218 utils.encode = minUtils.encode;
47219
47220 // Represent num in a w-NAF form
47221 function getNAF(num, w) {
47222 var naf = [];
47223 var ws = 1 << (w + 1);
47224 var k = num.clone();
47225 while (k.cmpn(1) >= 0) {
47226 var z;
47227 if (k.isOdd()) {
47228 var mod = k.andln(ws - 1);
47229 if (mod > (ws >> 1) - 1)
47230 z = (ws >> 1) - mod;
47231 else
47232 z = mod;
47233 k.isubn(z);
47234 } else {
47235 z = 0;
47236 }
47237 naf.push(z);
47238
47239 // Optimization, shift by word if possible
47240 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
47241 for (var i = 1; i < shift; i++)
47242 naf.push(0);
47243 k.iushrn(shift);
47244 }
47245
47246 return naf;
47247 }
47248 utils.getNAF = getNAF;
47249
47250 // Represent k1, k2 in a Joint Sparse Form
47251 function getJSF(k1, k2) {
47252 var jsf = [
47253 [],
47254 []
47255 ];
47256
47257 k1 = k1.clone();
47258 k2 = k2.clone();
47259 var d1 = 0;
47260 var d2 = 0;
47261 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
47262
47263 // First phase
47264 var m14 = (k1.andln(3) + d1) & 3;
47265 var m24 = (k2.andln(3) + d2) & 3;
47266 if (m14 === 3)
47267 m14 = -1;
47268 if (m24 === 3)
47269 m24 = -1;
47270 var u1;
47271 if ((m14 & 1) === 0) {
47272 u1 = 0;
47273 } else {
47274 var m8 = (k1.andln(7) + d1) & 7;
47275 if ((m8 === 3 || m8 === 5) && m24 === 2)
47276 u1 = -m14;
47277 else
47278 u1 = m14;
47279 }
47280 jsf[0].push(u1);
47281
47282 var u2;
47283 if ((m24 & 1) === 0) {
47284 u2 = 0;
47285 } else {
47286 var m8 = (k2.andln(7) + d2) & 7;
47287 if ((m8 === 3 || m8 === 5) && m14 === 2)
47288 u2 = -m24;
47289 else
47290 u2 = m24;
47291 }
47292 jsf[1].push(u2);
47293
47294 // Second phase
47295 if (2 * d1 === u1 + 1)
47296 d1 = 1 - d1;
47297 if (2 * d2 === u2 + 1)
47298 d2 = 1 - d2;
47299 k1.iushrn(1);
47300 k2.iushrn(1);
47301 }
47302
47303 return jsf;
47304 }
47305 utils.getJSF = getJSF;
47306
47307 function cachedProperty(obj, name, computer) {
47308 var key = '_' + name;
47309 obj.prototype[name] = function cachedProperty() {
47310 return this[key] !== undefined ? this[key] :
47311 this[key] = computer.call(this);
47312 };
47313 }
47314 utils.cachedProperty = cachedProperty;
47315
47316 function parseBytes(bytes) {
47317 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
47318 bytes;
47319 }
47320 utils.parseBytes = parseBytes;
47321
47322 function intFromLE(bytes) {
47323 return new BN(bytes, 'hex', 'le');
47324 }
47325 utils.intFromLE = intFromLE;
47326
47327
47328 },{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
47329 module.exports={
47330 "_args": [
47331 [
47332 "elliptic",
47333 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
47334 ]
47335 ],
47336 "_from": "elliptic@latest",
47337 "_id": "elliptic@6.4.0",
47338 "_inCache": true,
47339 "_installable": true,
47340 "_location": "/elliptic",
47341 "_nodeVersion": "7.0.0",
47342 "_npmOperationalInternal": {
47343 "host": "packages-18-east.internal.npmjs.com",
47344 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
47345 },
47346 "_npmUser": {
47347 "email": "fedor@indutny.com",
47348 "name": "indutny"
47349 },
47350 "_npmVersion": "3.10.8",
47351 "_phantomChildren": {},
47352 "_requested": {
47353 "name": "elliptic",
47354 "raw": "elliptic",
47355 "rawSpec": "",
47356 "scope": null,
47357 "spec": "latest",
47358 "type": "tag"
47359 },
47360 "_requiredBy": [
47361 "#USER"
47362 ],
47363 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
47364 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47365 "_shrinkwrap": null,
47366 "_spec": "elliptic",
47367 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
47368 "author": {
47369 "email": "fedor@indutny.com",
47370 "name": "Fedor Indutny"
47371 },
47372 "bugs": {
47373 "url": "https://github.com/indutny/elliptic/issues"
47374 },
47375 "dependencies": {
47376 "bn.js": "^4.4.0",
47377 "brorand": "^1.0.1",
47378 "hash.js": "^1.0.0",
47379 "hmac-drbg": "^1.0.0",
47380 "inherits": "^2.0.1",
47381 "minimalistic-assert": "^1.0.0",
47382 "minimalistic-crypto-utils": "^1.0.0"
47383 },
47384 "description": "EC cryptography",
47385 "devDependencies": {
47386 "brfs": "^1.4.3",
47387 "coveralls": "^2.11.3",
47388 "grunt": "^0.4.5",
47389 "grunt-browserify": "^5.0.0",
47390 "grunt-cli": "^1.2.0",
47391 "grunt-contrib-connect": "^1.0.0",
47392 "grunt-contrib-copy": "^1.0.0",
47393 "grunt-contrib-uglify": "^1.0.1",
47394 "grunt-mocha-istanbul": "^3.0.1",
47395 "grunt-saucelabs": "^8.6.2",
47396 "istanbul": "^0.4.2",
47397 "jscs": "^2.9.0",
47398 "jshint": "^2.6.0",
47399 "mocha": "^2.1.0"
47400 },
47401 "directories": {},
47402 "dist": {
47403 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47404 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
47405 },
47406 "files": [
47407 "lib"
47408 ],
47409 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
47410 "homepage": "https://github.com/indutny/elliptic",
47411 "keywords": [
47412 "EC",
47413 "Elliptic",
47414 "curve",
47415 "Cryptography"
47416 ],
47417 "license": "MIT",
47418 "main": "lib/elliptic.js",
47419 "maintainers": [
47420 {
47421 "email": "fedor@indutny.com",
47422 "name": "indutny"
47423 }
47424 ],
47425 "name": "elliptic",
47426 "optionalDependencies": {},
47427 "readme": "ERROR: No README data found!",
47428 "repository": {
47429 "type": "git",
47430 "url": "git+ssh://git@github.com/indutny/elliptic.git"
47431 },
47432 "scripts": {
47433 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47434 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47435 "lint": "npm run jscs && npm run jshint",
47436 "test": "npm run lint && npm run unit",
47437 "unit": "istanbul test _mocha --reporter=spec test/index.js",
47438 "version": "grunt dist && git add dist/"
47439 },
47440 "version": "6.4.0"
47441 }
47442
47443 },{}],113:[function(require,module,exports){
47444 (function (Buffer){
47445 'use strict'
47446 var Transform = require('stream').Transform
47447 var inherits = require('inherits')
47448
47449 function HashBase (blockSize) {
47450 Transform.call(this)
47451
47452 this._block = new Buffer(blockSize)
47453 this._blockSize = blockSize
47454 this._blockOffset = 0
47455 this._length = [0, 0, 0, 0]
47456
47457 this._finalized = false
47458 }
47459
47460 inherits(HashBase, Transform)
47461
47462 HashBase.prototype._transform = function (chunk, encoding, callback) {
47463 var error = null
47464 try {
47465 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
47466 this.update(chunk)
47467 } catch (err) {
47468 error = err
47469 }
47470
47471 callback(error)
47472 }
47473
47474 HashBase.prototype._flush = function (callback) {
47475 var error = null
47476 try {
47477 this.push(this._digest())
47478 } catch (err) {
47479 error = err
47480 }
47481
47482 callback(error)
47483 }
47484
47485 HashBase.prototype.update = function (data, encoding) {
47486 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47487 if (this._finalized) throw new Error('Digest already called')
47488 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
47489
47490 // consume data
47491 var block = this._block
47492 var offset = 0
47493 while (this._blockOffset + data.length - offset >= this._blockSize) {
47494 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
47495 this._update()
47496 this._blockOffset = 0
47497 }
47498 while (offset < data.length) block[this._blockOffset++] = data[offset++]
47499
47500 // update length
47501 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
47502 this._length[j] += carry
47503 carry = (this._length[j] / 0x0100000000) | 0
47504 if (carry > 0) this._length[j] -= 0x0100000000 * carry
47505 }
47506
47507 return this
47508 }
47509
47510 HashBase.prototype._update = function (data) {
47511 throw new Error('_update is not implemented')
47512 }
47513
47514 HashBase.prototype.digest = function (encoding) {
47515 if (this._finalized) throw new Error('Digest already called')
47516 this._finalized = true
47517
47518 var digest = this._digest()
47519 if (encoding !== undefined) digest = digest.toString(encoding)
47520 return digest
47521 }
47522
47523 HashBase.prototype._digest = function () {
47524 throw new Error('_digest is not implemented')
47525 }
47526
47527 module.exports = HashBase
47528
47529 }).call(this,require("buffer").Buffer)
47530 },{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
47531 var hash = exports;
47532
47533 hash.utils = require('./hash/utils');
47534 hash.common = require('./hash/common');
47535 hash.sha = require('./hash/sha');
47536 hash.ripemd = require('./hash/ripemd');
47537 hash.hmac = require('./hash/hmac');
47538
47539 // Proxy hash functions to the main object
47540 hash.sha1 = hash.sha.sha1;
47541 hash.sha256 = hash.sha.sha256;
47542 hash.sha224 = hash.sha.sha224;
47543 hash.sha384 = hash.sha.sha384;
47544 hash.sha512 = hash.sha.sha512;
47545 hash.ripemd160 = hash.ripemd.ripemd160;
47546
47547 },{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
47548 var hash = require('../hash');
47549 var utils = hash.utils;
47550 var assert = utils.assert;
47551
47552 function BlockHash() {
47553 this.pending = null;
47554 this.pendingTotal = 0;
47555 this.blockSize = this.constructor.blockSize;
47556 this.outSize = this.constructor.outSize;
47557 this.hmacStrength = this.constructor.hmacStrength;
47558 this.padLength = this.constructor.padLength / 8;
47559 this.endian = 'big';
47560
47561 this._delta8 = this.blockSize / 8;
47562 this._delta32 = this.blockSize / 32;
47563 }
47564 exports.BlockHash = BlockHash;
47565
47566 BlockHash.prototype.update = function update(msg, enc) {
47567 // Convert message to array, pad it, and join into 32bit blocks
47568 msg = utils.toArray(msg, enc);
47569 if (!this.pending)
47570 this.pending = msg;
47571 else
47572 this.pending = this.pending.concat(msg);
47573 this.pendingTotal += msg.length;
47574
47575 // Enough data, try updating
47576 if (this.pending.length >= this._delta8) {
47577 msg = this.pending;
47578
47579 // Process pending data in blocks
47580 var r = msg.length % this._delta8;
47581 this.pending = msg.slice(msg.length - r, msg.length);
47582 if (this.pending.length === 0)
47583 this.pending = null;
47584
47585 msg = utils.join32(msg, 0, msg.length - r, this.endian);
47586 for (var i = 0; i < msg.length; i += this._delta32)
47587 this._update(msg, i, i + this._delta32);
47588 }
47589
47590 return this;
47591 };
47592
47593 BlockHash.prototype.digest = function digest(enc) {
47594 this.update(this._pad());
47595 assert(this.pending === null);
47596
47597 return this._digest(enc);
47598 };
47599
47600 BlockHash.prototype._pad = function pad() {
47601 var len = this.pendingTotal;
47602 var bytes = this._delta8;
47603 var k = bytes - ((len + this.padLength) % bytes);
47604 var res = new Array(k + this.padLength);
47605 res[0] = 0x80;
47606 for (var i = 1; i < k; i++)
47607 res[i] = 0;
47608
47609 // Append length
47610 len <<= 3;
47611 if (this.endian === 'big') {
47612 for (var t = 8; t < this.padLength; t++)
47613 res[i++] = 0;
47614
47615 res[i++] = 0;
47616 res[i++] = 0;
47617 res[i++] = 0;
47618 res[i++] = 0;
47619 res[i++] = (len >>> 24) & 0xff;
47620 res[i++] = (len >>> 16) & 0xff;
47621 res[i++] = (len >>> 8) & 0xff;
47622 res[i++] = len & 0xff;
47623 } else {
47624 res[i++] = len & 0xff;
47625 res[i++] = (len >>> 8) & 0xff;
47626 res[i++] = (len >>> 16) & 0xff;
47627 res[i++] = (len >>> 24) & 0xff;
47628 res[i++] = 0;
47629 res[i++] = 0;
47630 res[i++] = 0;
47631 res[i++] = 0;
47632
47633 for (var t = 8; t < this.padLength; t++)
47634 res[i++] = 0;
47635 }
47636
47637 return res;
47638 };
47639
47640 },{"../hash":114}],116:[function(require,module,exports){
47641 var hmac = exports;
47642
47643 var hash = require('../hash');
47644 var utils = hash.utils;
47645 var assert = utils.assert;
47646
47647 function Hmac(hash, key, enc) {
47648 if (!(this instanceof Hmac))
47649 return new Hmac(hash, key, enc);
47650 this.Hash = hash;
47651 this.blockSize = hash.blockSize / 8;
47652 this.outSize = hash.outSize / 8;
47653 this.inner = null;
47654 this.outer = null;
47655
47656 this._init(utils.toArray(key, enc));
47657 }
47658 module.exports = Hmac;
47659
47660 Hmac.prototype._init = function init(key) {
47661 // Shorten key, if needed
47662 if (key.length > this.blockSize)
47663 key = new this.Hash().update(key).digest();
47664 assert(key.length <= this.blockSize);
47665
47666 // Add padding to key
47667 for (var i = key.length; i < this.blockSize; i++)
47668 key.push(0);
47669
47670 for (var i = 0; i < key.length; i++)
47671 key[i] ^= 0x36;
47672 this.inner = new this.Hash().update(key);
47673
47674 // 0x36 ^ 0x5c = 0x6a
47675 for (var i = 0; i < key.length; i++)
47676 key[i] ^= 0x6a;
47677 this.outer = new this.Hash().update(key);
47678 };
47679
47680 Hmac.prototype.update = function update(msg, enc) {
47681 this.inner.update(msg, enc);
47682 return this;
47683 };
47684
47685 Hmac.prototype.digest = function digest(enc) {
47686 this.outer.update(this.inner.digest());
47687 return this.outer.digest(enc);
47688 };
47689
47690 },{"../hash":114}],117:[function(require,module,exports){
47691 var hash = require('../hash');
47692 var utils = hash.utils;
47693
47694 var rotl32 = utils.rotl32;
47695 var sum32 = utils.sum32;
47696 var sum32_3 = utils.sum32_3;
47697 var sum32_4 = utils.sum32_4;
47698 var BlockHash = hash.common.BlockHash;
47699
47700 function RIPEMD160() {
47701 if (!(this instanceof RIPEMD160))
47702 return new RIPEMD160();
47703
47704 BlockHash.call(this);
47705
47706 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
47707 this.endian = 'little';
47708 }
47709 utils.inherits(RIPEMD160, BlockHash);
47710 exports.ripemd160 = RIPEMD160;
47711
47712 RIPEMD160.blockSize = 512;
47713 RIPEMD160.outSize = 160;
47714 RIPEMD160.hmacStrength = 192;
47715 RIPEMD160.padLength = 64;
47716
47717 RIPEMD160.prototype._update = function update(msg, start) {
47718 var A = this.h[0];
47719 var B = this.h[1];
47720 var C = this.h[2];
47721 var D = this.h[3];
47722 var E = this.h[4];
47723 var Ah = A;
47724 var Bh = B;
47725 var Ch = C;
47726 var Dh = D;
47727 var Eh = E;
47728 for (var j = 0; j < 80; j++) {
47729 var T = sum32(
47730 rotl32(
47731 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
47732 s[j]),
47733 E);
47734 A = E;
47735 E = D;
47736 D = rotl32(C, 10);
47737 C = B;
47738 B = T;
47739 T = sum32(
47740 rotl32(
47741 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
47742 sh[j]),
47743 Eh);
47744 Ah = Eh;
47745 Eh = Dh;
47746 Dh = rotl32(Ch, 10);
47747 Ch = Bh;
47748 Bh = T;
47749 }
47750 T = sum32_3(this.h[1], C, Dh);
47751 this.h[1] = sum32_3(this.h[2], D, Eh);
47752 this.h[2] = sum32_3(this.h[3], E, Ah);
47753 this.h[3] = sum32_3(this.h[4], A, Bh);
47754 this.h[4] = sum32_3(this.h[0], B, Ch);
47755 this.h[0] = T;
47756 };
47757
47758 RIPEMD160.prototype._digest = function digest(enc) {
47759 if (enc === 'hex')
47760 return utils.toHex32(this.h, 'little');
47761 else
47762 return utils.split32(this.h, 'little');
47763 };
47764
47765 function f(j, x, y, z) {
47766 if (j <= 15)
47767 return x ^ y ^ z;
47768 else if (j <= 31)
47769 return (x & y) | ((~x) & z);
47770 else if (j <= 47)
47771 return (x | (~y)) ^ z;
47772 else if (j <= 63)
47773 return (x & z) | (y & (~z));
47774 else
47775 return x ^ (y | (~z));
47776 }
47777
47778 function K(j) {
47779 if (j <= 15)
47780 return 0x00000000;
47781 else if (j <= 31)
47782 return 0x5a827999;
47783 else if (j <= 47)
47784 return 0x6ed9eba1;
47785 else if (j <= 63)
47786 return 0x8f1bbcdc;
47787 else
47788 return 0xa953fd4e;
47789 }
47790
47791 function Kh(j) {
47792 if (j <= 15)
47793 return 0x50a28be6;
47794 else if (j <= 31)
47795 return 0x5c4dd124;
47796 else if (j <= 47)
47797 return 0x6d703ef3;
47798 else if (j <= 63)
47799 return 0x7a6d76e9;
47800 else
47801 return 0x00000000;
47802 }
47803
47804 var r = [
47805 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47806 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47807 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47808 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47809 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47810 ];
47811
47812 var rh = [
47813 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47814 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47815 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47816 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47817 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47818 ];
47819
47820 var s = [
47821 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47822 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47823 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47824 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47825 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47826 ];
47827
47828 var sh = [
47829 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47830 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47831 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47832 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47833 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47834 ];
47835
47836 },{"../hash":114}],118:[function(require,module,exports){
47837 var hash = require('../hash');
47838 var utils = hash.utils;
47839 var assert = utils.assert;
47840
47841 var rotr32 = utils.rotr32;
47842 var rotl32 = utils.rotl32;
47843 var sum32 = utils.sum32;
47844 var sum32_4 = utils.sum32_4;
47845 var sum32_5 = utils.sum32_5;
47846 var rotr64_hi = utils.rotr64_hi;
47847 var rotr64_lo = utils.rotr64_lo;
47848 var shr64_hi = utils.shr64_hi;
47849 var shr64_lo = utils.shr64_lo;
47850 var sum64 = utils.sum64;
47851 var sum64_hi = utils.sum64_hi;
47852 var sum64_lo = utils.sum64_lo;
47853 var sum64_4_hi = utils.sum64_4_hi;
47854 var sum64_4_lo = utils.sum64_4_lo;
47855 var sum64_5_hi = utils.sum64_5_hi;
47856 var sum64_5_lo = utils.sum64_5_lo;
47857 var BlockHash = hash.common.BlockHash;
47858
47859 var sha256_K = [
47860 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47861 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47862 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47863 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47864 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47865 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47866 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47867 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47868 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47869 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47870 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47871 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47872 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47873 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47874 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47875 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47876 ];
47877
47878 var sha512_K = [
47879 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47880 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47881 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47882 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47883 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47884 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47885 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47886 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47887 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47888 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47889 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47890 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47891 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47892 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47893 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47894 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47895 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47896 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47897 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47898 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47899 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47900 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47901 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47902 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47903 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47904 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47905 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47906 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47907 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47908 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47909 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47910 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47911 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47912 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47913 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47914 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47915 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47916 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47917 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47918 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47919 ];
47920
47921 var sha1_K = [
47922 0x5A827999, 0x6ED9EBA1,
47923 0x8F1BBCDC, 0xCA62C1D6
47924 ];
47925
47926 function SHA256() {
47927 if (!(this instanceof SHA256))
47928 return new SHA256();
47929
47930 BlockHash.call(this);
47931 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47932 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47933 this.k = sha256_K;
47934 this.W = new Array(64);
47935 }
47936 utils.inherits(SHA256, BlockHash);
47937 exports.sha256 = SHA256;
47938
47939 SHA256.blockSize = 512;
47940 SHA256.outSize = 256;
47941 SHA256.hmacStrength = 192;
47942 SHA256.padLength = 64;
47943
47944 SHA256.prototype._update = function _update(msg, start) {
47945 var W = this.W;
47946
47947 for (var i = 0; i < 16; i++)
47948 W[i] = msg[start + i];
47949 for (; i < W.length; i++)
47950 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
47951
47952 var a = this.h[0];
47953 var b = this.h[1];
47954 var c = this.h[2];
47955 var d = this.h[3];
47956 var e = this.h[4];
47957 var f = this.h[5];
47958 var g = this.h[6];
47959 var h = this.h[7];
47960
47961 assert(this.k.length === W.length);
47962 for (var i = 0; i < W.length; i++) {
47963 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47964 var T2 = sum32(s0_256(a), maj32(a, b, c));
47965 h = g;
47966 g = f;
47967 f = e;
47968 e = sum32(d, T1);
47969 d = c;
47970 c = b;
47971 b = a;
47972 a = sum32(T1, T2);
47973 }
47974
47975 this.h[0] = sum32(this.h[0], a);
47976 this.h[1] = sum32(this.h[1], b);
47977 this.h[2] = sum32(this.h[2], c);
47978 this.h[3] = sum32(this.h[3], d);
47979 this.h[4] = sum32(this.h[4], e);
47980 this.h[5] = sum32(this.h[5], f);
47981 this.h[6] = sum32(this.h[6], g);
47982 this.h[7] = sum32(this.h[7], h);
47983 };
47984
47985 SHA256.prototype._digest = function digest(enc) {
47986 if (enc === 'hex')
47987 return utils.toHex32(this.h, 'big');
47988 else
47989 return utils.split32(this.h, 'big');
47990 };
47991
47992 function SHA224() {
47993 if (!(this instanceof SHA224))
47994 return new SHA224();
47995
47996 SHA256.call(this);
47997 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47998 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47999 }
48000 utils.inherits(SHA224, SHA256);
48001 exports.sha224 = SHA224;
48002
48003 SHA224.blockSize = 512;
48004 SHA224.outSize = 224;
48005 SHA224.hmacStrength = 192;
48006 SHA224.padLength = 64;
48007
48008 SHA224.prototype._digest = function digest(enc) {
48009 // Just truncate output
48010 if (enc === 'hex')
48011 return utils.toHex32(this.h.slice(0, 7), 'big');
48012 else
48013 return utils.split32(this.h.slice(0, 7), 'big');
48014 };
48015
48016 function SHA512() {
48017 if (!(this instanceof SHA512))
48018 return new SHA512();
48019
48020 BlockHash.call(this);
48021 this.h = [ 0x6a09e667, 0xf3bcc908,
48022 0xbb67ae85, 0x84caa73b,
48023 0x3c6ef372, 0xfe94f82b,
48024 0xa54ff53a, 0x5f1d36f1,
48025 0x510e527f, 0xade682d1,
48026 0x9b05688c, 0x2b3e6c1f,
48027 0x1f83d9ab, 0xfb41bd6b,
48028 0x5be0cd19, 0x137e2179 ];
48029 this.k = sha512_K;
48030 this.W = new Array(160);
48031 }
48032 utils.inherits(SHA512, BlockHash);
48033 exports.sha512 = SHA512;
48034
48035 SHA512.blockSize = 1024;
48036 SHA512.outSize = 512;
48037 SHA512.hmacStrength = 192;
48038 SHA512.padLength = 128;
48039
48040 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
48041 var W = this.W;
48042
48043 // 32 x 32bit words
48044 for (var i = 0; i < 32; i++)
48045 W[i] = msg[start + i];
48046 for (; i < W.length; i += 2) {
48047 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
48048 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
48049 var c1_hi = W[i - 14]; // i - 7
48050 var c1_lo = W[i - 13];
48051 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
48052 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
48053 var c3_hi = W[i - 32]; // i - 16
48054 var c3_lo = W[i - 31];
48055
48056 W[i] = sum64_4_hi(c0_hi, c0_lo,
48057 c1_hi, c1_lo,
48058 c2_hi, c2_lo,
48059 c3_hi, c3_lo);
48060 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
48061 c1_hi, c1_lo,
48062 c2_hi, c2_lo,
48063 c3_hi, c3_lo);
48064 }
48065 };
48066
48067 SHA512.prototype._update = function _update(msg, start) {
48068 this._prepareBlock(msg, start);
48069
48070 var W = this.W;
48071
48072 var ah = this.h[0];
48073 var al = this.h[1];
48074 var bh = this.h[2];
48075 var bl = this.h[3];
48076 var ch = this.h[4];
48077 var cl = this.h[5];
48078 var dh = this.h[6];
48079 var dl = this.h[7];
48080 var eh = this.h[8];
48081 var el = this.h[9];
48082 var fh = this.h[10];
48083 var fl = this.h[11];
48084 var gh = this.h[12];
48085 var gl = this.h[13];
48086 var hh = this.h[14];
48087 var hl = this.h[15];
48088
48089 assert(this.k.length === W.length);
48090 for (var i = 0; i < W.length; i += 2) {
48091 var c0_hi = hh;
48092 var c0_lo = hl;
48093 var c1_hi = s1_512_hi(eh, el);
48094 var c1_lo = s1_512_lo(eh, el);
48095 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
48096 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
48097 var c3_hi = this.k[i];
48098 var c3_lo = this.k[i + 1];
48099 var c4_hi = W[i];
48100 var c4_lo = W[i + 1];
48101
48102 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
48103 c1_hi, c1_lo,
48104 c2_hi, c2_lo,
48105 c3_hi, c3_lo,
48106 c4_hi, c4_lo);
48107 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
48108 c1_hi, c1_lo,
48109 c2_hi, c2_lo,
48110 c3_hi, c3_lo,
48111 c4_hi, c4_lo);
48112
48113 var c0_hi = s0_512_hi(ah, al);
48114 var c0_lo = s0_512_lo(ah, al);
48115 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
48116 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
48117
48118 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
48119 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
48120
48121 hh = gh;
48122 hl = gl;
48123
48124 gh = fh;
48125 gl = fl;
48126
48127 fh = eh;
48128 fl = el;
48129
48130 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
48131 el = sum64_lo(dl, dl, T1_hi, T1_lo);
48132
48133 dh = ch;
48134 dl = cl;
48135
48136 ch = bh;
48137 cl = bl;
48138
48139 bh = ah;
48140 bl = al;
48141
48142 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
48143 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
48144 }
48145
48146 sum64(this.h, 0, ah, al);
48147 sum64(this.h, 2, bh, bl);
48148 sum64(this.h, 4, ch, cl);
48149 sum64(this.h, 6, dh, dl);
48150 sum64(this.h, 8, eh, el);
48151 sum64(this.h, 10, fh, fl);
48152 sum64(this.h, 12, gh, gl);
48153 sum64(this.h, 14, hh, hl);
48154 };
48155
48156 SHA512.prototype._digest = function digest(enc) {
48157 if (enc === 'hex')
48158 return utils.toHex32(this.h, 'big');
48159 else
48160 return utils.split32(this.h, 'big');
48161 };
48162
48163 function SHA384() {
48164 if (!(this instanceof SHA384))
48165 return new SHA384();
48166
48167 SHA512.call(this);
48168 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
48169 0x629a292a, 0x367cd507,
48170 0x9159015a, 0x3070dd17,
48171 0x152fecd8, 0xf70e5939,
48172 0x67332667, 0xffc00b31,
48173 0x8eb44a87, 0x68581511,
48174 0xdb0c2e0d, 0x64f98fa7,
48175 0x47b5481d, 0xbefa4fa4 ];
48176 }
48177 utils.inherits(SHA384, SHA512);
48178 exports.sha384 = SHA384;
48179
48180 SHA384.blockSize = 1024;
48181 SHA384.outSize = 384;
48182 SHA384.hmacStrength = 192;
48183 SHA384.padLength = 128;
48184
48185 SHA384.prototype._digest = function digest(enc) {
48186 if (enc === 'hex')
48187 return utils.toHex32(this.h.slice(0, 12), 'big');
48188 else
48189 return utils.split32(this.h.slice(0, 12), 'big');
48190 };
48191
48192 function SHA1() {
48193 if (!(this instanceof SHA1))
48194 return new SHA1();
48195
48196 BlockHash.call(this);
48197 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
48198 0x10325476, 0xc3d2e1f0 ];
48199 this.W = new Array(80);
48200 }
48201
48202 utils.inherits(SHA1, BlockHash);
48203 exports.sha1 = SHA1;
48204
48205 SHA1.blockSize = 512;
48206 SHA1.outSize = 160;
48207 SHA1.hmacStrength = 80;
48208 SHA1.padLength = 64;
48209
48210 SHA1.prototype._update = function _update(msg, start) {
48211 var W = this.W;
48212
48213 for (var i = 0; i < 16; i++)
48214 W[i] = msg[start + i];
48215
48216 for(; i < W.length; i++)
48217 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
48218
48219 var a = this.h[0];
48220 var b = this.h[1];
48221 var c = this.h[2];
48222 var d = this.h[3];
48223 var e = this.h[4];
48224
48225 for (var i = 0; i < W.length; i++) {
48226 var s = ~~(i / 20);
48227 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
48228 e = d;
48229 d = c;
48230 c = rotl32(b, 30);
48231 b = a;
48232 a = t;
48233 }
48234
48235 this.h[0] = sum32(this.h[0], a);
48236 this.h[1] = sum32(this.h[1], b);
48237 this.h[2] = sum32(this.h[2], c);
48238 this.h[3] = sum32(this.h[3], d);
48239 this.h[4] = sum32(this.h[4], e);
48240 };
48241
48242 SHA1.prototype._digest = function digest(enc) {
48243 if (enc === 'hex')
48244 return utils.toHex32(this.h, 'big');
48245 else
48246 return utils.split32(this.h, 'big');
48247 };
48248
48249 function ch32(x, y, z) {
48250 return (x & y) ^ ((~x) & z);
48251 }
48252
48253 function maj32(x, y, z) {
48254 return (x & y) ^ (x & z) ^ (y & z);
48255 }
48256
48257 function p32(x, y, z) {
48258 return x ^ y ^ z;
48259 }
48260
48261 function s0_256(x) {
48262 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
48263 }
48264
48265 function s1_256(x) {
48266 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
48267 }
48268
48269 function g0_256(x) {
48270 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
48271 }
48272
48273 function g1_256(x) {
48274 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
48275 }
48276
48277 function ft_1(s, x, y, z) {
48278 if (s === 0)
48279 return ch32(x, y, z);
48280 if (s === 1 || s === 3)
48281 return p32(x, y, z);
48282 if (s === 2)
48283 return maj32(x, y, z);
48284 }
48285
48286 function ch64_hi(xh, xl, yh, yl, zh, zl) {
48287 var r = (xh & yh) ^ ((~xh) & zh);
48288 if (r < 0)
48289 r += 0x100000000;
48290 return r;
48291 }
48292
48293 function ch64_lo(xh, xl, yh, yl, zh, zl) {
48294 var r = (xl & yl) ^ ((~xl) & zl);
48295 if (r < 0)
48296 r += 0x100000000;
48297 return r;
48298 }
48299
48300 function maj64_hi(xh, xl, yh, yl, zh, zl) {
48301 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
48302 if (r < 0)
48303 r += 0x100000000;
48304 return r;
48305 }
48306
48307 function maj64_lo(xh, xl, yh, yl, zh, zl) {
48308 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
48309 if (r < 0)
48310 r += 0x100000000;
48311 return r;
48312 }
48313
48314 function s0_512_hi(xh, xl) {
48315 var c0_hi = rotr64_hi(xh, xl, 28);
48316 var c1_hi = rotr64_hi(xl, xh, 2); // 34
48317 var c2_hi = rotr64_hi(xl, xh, 7); // 39
48318
48319 var r = c0_hi ^ c1_hi ^ c2_hi;
48320 if (r < 0)
48321 r += 0x100000000;
48322 return r;
48323 }
48324
48325 function s0_512_lo(xh, xl) {
48326 var c0_lo = rotr64_lo(xh, xl, 28);
48327 var c1_lo = rotr64_lo(xl, xh, 2); // 34
48328 var c2_lo = rotr64_lo(xl, xh, 7); // 39
48329
48330 var r = c0_lo ^ c1_lo ^ c2_lo;
48331 if (r < 0)
48332 r += 0x100000000;
48333 return r;
48334 }
48335
48336 function s1_512_hi(xh, xl) {
48337 var c0_hi = rotr64_hi(xh, xl, 14);
48338 var c1_hi = rotr64_hi(xh, xl, 18);
48339 var c2_hi = rotr64_hi(xl, xh, 9); // 41
48340
48341 var r = c0_hi ^ c1_hi ^ c2_hi;
48342 if (r < 0)
48343 r += 0x100000000;
48344 return r;
48345 }
48346
48347 function s1_512_lo(xh, xl) {
48348 var c0_lo = rotr64_lo(xh, xl, 14);
48349 var c1_lo = rotr64_lo(xh, xl, 18);
48350 var c2_lo = rotr64_lo(xl, xh, 9); // 41
48351
48352 var r = c0_lo ^ c1_lo ^ c2_lo;
48353 if (r < 0)
48354 r += 0x100000000;
48355 return r;
48356 }
48357
48358 function g0_512_hi(xh, xl) {
48359 var c0_hi = rotr64_hi(xh, xl, 1);
48360 var c1_hi = rotr64_hi(xh, xl, 8);
48361 var c2_hi = shr64_hi(xh, xl, 7);
48362
48363 var r = c0_hi ^ c1_hi ^ c2_hi;
48364 if (r < 0)
48365 r += 0x100000000;
48366 return r;
48367 }
48368
48369 function g0_512_lo(xh, xl) {
48370 var c0_lo = rotr64_lo(xh, xl, 1);
48371 var c1_lo = rotr64_lo(xh, xl, 8);
48372 var c2_lo = shr64_lo(xh, xl, 7);
48373
48374 var r = c0_lo ^ c1_lo ^ c2_lo;
48375 if (r < 0)
48376 r += 0x100000000;
48377 return r;
48378 }
48379
48380 function g1_512_hi(xh, xl) {
48381 var c0_hi = rotr64_hi(xh, xl, 19);
48382 var c1_hi = rotr64_hi(xl, xh, 29); // 61
48383 var c2_hi = shr64_hi(xh, xl, 6);
48384
48385 var r = c0_hi ^ c1_hi ^ c2_hi;
48386 if (r < 0)
48387 r += 0x100000000;
48388 return r;
48389 }
48390
48391 function g1_512_lo(xh, xl) {
48392 var c0_lo = rotr64_lo(xh, xl, 19);
48393 var c1_lo = rotr64_lo(xl, xh, 29); // 61
48394 var c2_lo = shr64_lo(xh, xl, 6);
48395
48396 var r = c0_lo ^ c1_lo ^ c2_lo;
48397 if (r < 0)
48398 r += 0x100000000;
48399 return r;
48400 }
48401
48402 },{"../hash":114}],119:[function(require,module,exports){
48403 var utils = exports;
48404 var inherits = require('inherits');
48405
48406 function toArray(msg, enc) {
48407 if (Array.isArray(msg))
48408 return msg.slice();
48409 if (!msg)
48410 return [];
48411 var res = [];
48412 if (typeof msg === 'string') {
48413 if (!enc) {
48414 for (var i = 0; i < msg.length; i++) {
48415 var c = msg.charCodeAt(i);
48416 var hi = c >> 8;
48417 var lo = c & 0xff;
48418 if (hi)
48419 res.push(hi, lo);
48420 else
48421 res.push(lo);
48422 }
48423 } else if (enc === 'hex') {
48424 msg = msg.replace(/[^a-z0-9]+/ig, '');
48425 if (msg.length % 2 !== 0)
48426 msg = '0' + msg;
48427 for (var i = 0; i < msg.length; i += 2)
48428 res.push(parseInt(msg[i] + msg[i + 1], 16));
48429 }
48430 } else {
48431 for (var i = 0; i < msg.length; i++)
48432 res[i] = msg[i] | 0;
48433 }
48434 return res;
48435 }
48436 utils.toArray = toArray;
48437
48438 function toHex(msg) {
48439 var res = '';
48440 for (var i = 0; i < msg.length; i++)
48441 res += zero2(msg[i].toString(16));
48442 return res;
48443 }
48444 utils.toHex = toHex;
48445
48446 function htonl(w) {
48447 var res = (w >>> 24) |
48448 ((w >>> 8) & 0xff00) |
48449 ((w << 8) & 0xff0000) |
48450 ((w & 0xff) << 24);
48451 return res >>> 0;
48452 }
48453 utils.htonl = htonl;
48454
48455 function toHex32(msg, endian) {
48456 var res = '';
48457 for (var i = 0; i < msg.length; i++) {
48458 var w = msg[i];
48459 if (endian === 'little')
48460 w = htonl(w);
48461 res += zero8(w.toString(16));
48462 }
48463 return res;
48464 }
48465 utils.toHex32 = toHex32;
48466
48467 function zero2(word) {
48468 if (word.length === 1)
48469 return '0' + word;
48470 else
48471 return word;
48472 }
48473 utils.zero2 = zero2;
48474
48475 function zero8(word) {
48476 if (word.length === 7)
48477 return '0' + word;
48478 else if (word.length === 6)
48479 return '00' + word;
48480 else if (word.length === 5)
48481 return '000' + word;
48482 else if (word.length === 4)
48483 return '0000' + word;
48484 else if (word.length === 3)
48485 return '00000' + word;
48486 else if (word.length === 2)
48487 return '000000' + word;
48488 else if (word.length === 1)
48489 return '0000000' + word;
48490 else
48491 return word;
48492 }
48493 utils.zero8 = zero8;
48494
48495 function join32(msg, start, end, endian) {
48496 var len = end - start;
48497 assert(len % 4 === 0);
48498 var res = new Array(len / 4);
48499 for (var i = 0, k = start; i < res.length; i++, k += 4) {
48500 var w;
48501 if (endian === 'big')
48502 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
48503 else
48504 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
48505 res[i] = w >>> 0;
48506 }
48507 return res;
48508 }
48509 utils.join32 = join32;
48510
48511 function split32(msg, endian) {
48512 var res = new Array(msg.length * 4);
48513 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
48514 var m = msg[i];
48515 if (endian === 'big') {
48516 res[k] = m >>> 24;
48517 res[k + 1] = (m >>> 16) & 0xff;
48518 res[k + 2] = (m >>> 8) & 0xff;
48519 res[k + 3] = m & 0xff;
48520 } else {
48521 res[k + 3] = m >>> 24;
48522 res[k + 2] = (m >>> 16) & 0xff;
48523 res[k + 1] = (m >>> 8) & 0xff;
48524 res[k] = m & 0xff;
48525 }
48526 }
48527 return res;
48528 }
48529 utils.split32 = split32;
48530
48531 function rotr32(w, b) {
48532 return (w >>> b) | (w << (32 - b));
48533 }
48534 utils.rotr32 = rotr32;
48535
48536 function rotl32(w, b) {
48537 return (w << b) | (w >>> (32 - b));
48538 }
48539 utils.rotl32 = rotl32;
48540
48541 function sum32(a, b) {
48542 return (a + b) >>> 0;
48543 }
48544 utils.sum32 = sum32;
48545
48546 function sum32_3(a, b, c) {
48547 return (a + b + c) >>> 0;
48548 }
48549 utils.sum32_3 = sum32_3;
48550
48551 function sum32_4(a, b, c, d) {
48552 return (a + b + c + d) >>> 0;
48553 }
48554 utils.sum32_4 = sum32_4;
48555
48556 function sum32_5(a, b, c, d, e) {
48557 return (a + b + c + d + e) >>> 0;
48558 }
48559 utils.sum32_5 = sum32_5;
48560
48561 function assert(cond, msg) {
48562 if (!cond)
48563 throw new Error(msg || 'Assertion failed');
48564 }
48565 utils.assert = assert;
48566
48567 utils.inherits = inherits;
48568
48569 function sum64(buf, pos, ah, al) {
48570 var bh = buf[pos];
48571 var bl = buf[pos + 1];
48572
48573 var lo = (al + bl) >>> 0;
48574 var hi = (lo < al ? 1 : 0) + ah + bh;
48575 buf[pos] = hi >>> 0;
48576 buf[pos + 1] = lo;
48577 }
48578 exports.sum64 = sum64;
48579
48580 function sum64_hi(ah, al, bh, bl) {
48581 var lo = (al + bl) >>> 0;
48582 var hi = (lo < al ? 1 : 0) + ah + bh;
48583 return hi >>> 0;
48584 };
48585 exports.sum64_hi = sum64_hi;
48586
48587 function sum64_lo(ah, al, bh, bl) {
48588 var lo = al + bl;
48589 return lo >>> 0;
48590 };
48591 exports.sum64_lo = sum64_lo;
48592
48593 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
48594 var carry = 0;
48595 var lo = al;
48596 lo = (lo + bl) >>> 0;
48597 carry += lo < al ? 1 : 0;
48598 lo = (lo + cl) >>> 0;
48599 carry += lo < cl ? 1 : 0;
48600 lo = (lo + dl) >>> 0;
48601 carry += lo < dl ? 1 : 0;
48602
48603 var hi = ah + bh + ch + dh + carry;
48604 return hi >>> 0;
48605 };
48606 exports.sum64_4_hi = sum64_4_hi;
48607
48608 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
48609 var lo = al + bl + cl + dl;
48610 return lo >>> 0;
48611 };
48612 exports.sum64_4_lo = sum64_4_lo;
48613
48614 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48615 var carry = 0;
48616 var lo = al;
48617 lo = (lo + bl) >>> 0;
48618 carry += lo < al ? 1 : 0;
48619 lo = (lo + cl) >>> 0;
48620 carry += lo < cl ? 1 : 0;
48621 lo = (lo + dl) >>> 0;
48622 carry += lo < dl ? 1 : 0;
48623 lo = (lo + el) >>> 0;
48624 carry += lo < el ? 1 : 0;
48625
48626 var hi = ah + bh + ch + dh + eh + carry;
48627 return hi >>> 0;
48628 };
48629 exports.sum64_5_hi = sum64_5_hi;
48630
48631 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48632 var lo = al + bl + cl + dl + el;
48633
48634 return lo >>> 0;
48635 };
48636 exports.sum64_5_lo = sum64_5_lo;
48637
48638 function rotr64_hi(ah, al, num) {
48639 var r = (al << (32 - num)) | (ah >>> num);
48640 return r >>> 0;
48641 };
48642 exports.rotr64_hi = rotr64_hi;
48643
48644 function rotr64_lo(ah, al, num) {
48645 var r = (ah << (32 - num)) | (al >>> num);
48646 return r >>> 0;
48647 };
48648 exports.rotr64_lo = rotr64_lo;
48649
48650 function shr64_hi(ah, al, num) {
48651 return ah >>> num;
48652 };
48653 exports.shr64_hi = shr64_hi;
48654
48655 function shr64_lo(ah, al, num) {
48656 var r = (ah << (32 - num)) | (al >>> num);
48657 return r >>> 0;
48658 };
48659 exports.shr64_lo = shr64_lo;
48660
48661 },{"inherits":121}],120:[function(require,module,exports){
48662 'use strict';
48663
48664 var hash = require('hash.js');
48665 var utils = require('minimalistic-crypto-utils');
48666 var assert = require('minimalistic-assert');
48667
48668 function HmacDRBG(options) {
48669 if (!(this instanceof HmacDRBG))
48670 return new HmacDRBG(options);
48671 this.hash = options.hash;
48672 this.predResist = !!options.predResist;
48673
48674 this.outLen = this.hash.outSize;
48675 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
48676
48677 this._reseed = null;
48678 this.reseedInterval = null;
48679 this.K = null;
48680 this.V = null;
48681
48682 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
48683 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
48684 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
48685 assert(entropy.length >= (this.minEntropy / 8),
48686 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48687 this._init(entropy, nonce, pers);
48688 }
48689 module.exports = HmacDRBG;
48690
48691 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
48692 var seed = entropy.concat(nonce).concat(pers);
48693
48694 this.K = new Array(this.outLen / 8);
48695 this.V = new Array(this.outLen / 8);
48696 for (var i = 0; i < this.V.length; i++) {
48697 this.K[i] = 0x00;
48698 this.V[i] = 0x01;
48699 }
48700
48701 this._update(seed);
48702 this._reseed = 1;
48703 this.reseedInterval = 0x1000000000000; // 2^48
48704 };
48705
48706 HmacDRBG.prototype._hmac = function hmac() {
48707 return new hash.hmac(this.hash, this.K);
48708 };
48709
48710 HmacDRBG.prototype._update = function update(seed) {
48711 var kmac = this._hmac()
48712 .update(this.V)
48713 .update([ 0x00 ]);
48714 if (seed)
48715 kmac = kmac.update(seed);
48716 this.K = kmac.digest();
48717 this.V = this._hmac().update(this.V).digest();
48718 if (!seed)
48719 return;
48720
48721 this.K = this._hmac()
48722 .update(this.V)
48723 .update([ 0x01 ])
48724 .update(seed)
48725 .digest();
48726 this.V = this._hmac().update(this.V).digest();
48727 };
48728
48729 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
48730 // Optional entropy enc
48731 if (typeof entropyEnc !== 'string') {
48732 addEnc = add;
48733 add = entropyEnc;
48734 entropyEnc = null;
48735 }
48736
48737 entropy = utils.toArray(entropy, entropyEnc);
48738 add = utils.toArray(add, addEnc);
48739
48740 assert(entropy.length >= (this.minEntropy / 8),
48741 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48742
48743 this._update(entropy.concat(add || []));
48744 this._reseed = 1;
48745 };
48746
48747 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
48748 if (this._reseed > this.reseedInterval)
48749 throw new Error('Reseed is required');
48750
48751 // Optional encoding
48752 if (typeof enc !== 'string') {
48753 addEnc = add;
48754 add = enc;
48755 enc = null;
48756 }
48757
48758 // Optional additional data
48759 if (add) {
48760 add = utils.toArray(add, addEnc || 'hex');
48761 this._update(add);
48762 }
48763
48764 var temp = [];
48765 while (temp.length < len) {
48766 this.V = this._hmac().update(this.V).digest();
48767 temp = temp.concat(this.V);
48768 }
48769
48770 var res = temp.slice(0, len);
48771 this._update(add);
48772 this._reseed++;
48773 return utils.encode(res, enc);
48774 };
48775
48776 },{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
48777 arguments[4][9][0].apply(exports,arguments)
48778 },{"dup":9}],122:[function(require,module,exports){
48779 (function (Buffer){
48780 // constant-space merkle root calculation algorithm
48781 module.exports = function fastRoot (values, digestFn) {
48782 if (!Array.isArray(values)) throw TypeError('Expected values Array')
48783 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
48784
48785 var length = values.length
48786 var results = values.concat()
48787
48788 while (length > 1) {
48789 var j = 0
48790
48791 for (var i = 0; i < length; i += 2, ++j) {
48792 var left = results[i]
48793 var right = i + 1 === length ? left : results[i + 1]
48794 var data = Buffer.concat([left, right])
48795
48796 results[j] = digestFn(data)
48797 }
48798
48799 length = j
48800 }
48801
48802 return results[0]
48803 }
48804
48805 }).call(this,require("buffer").Buffer)
48806 },{"buffer":5}],123:[function(require,module,exports){
48807 module.exports = assert;
48808
48809 function assert(val, msg) {
48810 if (!val)
48811 throw new Error(msg || 'Assertion failed');
48812 }
48813
48814 assert.equal = function assertEqual(l, r, msg) {
48815 if (l != r)
48816 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
48817 };
48818
48819 },{}],124:[function(require,module,exports){
48820 'use strict';
48821
48822 var utils = exports;
48823
48824 function toArray(msg, enc) {
48825 if (Array.isArray(msg))
48826 return msg.slice();
48827 if (!msg)
48828 return [];
48829 var res = [];
48830 if (typeof msg !== 'string') {
48831 for (var i = 0; i < msg.length; i++)
48832 res[i] = msg[i] | 0;
48833 return res;
48834 }
48835 if (enc === 'hex') {
48836 msg = msg.replace(/[^a-z0-9]+/ig, '');
48837 if (msg.length % 2 !== 0)
48838 msg = '0' + msg;
48839 for (var i = 0; i < msg.length; i += 2)
48840 res.push(parseInt(msg[i] + msg[i + 1], 16));
48841 } else {
48842 for (var i = 0; i < msg.length; i++) {
48843 var c = msg.charCodeAt(i);
48844 var hi = c >> 8;
48845 var lo = c & 0xff;
48846 if (hi)
48847 res.push(hi, lo);
48848 else
48849 res.push(lo);
48850 }
48851 }
48852 return res;
48853 }
48854 utils.toArray = toArray;
48855
48856 function zero2(word) {
48857 if (word.length === 1)
48858 return '0' + word;
48859 else
48860 return word;
48861 }
48862 utils.zero2 = zero2;
48863
48864 function toHex(msg) {
48865 var res = '';
48866 for (var i = 0; i < msg.length; i++)
48867 res += zero2(msg[i].toString(16));
48868 return res;
48869 }
48870 utils.toHex = toHex;
48871
48872 utils.encode = function encode(arr, enc) {
48873 if (enc === 'hex')
48874 return toHex(arr);
48875 else
48876 return arr;
48877 };
48878
48879 },{}],125:[function(require,module,exports){
48880 var OPS = require('bitcoin-ops')
48881
48882 function encodingLength (i) {
48883 return i < OPS.OP_PUSHDATA1 ? 1
48884 : i <= 0xff ? 2
48885 : i <= 0xffff ? 3
48886 : 5
48887 }
48888
48889 function encode (buffer, number, offset) {
48890 var size = encodingLength(number)
48891
48892 // ~6 bit
48893 if (size === 1) {
48894 buffer.writeUInt8(number, offset)
48895
48896 // 8 bit
48897 } else if (size === 2) {
48898 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
48899 buffer.writeUInt8(number, offset + 1)
48900
48901 // 16 bit
48902 } else if (size === 3) {
48903 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
48904 buffer.writeUInt16LE(number, offset + 1)
48905
48906 // 32 bit
48907 } else {
48908 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
48909 buffer.writeUInt32LE(number, offset + 1)
48910 }
48911
48912 return size
48913 }
48914
48915 function decode (buffer, offset) {
48916 var opcode = buffer.readUInt8(offset)
48917 var number, size
48918
48919 // ~6 bit
48920 if (opcode < OPS.OP_PUSHDATA1) {
48921 number = opcode
48922 size = 1
48923
48924 // 8 bit
48925 } else if (opcode === OPS.OP_PUSHDATA1) {
48926 if (offset + 2 > buffer.length) return null
48927 number = buffer.readUInt8(offset + 1)
48928 size = 2
48929
48930 // 16 bit
48931 } else if (opcode === OPS.OP_PUSHDATA2) {
48932 if (offset + 3 > buffer.length) return null
48933 number = buffer.readUInt16LE(offset + 1)
48934 size = 3
48935
48936 // 32 bit
48937 } else {
48938 if (offset + 5 > buffer.length) return null
48939 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
48940
48941 number = buffer.readUInt32LE(offset + 1)
48942 size = 5
48943 }
48944
48945 return {
48946 opcode: opcode,
48947 number: number,
48948 size: size
48949 }
48950 }
48951
48952 module.exports = {
48953 encodingLength: encodingLength,
48954 encode: encode,
48955 decode: decode
48956 }
48957
48958 },{"bitcoin-ops":42}],126:[function(require,module,exports){
48959 (function (process,global){
48960 'use strict'
48961
48962 function oldBrowser () {
48963 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
48964 }
48965
48966 var Buffer = require('safe-buffer').Buffer
48967 var crypto = global.crypto || global.msCrypto
48968
48969 if (crypto && crypto.getRandomValues) {
48970 module.exports = randomBytes
48971 } else {
48972 module.exports = oldBrowser
48973 }
48974
48975 function randomBytes (size, cb) {
48976 // phantomjs needs to throw
48977 if (size > 65536) throw new Error('requested too many random bytes')
48978 // in case browserify isn't using the Uint8Array version
48979 var rawBytes = new global.Uint8Array(size)
48980
48981 // This will not work in older browsers.
48982 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
48983 if (size > 0) { // getRandomValues fails on IE if size == 0
48984 crypto.getRandomValues(rawBytes)
48985 }
48986
48987 // XXX: phantomjs doesn't like a buffer being passed here
48988 var bytes = Buffer.from(rawBytes.buffer)
48989
48990 if (typeof cb === 'function') {
48991 return process.nextTick(function () {
48992 cb(null, bytes)
48993 })
48994 }
48995
48996 return bytes
48997 }
48998
48999 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
49000 },{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
49001 (function (Buffer){
49002 'use strict'
49003 var inherits = require('inherits')
49004 var HashBase = require('hash-base')
49005
49006 function RIPEMD160 () {
49007 HashBase.call(this, 64)
49008
49009 // state
49010 this._a = 0x67452301
49011 this._b = 0xefcdab89
49012 this._c = 0x98badcfe
49013 this._d = 0x10325476
49014 this._e = 0xc3d2e1f0
49015 }
49016
49017 inherits(RIPEMD160, HashBase)
49018
49019 RIPEMD160.prototype._update = function () {
49020 var m = new Array(16)
49021 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
49022
49023 var al = this._a
49024 var bl = this._b
49025 var cl = this._c
49026 var dl = this._d
49027 var el = this._e
49028
49029 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
49030 // K = 0x00000000
49031 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
49032 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
49033 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
49034 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
49035 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
49036 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
49037 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
49038 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
49039 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
49040 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
49041 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
49042 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
49043 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
49044 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
49045 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
49046 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
49047 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
49048
49049 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
49050 // K = 0x5a827999
49051 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
49052 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
49053 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
49054 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
49055 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
49056 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
49057 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
49058 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
49059 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
49060 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
49061 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
49062 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
49063 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
49064 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
49065 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
49066 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
49067 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
49068
49069 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
49070 // K = 0x6ed9eba1
49071 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
49072 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
49073 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
49074 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
49075 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
49076 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
49077 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
49078 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
49079 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
49080 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
49081 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
49082 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
49083 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
49084 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
49085 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
49086 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
49087 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
49088
49089 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
49090 // K = 0x8f1bbcdc
49091 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
49092 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
49093 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
49094 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
49095 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
49096 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
49097 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
49098 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
49099 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49100 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
49101 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
49102 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
49103 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
49104 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49105 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
49106 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
49107 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
49108
49109 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
49110 // K = 0xa953fd4e
49111 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
49112 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
49113 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
49114 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
49115 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
49116 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
49117 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
49118 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
49119 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
49120 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
49121 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
49122 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
49123 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
49124 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
49125 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
49126 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
49127 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
49128
49129 var ar = this._a
49130 var br = this._b
49131 var cr = this._c
49132 var dr = this._d
49133 var er = this._e
49134
49135 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
49136 // K' = 0x50a28be6
49137 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
49138 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
49139 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
49140 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
49141 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
49142 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
49143 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
49144 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
49145 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
49146 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
49147 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
49148 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
49149 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
49150 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
49151 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
49152 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
49153 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
49154
49155 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
49156 // K' = 0x5c4dd124
49157 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
49158 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
49159 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
49160 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
49161 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
49162 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
49163 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
49164 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
49165 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
49166 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
49167 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
49168 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
49169 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
49170 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
49171 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
49172 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
49173 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
49174
49175 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
49176 // K' = 0x6d703ef3
49177 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
49178 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
49179 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
49180 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
49181 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
49182 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
49183 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
49184 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
49185 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
49186 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
49187 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
49188 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
49189 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
49190 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
49191 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
49192 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
49193 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
49194
49195 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
49196 // K' = 0x7a6d76e9
49197 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
49198 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
49199 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
49200 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
49201 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
49202 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
49203 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
49204 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
49205 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
49206 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
49207 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
49208 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
49209 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
49210 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
49211 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
49212 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
49213 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
49214
49215 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
49216 // K' = 0x00000000
49217 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
49218 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
49219 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
49220 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
49221 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
49222 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
49223 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
49224 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
49225 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
49226 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
49227 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
49228 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
49229 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
49230 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
49231 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
49232 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
49233 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
49234
49235 // change state
49236 var t = (this._b + cl + dr) | 0
49237 this._b = (this._c + dl + er) | 0
49238 this._c = (this._d + el + ar) | 0
49239 this._d = (this._e + al + br) | 0
49240 this._e = (this._a + bl + cr) | 0
49241 this._a = t
49242 }
49243
49244 RIPEMD160.prototype._digest = function () {
49245 // create padding and handle blocks
49246 this._block[this._blockOffset++] = 0x80
49247 if (this._blockOffset > 56) {
49248 this._block.fill(0, this._blockOffset, 64)
49249 this._update()
49250 this._blockOffset = 0
49251 }
49252
49253 this._block.fill(0, this._blockOffset, 56)
49254 this._block.writeUInt32LE(this._length[0], 56)
49255 this._block.writeUInt32LE(this._length[1], 60)
49256 this._update()
49257
49258 // produce result
49259 var buffer = new Buffer(20)
49260 buffer.writeInt32LE(this._a, 0)
49261 buffer.writeInt32LE(this._b, 4)
49262 buffer.writeInt32LE(this._c, 8)
49263 buffer.writeInt32LE(this._d, 12)
49264 buffer.writeInt32LE(this._e, 16)
49265 return buffer
49266 }
49267
49268 function rotl (x, n) {
49269 return (x << n) | (x >>> (32 - n))
49270 }
49271
49272 function fn1 (a, b, c, d, e, m, k, s) {
49273 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
49274 }
49275
49276 function fn2 (a, b, c, d, e, m, k, s) {
49277 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
49278 }
49279
49280 function fn3 (a, b, c, d, e, m, k, s) {
49281 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
49282 }
49283
49284 function fn4 (a, b, c, d, e, m, k, s) {
49285 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
49286 }
49287
49288 function fn5 (a, b, c, d, e, m, k, s) {
49289 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
49290 }
49291
49292 module.exports = RIPEMD160
49293
49294 }).call(this,require("buffer").Buffer)
49295 },{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
49296 /* eslint-disable node/no-deprecated-api */
49297 var buffer = require('buffer')
49298 var Buffer = buffer.Buffer
49299
49300 // alternative to using Object.keys for old browsers
49301 function copyProps (src, dst) {
49302 for (var key in src) {
49303 dst[key] = src[key]
49304 }
49305 }
49306 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49307 module.exports = buffer
49308 } else {
49309 // Copy properties from require('buffer')
49310 copyProps(buffer, exports)
49311 exports.Buffer = SafeBuffer
49312 }
49313
49314 function SafeBuffer (arg, encodingOrOffset, length) {
49315 return Buffer(arg, encodingOrOffset, length)
49316 }
49317
49318 // Copy static methods from Buffer
49319 copyProps(Buffer, SafeBuffer)
49320
49321 SafeBuffer.from = function (arg, encodingOrOffset, length) {
49322 if (typeof arg === 'number') {
49323 throw new TypeError('Argument must not be a number')
49324 }
49325 return Buffer(arg, encodingOrOffset, length)
49326 }
49327
49328 SafeBuffer.alloc = function (size, fill, encoding) {
49329 if (typeof size !== 'number') {
49330 throw new TypeError('Argument must be a number')
49331 }
49332 var buf = Buffer(size)
49333 if (fill !== undefined) {
49334 if (typeof encoding === 'string') {
49335 buf.fill(fill, encoding)
49336 } else {
49337 buf.fill(fill)
49338 }
49339 } else {
49340 buf.fill(0)
49341 }
49342 return buf
49343 }
49344
49345 SafeBuffer.allocUnsafe = function (size) {
49346 if (typeof size !== 'number') {
49347 throw new TypeError('Argument must be a number')
49348 }
49349 return Buffer(size)
49350 }
49351
49352 SafeBuffer.allocUnsafeSlow = function (size) {
49353 if (typeof size !== 'number') {
49354 throw new TypeError('Argument must be a number')
49355 }
49356 return buffer.SlowBuffer(size)
49357 }
49358
49359 },{"buffer":5}],129:[function(require,module,exports){
49360 var Buffer = require('safe-buffer').Buffer
49361
49362 // prototype class for hash functions
49363 function Hash (blockSize, finalSize) {
49364 this._block = Buffer.alloc(blockSize)
49365 this._finalSize = finalSize
49366 this._blockSize = blockSize
49367 this._len = 0
49368 }
49369
49370 Hash.prototype.update = function (data, enc) {
49371 if (typeof data === 'string') {
49372 enc = enc || 'utf8'
49373 data = Buffer.from(data, enc)
49374 }
49375
49376 var block = this._block
49377 var blockSize = this._blockSize
49378 var length = data.length
49379 var accum = this._len
49380
49381 for (var offset = 0; offset < length;) {
49382 var assigned = accum % blockSize
49383 var remainder = Math.min(length - offset, blockSize - assigned)
49384
49385 for (var i = 0; i < remainder; i++) {
49386 block[assigned + i] = data[offset + i]
49387 }
49388
49389 accum += remainder
49390 offset += remainder
49391
49392 if ((accum % blockSize) === 0) {
49393 this._update(block)
49394 }
49395 }
49396
49397 this._len += length
49398 return this
49399 }
49400
49401 Hash.prototype.digest = function (enc) {
49402 var rem = this._len % this._blockSize
49403
49404 this._block[rem] = 0x80
49405
49406 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
49407 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
49408 this._block.fill(0, rem + 1)
49409
49410 if (rem >= this._finalSize) {
49411 this._update(this._block)
49412 this._block.fill(0)
49413 }
49414
49415 var bits = this._len * 8
49416
49417 // uint32
49418 if (bits <= 0xffffffff) {
49419 this._block.writeUInt32BE(bits, this._blockSize - 4)
49420
49421 // uint64
49422 } else {
49423 var lowBits = bits & 0xffffffff
49424 var highBits = (bits - lowBits) / 0x100000000
49425
49426 this._block.writeUInt32BE(highBits, this._blockSize - 8)
49427 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
49428 }
49429
49430 this._update(this._block)
49431 var hash = this._hash()
49432
49433 return enc ? hash.toString(enc) : hash
49434 }
49435
49436 Hash.prototype._update = function () {
49437 throw new Error('_update must be implemented by subclass')
49438 }
49439
49440 module.exports = Hash
49441
49442 },{"safe-buffer":128}],130:[function(require,module,exports){
49443 var exports = module.exports = function SHA (algorithm) {
49444 algorithm = algorithm.toLowerCase()
49445
49446 var Algorithm = exports[algorithm]
49447 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
49448
49449 return new Algorithm()
49450 }
49451
49452 exports.sha = require('./sha')
49453 exports.sha1 = require('./sha1')
49454 exports.sha224 = require('./sha224')
49455 exports.sha256 = require('./sha256')
49456 exports.sha384 = require('./sha384')
49457 exports.sha512 = require('./sha512')
49458
49459 },{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
49460 /*
49461 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49462 * in FIPS PUB 180-1
49463 * This source code is derived from sha1.js of the same repository.
49464 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49465 * operation was added.
49466 */
49467
49468 var inherits = require('inherits')
49469 var Hash = require('./hash')
49470 var Buffer = require('safe-buffer').Buffer
49471
49472 var K = [
49473 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49474 ]
49475
49476 var W = new Array(80)
49477
49478 function Sha () {
49479 this.init()
49480 this._w = W
49481
49482 Hash.call(this, 64, 56)
49483 }
49484
49485 inherits(Sha, Hash)
49486
49487 Sha.prototype.init = function () {
49488 this._a = 0x67452301
49489 this._b = 0xefcdab89
49490 this._c = 0x98badcfe
49491 this._d = 0x10325476
49492 this._e = 0xc3d2e1f0
49493
49494 return this
49495 }
49496
49497 function rotl5 (num) {
49498 return (num << 5) | (num >>> 27)
49499 }
49500
49501 function rotl30 (num) {
49502 return (num << 30) | (num >>> 2)
49503 }
49504
49505 function ft (s, b, c, d) {
49506 if (s === 0) return (b & c) | ((~b) & d)
49507 if (s === 2) return (b & c) | (b & d) | (c & d)
49508 return b ^ c ^ d
49509 }
49510
49511 Sha.prototype._update = function (M) {
49512 var W = this._w
49513
49514 var a = this._a | 0
49515 var b = this._b | 0
49516 var c = this._c | 0
49517 var d = this._d | 0
49518 var e = this._e | 0
49519
49520 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49521 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
49522
49523 for (var j = 0; j < 80; ++j) {
49524 var s = ~~(j / 20)
49525 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49526
49527 e = d
49528 d = c
49529 c = rotl30(b)
49530 b = a
49531 a = t
49532 }
49533
49534 this._a = (a + this._a) | 0
49535 this._b = (b + this._b) | 0
49536 this._c = (c + this._c) | 0
49537 this._d = (d + this._d) | 0
49538 this._e = (e + this._e) | 0
49539 }
49540
49541 Sha.prototype._hash = function () {
49542 var H = Buffer.allocUnsafe(20)
49543
49544 H.writeInt32BE(this._a | 0, 0)
49545 H.writeInt32BE(this._b | 0, 4)
49546 H.writeInt32BE(this._c | 0, 8)
49547 H.writeInt32BE(this._d | 0, 12)
49548 H.writeInt32BE(this._e | 0, 16)
49549
49550 return H
49551 }
49552
49553 module.exports = Sha
49554
49555 },{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
49556 /*
49557 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49558 * in FIPS PUB 180-1
49559 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49560 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49561 * Distributed under the BSD License
49562 * See http://pajhome.org.uk/crypt/md5 for details.
49563 */
49564
49565 var inherits = require('inherits')
49566 var Hash = require('./hash')
49567 var Buffer = require('safe-buffer').Buffer
49568
49569 var K = [
49570 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49571 ]
49572
49573 var W = new Array(80)
49574
49575 function Sha1 () {
49576 this.init()
49577 this._w = W
49578
49579 Hash.call(this, 64, 56)
49580 }
49581
49582 inherits(Sha1, Hash)
49583
49584 Sha1.prototype.init = function () {
49585 this._a = 0x67452301
49586 this._b = 0xefcdab89
49587 this._c = 0x98badcfe
49588 this._d = 0x10325476
49589 this._e = 0xc3d2e1f0
49590
49591 return this
49592 }
49593
49594 function rotl1 (num) {
49595 return (num << 1) | (num >>> 31)
49596 }
49597
49598 function rotl5 (num) {
49599 return (num << 5) | (num >>> 27)
49600 }
49601
49602 function rotl30 (num) {
49603 return (num << 30) | (num >>> 2)
49604 }
49605
49606 function ft (s, b, c, d) {
49607 if (s === 0) return (b & c) | ((~b) & d)
49608 if (s === 2) return (b & c) | (b & d) | (c & d)
49609 return b ^ c ^ d
49610 }
49611
49612 Sha1.prototype._update = function (M) {
49613 var W = this._w
49614
49615 var a = this._a | 0
49616 var b = this._b | 0
49617 var c = this._c | 0
49618 var d = this._d | 0
49619 var e = this._e | 0
49620
49621 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49622 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
49623
49624 for (var j = 0; j < 80; ++j) {
49625 var s = ~~(j / 20)
49626 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49627
49628 e = d
49629 d = c
49630 c = rotl30(b)
49631 b = a
49632 a = t
49633 }
49634
49635 this._a = (a + this._a) | 0
49636 this._b = (b + this._b) | 0
49637 this._c = (c + this._c) | 0
49638 this._d = (d + this._d) | 0
49639 this._e = (e + this._e) | 0
49640 }
49641
49642 Sha1.prototype._hash = function () {
49643 var H = Buffer.allocUnsafe(20)
49644
49645 H.writeInt32BE(this._a | 0, 0)
49646 H.writeInt32BE(this._b | 0, 4)
49647 H.writeInt32BE(this._c | 0, 8)
49648 H.writeInt32BE(this._d | 0, 12)
49649 H.writeInt32BE(this._e | 0, 16)
49650
49651 return H
49652 }
49653
49654 module.exports = Sha1
49655
49656 },{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
49657 /**
49658 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49659 * in FIPS 180-2
49660 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49661 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49662 *
49663 */
49664
49665 var inherits = require('inherits')
49666 var Sha256 = require('./sha256')
49667 var Hash = require('./hash')
49668 var Buffer = require('safe-buffer').Buffer
49669
49670 var W = new Array(64)
49671
49672 function Sha224 () {
49673 this.init()
49674
49675 this._w = W // new Array(64)
49676
49677 Hash.call(this, 64, 56)
49678 }
49679
49680 inherits(Sha224, Sha256)
49681
49682 Sha224.prototype.init = function () {
49683 this._a = 0xc1059ed8
49684 this._b = 0x367cd507
49685 this._c = 0x3070dd17
49686 this._d = 0xf70e5939
49687 this._e = 0xffc00b31
49688 this._f = 0x68581511
49689 this._g = 0x64f98fa7
49690 this._h = 0xbefa4fa4
49691
49692 return this
49693 }
49694
49695 Sha224.prototype._hash = function () {
49696 var H = Buffer.allocUnsafe(28)
49697
49698 H.writeInt32BE(this._a, 0)
49699 H.writeInt32BE(this._b, 4)
49700 H.writeInt32BE(this._c, 8)
49701 H.writeInt32BE(this._d, 12)
49702 H.writeInt32BE(this._e, 16)
49703 H.writeInt32BE(this._f, 20)
49704 H.writeInt32BE(this._g, 24)
49705
49706 return H
49707 }
49708
49709 module.exports = Sha224
49710
49711 },{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
49712 /**
49713 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49714 * in FIPS 180-2
49715 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49716 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49717 *
49718 */
49719
49720 var inherits = require('inherits')
49721 var Hash = require('./hash')
49722 var Buffer = require('safe-buffer').Buffer
49723
49724 var K = [
49725 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49726 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49727 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49728 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49729 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49730 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49731 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49732 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49733 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49734 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49735 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49736 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49737 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49738 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49739 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49740 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49741 ]
49742
49743 var W = new Array(64)
49744
49745 function Sha256 () {
49746 this.init()
49747
49748 this._w = W // new Array(64)
49749
49750 Hash.call(this, 64, 56)
49751 }
49752
49753 inherits(Sha256, Hash)
49754
49755 Sha256.prototype.init = function () {
49756 this._a = 0x6a09e667
49757 this._b = 0xbb67ae85
49758 this._c = 0x3c6ef372
49759 this._d = 0xa54ff53a
49760 this._e = 0x510e527f
49761 this._f = 0x9b05688c
49762 this._g = 0x1f83d9ab
49763 this._h = 0x5be0cd19
49764
49765 return this
49766 }
49767
49768 function ch (x, y, z) {
49769 return z ^ (x & (y ^ z))
49770 }
49771
49772 function maj (x, y, z) {
49773 return (x & y) | (z & (x | y))
49774 }
49775
49776 function sigma0 (x) {
49777 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
49778 }
49779
49780 function sigma1 (x) {
49781 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
49782 }
49783
49784 function gamma0 (x) {
49785 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
49786 }
49787
49788 function gamma1 (x) {
49789 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
49790 }
49791
49792 Sha256.prototype._update = function (M) {
49793 var W = this._w
49794
49795 var a = this._a | 0
49796 var b = this._b | 0
49797 var c = this._c | 0
49798 var d = this._d | 0
49799 var e = this._e | 0
49800 var f = this._f | 0
49801 var g = this._g | 0
49802 var h = this._h | 0
49803
49804 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49805 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
49806
49807 for (var j = 0; j < 64; ++j) {
49808 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
49809 var T2 = (sigma0(a) + maj(a, b, c)) | 0
49810
49811 h = g
49812 g = f
49813 f = e
49814 e = (d + T1) | 0
49815 d = c
49816 c = b
49817 b = a
49818 a = (T1 + T2) | 0
49819 }
49820
49821 this._a = (a + this._a) | 0
49822 this._b = (b + this._b) | 0
49823 this._c = (c + this._c) | 0
49824 this._d = (d + this._d) | 0
49825 this._e = (e + this._e) | 0
49826 this._f = (f + this._f) | 0
49827 this._g = (g + this._g) | 0
49828 this._h = (h + this._h) | 0
49829 }
49830
49831 Sha256.prototype._hash = function () {
49832 var H = Buffer.allocUnsafe(32)
49833
49834 H.writeInt32BE(this._a, 0)
49835 H.writeInt32BE(this._b, 4)
49836 H.writeInt32BE(this._c, 8)
49837 H.writeInt32BE(this._d, 12)
49838 H.writeInt32BE(this._e, 16)
49839 H.writeInt32BE(this._f, 20)
49840 H.writeInt32BE(this._g, 24)
49841 H.writeInt32BE(this._h, 28)
49842
49843 return H
49844 }
49845
49846 module.exports = Sha256
49847
49848 },{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
49849 var inherits = require('inherits')
49850 var SHA512 = require('./sha512')
49851 var Hash = require('./hash')
49852 var Buffer = require('safe-buffer').Buffer
49853
49854 var W = new Array(160)
49855
49856 function Sha384 () {
49857 this.init()
49858 this._w = W
49859
49860 Hash.call(this, 128, 112)
49861 }
49862
49863 inherits(Sha384, SHA512)
49864
49865 Sha384.prototype.init = function () {
49866 this._ah = 0xcbbb9d5d
49867 this._bh = 0x629a292a
49868 this._ch = 0x9159015a
49869 this._dh = 0x152fecd8
49870 this._eh = 0x67332667
49871 this._fh = 0x8eb44a87
49872 this._gh = 0xdb0c2e0d
49873 this._hh = 0x47b5481d
49874
49875 this._al = 0xc1059ed8
49876 this._bl = 0x367cd507
49877 this._cl = 0x3070dd17
49878 this._dl = 0xf70e5939
49879 this._el = 0xffc00b31
49880 this._fl = 0x68581511
49881 this._gl = 0x64f98fa7
49882 this._hl = 0xbefa4fa4
49883
49884 return this
49885 }
49886
49887 Sha384.prototype._hash = function () {
49888 var H = Buffer.allocUnsafe(48)
49889
49890 function writeInt64BE (h, l, offset) {
49891 H.writeInt32BE(h, offset)
49892 H.writeInt32BE(l, offset + 4)
49893 }
49894
49895 writeInt64BE(this._ah, this._al, 0)
49896 writeInt64BE(this._bh, this._bl, 8)
49897 writeInt64BE(this._ch, this._cl, 16)
49898 writeInt64BE(this._dh, this._dl, 24)
49899 writeInt64BE(this._eh, this._el, 32)
49900 writeInt64BE(this._fh, this._fl, 40)
49901
49902 return H
49903 }
49904
49905 module.exports = Sha384
49906
49907 },{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
49908 var inherits = require('inherits')
49909 var Hash = require('./hash')
49910 var Buffer = require('safe-buffer').Buffer
49911
49912 var K = [
49913 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
49914 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
49915 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
49916 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
49917 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
49918 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
49919 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
49920 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
49921 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
49922 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
49923 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
49924 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
49925 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
49926 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
49927 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
49928 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
49929 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
49930 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
49931 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
49932 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
49933 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
49934 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
49935 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
49936 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
49937 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
49938 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
49939 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
49940 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
49941 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
49942 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
49943 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
49944 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
49945 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
49946 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
49947 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
49948 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
49949 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
49950 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
49951 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
49952 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
49953 ]
49954
49955 var W = new Array(160)
49956
49957 function Sha512 () {
49958 this.init()
49959 this._w = W
49960
49961 Hash.call(this, 128, 112)
49962 }
49963
49964 inherits(Sha512, Hash)
49965
49966 Sha512.prototype.init = function () {
49967 this._ah = 0x6a09e667
49968 this._bh = 0xbb67ae85
49969 this._ch = 0x3c6ef372
49970 this._dh = 0xa54ff53a
49971 this._eh = 0x510e527f
49972 this._fh = 0x9b05688c
49973 this._gh = 0x1f83d9ab
49974 this._hh = 0x5be0cd19
49975
49976 this._al = 0xf3bcc908
49977 this._bl = 0x84caa73b
49978 this._cl = 0xfe94f82b
49979 this._dl = 0x5f1d36f1
49980 this._el = 0xade682d1
49981 this._fl = 0x2b3e6c1f
49982 this._gl = 0xfb41bd6b
49983 this._hl = 0x137e2179
49984
49985 return this
49986 }
49987
49988 function Ch (x, y, z) {
49989 return z ^ (x & (y ^ z))
49990 }
49991
49992 function maj (x, y, z) {
49993 return (x & y) | (z & (x | y))
49994 }
49995
49996 function sigma0 (x, xl) {
49997 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
49998 }
49999
50000 function sigma1 (x, xl) {
50001 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
50002 }
50003
50004 function Gamma0 (x, xl) {
50005 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
50006 }
50007
50008 function Gamma0l (x, xl) {
50009 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
50010 }
50011
50012 function Gamma1 (x, xl) {
50013 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
50014 }
50015
50016 function Gamma1l (x, xl) {
50017 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
50018 }
50019
50020 function getCarry (a, b) {
50021 return (a >>> 0) < (b >>> 0) ? 1 : 0
50022 }
50023
50024 Sha512.prototype._update = function (M) {
50025 var W = this._w
50026
50027 var ah = this._ah | 0
50028 var bh = this._bh | 0
50029 var ch = this._ch | 0
50030 var dh = this._dh | 0
50031 var eh = this._eh | 0
50032 var fh = this._fh | 0
50033 var gh = this._gh | 0
50034 var hh = this._hh | 0
50035
50036 var al = this._al | 0
50037 var bl = this._bl | 0
50038 var cl = this._cl | 0
50039 var dl = this._dl | 0
50040 var el = this._el | 0
50041 var fl = this._fl | 0
50042 var gl = this._gl | 0
50043 var hl = this._hl | 0
50044
50045 for (var i = 0; i < 32; i += 2) {
50046 W[i] = M.readInt32BE(i * 4)
50047 W[i + 1] = M.readInt32BE(i * 4 + 4)
50048 }
50049 for (; i < 160; i += 2) {
50050 var xh = W[i - 15 * 2]
50051 var xl = W[i - 15 * 2 + 1]
50052 var gamma0 = Gamma0(xh, xl)
50053 var gamma0l = Gamma0l(xl, xh)
50054
50055 xh = W[i - 2 * 2]
50056 xl = W[i - 2 * 2 + 1]
50057 var gamma1 = Gamma1(xh, xl)
50058 var gamma1l = Gamma1l(xl, xh)
50059
50060 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
50061 var Wi7h = W[i - 7 * 2]
50062 var Wi7l = W[i - 7 * 2 + 1]
50063
50064 var Wi16h = W[i - 16 * 2]
50065 var Wi16l = W[i - 16 * 2 + 1]
50066
50067 var Wil = (gamma0l + Wi7l) | 0
50068 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
50069 Wil = (Wil + gamma1l) | 0
50070 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
50071 Wil = (Wil + Wi16l) | 0
50072 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
50073
50074 W[i] = Wih
50075 W[i + 1] = Wil
50076 }
50077
50078 for (var j = 0; j < 160; j += 2) {
50079 Wih = W[j]
50080 Wil = W[j + 1]
50081
50082 var majh = maj(ah, bh, ch)
50083 var majl = maj(al, bl, cl)
50084
50085 var sigma0h = sigma0(ah, al)
50086 var sigma0l = sigma0(al, ah)
50087 var sigma1h = sigma1(eh, el)
50088 var sigma1l = sigma1(el, eh)
50089
50090 // t1 = h + sigma1 + ch + K[j] + W[j]
50091 var Kih = K[j]
50092 var Kil = K[j + 1]
50093
50094 var chh = Ch(eh, fh, gh)
50095 var chl = Ch(el, fl, gl)
50096
50097 var t1l = (hl + sigma1l) | 0
50098 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
50099 t1l = (t1l + chl) | 0
50100 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
50101 t1l = (t1l + Kil) | 0
50102 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
50103 t1l = (t1l + Wil) | 0
50104 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
50105
50106 // t2 = sigma0 + maj
50107 var t2l = (sigma0l + majl) | 0
50108 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
50109
50110 hh = gh
50111 hl = gl
50112 gh = fh
50113 gl = fl
50114 fh = eh
50115 fl = el
50116 el = (dl + t1l) | 0
50117 eh = (dh + t1h + getCarry(el, dl)) | 0
50118 dh = ch
50119 dl = cl
50120 ch = bh
50121 cl = bl
50122 bh = ah
50123 bl = al
50124 al = (t1l + t2l) | 0
50125 ah = (t1h + t2h + getCarry(al, t1l)) | 0
50126 }
50127
50128 this._al = (this._al + al) | 0
50129 this._bl = (this._bl + bl) | 0
50130 this._cl = (this._cl + cl) | 0
50131 this._dl = (this._dl + dl) | 0
50132 this._el = (this._el + el) | 0
50133 this._fl = (this._fl + fl) | 0
50134 this._gl = (this._gl + gl) | 0
50135 this._hl = (this._hl + hl) | 0
50136
50137 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50138 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50139 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50140 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50141 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50142 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50143 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50144 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
50145 }
50146
50147 Sha512.prototype._hash = function () {
50148 var H = Buffer.allocUnsafe(64)
50149
50150 function writeInt64BE (h, l, offset) {
50151 H.writeInt32BE(h, offset)
50152 H.writeInt32BE(l, offset + 4)
50153 }
50154
50155 writeInt64BE(this._ah, this._al, 0)
50156 writeInt64BE(this._bh, this._bl, 8)
50157 writeInt64BE(this._ch, this._cl, 16)
50158 writeInt64BE(this._dh, this._dl, 24)
50159 writeInt64BE(this._eh, this._el, 32)
50160 writeInt64BE(this._fh, this._fl, 40)
50161 writeInt64BE(this._gh, this._gl, 48)
50162 writeInt64BE(this._hh, this._hl, 56)
50163
50164 return H
50165 }
50166
50167 module.exports = Sha512
50168
50169 },{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
50170 var native = require('./native')
50171
50172 function getTypeName (fn) {
50173 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
50174 }
50175
50176 function getValueTypeName (value) {
50177 return native.Nil(value) ? '' : getTypeName(value.constructor)
50178 }
50179
50180 function getValue (value) {
50181 if (native.Function(value)) return ''
50182 if (native.String(value)) return JSON.stringify(value)
50183 if (value && native.Object(value)) return ''
50184 return value
50185 }
50186
50187 function tfJSON (type) {
50188 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
50189 if (native.Array(type)) return 'Array'
50190 if (type && native.Object(type)) return 'Object'
50191
50192 return type !== undefined ? type : ''
50193 }
50194
50195 function tfErrorString (type, value, valueTypeName) {
50196 var valueJson = getValue(value)
50197
50198 return 'Expected ' + tfJSON(type) + ', got' +
50199 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
50200 (valueJson !== '' ? ' ' + valueJson : '')
50201 }
50202
50203 function TfTypeError (type, value, valueTypeName) {
50204 valueTypeName = valueTypeName || getValueTypeName(value)
50205 this.message = tfErrorString(type, value, valueTypeName)
50206
50207 Error.captureStackTrace(this, TfTypeError)
50208 this.__type = type
50209 this.__value = value
50210 this.__valueTypeName = valueTypeName
50211 }
50212
50213 TfTypeError.prototype = Object.create(Error.prototype)
50214 TfTypeError.prototype.constructor = TfTypeError
50215
50216 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
50217 var description = '" of type '
50218 if (label === 'key') description = '" with key type '
50219
50220 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
50221 }
50222
50223 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
50224 if (type) {
50225 valueTypeName = valueTypeName || getValueTypeName(value)
50226 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
50227 } else {
50228 this.message = 'Unexpected property "' + property + '"'
50229 }
50230
50231 Error.captureStackTrace(this, TfTypeError)
50232 this.__label = label
50233 this.__property = property
50234 this.__type = type
50235 this.__value = value
50236 this.__valueTypeName = valueTypeName
50237 }
50238
50239 TfPropertyTypeError.prototype = Object.create(Error.prototype)
50240 TfPropertyTypeError.prototype.constructor = TfTypeError
50241
50242 function tfCustomError (expected, actual) {
50243 return new TfTypeError(expected, {}, actual)
50244 }
50245
50246 function tfSubError (e, property, label) {
50247 // sub child?
50248 if (e instanceof TfPropertyTypeError) {
50249 property = property + '.' + e.__property
50250
50251 e = new TfPropertyTypeError(
50252 e.__type, property, e.__label, e.__value, e.__valueTypeName
50253 )
50254
50255 // child?
50256 } else if (e instanceof TfTypeError) {
50257 e = new TfPropertyTypeError(
50258 e.__type, property, label, e.__value, e.__valueTypeName
50259 )
50260 }
50261
50262 Error.captureStackTrace(e)
50263 return e
50264 }
50265
50266 module.exports = {
50267 TfTypeError: TfTypeError,
50268 TfPropertyTypeError: TfPropertyTypeError,
50269 tfCustomError: tfCustomError,
50270 tfSubError: tfSubError,
50271 tfJSON: tfJSON,
50272 getValueTypeName: getValueTypeName
50273 }
50274
50275 },{"./native":140}],138:[function(require,module,exports){
50276 (function (Buffer){
50277 var NATIVE = require('./native')
50278 var ERRORS = require('./errors')
50279
50280 function _Buffer (value) {
50281 return Buffer.isBuffer(value)
50282 }
50283
50284 function Hex (value) {
50285 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
50286 }
50287
50288 function _LengthN (type, length) {
50289 var name = type.toJSON()
50290
50291 function Length (value) {
50292 if (!type(value)) return false
50293 if (value.length === length) return true
50294
50295 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
50296 }
50297 Length.toJSON = function () { return name }
50298
50299 return Length
50300 }
50301
50302 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
50303 var _BufferN = _LengthN.bind(null, _Buffer)
50304 var _HexN = _LengthN.bind(null, Hex)
50305 var _StringN = _LengthN.bind(null, NATIVE.String)
50306
50307 var UINT53_MAX = Math.pow(2, 53) - 1
50308
50309 function Finite (value) {
50310 return typeof value === 'number' && isFinite(value)
50311 }
50312 function Int8 (value) { return ((value << 24) >> 24) === value }
50313 function Int16 (value) { return ((value << 16) >> 16) === value }
50314 function Int32 (value) { return (value | 0) === value }
50315 function UInt8 (value) { return (value & 0xff) === value }
50316 function UInt16 (value) { return (value & 0xffff) === value }
50317 function UInt32 (value) { return (value >>> 0) === value }
50318 function UInt53 (value) {
50319 return typeof value === 'number' &&
50320 value >= 0 &&
50321 value <= UINT53_MAX &&
50322 Math.floor(value) === value
50323 }
50324
50325 var types = {
50326 ArrayN: _ArrayN,
50327 Buffer: _Buffer,
50328 BufferN: _BufferN,
50329 Finite: Finite,
50330 Hex: Hex,
50331 HexN: _HexN,
50332 Int8: Int8,
50333 Int16: Int16,
50334 Int32: Int32,
50335 StringN: _StringN,
50336 UInt8: UInt8,
50337 UInt16: UInt16,
50338 UInt32: UInt32,
50339 UInt53: UInt53
50340 }
50341
50342 for (var typeName in types) {
50343 types[typeName].toJSON = function (t) {
50344 return t
50345 }.bind(null, typeName)
50346 }
50347
50348 module.exports = types
50349
50350 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
50351 },{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":137,"./native":140}],139:[function(require,module,exports){
50352 var ERRORS = require('./errors')
50353 var NATIVE = require('./native')
50354
50355 // short-hand
50356 var tfJSON = ERRORS.tfJSON
50357 var TfTypeError = ERRORS.TfTypeError
50358 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
50359 var tfSubError = ERRORS.tfSubError
50360 var getValueTypeName = ERRORS.getValueTypeName
50361
50362 var TYPES = {
50363 arrayOf: function arrayOf (type) {
50364 type = compile(type)
50365
50366 function _arrayOf (array, strict) {
50367 if (!NATIVE.Array(array)) return false
50368 if (NATIVE.Nil(array)) return false
50369
50370 return array.every(function (value, i) {
50371 try {
50372 return typeforce(type, value, strict)
50373 } catch (e) {
50374 throw tfSubError(e, i)
50375 }
50376 })
50377 }
50378 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
50379
50380 return _arrayOf
50381 },
50382
50383 maybe: function maybe (type) {
50384 type = compile(type)
50385
50386 function _maybe (value, strict) {
50387 return NATIVE.Nil(value) || type(value, strict, maybe)
50388 }
50389 _maybe.toJSON = function () { return '?' + tfJSON(type) }
50390
50391 return _maybe
50392 },
50393
50394 map: function map (propertyType, propertyKeyType) {
50395 propertyType = compile(propertyType)
50396 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
50397
50398 function _map (value, strict) {
50399 if (!NATIVE.Object(value)) return false
50400 if (NATIVE.Nil(value)) return false
50401
50402 for (var propertyName in value) {
50403 try {
50404 if (propertyKeyType) {
50405 typeforce(propertyKeyType, propertyName, strict)
50406 }
50407 } catch (e) {
50408 throw tfSubError(e, propertyName, 'key')
50409 }
50410
50411 try {
50412 var propertyValue = value[propertyName]
50413 typeforce(propertyType, propertyValue, strict)
50414 } catch (e) {
50415 throw tfSubError(e, propertyName)
50416 }
50417 }
50418
50419 return true
50420 }
50421
50422 if (propertyKeyType) {
50423 _map.toJSON = function () {
50424 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
50425 }
50426 } else {
50427 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
50428 }
50429
50430 return _map
50431 },
50432
50433 object: function object (uncompiled) {
50434 var type = {}
50435
50436 for (var typePropertyName in uncompiled) {
50437 type[typePropertyName] = compile(uncompiled[typePropertyName])
50438 }
50439
50440 function _object (value, strict) {
50441 if (!NATIVE.Object(value)) return false
50442 if (NATIVE.Nil(value)) return false
50443
50444 var propertyName
50445
50446 try {
50447 for (propertyName in type) {
50448 var propertyType = type[propertyName]
50449 var propertyValue = value[propertyName]
50450
50451 typeforce(propertyType, propertyValue, strict)
50452 }
50453 } catch (e) {
50454 throw tfSubError(e, propertyName)
50455 }
50456
50457 if (strict) {
50458 for (propertyName in value) {
50459 if (type[propertyName]) continue
50460
50461 throw new TfPropertyTypeError(undefined, propertyName)
50462 }
50463 }
50464
50465 return true
50466 }
50467 _object.toJSON = function () { return tfJSON(type) }
50468
50469 return _object
50470 },
50471
50472 oneOf: function oneOf () {
50473 var types = [].slice.call(arguments).map(compile)
50474
50475 function _oneOf (value, strict) {
50476 return types.some(function (type) {
50477 try {
50478 return typeforce(type, value, strict)
50479 } catch (e) {
50480 return false
50481 }
50482 })
50483 }
50484 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
50485
50486 return _oneOf
50487 },
50488
50489 quacksLike: function quacksLike (type) {
50490 function _quacksLike (value) {
50491 return type === getValueTypeName(value)
50492 }
50493 _quacksLike.toJSON = function () { return type }
50494
50495 return _quacksLike
50496 },
50497
50498 tuple: function tuple () {
50499 var types = [].slice.call(arguments).map(compile)
50500
50501 function _tuple (values, strict) {
50502 if (NATIVE.Nil(values)) return false
50503 if (NATIVE.Nil(values.length)) return false
50504 if (strict && (values.length !== types.length)) return false
50505
50506 return types.every(function (type, i) {
50507 try {
50508 return typeforce(type, values[i], strict)
50509 } catch (e) {
50510 throw tfSubError(e, i)
50511 }
50512 })
50513 }
50514 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
50515
50516 return _tuple
50517 },
50518
50519 value: function value (expected) {
50520 function _value (actual) {
50521 return actual === expected
50522 }
50523 _value.toJSON = function () { return expected }
50524
50525 return _value
50526 }
50527 }
50528
50529 function compile (type) {
50530 if (NATIVE.String(type)) {
50531 if (type[0] === '?') return TYPES.maybe(type.slice(1))
50532
50533 return NATIVE[type] || TYPES.quacksLike(type)
50534 } else if (type && NATIVE.Object(type)) {
50535 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
50536
50537 return TYPES.object(type)
50538 } else if (NATIVE.Function(type)) {
50539 return type
50540 }
50541
50542 return TYPES.value(type)
50543 }
50544
50545 function typeforce (type, value, strict, surrogate) {
50546 if (NATIVE.Function(type)) {
50547 if (type(value, strict)) return true
50548
50549 throw new TfTypeError(surrogate || type, value)
50550 }
50551
50552 // JIT
50553 return typeforce(compile(type), value, strict)
50554 }
50555
50556 // assign types to typeforce function
50557 for (var typeName in NATIVE) {
50558 typeforce[typeName] = NATIVE[typeName]
50559 }
50560
50561 for (typeName in TYPES) {
50562 typeforce[typeName] = TYPES[typeName]
50563 }
50564
50565 var EXTRA = require('./extra')
50566 for (typeName in EXTRA) {
50567 typeforce[typeName] = EXTRA[typeName]
50568 }
50569
50570 // async wrapper
50571 function __async (type, value, strict, callback) {
50572 // default to falsy strict if using shorthand overload
50573 if (typeof strict === 'function') return __async(type, value, false, strict)
50574
50575 try {
50576 typeforce(type, value, strict)
50577 } catch (e) {
50578 return callback(e)
50579 }
50580
50581 callback()
50582 }
50583
50584 typeforce.async = __async
50585 typeforce.compile = compile
50586 typeforce.TfTypeError = TfTypeError
50587 typeforce.TfPropertyTypeError = TfPropertyTypeError
50588
50589 module.exports = typeforce
50590
50591 },{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
50592 var types = {
50593 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
50594 Boolean: function (value) { return typeof value === 'boolean' },
50595 Function: function (value) { return typeof value === 'function' },
50596 Nil: function (value) { return value === undefined || value === null },
50597 Number: function (value) { return typeof value === 'number' },
50598 Object: function (value) { return typeof value === 'object' },
50599 String: function (value) { return typeof value === 'string' },
50600 '': function () { return true }
50601 }
50602
50603 // TODO: deprecate
50604 types.Null = types.Nil
50605
50606 for (var typeName in types) {
50607 types[typeName].toJSON = function (t) {
50608 return t
50609 }.bind(null, typeName)
50610 }
50611
50612 module.exports = types
50613
50614 },{}],141:[function(require,module,exports){
50615 (function (Buffer){
50616 'use strict'
50617
50618 // Number.MAX_SAFE_INTEGER
50619 var MAX_SAFE_INTEGER = 9007199254740991
50620
50621 function checkUInt53 (n) {
50622 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
50623 }
50624
50625 function encode (number, buffer, offset) {
50626 checkUInt53(number)
50627
50628 if (!buffer) buffer = new Buffer(encodingLength(number))
50629 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50630 if (!offset) offset = 0
50631
50632 // 8 bit
50633 if (number < 0xfd) {
50634 buffer.writeUInt8(number, offset)
50635 encode.bytes = 1
50636
50637 // 16 bit
50638 } else if (number <= 0xffff) {
50639 buffer.writeUInt8(0xfd, offset)
50640 buffer.writeUInt16LE(number, offset + 1)
50641 encode.bytes = 3
50642
50643 // 32 bit
50644 } else if (number <= 0xffffffff) {
50645 buffer.writeUInt8(0xfe, offset)
50646 buffer.writeUInt32LE(number, offset + 1)
50647 encode.bytes = 5
50648
50649 // 64 bit
50650 } else {
50651 buffer.writeUInt8(0xff, offset)
50652 buffer.writeUInt32LE(number >>> 0, offset + 1)
50653 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
50654 encode.bytes = 9
50655 }
50656
50657 return buffer
50658 }
50659
50660 function decode (buffer, offset) {
50661 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50662 if (!offset) offset = 0
50663
50664 var first = buffer.readUInt8(offset)
50665
50666 // 8 bit
50667 if (first < 0xfd) {
50668 decode.bytes = 1
50669 return first
50670
50671 // 16 bit
50672 } else if (first === 0xfd) {
50673 decode.bytes = 3
50674 return buffer.readUInt16LE(offset + 1)
50675
50676 // 32 bit
50677 } else if (first === 0xfe) {
50678 decode.bytes = 5
50679 return buffer.readUInt32LE(offset + 1)
50680
50681 // 64 bit
50682 } else {
50683 decode.bytes = 9
50684 var lo = buffer.readUInt32LE(offset + 1)
50685 var hi = buffer.readUInt32LE(offset + 5)
50686 var number = hi * 0x0100000000 + lo
50687 checkUInt53(number)
50688
50689 return number
50690 }
50691 }
50692
50693 function encodingLength (number) {
50694 checkUInt53(number)
50695
50696 return (
50697 number < 0xfd ? 1
50698 : number <= 0xffff ? 3
50699 : number <= 0xffffffff ? 5
50700 : 9
50701 )
50702 }
50703
50704 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
50705
50706 }).call(this,require("buffer").Buffer)
50707 },{"buffer":5}],142:[function(require,module,exports){
50708 (function (Buffer){
50709 var bs58check = require('bs58check')
50710
50711 function decodeRaw (buffer, version) {
50712 // check version only if defined
50713 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
50714
50715 // uncompressed
50716 if (buffer.length === 33) {
50717 return {
50718 version: buffer[0],
50719 privateKey: buffer.slice(1, 33),
50720 compressed: false
50721 }
50722 }
50723
50724 // invalid length
50725 if (buffer.length !== 34) throw new Error('Invalid WIF length')
50726
50727 // invalid compression flag
50728 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
50729
50730 return {
50731 version: buffer[0],
50732 privateKey: buffer.slice(1, 33),
50733 compressed: true
50734 }
50735 }
50736
50737 function encodeRaw (version, privateKey, compressed) {
50738 var result = new Buffer(compressed ? 34 : 33)
50739
50740 result.writeUInt8(version, 0)
50741 privateKey.copy(result, 1)
50742
50743 if (compressed) {
50744 result[33] = 0x01
50745 }
50746
50747 return result
50748 }
50749
50750 function decode (string, version) {
50751 return decodeRaw(bs58check.decode(string), version)
50752 }
50753
50754 function encode (version, privateKey, compressed) {
50755 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
50756
50757 return bs58check.encode(
50758 encodeRaw(
50759 version.version,
50760 version.privateKey,
50761 version.compressed
50762 )
50763 )
50764 }
50765
50766 module.exports = {
50767 decode: decode,
50768 decodeRaw: decodeRaw,
50769 encode: encode,
50770 encodeRaw: encodeRaw
50771 }
50772
50773 }).call(this,require("buffer").Buffer)
50774 },{"bs58check":85,"buffer":5}]},{},[34])(34)
50775 });</script>
50776 <script>bitcoinjs.bitcoin.networks.shadow = {
50777 messagePrefix: 'unused',
50778 bip32: {
50779 public: 0xEE80286A,
50780 private: 0xEE8031E8
50781 },
50782 pubKeyHash: 0x3f,
50783 scriptHash: 0x7d,
50784 wif: 0xbf
50785 };
50786
50787 bitcoinjs.bitcoin.networks.shadowtn = {
50788 messagePrefix: 'unused',
50789 bip32: {
50790 public: 0x76C0FDFB,
50791 private: 0x76C1077A
50792 },
50793 pubKeyHash: 0x7f,
50794 scriptHash: 0xc4,
50795 wif: 0xff
50796 };
50797
50798 bitcoinjs.bitcoin.networks.clam = {
50799 messagePrefix: 'unused',
50800 bip32: {
50801 public: 0xa8c26d64,
50802 private: 0xa8c17826
50803 },
50804 pubKeyHash: 0x89,
50805 scriptHash: 0x00, // TODO set this correctly
50806 wif: 0x85
50807 };
50808
50809 bitcoinjs.bitcoin.networks.crown = {
50810 messagePrefix: 'unused',
50811 bip32: {
50812 public: 0x0488b21e,
50813 private: 0x0488ade4
50814 },
50815 pubKeyHash: 0x00,
50816 scriptHash: 0x05,
50817 wif: 0x80
50818 };
50819
50820 bitcoinjs.bitcoin.networks.dash = {
50821 messagePrefix: 'unused',
50822 bip32: {
50823 public: 0x0488b21e,
50824 private: 0x0488ade4
50825 },
50826 pubKeyHash: 0x4c,
50827 scriptHash: 0x10,
50828 wif: 0xcc
50829 };
50830
50831 bitcoinjs.bitcoin.networks.maza = {
50832 messagePrefix: 'unused',
50833 bip32: {
50834 public: 0x0488b21e,
50835 private: 0x0488ade4
50836 },
50837 pubKeyHash: 0x32,
50838 scriptHash: 0x09,
50839 wif: 0xe0
50840 };
50841
50842 bitcoinjs.bitcoin.networks.dashtn = {
50843 messagePrefix: 'unused',
50844 bip32: {
50845 public: 0x043587cf,
50846 private: 0x04358394
50847 },
50848 pubKeyHash: 0x8c,
50849 scriptHash: 0x13,
50850 wif: 0xef
50851 };
50852
50853 bitcoinjs.bitcoin.networks.game = {
50854 messagePrefix: 'unused',
50855 bip32: {
50856 public: 0x0488b21e,
50857 private: 0x0488ade4
50858 },
50859 pubKeyHash: 0x26,
50860 scriptHash: 0x05,
50861 wif: 0xa6
50862 };
50863
50864 bitcoinjs.bitcoin.networks.namecoin = {
50865 messagePrefix: 'unused',
50866 bip32: {
50867 public: 0x0488b21e,
50868 private: 0x0488ade4
50869 },
50870 pubKeyHash: 0x34,
50871 scriptHash: 0x00, // TODO set this correctly
50872 wif: 0x80
50873 };
50874
50875 bitcoinjs.bitcoin.networks.peercoin = {
50876 messagePrefix: 'unused',
50877 bip32: {
50878 public: 0x0488b21e,
50879 private: 0x0488ade4
50880 },
50881 pubKeyHash: 0x37,
50882 scriptHash: 0x00, // TODO set this correctly
50883 wif: 0xb7
50884 };
50885
50886 bitcoinjs.bitcoin.networks.axe = {
50887 messagePrefix: 'unused',
50888 bip32: {
50889 public: 0x0488b21e,
50890 private: 0x0488ade4
50891 },
50892 pubKeyHash: 0x4B,
50893 scriptHash: 0xCB, // TODO set this correctly
50894 wif: 0xCB
50895 };
50896
50897 bitcoinjs.bitcoin.networks.slimcoin = {
50898 messagePrefix: 'unused',
50899 bip32: {
50900 public: 0xef6adf10,
50901 private: 0xef69ea80
50902 },
50903 pubKeyHash: 0x3f,
50904 scriptHash: 0x7d,
50905 wif: 0x46
50906 };
50907
50908 bitcoinjs.bitcoin.networks.slimcointn = {
50909 messagePrefix: 'unused',
50910 bip32: {
50911 public: 0x043587CF,
50912 private: 0x04358394
50913 },
50914 pubKeyHash: 0x6f,
50915 scriptHash: 0xc4,
50916 wif: 0x57
50917 };
50918
50919 bitcoinjs.bitcoin.networks.dogecoin = {
50920 messagePrefix: '\x19Dogecoin Signed Message:\n',
50921 bip32: {
50922 public: 0x02facafd,
50923 private: 0x02fac398
50924 },
50925 pubKeyHash: 0x1e,
50926 scriptHash: 0x16,
50927 wif: 0x9e
50928 };
50929
50930 bitcoinjs.bitcoin.networks.denarius = {
50931 messagePrefix: '\x19Denarius Signed Message:\n',
50932 bip32: {
50933 public: 0x0488b21e,
50934 private: 0x0488ade4
50935 },
50936 pubKeyHash: 0x1e,
50937 scriptHash: 0x5a,
50938 wif: 0x9e
50939 };
50940
50941 bitcoinjs.bitcoin.networks.viacoin = {
50942 messagePrefix: '\x18Viacoin Signed Message:\n',
50943 bip32: {
50944 public: 0x0488b21e,
50945 private: 0x0488ade4
50946 },
50947 pubKeyHash: 0x47,
50948 scriptHash: 0x21,
50949 wif: 0xc7
50950 };
50951
50952 bitcoinjs.bitcoin.networks.viacointestnet = {
50953 messagePrefix: '\x18Viacoin Signed Message:\n',
50954 bip32: {
50955 public: 0x043587cf,
50956 private: 0x04358394
50957 },
50958 pubKeyHash: 0x7f,
50959 scriptHash: 0xc4,
50960 wif: 0xff
50961 };
50962
50963 bitcoinjs.bitcoin.networks.gamerscoin = {
50964 messagePrefix: '\x19Gamerscoin Signed Message:\n',
50965 bip32: {
50966 public: 0x019da462,
50967 private: 0x019d9cfe
50968 },
50969 pubKeyHash: 0x26,
50970 scriptHash: 0x05,
50971 wif: 0xA6
50972 };
50973
50974 bitcoinjs.bitcoin.networks.jumbucks = {
50975 messagePrefix: '\x19Jumbucks Signed Message:\n',
50976 bip32: {
50977 public: 0x037a689a,
50978 private: 0x037a6460
50979 },
50980 pubKeyHash: 0x2b,
50981 scriptHash: 0x05,
50982 wif: 0xab
50983 };
50984
50985 bitcoinjs.bitcoin.networks.zetacoin = {
50986 messagePrefix: '\x18Zetacoin Signed Message:\n',
50987 bip32: {
50988 public: 0x0488b21e,
50989 private: 0x0488ade4
50990 },
50991 pubKeyHash: 0x50,
50992 scriptHash: 0x09,
50993 wif: 0xe0
50994 };
50995
50996 bitcoinjs.bitcoin.networks.myriadcoin = {
50997 messagePrefix: 'unused',
50998 bip32: {
50999 public: 0x0488b21e,
51000 private: 0x0488ade4
51001 },
51002 pubKeyHash: 0x32,
51003 scriptHash: 0x00, // TODO set this correctly
51004 wif: 0xb2
51005 };
51006
51007
51008 bitcoinjs.bitcoin.networks.onixcoin = {
51009 messagePrefix: 'unused',
51010 bip32: {
51011 public: 0x049d7cb2,
51012 private: 0x049d7878
51013 },
51014 pubKeyHash: 0x4B,
51015 scriptHash: 0x05,
51016 wif: 0x80
51017 };
51018
51019 bitcoinjs.bitcoin.networks.pivx = {
51020 messagePrefix: 'unused',
51021 bip32: {
51022 public: 0x022d2533,
51023 private: 0x0221312b
51024 },
51025 pubKeyHash: 0x1e,
51026 scriptHash: 0x0d,
51027 wif: 0xd4
51028 };
51029
51030 bitcoinjs.bitcoin.networks.pivxtestnet = {
51031 messagePrefix: 'unused',
51032 bip32: {
51033 public: 0x3a8061a0,
51034 private: 0x3a805837
51035 },
51036 pubKeyHash: 0x8b,
51037 scriptHash: 0x13,
51038 wif: 0xef
51039 };
51040
51041 bitcoinjs.bitcoin.networks.fujicoin = {
51042 messagePrefix: '\x19FujiCoin Signed Message:\n',
51043 bip32: {
51044 public: 0x0488b21e,
51045 private: 0x0488ade4
51046 },
51047 pubKeyHash: 0x24,
51048 scriptHash: 0x10,
51049 wif: 0xa4
51050 };
51051
51052 bitcoinjs.bitcoin.networks.nubits = {
51053 messagePrefix: '\x18Nu Signed Message:\n',
51054 bip32: {
51055 public: 0x0488b21e,
51056 private: 0x0488ade4
51057 },
51058 pubKeyHash: 0x19,
51059 scriptHash: 0x1a,
51060 wif: 0x96,
51061 };
51062
51063 bitcoinjs.bitcoin.networks.bgold = {
51064 messagePrefix: 'unused',
51065 bip32: {
51066 public: 0x0488b21e,
51067 private: 0x0488ade4
51068 },
51069 pubKeyHash: 38,
51070 scriptHash: 23,
51071 wif: 128
51072 };
51073
51074 bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
51075 messagePrefix: '\x18Bitcoin Signed Message:\n',
51076 bip32: {
51077 public: 0x0488b21e,
51078 private: 0x0488ade4
51079 },
51080 pubKeyHash: 0x1c,
51081 scriptHash: 0x28,
51082 wif: 0x80
51083 };
51084
51085 bitcoinjs.bitcoin.networks.monacoin = {
51086 messagePrefix: '\x18Monacoin Signed Message:\n',
51087 bip32: {
51088 public: 0x0488b21e,
51089 private: 0x0488ade4
51090 },
51091 pubKeyHash: 0x32,
51092 scriptHash: 0x37,
51093 wif: 0xb0
51094 };
51095
51096 bitcoinjs.bitcoin.networks.litecoinXprv = {
51097 messagePrefix: '\x19Litecoin Signed Message:\n',
51098 bip32: {
51099 public: 0x0488b21e,
51100 private: 0x0488ade4,
51101 },
51102 pubKeyHash: 0x30,
51103 scriptHash: 0x32,
51104 wif: 0xb0
51105 };
51106
51107 bitcoinjs.bitcoin.networks.komodo = {
51108 messagePrefix: '\x18Komodo Signed Message:\n',
51109 bip32: {
51110 public: 0x0488B21E,
51111 private: 0x0488ADE4
51112 },
51113 pubKeyHash: 0x3c,
51114 scriptHash: 0x55,
51115 wif: 0xbc
51116 };
51117
51118 bitcoinjs.bitcoin.networks.blackcoin = {
51119 messagePrefix: '\x18BlackCoin Signed Message:\n',
51120 bip32: {
51121 public: 0x02CFBEDE,
51122 private: 0x02CFBF60
51123 },
51124 pubKeyHash: 0x19,
51125 scriptHash: 0x55,
51126 wif: 0x99
51127 };
51128 </script>
51129 <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){
51130 var asn1 = exports;
51131
51132 asn1.bignum = require('bn.js');
51133
51134 asn1.define = require('./asn1/api').define;
51135 asn1.base = require('./asn1/base');
51136 asn1.constants = require('./asn1/constants');
51137 asn1.decoders = require('./asn1/decoders');
51138 asn1.encoders = require('./asn1/encoders');
51139
51140 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
51141 var asn1 = require('../asn1');
51142 var inherits = require('inherits');
51143
51144 var api = exports;
51145
51146 api.define = function define(name, body) {
51147 return new Entity(name, body);
51148 };
51149
51150 function Entity(name, body) {
51151 this.name = name;
51152 this.body = body;
51153
51154 this.decoders = {};
51155 this.encoders = {};
51156 };
51157
51158 Entity.prototype._createNamed = function createNamed(base) {
51159 var named;
51160 try {
51161 named = require('vm').runInThisContext(
51162 '(function ' + this.name + '(entity) {\n' +
51163 ' this._initNamed(entity);\n' +
51164 '})'
51165 );
51166 } catch (e) {
51167 named = function (entity) {
51168 this._initNamed(entity);
51169 };
51170 }
51171 inherits(named, base);
51172 named.prototype._initNamed = function initnamed(entity) {
51173 base.call(this, entity);
51174 };
51175
51176 return new named(this);
51177 };
51178
51179 Entity.prototype._getDecoder = function _getDecoder(enc) {
51180 enc = enc || 'der';
51181 // Lazily create decoder
51182 if (!this.decoders.hasOwnProperty(enc))
51183 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
51184 return this.decoders[enc];
51185 };
51186
51187 Entity.prototype.decode = function decode(data, enc, options) {
51188 return this._getDecoder(enc).decode(data, options);
51189 };
51190
51191 Entity.prototype._getEncoder = function _getEncoder(enc) {
51192 enc = enc || 'der';
51193 // Lazily create encoder
51194 if (!this.encoders.hasOwnProperty(enc))
51195 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
51196 return this.encoders[enc];
51197 };
51198
51199 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
51200 return this._getEncoder(enc).encode(data, reporter);
51201 };
51202
51203 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
51204 var inherits = require('inherits');
51205 var Reporter = require('../base').Reporter;
51206 var Buffer = require('buffer').Buffer;
51207
51208 function DecoderBuffer(base, options) {
51209 Reporter.call(this, options);
51210 if (!Buffer.isBuffer(base)) {
51211 this.error('Input not Buffer');
51212 return;
51213 }
51214
51215 this.base = base;
51216 this.offset = 0;
51217 this.length = base.length;
51218 }
51219 inherits(DecoderBuffer, Reporter);
51220 exports.DecoderBuffer = DecoderBuffer;
51221
51222 DecoderBuffer.prototype.save = function save() {
51223 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
51224 };
51225
51226 DecoderBuffer.prototype.restore = function restore(save) {
51227 // Return skipped data
51228 var res = new DecoderBuffer(this.base);
51229 res.offset = save.offset;
51230 res.length = this.offset;
51231
51232 this.offset = save.offset;
51233 Reporter.prototype.restore.call(this, save.reporter);
51234
51235 return res;
51236 };
51237
51238 DecoderBuffer.prototype.isEmpty = function isEmpty() {
51239 return this.offset === this.length;
51240 };
51241
51242 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
51243 if (this.offset + 1 <= this.length)
51244 return this.base.readUInt8(this.offset++, true);
51245 else
51246 return this.error(fail || 'DecoderBuffer overrun');
51247 }
51248
51249 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
51250 if (!(this.offset + bytes <= this.length))
51251 return this.error(fail || 'DecoderBuffer overrun');
51252
51253 var res = new DecoderBuffer(this.base);
51254
51255 // Share reporter state
51256 res._reporterState = this._reporterState;
51257
51258 res.offset = this.offset;
51259 res.length = this.offset + bytes;
51260 this.offset += bytes;
51261 return res;
51262 }
51263
51264 DecoderBuffer.prototype.raw = function raw(save) {
51265 return this.base.slice(save ? save.offset : this.offset, this.length);
51266 }
51267
51268 function EncoderBuffer(value, reporter) {
51269 if (Array.isArray(value)) {
51270 this.length = 0;
51271 this.value = value.map(function(item) {
51272 if (!(item instanceof EncoderBuffer))
51273 item = new EncoderBuffer(item, reporter);
51274 this.length += item.length;
51275 return item;
51276 }, this);
51277 } else if (typeof value === 'number') {
51278 if (!(0 <= value && value <= 0xff))
51279 return reporter.error('non-byte EncoderBuffer value');
51280 this.value = value;
51281 this.length = 1;
51282 } else if (typeof value === 'string') {
51283 this.value = value;
51284 this.length = Buffer.byteLength(value);
51285 } else if (Buffer.isBuffer(value)) {
51286 this.value = value;
51287 this.length = value.length;
51288 } else {
51289 return reporter.error('Unsupported type: ' + typeof value);
51290 }
51291 }
51292 exports.EncoderBuffer = EncoderBuffer;
51293
51294 EncoderBuffer.prototype.join = function join(out, offset) {
51295 if (!out)
51296 out = new Buffer(this.length);
51297 if (!offset)
51298 offset = 0;
51299
51300 if (this.length === 0)
51301 return out;
51302
51303 if (Array.isArray(this.value)) {
51304 this.value.forEach(function(item) {
51305 item.join(out, offset);
51306 offset += item.length;
51307 });
51308 } else {
51309 if (typeof this.value === 'number')
51310 out[offset] = this.value;
51311 else if (typeof this.value === 'string')
51312 out.write(this.value, offset);
51313 else if (Buffer.isBuffer(this.value))
51314 this.value.copy(out, offset);
51315 offset += this.length;
51316 }
51317
51318 return out;
51319 };
51320
51321 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
51322 var base = exports;
51323
51324 base.Reporter = require('./reporter').Reporter;
51325 base.DecoderBuffer = require('./buffer').DecoderBuffer;
51326 base.EncoderBuffer = require('./buffer').EncoderBuffer;
51327 base.Node = require('./node');
51328
51329 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
51330 var Reporter = require('../base').Reporter;
51331 var EncoderBuffer = require('../base').EncoderBuffer;
51332 var DecoderBuffer = require('../base').DecoderBuffer;
51333 var assert = require('minimalistic-assert');
51334
51335 // Supported tags
51336 var tags = [
51337 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
51338 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
51339 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
51340 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
51341 ];
51342
51343 // Public methods list
51344 var methods = [
51345 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
51346 'any', 'contains'
51347 ].concat(tags);
51348
51349 // Overrided methods list
51350 var overrided = [
51351 '_peekTag', '_decodeTag', '_use',
51352 '_decodeStr', '_decodeObjid', '_decodeTime',
51353 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
51354
51355 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
51356 '_encodeNull', '_encodeInt', '_encodeBool'
51357 ];
51358
51359 function Node(enc, parent) {
51360 var state = {};
51361 this._baseState = state;
51362
51363 state.enc = enc;
51364
51365 state.parent = parent || null;
51366 state.children = null;
51367
51368 // State
51369 state.tag = null;
51370 state.args = null;
51371 state.reverseArgs = null;
51372 state.choice = null;
51373 state.optional = false;
51374 state.any = false;
51375 state.obj = false;
51376 state.use = null;
51377 state.useDecoder = null;
51378 state.key = null;
51379 state['default'] = null;
51380 state.explicit = null;
51381 state.implicit = null;
51382 state.contains = null;
51383
51384 // Should create new instance on each method
51385 if (!state.parent) {
51386 state.children = [];
51387 this._wrap();
51388 }
51389 }
51390 module.exports = Node;
51391
51392 var stateProps = [
51393 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
51394 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
51395 'implicit', 'contains'
51396 ];
51397
51398 Node.prototype.clone = function clone() {
51399 var state = this._baseState;
51400 var cstate = {};
51401 stateProps.forEach(function(prop) {
51402 cstate[prop] = state[prop];
51403 });
51404 var res = new this.constructor(cstate.parent);
51405 res._baseState = cstate;
51406 return res;
51407 };
51408
51409 Node.prototype._wrap = function wrap() {
51410 var state = this._baseState;
51411 methods.forEach(function(method) {
51412 this[method] = function _wrappedMethod() {
51413 var clone = new this.constructor(this);
51414 state.children.push(clone);
51415 return clone[method].apply(clone, arguments);
51416 };
51417 }, this);
51418 };
51419
51420 Node.prototype._init = function init(body) {
51421 var state = this._baseState;
51422
51423 assert(state.parent === null);
51424 body.call(this);
51425
51426 // Filter children
51427 state.children = state.children.filter(function(child) {
51428 return child._baseState.parent === this;
51429 }, this);
51430 assert.equal(state.children.length, 1, 'Root node can have only one child');
51431 };
51432
51433 Node.prototype._useArgs = function useArgs(args) {
51434 var state = this._baseState;
51435
51436 // Filter children and args
51437 var children = args.filter(function(arg) {
51438 return arg instanceof this.constructor;
51439 }, this);
51440 args = args.filter(function(arg) {
51441 return !(arg instanceof this.constructor);
51442 }, this);
51443
51444 if (children.length !== 0) {
51445 assert(state.children === null);
51446 state.children = children;
51447
51448 // Replace parent to maintain backward link
51449 children.forEach(function(child) {
51450 child._baseState.parent = this;
51451 }, this);
51452 }
51453 if (args.length !== 0) {
51454 assert(state.args === null);
51455 state.args = args;
51456 state.reverseArgs = args.map(function(arg) {
51457 if (typeof arg !== 'object' || arg.constructor !== Object)
51458 return arg;
51459
51460 var res = {};
51461 Object.keys(arg).forEach(function(key) {
51462 if (key == (key | 0))
51463 key |= 0;
51464 var value = arg[key];
51465 res[value] = key;
51466 });
51467 return res;
51468 });
51469 }
51470 };
51471
51472 //
51473 // Overrided methods
51474 //
51475
51476 overrided.forEach(function(method) {
51477 Node.prototype[method] = function _overrided() {
51478 var state = this._baseState;
51479 throw new Error(method + ' not implemented for encoding: ' + state.enc);
51480 };
51481 });
51482
51483 //
51484 // Public methods
51485 //
51486
51487 tags.forEach(function(tag) {
51488 Node.prototype[tag] = function _tagMethod() {
51489 var state = this._baseState;
51490 var args = Array.prototype.slice.call(arguments);
51491
51492 assert(state.tag === null);
51493 state.tag = tag;
51494
51495 this._useArgs(args);
51496
51497 return this;
51498 };
51499 });
51500
51501 Node.prototype.use = function use(item) {
51502 assert(item);
51503 var state = this._baseState;
51504
51505 assert(state.use === null);
51506 state.use = item;
51507
51508 return this;
51509 };
51510
51511 Node.prototype.optional = function optional() {
51512 var state = this._baseState;
51513
51514 state.optional = true;
51515
51516 return this;
51517 };
51518
51519 Node.prototype.def = function def(val) {
51520 var state = this._baseState;
51521
51522 assert(state['default'] === null);
51523 state['default'] = val;
51524 state.optional = true;
51525
51526 return this;
51527 };
51528
51529 Node.prototype.explicit = function explicit(num) {
51530 var state = this._baseState;
51531
51532 assert(state.explicit === null && state.implicit === null);
51533 state.explicit = num;
51534
51535 return this;
51536 };
51537
51538 Node.prototype.implicit = function implicit(num) {
51539 var state = this._baseState;
51540
51541 assert(state.explicit === null && state.implicit === null);
51542 state.implicit = num;
51543
51544 return this;
51545 };
51546
51547 Node.prototype.obj = function obj() {
51548 var state = this._baseState;
51549 var args = Array.prototype.slice.call(arguments);
51550
51551 state.obj = true;
51552
51553 if (args.length !== 0)
51554 this._useArgs(args);
51555
51556 return this;
51557 };
51558
51559 Node.prototype.key = function key(newKey) {
51560 var state = this._baseState;
51561
51562 assert(state.key === null);
51563 state.key = newKey;
51564
51565 return this;
51566 };
51567
51568 Node.prototype.any = function any() {
51569 var state = this._baseState;
51570
51571 state.any = true;
51572
51573 return this;
51574 };
51575
51576 Node.prototype.choice = function choice(obj) {
51577 var state = this._baseState;
51578
51579 assert(state.choice === null);
51580 state.choice = obj;
51581 this._useArgs(Object.keys(obj).map(function(key) {
51582 return obj[key];
51583 }));
51584
51585 return this;
51586 };
51587
51588 Node.prototype.contains = function contains(item) {
51589 var state = this._baseState;
51590
51591 assert(state.use === null);
51592 state.contains = item;
51593
51594 return this;
51595 };
51596
51597 //
51598 // Decoding
51599 //
51600
51601 Node.prototype._decode = function decode(input, options) {
51602 var state = this._baseState;
51603
51604 // Decode root node
51605 if (state.parent === null)
51606 return input.wrapResult(state.children[0]._decode(input, options));
51607
51608 var result = state['default'];
51609 var present = true;
51610
51611 var prevKey = null;
51612 if (state.key !== null)
51613 prevKey = input.enterKey(state.key);
51614
51615 // Check if tag is there
51616 if (state.optional) {
51617 var tag = null;
51618 if (state.explicit !== null)
51619 tag = state.explicit;
51620 else if (state.implicit !== null)
51621 tag = state.implicit;
51622 else if (state.tag !== null)
51623 tag = state.tag;
51624
51625 if (tag === null && !state.any) {
51626 // Trial and Error
51627 var save = input.save();
51628 try {
51629 if (state.choice === null)
51630 this._decodeGeneric(state.tag, input, options);
51631 else
51632 this._decodeChoice(input, options);
51633 present = true;
51634 } catch (e) {
51635 present = false;
51636 }
51637 input.restore(save);
51638 } else {
51639 present = this._peekTag(input, tag, state.any);
51640
51641 if (input.isError(present))
51642 return present;
51643 }
51644 }
51645
51646 // Push object on stack
51647 var prevObj;
51648 if (state.obj && present)
51649 prevObj = input.enterObject();
51650
51651 if (present) {
51652 // Unwrap explicit values
51653 if (state.explicit !== null) {
51654 var explicit = this._decodeTag(input, state.explicit);
51655 if (input.isError(explicit))
51656 return explicit;
51657 input = explicit;
51658 }
51659
51660 var start = input.offset;
51661
51662 // Unwrap implicit and normal values
51663 if (state.use === null && state.choice === null) {
51664 if (state.any)
51665 var save = input.save();
51666 var body = this._decodeTag(
51667 input,
51668 state.implicit !== null ? state.implicit : state.tag,
51669 state.any
51670 );
51671 if (input.isError(body))
51672 return body;
51673
51674 if (state.any)
51675 result = input.raw(save);
51676 else
51677 input = body;
51678 }
51679
51680 if (options && options.track && state.tag !== null)
51681 options.track(input.path(), start, input.length, 'tagged');
51682
51683 if (options && options.track && state.tag !== null)
51684 options.track(input.path(), input.offset, input.length, 'content');
51685
51686 // Select proper method for tag
51687 if (state.any)
51688 result = result;
51689 else if (state.choice === null)
51690 result = this._decodeGeneric(state.tag, input, options);
51691 else
51692 result = this._decodeChoice(input, options);
51693
51694 if (input.isError(result))
51695 return result;
51696
51697 // Decode children
51698 if (!state.any && state.choice === null && state.children !== null) {
51699 state.children.forEach(function decodeChildren(child) {
51700 // NOTE: We are ignoring errors here, to let parser continue with other
51701 // parts of encoded data
51702 child._decode(input, options);
51703 });
51704 }
51705
51706 // Decode contained/encoded by schema, only in bit or octet strings
51707 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
51708 var data = new DecoderBuffer(result);
51709 result = this._getUse(state.contains, input._reporterState.obj)
51710 ._decode(data, options);
51711 }
51712 }
51713
51714 // Pop object
51715 if (state.obj && present)
51716 result = input.leaveObject(prevObj);
51717
51718 // Set key
51719 if (state.key !== null && (result !== null || present === true))
51720 input.leaveKey(prevKey, state.key, result);
51721 else if (prevKey !== null)
51722 input.exitKey(prevKey);
51723
51724 return result;
51725 };
51726
51727 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
51728 var state = this._baseState;
51729
51730 if (tag === 'seq' || tag === 'set')
51731 return null;
51732 if (tag === 'seqof' || tag === 'setof')
51733 return this._decodeList(input, tag, state.args[0], options);
51734 else if (/str$/.test(tag))
51735 return this._decodeStr(input, tag, options);
51736 else if (tag === 'objid' && state.args)
51737 return this._decodeObjid(input, state.args[0], state.args[1], options);
51738 else if (tag === 'objid')
51739 return this._decodeObjid(input, null, null, options);
51740 else if (tag === 'gentime' || tag === 'utctime')
51741 return this._decodeTime(input, tag, options);
51742 else if (tag === 'null_')
51743 return this._decodeNull(input, options);
51744 else if (tag === 'bool')
51745 return this._decodeBool(input, options);
51746 else if (tag === 'objDesc')
51747 return this._decodeStr(input, tag, options);
51748 else if (tag === 'int' || tag === 'enum')
51749 return this._decodeInt(input, state.args && state.args[0], options);
51750
51751 if (state.use !== null) {
51752 return this._getUse(state.use, input._reporterState.obj)
51753 ._decode(input, options);
51754 } else {
51755 return input.error('unknown tag: ' + tag);
51756 }
51757 };
51758
51759 Node.prototype._getUse = function _getUse(entity, obj) {
51760
51761 var state = this._baseState;
51762 // Create altered use decoder if implicit is set
51763 state.useDecoder = this._use(entity, obj);
51764 assert(state.useDecoder._baseState.parent === null);
51765 state.useDecoder = state.useDecoder._baseState.children[0];
51766 if (state.implicit !== state.useDecoder._baseState.implicit) {
51767 state.useDecoder = state.useDecoder.clone();
51768 state.useDecoder._baseState.implicit = state.implicit;
51769 }
51770 return state.useDecoder;
51771 };
51772
51773 Node.prototype._decodeChoice = function decodeChoice(input, options) {
51774 var state = this._baseState;
51775 var result = null;
51776 var match = false;
51777
51778 Object.keys(state.choice).some(function(key) {
51779 var save = input.save();
51780 var node = state.choice[key];
51781 try {
51782 var value = node._decode(input, options);
51783 if (input.isError(value))
51784 return false;
51785
51786 result = { type: key, value: value };
51787 match = true;
51788 } catch (e) {
51789 input.restore(save);
51790 return false;
51791 }
51792 return true;
51793 }, this);
51794
51795 if (!match)
51796 return input.error('Choice not matched');
51797
51798 return result;
51799 };
51800
51801 //
51802 // Encoding
51803 //
51804
51805 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
51806 return new EncoderBuffer(data, this.reporter);
51807 };
51808
51809 Node.prototype._encode = function encode(data, reporter, parent) {
51810 var state = this._baseState;
51811 if (state['default'] !== null && state['default'] === data)
51812 return;
51813
51814 var result = this._encodeValue(data, reporter, parent);
51815 if (result === undefined)
51816 return;
51817
51818 if (this._skipDefault(result, reporter, parent))
51819 return;
51820
51821 return result;
51822 };
51823
51824 Node.prototype._encodeValue = function encode(data, reporter, parent) {
51825 var state = this._baseState;
51826
51827 // Decode root node
51828 if (state.parent === null)
51829 return state.children[0]._encode(data, reporter || new Reporter());
51830
51831 var result = null;
51832
51833 // Set reporter to share it with a child class
51834 this.reporter = reporter;
51835
51836 // Check if data is there
51837 if (state.optional && data === undefined) {
51838 if (state['default'] !== null)
51839 data = state['default']
51840 else
51841 return;
51842 }
51843
51844 // Encode children first
51845 var content = null;
51846 var primitive = false;
51847 if (state.any) {
51848 // Anything that was given is translated to buffer
51849 result = this._createEncoderBuffer(data);
51850 } else if (state.choice) {
51851 result = this._encodeChoice(data, reporter);
51852 } else if (state.contains) {
51853 content = this._getUse(state.contains, parent)._encode(data, reporter);
51854 primitive = true;
51855 } else if (state.children) {
51856 content = state.children.map(function(child) {
51857 if (child._baseState.tag === 'null_')
51858 return child._encode(null, reporter, data);
51859
51860 if (child._baseState.key === null)
51861 return reporter.error('Child should have a key');
51862 var prevKey = reporter.enterKey(child._baseState.key);
51863
51864 if (typeof data !== 'object')
51865 return reporter.error('Child expected, but input is not object');
51866
51867 var res = child._encode(data[child._baseState.key], reporter, data);
51868 reporter.leaveKey(prevKey);
51869
51870 return res;
51871 }, this).filter(function(child) {
51872 return child;
51873 });
51874 content = this._createEncoderBuffer(content);
51875 } else {
51876 if (state.tag === 'seqof' || state.tag === 'setof') {
51877 // TODO(indutny): this should be thrown on DSL level
51878 if (!(state.args && state.args.length === 1))
51879 return reporter.error('Too many args for : ' + state.tag);
51880
51881 if (!Array.isArray(data))
51882 return reporter.error('seqof/setof, but data is not Array');
51883
51884 var child = this.clone();
51885 child._baseState.implicit = null;
51886 content = this._createEncoderBuffer(data.map(function(item) {
51887 var state = this._baseState;
51888
51889 return this._getUse(state.args[0], data)._encode(item, reporter);
51890 }, child));
51891 } else if (state.use !== null) {
51892 result = this._getUse(state.use, parent)._encode(data, reporter);
51893 } else {
51894 content = this._encodePrimitive(state.tag, data);
51895 primitive = true;
51896 }
51897 }
51898
51899 // Encode data itself
51900 var result;
51901 if (!state.any && state.choice === null) {
51902 var tag = state.implicit !== null ? state.implicit : state.tag;
51903 var cls = state.implicit === null ? 'universal' : 'context';
51904
51905 if (tag === null) {
51906 if (state.use === null)
51907 reporter.error('Tag could be ommited only for .use()');
51908 } else {
51909 if (state.use === null)
51910 result = this._encodeComposite(tag, primitive, cls, content);
51911 }
51912 }
51913
51914 // Wrap in explicit
51915 if (state.explicit !== null)
51916 result = this._encodeComposite(state.explicit, false, 'context', result);
51917
51918 return result;
51919 };
51920
51921 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
51922 var state = this._baseState;
51923
51924 var node = state.choice[data.type];
51925 if (!node) {
51926 assert(
51927 false,
51928 data.type + ' not found in ' +
51929 JSON.stringify(Object.keys(state.choice)));
51930 }
51931 return node._encode(data.value, reporter);
51932 };
51933
51934 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
51935 var state = this._baseState;
51936
51937 if (/str$/.test(tag))
51938 return this._encodeStr(data, tag);
51939 else if (tag === 'objid' && state.args)
51940 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
51941 else if (tag === 'objid')
51942 return this._encodeObjid(data, null, null);
51943 else if (tag === 'gentime' || tag === 'utctime')
51944 return this._encodeTime(data, tag);
51945 else if (tag === 'null_')
51946 return this._encodeNull();
51947 else if (tag === 'int' || tag === 'enum')
51948 return this._encodeInt(data, state.args && state.reverseArgs[0]);
51949 else if (tag === 'bool')
51950 return this._encodeBool(data);
51951 else if (tag === 'objDesc')
51952 return this._encodeStr(data, tag);
51953 else
51954 throw new Error('Unsupported tag: ' + tag);
51955 };
51956
51957 Node.prototype._isNumstr = function isNumstr(str) {
51958 return /^[0-9 ]*$/.test(str);
51959 };
51960
51961 Node.prototype._isPrintstr = function isPrintstr(str) {
51962 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
51963 };
51964
51965 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
51966 var inherits = require('inherits');
51967
51968 function Reporter(options) {
51969 this._reporterState = {
51970 obj: null,
51971 path: [],
51972 options: options || {},
51973 errors: []
51974 };
51975 }
51976 exports.Reporter = Reporter;
51977
51978 Reporter.prototype.isError = function isError(obj) {
51979 return obj instanceof ReporterError;
51980 };
51981
51982 Reporter.prototype.save = function save() {
51983 var state = this._reporterState;
51984
51985 return { obj: state.obj, pathLen: state.path.length };
51986 };
51987
51988 Reporter.prototype.restore = function restore(data) {
51989 var state = this._reporterState;
51990
51991 state.obj = data.obj;
51992 state.path = state.path.slice(0, data.pathLen);
51993 };
51994
51995 Reporter.prototype.enterKey = function enterKey(key) {
51996 return this._reporterState.path.push(key);
51997 };
51998
51999 Reporter.prototype.exitKey = function exitKey(index) {
52000 var state = this._reporterState;
52001
52002 state.path = state.path.slice(0, index - 1);
52003 };
52004
52005 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
52006 var state = this._reporterState;
52007
52008 this.exitKey(index);
52009 if (state.obj !== null)
52010 state.obj[key] = value;
52011 };
52012
52013 Reporter.prototype.path = function path() {
52014 return this._reporterState.path.join('/');
52015 };
52016
52017 Reporter.prototype.enterObject = function enterObject() {
52018 var state = this._reporterState;
52019
52020 var prev = state.obj;
52021 state.obj = {};
52022 return prev;
52023 };
52024
52025 Reporter.prototype.leaveObject = function leaveObject(prev) {
52026 var state = this._reporterState;
52027
52028 var now = state.obj;
52029 state.obj = prev;
52030 return now;
52031 };
52032
52033 Reporter.prototype.error = function error(msg) {
52034 var err;
52035 var state = this._reporterState;
52036
52037 var inherited = msg instanceof ReporterError;
52038 if (inherited) {
52039 err = msg;
52040 } else {
52041 err = new ReporterError(state.path.map(function(elem) {
52042 return '[' + JSON.stringify(elem) + ']';
52043 }).join(''), msg.message || msg, msg.stack);
52044 }
52045
52046 if (!state.options.partial)
52047 throw err;
52048
52049 if (!inherited)
52050 state.errors.push(err);
52051
52052 return err;
52053 };
52054
52055 Reporter.prototype.wrapResult = function wrapResult(result) {
52056 var state = this._reporterState;
52057 if (!state.options.partial)
52058 return result;
52059
52060 return {
52061 result: this.isError(result) ? null : result,
52062 errors: state.errors
52063 };
52064 };
52065
52066 function ReporterError(path, msg) {
52067 this.path = path;
52068 this.rethrow(msg);
52069 };
52070 inherits(ReporterError, Error);
52071
52072 ReporterError.prototype.rethrow = function rethrow(msg) {
52073 this.message = msg + ' at: ' + (this.path || '(shallow)');
52074 if (Error.captureStackTrace)
52075 Error.captureStackTrace(this, ReporterError);
52076
52077 if (!this.stack) {
52078 try {
52079 // IE only adds stack when thrown
52080 throw new Error(this.message);
52081 } catch (e) {
52082 this.stack = e.stack;
52083 }
52084 }
52085 return this;
52086 };
52087
52088 },{"inherits":95}],7:[function(require,module,exports){
52089 var constants = require('../constants');
52090
52091 exports.tagClass = {
52092 0: 'universal',
52093 1: 'application',
52094 2: 'context',
52095 3: 'private'
52096 };
52097 exports.tagClassByName = constants._reverse(exports.tagClass);
52098
52099 exports.tag = {
52100 0x00: 'end',
52101 0x01: 'bool',
52102 0x02: 'int',
52103 0x03: 'bitstr',
52104 0x04: 'octstr',
52105 0x05: 'null_',
52106 0x06: 'objid',
52107 0x07: 'objDesc',
52108 0x08: 'external',
52109 0x09: 'real',
52110 0x0a: 'enum',
52111 0x0b: 'embed',
52112 0x0c: 'utf8str',
52113 0x0d: 'relativeOid',
52114 0x10: 'seq',
52115 0x11: 'set',
52116 0x12: 'numstr',
52117 0x13: 'printstr',
52118 0x14: 't61str',
52119 0x15: 'videostr',
52120 0x16: 'ia5str',
52121 0x17: 'utctime',
52122 0x18: 'gentime',
52123 0x19: 'graphstr',
52124 0x1a: 'iso646str',
52125 0x1b: 'genstr',
52126 0x1c: 'unistr',
52127 0x1d: 'charstr',
52128 0x1e: 'bmpstr'
52129 };
52130 exports.tagByName = constants._reverse(exports.tag);
52131
52132 },{"../constants":8}],8:[function(require,module,exports){
52133 var constants = exports;
52134
52135 // Helper
52136 constants._reverse = function reverse(map) {
52137 var res = {};
52138
52139 Object.keys(map).forEach(function(key) {
52140 // Convert key to integer if it is stringified
52141 if ((key | 0) == key)
52142 key = key | 0;
52143
52144 var value = map[key];
52145 res[value] = key;
52146 });
52147
52148 return res;
52149 };
52150
52151 constants.der = require('./der');
52152
52153 },{"./der":7}],9:[function(require,module,exports){
52154 var inherits = require('inherits');
52155
52156 var asn1 = require('../../asn1');
52157 var base = asn1.base;
52158 var bignum = asn1.bignum;
52159
52160 // Import DER constants
52161 var der = asn1.constants.der;
52162
52163 function DERDecoder(entity) {
52164 this.enc = 'der';
52165 this.name = entity.name;
52166 this.entity = entity;
52167
52168 // Construct base tree
52169 this.tree = new DERNode();
52170 this.tree._init(entity.body);
52171 };
52172 module.exports = DERDecoder;
52173
52174 DERDecoder.prototype.decode = function decode(data, options) {
52175 if (!(data instanceof base.DecoderBuffer))
52176 data = new base.DecoderBuffer(data, options);
52177
52178 return this.tree._decode(data, options);
52179 };
52180
52181 // Tree methods
52182
52183 function DERNode(parent) {
52184 base.Node.call(this, 'der', parent);
52185 }
52186 inherits(DERNode, base.Node);
52187
52188 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
52189 if (buffer.isEmpty())
52190 return false;
52191
52192 var state = buffer.save();
52193 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
52194 if (buffer.isError(decodedTag))
52195 return decodedTag;
52196
52197 buffer.restore(state);
52198
52199 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
52200 (decodedTag.tagStr + 'of') === tag || any;
52201 };
52202
52203 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
52204 var decodedTag = derDecodeTag(buffer,
52205 'Failed to decode tag of "' + tag + '"');
52206 if (buffer.isError(decodedTag))
52207 return decodedTag;
52208
52209 var len = derDecodeLen(buffer,
52210 decodedTag.primitive,
52211 'Failed to get length of "' + tag + '"');
52212
52213 // Failure
52214 if (buffer.isError(len))
52215 return len;
52216
52217 if (!any &&
52218 decodedTag.tag !== tag &&
52219 decodedTag.tagStr !== tag &&
52220 decodedTag.tagStr + 'of' !== tag) {
52221 return buffer.error('Failed to match tag: "' + tag + '"');
52222 }
52223
52224 if (decodedTag.primitive || len !== null)
52225 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52226
52227 // Indefinite length... find END tag
52228 var state = buffer.save();
52229 var res = this._skipUntilEnd(
52230 buffer,
52231 'Failed to skip indefinite length body: "' + this.tag + '"');
52232 if (buffer.isError(res))
52233 return res;
52234
52235 len = buffer.offset - state.offset;
52236 buffer.restore(state);
52237 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52238 };
52239
52240 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
52241 while (true) {
52242 var tag = derDecodeTag(buffer, fail);
52243 if (buffer.isError(tag))
52244 return tag;
52245 var len = derDecodeLen(buffer, tag.primitive, fail);
52246 if (buffer.isError(len))
52247 return len;
52248
52249 var res;
52250 if (tag.primitive || len !== null)
52251 res = buffer.skip(len)
52252 else
52253 res = this._skipUntilEnd(buffer, fail);
52254
52255 // Failure
52256 if (buffer.isError(res))
52257 return res;
52258
52259 if (tag.tagStr === 'end')
52260 break;
52261 }
52262 };
52263
52264 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
52265 options) {
52266 var result = [];
52267 while (!buffer.isEmpty()) {
52268 var possibleEnd = this._peekTag(buffer, 'end');
52269 if (buffer.isError(possibleEnd))
52270 return possibleEnd;
52271
52272 var res = decoder.decode(buffer, 'der', options);
52273 if (buffer.isError(res) && possibleEnd)
52274 break;
52275 result.push(res);
52276 }
52277 return result;
52278 };
52279
52280 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
52281 if (tag === 'bitstr') {
52282 var unused = buffer.readUInt8();
52283 if (buffer.isError(unused))
52284 return unused;
52285 return { unused: unused, data: buffer.raw() };
52286 } else if (tag === 'bmpstr') {
52287 var raw = buffer.raw();
52288 if (raw.length % 2 === 1)
52289 return buffer.error('Decoding of string type: bmpstr length mismatch');
52290
52291 var str = '';
52292 for (var i = 0; i < raw.length / 2; i++) {
52293 str += String.fromCharCode(raw.readUInt16BE(i * 2));
52294 }
52295 return str;
52296 } else if (tag === 'numstr') {
52297 var numstr = buffer.raw().toString('ascii');
52298 if (!this._isNumstr(numstr)) {
52299 return buffer.error('Decoding of string type: ' +
52300 'numstr unsupported characters');
52301 }
52302 return numstr;
52303 } else if (tag === 'octstr') {
52304 return buffer.raw();
52305 } else if (tag === 'objDesc') {
52306 return buffer.raw();
52307 } else if (tag === 'printstr') {
52308 var printstr = buffer.raw().toString('ascii');
52309 if (!this._isPrintstr(printstr)) {
52310 return buffer.error('Decoding of string type: ' +
52311 'printstr unsupported characters');
52312 }
52313 return printstr;
52314 } else if (/str$/.test(tag)) {
52315 return buffer.raw().toString();
52316 } else {
52317 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
52318 }
52319 };
52320
52321 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
52322 var result;
52323 var identifiers = [];
52324 var ident = 0;
52325 while (!buffer.isEmpty()) {
52326 var subident = buffer.readUInt8();
52327 ident <<= 7;
52328 ident |= subident & 0x7f;
52329 if ((subident & 0x80) === 0) {
52330 identifiers.push(ident);
52331 ident = 0;
52332 }
52333 }
52334 if (subident & 0x80)
52335 identifiers.push(ident);
52336
52337 var first = (identifiers[0] / 40) | 0;
52338 var second = identifiers[0] % 40;
52339
52340 if (relative)
52341 result = identifiers;
52342 else
52343 result = [first, second].concat(identifiers.slice(1));
52344
52345 if (values) {
52346 var tmp = values[result.join(' ')];
52347 if (tmp === undefined)
52348 tmp = values[result.join('.')];
52349 if (tmp !== undefined)
52350 result = tmp;
52351 }
52352
52353 return result;
52354 };
52355
52356 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
52357 var str = buffer.raw().toString();
52358 if (tag === 'gentime') {
52359 var year = str.slice(0, 4) | 0;
52360 var mon = str.slice(4, 6) | 0;
52361 var day = str.slice(6, 8) | 0;
52362 var hour = str.slice(8, 10) | 0;
52363 var min = str.slice(10, 12) | 0;
52364 var sec = str.slice(12, 14) | 0;
52365 } else if (tag === 'utctime') {
52366 var year = str.slice(0, 2) | 0;
52367 var mon = str.slice(2, 4) | 0;
52368 var day = str.slice(4, 6) | 0;
52369 var hour = str.slice(6, 8) | 0;
52370 var min = str.slice(8, 10) | 0;
52371 var sec = str.slice(10, 12) | 0;
52372 if (year < 70)
52373 year = 2000 + year;
52374 else
52375 year = 1900 + year;
52376 } else {
52377 return buffer.error('Decoding ' + tag + ' time is not supported yet');
52378 }
52379
52380 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
52381 };
52382
52383 DERNode.prototype._decodeNull = function decodeNull(buffer) {
52384 return null;
52385 };
52386
52387 DERNode.prototype._decodeBool = function decodeBool(buffer) {
52388 var res = buffer.readUInt8();
52389 if (buffer.isError(res))
52390 return res;
52391 else
52392 return res !== 0;
52393 };
52394
52395 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
52396 // Bigint, return as it is (assume big endian)
52397 var raw = buffer.raw();
52398 var res = new bignum(raw);
52399
52400 if (values)
52401 res = values[res.toString(10)] || res;
52402
52403 return res;
52404 };
52405
52406 DERNode.prototype._use = function use(entity, obj) {
52407 if (typeof entity === 'function')
52408 entity = entity(obj);
52409 return entity._getDecoder('der').tree;
52410 };
52411
52412 // Utility methods
52413
52414 function derDecodeTag(buf, fail) {
52415 var tag = buf.readUInt8(fail);
52416 if (buf.isError(tag))
52417 return tag;
52418
52419 var cls = der.tagClass[tag >> 6];
52420 var primitive = (tag & 0x20) === 0;
52421
52422 // Multi-octet tag - load
52423 if ((tag & 0x1f) === 0x1f) {
52424 var oct = tag;
52425 tag = 0;
52426 while ((oct & 0x80) === 0x80) {
52427 oct = buf.readUInt8(fail);
52428 if (buf.isError(oct))
52429 return oct;
52430
52431 tag <<= 7;
52432 tag |= oct & 0x7f;
52433 }
52434 } else {
52435 tag &= 0x1f;
52436 }
52437 var tagStr = der.tag[tag];
52438
52439 return {
52440 cls: cls,
52441 primitive: primitive,
52442 tag: tag,
52443 tagStr: tagStr
52444 };
52445 }
52446
52447 function derDecodeLen(buf, primitive, fail) {
52448 var len = buf.readUInt8(fail);
52449 if (buf.isError(len))
52450 return len;
52451
52452 // Indefinite form
52453 if (!primitive && len === 0x80)
52454 return null;
52455
52456 // Definite form
52457 if ((len & 0x80) === 0) {
52458 // Short form
52459 return len;
52460 }
52461
52462 // Long form
52463 var num = len & 0x7f;
52464 if (num > 4)
52465 return buf.error('length octect is too long');
52466
52467 len = 0;
52468 for (var i = 0; i < num; i++) {
52469 len <<= 8;
52470 var j = buf.readUInt8(fail);
52471 if (buf.isError(j))
52472 return j;
52473 len |= j;
52474 }
52475
52476 return len;
52477 }
52478
52479 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
52480 var decoders = exports;
52481
52482 decoders.der = require('./der');
52483 decoders.pem = require('./pem');
52484
52485 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
52486 var inherits = require('inherits');
52487 var Buffer = require('buffer').Buffer;
52488
52489 var DERDecoder = require('./der');
52490
52491 function PEMDecoder(entity) {
52492 DERDecoder.call(this, entity);
52493 this.enc = 'pem';
52494 };
52495 inherits(PEMDecoder, DERDecoder);
52496 module.exports = PEMDecoder;
52497
52498 PEMDecoder.prototype.decode = function decode(data, options) {
52499 var lines = data.toString().split(/[\r\n]+/g);
52500
52501 var label = options.label.toUpperCase();
52502
52503 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
52504 var start = -1;
52505 var end = -1;
52506 for (var i = 0; i < lines.length; i++) {
52507 var match = lines[i].match(re);
52508 if (match === null)
52509 continue;
52510
52511 if (match[2] !== label)
52512 continue;
52513
52514 if (start === -1) {
52515 if (match[1] !== 'BEGIN')
52516 break;
52517 start = i;
52518 } else {
52519 if (match[1] !== 'END')
52520 break;
52521 end = i;
52522 break;
52523 }
52524 }
52525 if (start === -1 || end === -1)
52526 throw new Error('PEM section not found for: ' + label);
52527
52528 var base64 = lines.slice(start + 1, end).join('');
52529 // Remove excessive symbols
52530 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
52531
52532 var input = new Buffer(base64, 'base64');
52533 return DERDecoder.prototype.decode.call(this, input, options);
52534 };
52535
52536 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
52537 var inherits = require('inherits');
52538 var Buffer = require('buffer').Buffer;
52539
52540 var asn1 = require('../../asn1');
52541 var base = asn1.base;
52542
52543 // Import DER constants
52544 var der = asn1.constants.der;
52545
52546 function DEREncoder(entity) {
52547 this.enc = 'der';
52548 this.name = entity.name;
52549 this.entity = entity;
52550
52551 // Construct base tree
52552 this.tree = new DERNode();
52553 this.tree._init(entity.body);
52554 };
52555 module.exports = DEREncoder;
52556
52557 DEREncoder.prototype.encode = function encode(data, reporter) {
52558 return this.tree._encode(data, reporter).join();
52559 };
52560
52561 // Tree methods
52562
52563 function DERNode(parent) {
52564 base.Node.call(this, 'der', parent);
52565 }
52566 inherits(DERNode, base.Node);
52567
52568 DERNode.prototype._encodeComposite = function encodeComposite(tag,
52569 primitive,
52570 cls,
52571 content) {
52572 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
52573
52574 // Short form
52575 if (content.length < 0x80) {
52576 var header = new Buffer(2);
52577 header[0] = encodedTag;
52578 header[1] = content.length;
52579 return this._createEncoderBuffer([ header, content ]);
52580 }
52581
52582 // Long form
52583 // Count octets required to store length
52584 var lenOctets = 1;
52585 for (var i = content.length; i >= 0x100; i >>= 8)
52586 lenOctets++;
52587
52588 var header = new Buffer(1 + 1 + lenOctets);
52589 header[0] = encodedTag;
52590 header[1] = 0x80 | lenOctets;
52591
52592 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
52593 header[i] = j & 0xff;
52594
52595 return this._createEncoderBuffer([ header, content ]);
52596 };
52597
52598 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
52599 if (tag === 'bitstr') {
52600 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
52601 } else if (tag === 'bmpstr') {
52602 var buf = new Buffer(str.length * 2);
52603 for (var i = 0; i < str.length; i++) {
52604 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
52605 }
52606 return this._createEncoderBuffer(buf);
52607 } else if (tag === 'numstr') {
52608 if (!this._isNumstr(str)) {
52609 return this.reporter.error('Encoding of string type: numstr supports ' +
52610 'only digits and space');
52611 }
52612 return this._createEncoderBuffer(str);
52613 } else if (tag === 'printstr') {
52614 if (!this._isPrintstr(str)) {
52615 return this.reporter.error('Encoding of string type: printstr supports ' +
52616 'only latin upper and lower case letters, ' +
52617 'digits, space, apostrophe, left and rigth ' +
52618 'parenthesis, plus sign, comma, hyphen, ' +
52619 'dot, slash, colon, equal sign, ' +
52620 'question mark');
52621 }
52622 return this._createEncoderBuffer(str);
52623 } else if (/str$/.test(tag)) {
52624 return this._createEncoderBuffer(str);
52625 } else if (tag === 'objDesc') {
52626 return this._createEncoderBuffer(str);
52627 } else {
52628 return this.reporter.error('Encoding of string type: ' + tag +
52629 ' unsupported');
52630 }
52631 };
52632
52633 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
52634 if (typeof id === 'string') {
52635 if (!values)
52636 return this.reporter.error('string objid given, but no values map found');
52637 if (!values.hasOwnProperty(id))
52638 return this.reporter.error('objid not found in values map');
52639 id = values[id].split(/[\s\.]+/g);
52640 for (var i = 0; i < id.length; i++)
52641 id[i] |= 0;
52642 } else if (Array.isArray(id)) {
52643 id = id.slice();
52644 for (var i = 0; i < id.length; i++)
52645 id[i] |= 0;
52646 }
52647
52648 if (!Array.isArray(id)) {
52649 return this.reporter.error('objid() should be either array or string, ' +
52650 'got: ' + JSON.stringify(id));
52651 }
52652
52653 if (!relative) {
52654 if (id[1] >= 40)
52655 return this.reporter.error('Second objid identifier OOB');
52656 id.splice(0, 2, id[0] * 40 + id[1]);
52657 }
52658
52659 // Count number of octets
52660 var size = 0;
52661 for (var i = 0; i < id.length; i++) {
52662 var ident = id[i];
52663 for (size++; ident >= 0x80; ident >>= 7)
52664 size++;
52665 }
52666
52667 var objid = new Buffer(size);
52668 var offset = objid.length - 1;
52669 for (var i = id.length - 1; i >= 0; i--) {
52670 var ident = id[i];
52671 objid[offset--] = ident & 0x7f;
52672 while ((ident >>= 7) > 0)
52673 objid[offset--] = 0x80 | (ident & 0x7f);
52674 }
52675
52676 return this._createEncoderBuffer(objid);
52677 };
52678
52679 function two(num) {
52680 if (num < 10)
52681 return '0' + num;
52682 else
52683 return num;
52684 }
52685
52686 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
52687 var str;
52688 var date = new Date(time);
52689
52690 if (tag === 'gentime') {
52691 str = [
52692 two(date.getFullYear()),
52693 two(date.getUTCMonth() + 1),
52694 two(date.getUTCDate()),
52695 two(date.getUTCHours()),
52696 two(date.getUTCMinutes()),
52697 two(date.getUTCSeconds()),
52698 'Z'
52699 ].join('');
52700 } else if (tag === 'utctime') {
52701 str = [
52702 two(date.getFullYear() % 100),
52703 two(date.getUTCMonth() + 1),
52704 two(date.getUTCDate()),
52705 two(date.getUTCHours()),
52706 two(date.getUTCMinutes()),
52707 two(date.getUTCSeconds()),
52708 'Z'
52709 ].join('');
52710 } else {
52711 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
52712 }
52713
52714 return this._encodeStr(str, 'octstr');
52715 };
52716
52717 DERNode.prototype._encodeNull = function encodeNull() {
52718 return this._createEncoderBuffer('');
52719 };
52720
52721 DERNode.prototype._encodeInt = function encodeInt(num, values) {
52722 if (typeof num === 'string') {
52723 if (!values)
52724 return this.reporter.error('String int or enum given, but no values map');
52725 if (!values.hasOwnProperty(num)) {
52726 return this.reporter.error('Values map doesn\'t contain: ' +
52727 JSON.stringify(num));
52728 }
52729 num = values[num];
52730 }
52731
52732 // Bignum, assume big endian
52733 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
52734 var numArray = num.toArray();
52735 if (!num.sign && numArray[0] & 0x80) {
52736 numArray.unshift(0);
52737 }
52738 num = new Buffer(numArray);
52739 }
52740
52741 if (Buffer.isBuffer(num)) {
52742 var size = num.length;
52743 if (num.length === 0)
52744 size++;
52745
52746 var out = new Buffer(size);
52747 num.copy(out);
52748 if (num.length === 0)
52749 out[0] = 0
52750 return this._createEncoderBuffer(out);
52751 }
52752
52753 if (num < 0x80)
52754 return this._createEncoderBuffer(num);
52755
52756 if (num < 0x100)
52757 return this._createEncoderBuffer([0, num]);
52758
52759 var size = 1;
52760 for (var i = num; i >= 0x100; i >>= 8)
52761 size++;
52762
52763 var out = new Array(size);
52764 for (var i = out.length - 1; i >= 0; i--) {
52765 out[i] = num & 0xff;
52766 num >>= 8;
52767 }
52768 if(out[0] & 0x80) {
52769 out.unshift(0);
52770 }
52771
52772 return this._createEncoderBuffer(new Buffer(out));
52773 };
52774
52775 DERNode.prototype._encodeBool = function encodeBool(value) {
52776 return this._createEncoderBuffer(value ? 0xff : 0);
52777 };
52778
52779 DERNode.prototype._use = function use(entity, obj) {
52780 if (typeof entity === 'function')
52781 entity = entity(obj);
52782 return entity._getEncoder('der').tree;
52783 };
52784
52785 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
52786 var state = this._baseState;
52787 var i;
52788 if (state['default'] === null)
52789 return false;
52790
52791 var data = dataBuffer.join();
52792 if (state.defaultBuffer === undefined)
52793 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
52794
52795 if (data.length !== state.defaultBuffer.length)
52796 return false;
52797
52798 for (i=0; i < data.length; i++)
52799 if (data[i] !== state.defaultBuffer[i])
52800 return false;
52801
52802 return true;
52803 };
52804
52805 // Utility methods
52806
52807 function encodeTag(tag, primitive, cls, reporter) {
52808 var res;
52809
52810 if (tag === 'seqof')
52811 tag = 'seq';
52812 else if (tag === 'setof')
52813 tag = 'set';
52814
52815 if (der.tagByName.hasOwnProperty(tag))
52816 res = der.tagByName[tag];
52817 else if (typeof tag === 'number' && (tag | 0) === tag)
52818 res = tag;
52819 else
52820 return reporter.error('Unknown tag: ' + tag);
52821
52822 if (res >= 0x1f)
52823 return reporter.error('Multi-octet tag encoding unsupported');
52824
52825 if (!primitive)
52826 res |= 0x20;
52827
52828 res |= (der.tagClassByName[cls || 'universal'] << 6);
52829
52830 return res;
52831 }
52832
52833 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
52834 var encoders = exports;
52835
52836 encoders.der = require('./der');
52837 encoders.pem = require('./pem');
52838
52839 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
52840 var inherits = require('inherits');
52841
52842 var DEREncoder = require('./der');
52843
52844 function PEMEncoder(entity) {
52845 DEREncoder.call(this, entity);
52846 this.enc = 'pem';
52847 };
52848 inherits(PEMEncoder, DEREncoder);
52849 module.exports = PEMEncoder;
52850
52851 PEMEncoder.prototype.encode = function encode(data, options) {
52852 var buf = DEREncoder.prototype.encode.call(this, data);
52853
52854 var p = buf.toString('base64');
52855 var out = [ '-----BEGIN ' + options.label + '-----' ];
52856 for (var i = 0; i < p.length; i += 64)
52857 out.push(p.slice(i, i + 64));
52858 out.push('-----END ' + options.label + '-----');
52859 return out.join('\n');
52860 };
52861
52862 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
52863 (function (global){
52864 'use strict';
52865
52866 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
52867 // original notice:
52868
52869 /*!
52870 * The buffer module from node.js, for the browser.
52871 *
52872 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
52873 * @license MIT
52874 */
52875 function compare(a, b) {
52876 if (a === b) {
52877 return 0;
52878 }
52879
52880 var x = a.length;
52881 var y = b.length;
52882
52883 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
52884 if (a[i] !== b[i]) {
52885 x = a[i];
52886 y = b[i];
52887 break;
52888 }
52889 }
52890
52891 if (x < y) {
52892 return -1;
52893 }
52894 if (y < x) {
52895 return 1;
52896 }
52897 return 0;
52898 }
52899 function isBuffer(b) {
52900 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
52901 return global.Buffer.isBuffer(b);
52902 }
52903 return !!(b != null && b._isBuffer);
52904 }
52905
52906 // based on node assert, original notice:
52907
52908 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
52909 //
52910 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
52911 //
52912 // Originally from narwhal.js (http://narwhaljs.org)
52913 // Copyright (c) 2009 Thomas Robinson <280north.com>
52914 //
52915 // Permission is hereby granted, free of charge, to any person obtaining a copy
52916 // of this software and associated documentation files (the 'Software'), to
52917 // deal in the Software without restriction, including without limitation the
52918 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
52919 // sell copies of the Software, and to permit persons to whom the Software is
52920 // furnished to do so, subject to the following conditions:
52921 //
52922 // The above copyright notice and this permission notice shall be included in
52923 // all copies or substantial portions of the Software.
52924 //
52925 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52926 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52927 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52928 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
52929 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
52930 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52931
52932 var util = require('util/');
52933 var hasOwn = Object.prototype.hasOwnProperty;
52934 var pSlice = Array.prototype.slice;
52935 var functionsHaveNames = (function () {
52936 return function foo() {}.name === 'foo';
52937 }());
52938 function pToString (obj) {
52939 return Object.prototype.toString.call(obj);
52940 }
52941 function isView(arrbuf) {
52942 if (isBuffer(arrbuf)) {
52943 return false;
52944 }
52945 if (typeof global.ArrayBuffer !== 'function') {
52946 return false;
52947 }
52948 if (typeof ArrayBuffer.isView === 'function') {
52949 return ArrayBuffer.isView(arrbuf);
52950 }
52951 if (!arrbuf) {
52952 return false;
52953 }
52954 if (arrbuf instanceof DataView) {
52955 return true;
52956 }
52957 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
52958 return true;
52959 }
52960 return false;
52961 }
52962 // 1. The assert module provides functions that throw
52963 // AssertionError's when particular conditions are not met. The
52964 // assert module must conform to the following interface.
52965
52966 var assert = module.exports = ok;
52967
52968 // 2. The AssertionError is defined in assert.
52969 // new assert.AssertionError({ message: message,
52970 // actual: actual,
52971 // expected: expected })
52972
52973 var regex = /\s*function\s+([^\(\s]*)\s*/;
52974 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
52975 function getName(func) {
52976 if (!util.isFunction(func)) {
52977 return;
52978 }
52979 if (functionsHaveNames) {
52980 return func.name;
52981 }
52982 var str = func.toString();
52983 var match = str.match(regex);
52984 return match && match[1];
52985 }
52986 assert.AssertionError = function AssertionError(options) {
52987 this.name = 'AssertionError';
52988 this.actual = options.actual;
52989 this.expected = options.expected;
52990 this.operator = options.operator;
52991 if (options.message) {
52992 this.message = options.message;
52993 this.generatedMessage = false;
52994 } else {
52995 this.message = getMessage(this);
52996 this.generatedMessage = true;
52997 }
52998 var stackStartFunction = options.stackStartFunction || fail;
52999 if (Error.captureStackTrace) {
53000 Error.captureStackTrace(this, stackStartFunction);
53001 } else {
53002 // non v8 browsers so we can have a stacktrace
53003 var err = new Error();
53004 if (err.stack) {
53005 var out = err.stack;
53006
53007 // try to strip useless frames
53008 var fn_name = getName(stackStartFunction);
53009 var idx = out.indexOf('\n' + fn_name);
53010 if (idx >= 0) {
53011 // once we have located the function frame
53012 // we need to strip out everything before it (and its line)
53013 var next_line = out.indexOf('\n', idx + 1);
53014 out = out.substring(next_line + 1);
53015 }
53016
53017 this.stack = out;
53018 }
53019 }
53020 };
53021
53022 // assert.AssertionError instanceof Error
53023 util.inherits(assert.AssertionError, Error);
53024
53025 function truncate(s, n) {
53026 if (typeof s === 'string') {
53027 return s.length < n ? s : s.slice(0, n);
53028 } else {
53029 return s;
53030 }
53031 }
53032 function inspect(something) {
53033 if (functionsHaveNames || !util.isFunction(something)) {
53034 return util.inspect(something);
53035 }
53036 var rawname = getName(something);
53037 var name = rawname ? ': ' + rawname : '';
53038 return '[Function' + name + ']';
53039 }
53040 function getMessage(self) {
53041 return truncate(inspect(self.actual), 128) + ' ' +
53042 self.operator + ' ' +
53043 truncate(inspect(self.expected), 128);
53044 }
53045
53046 // At present only the three keys mentioned above are used and
53047 // understood by the spec. Implementations or sub modules can pass
53048 // other keys to the AssertionError's constructor - they will be
53049 // ignored.
53050
53051 // 3. All of the following functions must throw an AssertionError
53052 // when a corresponding condition is not met, with a message that
53053 // may be undefined if not provided. All assertion methods provide
53054 // both the actual and expected values to the assertion error for
53055 // display purposes.
53056
53057 function fail(actual, expected, message, operator, stackStartFunction) {
53058 throw new assert.AssertionError({
53059 message: message,
53060 actual: actual,
53061 expected: expected,
53062 operator: operator,
53063 stackStartFunction: stackStartFunction
53064 });
53065 }
53066
53067 // EXTENSION! allows for well behaved errors defined elsewhere.
53068 assert.fail = fail;
53069
53070 // 4. Pure assertion tests whether a value is truthy, as determined
53071 // by !!guard.
53072 // assert.ok(guard, message_opt);
53073 // This statement is equivalent to assert.equal(true, !!guard,
53074 // message_opt);. To test strictly for the value true, use
53075 // assert.strictEqual(true, guard, message_opt);.
53076
53077 function ok(value, message) {
53078 if (!value) fail(value, true, message, '==', assert.ok);
53079 }
53080 assert.ok = ok;
53081
53082 // 5. The equality assertion tests shallow, coercive equality with
53083 // ==.
53084 // assert.equal(actual, expected, message_opt);
53085
53086 assert.equal = function equal(actual, expected, message) {
53087 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
53088 };
53089
53090 // 6. The non-equality assertion tests for whether two objects are not equal
53091 // with != assert.notEqual(actual, expected, message_opt);
53092
53093 assert.notEqual = function notEqual(actual, expected, message) {
53094 if (actual == expected) {
53095 fail(actual, expected, message, '!=', assert.notEqual);
53096 }
53097 };
53098
53099 // 7. The equivalence assertion tests a deep equality relation.
53100 // assert.deepEqual(actual, expected, message_opt);
53101
53102 assert.deepEqual = function deepEqual(actual, expected, message) {
53103 if (!_deepEqual(actual, expected, false)) {
53104 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
53105 }
53106 };
53107
53108 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
53109 if (!_deepEqual(actual, expected, true)) {
53110 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
53111 }
53112 };
53113
53114 function _deepEqual(actual, expected, strict, memos) {
53115 // 7.1. All identical values are equivalent, as determined by ===.
53116 if (actual === expected) {
53117 return true;
53118 } else if (isBuffer(actual) && isBuffer(expected)) {
53119 return compare(actual, expected) === 0;
53120
53121 // 7.2. If the expected value is a Date object, the actual value is
53122 // equivalent if it is also a Date object that refers to the same time.
53123 } else if (util.isDate(actual) && util.isDate(expected)) {
53124 return actual.getTime() === expected.getTime();
53125
53126 // 7.3 If the expected value is a RegExp object, the actual value is
53127 // equivalent if it is also a RegExp object with the same source and
53128 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
53129 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
53130 return actual.source === expected.source &&
53131 actual.global === expected.global &&
53132 actual.multiline === expected.multiline &&
53133 actual.lastIndex === expected.lastIndex &&
53134 actual.ignoreCase === expected.ignoreCase;
53135
53136 // 7.4. Other pairs that do not both pass typeof value == 'object',
53137 // equivalence is determined by ==.
53138 } else if ((actual === null || typeof actual !== 'object') &&
53139 (expected === null || typeof expected !== 'object')) {
53140 return strict ? actual === expected : actual == expected;
53141
53142 // If both values are instances of typed arrays, wrap their underlying
53143 // ArrayBuffers in a Buffer each to increase performance
53144 // This optimization requires the arrays to have the same type as checked by
53145 // Object.prototype.toString (aka pToString). Never perform binary
53146 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
53147 // bit patterns are not identical.
53148 } else if (isView(actual) && isView(expected) &&
53149 pToString(actual) === pToString(expected) &&
53150 !(actual instanceof Float32Array ||
53151 actual instanceof Float64Array)) {
53152 return compare(new Uint8Array(actual.buffer),
53153 new Uint8Array(expected.buffer)) === 0;
53154
53155 // 7.5 For all other Object pairs, including Array objects, equivalence is
53156 // determined by having the same number of owned properties (as verified
53157 // with Object.prototype.hasOwnProperty.call), the same set of keys
53158 // (although not necessarily the same order), equivalent values for every
53159 // corresponding key, and an identical 'prototype' property. Note: this
53160 // accounts for both named and indexed properties on Arrays.
53161 } else if (isBuffer(actual) !== isBuffer(expected)) {
53162 return false;
53163 } else {
53164 memos = memos || {actual: [], expected: []};
53165
53166 var actualIndex = memos.actual.indexOf(actual);
53167 if (actualIndex !== -1) {
53168 if (actualIndex === memos.expected.indexOf(expected)) {
53169 return true;
53170 }
53171 }
53172
53173 memos.actual.push(actual);
53174 memos.expected.push(expected);
53175
53176 return objEquiv(actual, expected, strict, memos);
53177 }
53178 }
53179
53180 function isArguments(object) {
53181 return Object.prototype.toString.call(object) == '[object Arguments]';
53182 }
53183
53184 function objEquiv(a, b, strict, actualVisitedObjects) {
53185 if (a === null || a === undefined || b === null || b === undefined)
53186 return false;
53187 // if one is a primitive, the other must be same
53188 if (util.isPrimitive(a) || util.isPrimitive(b))
53189 return a === b;
53190 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
53191 return false;
53192 var aIsArgs = isArguments(a);
53193 var bIsArgs = isArguments(b);
53194 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
53195 return false;
53196 if (aIsArgs) {
53197 a = pSlice.call(a);
53198 b = pSlice.call(b);
53199 return _deepEqual(a, b, strict);
53200 }
53201 var ka = objectKeys(a);
53202 var kb = objectKeys(b);
53203 var key, i;
53204 // having the same number of owned properties (keys incorporates
53205 // hasOwnProperty)
53206 if (ka.length !== kb.length)
53207 return false;
53208 //the same set of keys (although not necessarily the same order),
53209 ka.sort();
53210 kb.sort();
53211 //~~~cheap key test
53212 for (i = ka.length - 1; i >= 0; i--) {
53213 if (ka[i] !== kb[i])
53214 return false;
53215 }
53216 //equivalent values for every corresponding key, and
53217 //~~~possibly expensive deep test
53218 for (i = ka.length - 1; i >= 0; i--) {
53219 key = ka[i];
53220 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
53221 return false;
53222 }
53223 return true;
53224 }
53225
53226 // 8. The non-equivalence assertion tests for any deep inequality.
53227 // assert.notDeepEqual(actual, expected, message_opt);
53228
53229 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
53230 if (_deepEqual(actual, expected, false)) {
53231 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
53232 }
53233 };
53234
53235 assert.notDeepStrictEqual = notDeepStrictEqual;
53236 function notDeepStrictEqual(actual, expected, message) {
53237 if (_deepEqual(actual, expected, true)) {
53238 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
53239 }
53240 }
53241
53242
53243 // 9. The strict equality assertion tests strict equality, as determined by ===.
53244 // assert.strictEqual(actual, expected, message_opt);
53245
53246 assert.strictEqual = function strictEqual(actual, expected, message) {
53247 if (actual !== expected) {
53248 fail(actual, expected, message, '===', assert.strictEqual);
53249 }
53250 };
53251
53252 // 10. The strict non-equality assertion tests for strict inequality, as
53253 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
53254
53255 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
53256 if (actual === expected) {
53257 fail(actual, expected, message, '!==', assert.notStrictEqual);
53258 }
53259 };
53260
53261 function expectedException(actual, expected) {
53262 if (!actual || !expected) {
53263 return false;
53264 }
53265
53266 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
53267 return expected.test(actual);
53268 }
53269
53270 try {
53271 if (actual instanceof expected) {
53272 return true;
53273 }
53274 } catch (e) {
53275 // Ignore. The instanceof check doesn't work for arrow functions.
53276 }
53277
53278 if (Error.isPrototypeOf(expected)) {
53279 return false;
53280 }
53281
53282 return expected.call({}, actual) === true;
53283 }
53284
53285 function _tryBlock(block) {
53286 var error;
53287 try {
53288 block();
53289 } catch (e) {
53290 error = e;
53291 }
53292 return error;
53293 }
53294
53295 function _throws(shouldThrow, block, expected, message) {
53296 var actual;
53297
53298 if (typeof block !== 'function') {
53299 throw new TypeError('"block" argument must be a function');
53300 }
53301
53302 if (typeof expected === 'string') {
53303 message = expected;
53304 expected = null;
53305 }
53306
53307 actual = _tryBlock(block);
53308
53309 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
53310 (message ? ' ' + message : '.');
53311
53312 if (shouldThrow && !actual) {
53313 fail(actual, expected, 'Missing expected exception' + message);
53314 }
53315
53316 var userProvidedMessage = typeof message === 'string';
53317 var isUnwantedException = !shouldThrow && util.isError(actual);
53318 var isUnexpectedException = !shouldThrow && actual && !expected;
53319
53320 if ((isUnwantedException &&
53321 userProvidedMessage &&
53322 expectedException(actual, expected)) ||
53323 isUnexpectedException) {
53324 fail(actual, expected, 'Got unwanted exception' + message);
53325 }
53326
53327 if ((shouldThrow && actual && expected &&
53328 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
53329 throw actual;
53330 }
53331 }
53332
53333 // 11. Expected to throw an error:
53334 // assert.throws(block, Error_opt, message_opt);
53335
53336 assert.throws = function(block, /*optional*/error, /*optional*/message) {
53337 _throws(true, block, error, message);
53338 };
53339
53340 // EXTENSION! This is annoying to write outside this module.
53341 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
53342 _throws(false, block, error, message);
53343 };
53344
53345 assert.ifError = function(err) { if (err) throw err; };
53346
53347 var objectKeys = Object.keys || function (obj) {
53348 var keys = [];
53349 for (var key in obj) {
53350 if (hasOwn.call(obj, key)) keys.push(key);
53351 }
53352 return keys;
53353 };
53354
53355 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
53356 },{"util/":148}],16:[function(require,module,exports){
53357 'use strict'
53358
53359 exports.byteLength = byteLength
53360 exports.toByteArray = toByteArray
53361 exports.fromByteArray = fromByteArray
53362
53363 var lookup = []
53364 var revLookup = []
53365 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
53366
53367 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
53368 for (var i = 0, len = code.length; i < len; ++i) {
53369 lookup[i] = code[i]
53370 revLookup[code.charCodeAt(i)] = i
53371 }
53372
53373 revLookup['-'.charCodeAt(0)] = 62
53374 revLookup['_'.charCodeAt(0)] = 63
53375
53376 function placeHoldersCount (b64) {
53377 var len = b64.length
53378 if (len % 4 > 0) {
53379 throw new Error('Invalid string. Length must be a multiple of 4')
53380 }
53381
53382 // the number of equal signs (place holders)
53383 // if there are two placeholders, than the two characters before it
53384 // represent one byte
53385 // if there is only one, then the three characters before it represent 2 bytes
53386 // this is just a cheap hack to not do indexOf twice
53387 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
53388 }
53389
53390 function byteLength (b64) {
53391 // base64 is 4/3 + up to two characters of the original data
53392 return b64.length * 3 / 4 - placeHoldersCount(b64)
53393 }
53394
53395 function toByteArray (b64) {
53396 var i, j, l, tmp, placeHolders, arr
53397 var len = b64.length
53398 placeHolders = placeHoldersCount(b64)
53399
53400 arr = new Arr(len * 3 / 4 - placeHolders)
53401
53402 // if there are placeholders, only get up to the last complete 4 chars
53403 l = placeHolders > 0 ? len - 4 : len
53404
53405 var L = 0
53406
53407 for (i = 0, j = 0; i < l; i += 4, j += 3) {
53408 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
53409 arr[L++] = (tmp >> 16) & 0xFF
53410 arr[L++] = (tmp >> 8) & 0xFF
53411 arr[L++] = tmp & 0xFF
53412 }
53413
53414 if (placeHolders === 2) {
53415 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
53416 arr[L++] = tmp & 0xFF
53417 } else if (placeHolders === 1) {
53418 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
53419 arr[L++] = (tmp >> 8) & 0xFF
53420 arr[L++] = tmp & 0xFF
53421 }
53422
53423 return arr
53424 }
53425
53426 function tripletToBase64 (num) {
53427 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
53428 }
53429
53430 function encodeChunk (uint8, start, end) {
53431 var tmp
53432 var output = []
53433 for (var i = start; i < end; i += 3) {
53434 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
53435 output.push(tripletToBase64(tmp))
53436 }
53437 return output.join('')
53438 }
53439
53440 function fromByteArray (uint8) {
53441 var tmp
53442 var len = uint8.length
53443 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
53444 var output = ''
53445 var parts = []
53446 var maxChunkLength = 16383 // must be multiple of 3
53447
53448 // go through the array every three bytes, we'll deal with trailing stuff later
53449 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
53450 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
53451 }
53452
53453 // pad the end with zeros, but make sure to not forget the extra bytes
53454 if (extraBytes === 1) {
53455 tmp = uint8[len - 1]
53456 output += lookup[tmp >> 2]
53457 output += lookup[(tmp << 4) & 0x3F]
53458 output += '=='
53459 } else if (extraBytes === 2) {
53460 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
53461 output += lookup[tmp >> 10]
53462 output += lookup[(tmp >> 4) & 0x3F]
53463 output += lookup[(tmp << 2) & 0x3F]
53464 output += '='
53465 }
53466
53467 parts.push(output)
53468
53469 return parts.join('')
53470 }
53471
53472 },{}],17:[function(require,module,exports){
53473 (function (module, exports) {
53474 'use strict';
53475
53476 // Utils
53477 function assert (val, msg) {
53478 if (!val) throw new Error(msg || 'Assertion failed');
53479 }
53480
53481 // Could use `inherits` module, but don't want to move from single file
53482 // architecture yet.
53483 function inherits (ctor, superCtor) {
53484 ctor.super_ = superCtor;
53485 var TempCtor = function () {};
53486 TempCtor.prototype = superCtor.prototype;
53487 ctor.prototype = new TempCtor();
53488 ctor.prototype.constructor = ctor;
53489 }
53490
53491 // BN
53492
53493 function BN (number, base, endian) {
53494 if (BN.isBN(number)) {
53495 return number;
53496 }
53497
53498 this.negative = 0;
53499 this.words = null;
53500 this.length = 0;
53501
53502 // Reduction context
53503 this.red = null;
53504
53505 if (number !== null) {
53506 if (base === 'le' || base === 'be') {
53507 endian = base;
53508 base = 10;
53509 }
53510
53511 this._init(number || 0, base || 10, endian || 'be');
53512 }
53513 }
53514 if (typeof module === 'object') {
53515 module.exports = BN;
53516 } else {
53517 exports.BN = BN;
53518 }
53519
53520 BN.BN = BN;
53521 BN.wordSize = 26;
53522
53523 var Buffer;
53524 try {
53525 Buffer = require('buf' + 'fer').Buffer;
53526 } catch (e) {
53527 }
53528
53529 BN.isBN = function isBN (num) {
53530 if (num instanceof BN) {
53531 return true;
53532 }
53533
53534 return num !== null && typeof num === 'object' &&
53535 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
53536 };
53537
53538 BN.max = function max (left, right) {
53539 if (left.cmp(right) > 0) return left;
53540 return right;
53541 };
53542
53543 BN.min = function min (left, right) {
53544 if (left.cmp(right) < 0) return left;
53545 return right;
53546 };
53547
53548 BN.prototype._init = function init (number, base, endian) {
53549 if (typeof number === 'number') {
53550 return this._initNumber(number, base, endian);
53551 }
53552
53553 if (typeof number === 'object') {
53554 return this._initArray(number, base, endian);
53555 }
53556
53557 if (base === 'hex') {
53558 base = 16;
53559 }
53560 assert(base === (base | 0) && base >= 2 && base <= 36);
53561
53562 number = number.toString().replace(/\s+/g, '');
53563 var start = 0;
53564 if (number[0] === '-') {
53565 start++;
53566 }
53567
53568 if (base === 16) {
53569 this._parseHex(number, start);
53570 } else {
53571 this._parseBase(number, base, start);
53572 }
53573
53574 if (number[0] === '-') {
53575 this.negative = 1;
53576 }
53577
53578 this.strip();
53579
53580 if (endian !== 'le') return;
53581
53582 this._initArray(this.toArray(), base, endian);
53583 };
53584
53585 BN.prototype._initNumber = function _initNumber (number, base, endian) {
53586 if (number < 0) {
53587 this.negative = 1;
53588 number = -number;
53589 }
53590 if (number < 0x4000000) {
53591 this.words = [ number & 0x3ffffff ];
53592 this.length = 1;
53593 } else if (number < 0x10000000000000) {
53594 this.words = [
53595 number & 0x3ffffff,
53596 (number / 0x4000000) & 0x3ffffff
53597 ];
53598 this.length = 2;
53599 } else {
53600 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
53601 this.words = [
53602 number & 0x3ffffff,
53603 (number / 0x4000000) & 0x3ffffff,
53604 1
53605 ];
53606 this.length = 3;
53607 }
53608
53609 if (endian !== 'le') return;
53610
53611 // Reverse the bytes
53612 this._initArray(this.toArray(), base, endian);
53613 };
53614
53615 BN.prototype._initArray = function _initArray (number, base, endian) {
53616 // Perhaps a Uint8Array
53617 assert(typeof number.length === 'number');
53618 if (number.length <= 0) {
53619 this.words = [ 0 ];
53620 this.length = 1;
53621 return this;
53622 }
53623
53624 this.length = Math.ceil(number.length / 3);
53625 this.words = new Array(this.length);
53626 for (var i = 0; i < this.length; i++) {
53627 this.words[i] = 0;
53628 }
53629
53630 var j, w;
53631 var off = 0;
53632 if (endian === 'be') {
53633 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
53634 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
53635 this.words[j] |= (w << off) & 0x3ffffff;
53636 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53637 off += 24;
53638 if (off >= 26) {
53639 off -= 26;
53640 j++;
53641 }
53642 }
53643 } else if (endian === 'le') {
53644 for (i = 0, j = 0; i < number.length; i += 3) {
53645 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
53646 this.words[j] |= (w << off) & 0x3ffffff;
53647 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53648 off += 24;
53649 if (off >= 26) {
53650 off -= 26;
53651 j++;
53652 }
53653 }
53654 }
53655 return this.strip();
53656 };
53657
53658 function parseHex (str, start, end) {
53659 var r = 0;
53660 var len = Math.min(str.length, end);
53661 for (var i = start; i < len; i++) {
53662 var c = str.charCodeAt(i) - 48;
53663
53664 r <<= 4;
53665
53666 // 'a' - 'f'
53667 if (c >= 49 && c <= 54) {
53668 r |= c - 49 + 0xa;
53669
53670 // 'A' - 'F'
53671 } else if (c >= 17 && c <= 22) {
53672 r |= c - 17 + 0xa;
53673
53674 // '0' - '9'
53675 } else {
53676 r |= c & 0xf;
53677 }
53678 }
53679 return r;
53680 }
53681
53682 BN.prototype._parseHex = function _parseHex (number, start) {
53683 // Create possibly bigger array to ensure that it fits the number
53684 this.length = Math.ceil((number.length - start) / 6);
53685 this.words = new Array(this.length);
53686 for (var i = 0; i < this.length; i++) {
53687 this.words[i] = 0;
53688 }
53689
53690 var j, w;
53691 // Scan 24-bit chunks and add them to the number
53692 var off = 0;
53693 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
53694 w = parseHex(number, i, i + 6);
53695 this.words[j] |= (w << off) & 0x3ffffff;
53696 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
53697 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53698 off += 24;
53699 if (off >= 26) {
53700 off -= 26;
53701 j++;
53702 }
53703 }
53704 if (i + 6 !== start) {
53705 w = parseHex(number, start, i + 6);
53706 this.words[j] |= (w << off) & 0x3ffffff;
53707 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53708 }
53709 this.strip();
53710 };
53711
53712 function parseBase (str, start, end, mul) {
53713 var r = 0;
53714 var len = Math.min(str.length, end);
53715 for (var i = start; i < len; i++) {
53716 var c = str.charCodeAt(i) - 48;
53717
53718 r *= mul;
53719
53720 // 'a'
53721 if (c >= 49) {
53722 r += c - 49 + 0xa;
53723
53724 // 'A'
53725 } else if (c >= 17) {
53726 r += c - 17 + 0xa;
53727
53728 // '0' - '9'
53729 } else {
53730 r += c;
53731 }
53732 }
53733 return r;
53734 }
53735
53736 BN.prototype._parseBase = function _parseBase (number, base, start) {
53737 // Initialize as zero
53738 this.words = [ 0 ];
53739 this.length = 1;
53740
53741 // Find length of limb in base
53742 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
53743 limbLen++;
53744 }
53745 limbLen--;
53746 limbPow = (limbPow / base) | 0;
53747
53748 var total = number.length - start;
53749 var mod = total % limbLen;
53750 var end = Math.min(total, total - mod) + start;
53751
53752 var word = 0;
53753 for (var i = start; i < end; i += limbLen) {
53754 word = parseBase(number, i, i + limbLen, base);
53755
53756 this.imuln(limbPow);
53757 if (this.words[0] + word < 0x4000000) {
53758 this.words[0] += word;
53759 } else {
53760 this._iaddn(word);
53761 }
53762 }
53763
53764 if (mod !== 0) {
53765 var pow = 1;
53766 word = parseBase(number, i, number.length, base);
53767
53768 for (i = 0; i < mod; i++) {
53769 pow *= base;
53770 }
53771
53772 this.imuln(pow);
53773 if (this.words[0] + word < 0x4000000) {
53774 this.words[0] += word;
53775 } else {
53776 this._iaddn(word);
53777 }
53778 }
53779 };
53780
53781 BN.prototype.copy = function copy (dest) {
53782 dest.words = new Array(this.length);
53783 for (var i = 0; i < this.length; i++) {
53784 dest.words[i] = this.words[i];
53785 }
53786 dest.length = this.length;
53787 dest.negative = this.negative;
53788 dest.red = this.red;
53789 };
53790
53791 BN.prototype.clone = function clone () {
53792 var r = new BN(null);
53793 this.copy(r);
53794 return r;
53795 };
53796
53797 BN.prototype._expand = function _expand (size) {
53798 while (this.length < size) {
53799 this.words[this.length++] = 0;
53800 }
53801 return this;
53802 };
53803
53804 // Remove leading `0` from `this`
53805 BN.prototype.strip = function strip () {
53806 while (this.length > 1 && this.words[this.length - 1] === 0) {
53807 this.length--;
53808 }
53809 return this._normSign();
53810 };
53811
53812 BN.prototype._normSign = function _normSign () {
53813 // -0 = 0
53814 if (this.length === 1 && this.words[0] === 0) {
53815 this.negative = 0;
53816 }
53817 return this;
53818 };
53819
53820 BN.prototype.inspect = function inspect () {
53821 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
53822 };
53823
53824 /*
53825
53826 var zeros = [];
53827 var groupSizes = [];
53828 var groupBases = [];
53829
53830 var s = '';
53831 var i = -1;
53832 while (++i < BN.wordSize) {
53833 zeros[i] = s;
53834 s += '0';
53835 }
53836 groupSizes[0] = 0;
53837 groupSizes[1] = 0;
53838 groupBases[0] = 0;
53839 groupBases[1] = 0;
53840 var base = 2 - 1;
53841 while (++base < 36 + 1) {
53842 var groupSize = 0;
53843 var groupBase = 1;
53844 while (groupBase < (1 << BN.wordSize) / base) {
53845 groupBase *= base;
53846 groupSize += 1;
53847 }
53848 groupSizes[base] = groupSize;
53849 groupBases[base] = groupBase;
53850 }
53851
53852 */
53853
53854 var zeros = [
53855 '',
53856 '0',
53857 '00',
53858 '000',
53859 '0000',
53860 '00000',
53861 '000000',
53862 '0000000',
53863 '00000000',
53864 '000000000',
53865 '0000000000',
53866 '00000000000',
53867 '000000000000',
53868 '0000000000000',
53869 '00000000000000',
53870 '000000000000000',
53871 '0000000000000000',
53872 '00000000000000000',
53873 '000000000000000000',
53874 '0000000000000000000',
53875 '00000000000000000000',
53876 '000000000000000000000',
53877 '0000000000000000000000',
53878 '00000000000000000000000',
53879 '000000000000000000000000',
53880 '0000000000000000000000000'
53881 ];
53882
53883 var groupSizes = [
53884 0, 0,
53885 25, 16, 12, 11, 10, 9, 8,
53886 8, 7, 7, 7, 7, 6, 6,
53887 6, 6, 6, 6, 6, 5, 5,
53888 5, 5, 5, 5, 5, 5, 5,
53889 5, 5, 5, 5, 5, 5, 5
53890 ];
53891
53892 var groupBases = [
53893 0, 0,
53894 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
53895 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
53896 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
53897 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
53898 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
53899 ];
53900
53901 BN.prototype.toString = function toString (base, padding) {
53902 base = base || 10;
53903 padding = padding | 0 || 1;
53904
53905 var out;
53906 if (base === 16 || base === 'hex') {
53907 out = '';
53908 var off = 0;
53909 var carry = 0;
53910 for (var i = 0; i < this.length; i++) {
53911 var w = this.words[i];
53912 var word = (((w << off) | carry) & 0xffffff).toString(16);
53913 carry = (w >>> (24 - off)) & 0xffffff;
53914 if (carry !== 0 || i !== this.length - 1) {
53915 out = zeros[6 - word.length] + word + out;
53916 } else {
53917 out = word + out;
53918 }
53919 off += 2;
53920 if (off >= 26) {
53921 off -= 26;
53922 i--;
53923 }
53924 }
53925 if (carry !== 0) {
53926 out = carry.toString(16) + out;
53927 }
53928 while (out.length % padding !== 0) {
53929 out = '0' + out;
53930 }
53931 if (this.negative !== 0) {
53932 out = '-' + out;
53933 }
53934 return out;
53935 }
53936
53937 if (base === (base | 0) && base >= 2 && base <= 36) {
53938 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
53939 var groupSize = groupSizes[base];
53940 // var groupBase = Math.pow(base, groupSize);
53941 var groupBase = groupBases[base];
53942 out = '';
53943 var c = this.clone();
53944 c.negative = 0;
53945 while (!c.isZero()) {
53946 var r = c.modn(groupBase).toString(base);
53947 c = c.idivn(groupBase);
53948
53949 if (!c.isZero()) {
53950 out = zeros[groupSize - r.length] + r + out;
53951 } else {
53952 out = r + out;
53953 }
53954 }
53955 if (this.isZero()) {
53956 out = '0' + out;
53957 }
53958 while (out.length % padding !== 0) {
53959 out = '0' + out;
53960 }
53961 if (this.negative !== 0) {
53962 out = '-' + out;
53963 }
53964 return out;
53965 }
53966
53967 assert(false, 'Base should be between 2 and 36');
53968 };
53969
53970 BN.prototype.toNumber = function toNumber () {
53971 var ret = this.words[0];
53972 if (this.length === 2) {
53973 ret += this.words[1] * 0x4000000;
53974 } else if (this.length === 3 && this.words[2] === 0x01) {
53975 // NOTE: at this stage it is known that the top bit is set
53976 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
53977 } else if (this.length > 2) {
53978 assert(false, 'Number can only safely store up to 53 bits');
53979 }
53980 return (this.negative !== 0) ? -ret : ret;
53981 };
53982
53983 BN.prototype.toJSON = function toJSON () {
53984 return this.toString(16);
53985 };
53986
53987 BN.prototype.toBuffer = function toBuffer (endian, length) {
53988 assert(typeof Buffer !== 'undefined');
53989 return this.toArrayLike(Buffer, endian, length);
53990 };
53991
53992 BN.prototype.toArray = function toArray (endian, length) {
53993 return this.toArrayLike(Array, endian, length);
53994 };
53995
53996 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
53997 var byteLength = this.byteLength();
53998 var reqLength = length || Math.max(1, byteLength);
53999 assert(byteLength <= reqLength, 'byte array longer than desired length');
54000 assert(reqLength > 0, 'Requested array length <= 0');
54001
54002 this.strip();
54003 var littleEndian = endian === 'le';
54004 var res = new ArrayType(reqLength);
54005
54006 var b, i;
54007 var q = this.clone();
54008 if (!littleEndian) {
54009 // Assume big-endian
54010 for (i = 0; i < reqLength - byteLength; i++) {
54011 res[i] = 0;
54012 }
54013
54014 for (i = 0; !q.isZero(); i++) {
54015 b = q.andln(0xff);
54016 q.iushrn(8);
54017
54018 res[reqLength - i - 1] = b;
54019 }
54020 } else {
54021 for (i = 0; !q.isZero(); i++) {
54022 b = q.andln(0xff);
54023 q.iushrn(8);
54024
54025 res[i] = b;
54026 }
54027
54028 for (; i < reqLength; i++) {
54029 res[i] = 0;
54030 }
54031 }
54032
54033 return res;
54034 };
54035
54036 if (Math.clz32) {
54037 BN.prototype._countBits = function _countBits (w) {
54038 return 32 - Math.clz32(w);
54039 };
54040 } else {
54041 BN.prototype._countBits = function _countBits (w) {
54042 var t = w;
54043 var r = 0;
54044 if (t >= 0x1000) {
54045 r += 13;
54046 t >>>= 13;
54047 }
54048 if (t >= 0x40) {
54049 r += 7;
54050 t >>>= 7;
54051 }
54052 if (t >= 0x8) {
54053 r += 4;
54054 t >>>= 4;
54055 }
54056 if (t >= 0x02) {
54057 r += 2;
54058 t >>>= 2;
54059 }
54060 return r + t;
54061 };
54062 }
54063
54064 BN.prototype._zeroBits = function _zeroBits (w) {
54065 // Short-cut
54066 if (w === 0) return 26;
54067
54068 var t = w;
54069 var r = 0;
54070 if ((t & 0x1fff) === 0) {
54071 r += 13;
54072 t >>>= 13;
54073 }
54074 if ((t & 0x7f) === 0) {
54075 r += 7;
54076 t >>>= 7;
54077 }
54078 if ((t & 0xf) === 0) {
54079 r += 4;
54080 t >>>= 4;
54081 }
54082 if ((t & 0x3) === 0) {
54083 r += 2;
54084 t >>>= 2;
54085 }
54086 if ((t & 0x1) === 0) {
54087 r++;
54088 }
54089 return r;
54090 };
54091
54092 // Return number of used bits in a BN
54093 BN.prototype.bitLength = function bitLength () {
54094 var w = this.words[this.length - 1];
54095 var hi = this._countBits(w);
54096 return (this.length - 1) * 26 + hi;
54097 };
54098
54099 function toBitArray (num) {
54100 var w = new Array(num.bitLength());
54101
54102 for (var bit = 0; bit < w.length; bit++) {
54103 var off = (bit / 26) | 0;
54104 var wbit = bit % 26;
54105
54106 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
54107 }
54108
54109 return w;
54110 }
54111
54112 // Number of trailing zero bits
54113 BN.prototype.zeroBits = function zeroBits () {
54114 if (this.isZero()) return 0;
54115
54116 var r = 0;
54117 for (var i = 0; i < this.length; i++) {
54118 var b = this._zeroBits(this.words[i]);
54119 r += b;
54120 if (b !== 26) break;
54121 }
54122 return r;
54123 };
54124
54125 BN.prototype.byteLength = function byteLength () {
54126 return Math.ceil(this.bitLength() / 8);
54127 };
54128
54129 BN.prototype.toTwos = function toTwos (width) {
54130 if (this.negative !== 0) {
54131 return this.abs().inotn(width).iaddn(1);
54132 }
54133 return this.clone();
54134 };
54135
54136 BN.prototype.fromTwos = function fromTwos (width) {
54137 if (this.testn(width - 1)) {
54138 return this.notn(width).iaddn(1).ineg();
54139 }
54140 return this.clone();
54141 };
54142
54143 BN.prototype.isNeg = function isNeg () {
54144 return this.negative !== 0;
54145 };
54146
54147 // Return negative clone of `this`
54148 BN.prototype.neg = function neg () {
54149 return this.clone().ineg();
54150 };
54151
54152 BN.prototype.ineg = function ineg () {
54153 if (!this.isZero()) {
54154 this.negative ^= 1;
54155 }
54156
54157 return this;
54158 };
54159
54160 // Or `num` with `this` in-place
54161 BN.prototype.iuor = function iuor (num) {
54162 while (this.length < num.length) {
54163 this.words[this.length++] = 0;
54164 }
54165
54166 for (var i = 0; i < num.length; i++) {
54167 this.words[i] = this.words[i] | num.words[i];
54168 }
54169
54170 return this.strip();
54171 };
54172
54173 BN.prototype.ior = function ior (num) {
54174 assert((this.negative | num.negative) === 0);
54175 return this.iuor(num);
54176 };
54177
54178 // Or `num` with `this`
54179 BN.prototype.or = function or (num) {
54180 if (this.length > num.length) return this.clone().ior(num);
54181 return num.clone().ior(this);
54182 };
54183
54184 BN.prototype.uor = function uor (num) {
54185 if (this.length > num.length) return this.clone().iuor(num);
54186 return num.clone().iuor(this);
54187 };
54188
54189 // And `num` with `this` in-place
54190 BN.prototype.iuand = function iuand (num) {
54191 // b = min-length(num, this)
54192 var b;
54193 if (this.length > num.length) {
54194 b = num;
54195 } else {
54196 b = this;
54197 }
54198
54199 for (var i = 0; i < b.length; i++) {
54200 this.words[i] = this.words[i] & num.words[i];
54201 }
54202
54203 this.length = b.length;
54204
54205 return this.strip();
54206 };
54207
54208 BN.prototype.iand = function iand (num) {
54209 assert((this.negative | num.negative) === 0);
54210 return this.iuand(num);
54211 };
54212
54213 // And `num` with `this`
54214 BN.prototype.and = function and (num) {
54215 if (this.length > num.length) return this.clone().iand(num);
54216 return num.clone().iand(this);
54217 };
54218
54219 BN.prototype.uand = function uand (num) {
54220 if (this.length > num.length) return this.clone().iuand(num);
54221 return num.clone().iuand(this);
54222 };
54223
54224 // Xor `num` with `this` in-place
54225 BN.prototype.iuxor = function iuxor (num) {
54226 // a.length > b.length
54227 var a;
54228 var b;
54229 if (this.length > num.length) {
54230 a = this;
54231 b = num;
54232 } else {
54233 a = num;
54234 b = this;
54235 }
54236
54237 for (var i = 0; i < b.length; i++) {
54238 this.words[i] = a.words[i] ^ b.words[i];
54239 }
54240
54241 if (this !== a) {
54242 for (; i < a.length; i++) {
54243 this.words[i] = a.words[i];
54244 }
54245 }
54246
54247 this.length = a.length;
54248
54249 return this.strip();
54250 };
54251
54252 BN.prototype.ixor = function ixor (num) {
54253 assert((this.negative | num.negative) === 0);
54254 return this.iuxor(num);
54255 };
54256
54257 // Xor `num` with `this`
54258 BN.prototype.xor = function xor (num) {
54259 if (this.length > num.length) return this.clone().ixor(num);
54260 return num.clone().ixor(this);
54261 };
54262
54263 BN.prototype.uxor = function uxor (num) {
54264 if (this.length > num.length) return this.clone().iuxor(num);
54265 return num.clone().iuxor(this);
54266 };
54267
54268 // Not ``this`` with ``width`` bitwidth
54269 BN.prototype.inotn = function inotn (width) {
54270 assert(typeof width === 'number' && width >= 0);
54271
54272 var bytesNeeded = Math.ceil(width / 26) | 0;
54273 var bitsLeft = width % 26;
54274
54275 // Extend the buffer with leading zeroes
54276 this._expand(bytesNeeded);
54277
54278 if (bitsLeft > 0) {
54279 bytesNeeded--;
54280 }
54281
54282 // Handle complete words
54283 for (var i = 0; i < bytesNeeded; i++) {
54284 this.words[i] = ~this.words[i] & 0x3ffffff;
54285 }
54286
54287 // Handle the residue
54288 if (bitsLeft > 0) {
54289 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
54290 }
54291
54292 // And remove leading zeroes
54293 return this.strip();
54294 };
54295
54296 BN.prototype.notn = function notn (width) {
54297 return this.clone().inotn(width);
54298 };
54299
54300 // Set `bit` of `this`
54301 BN.prototype.setn = function setn (bit, val) {
54302 assert(typeof bit === 'number' && bit >= 0);
54303
54304 var off = (bit / 26) | 0;
54305 var wbit = bit % 26;
54306
54307 this._expand(off + 1);
54308
54309 if (val) {
54310 this.words[off] = this.words[off] | (1 << wbit);
54311 } else {
54312 this.words[off] = this.words[off] & ~(1 << wbit);
54313 }
54314
54315 return this.strip();
54316 };
54317
54318 // Add `num` to `this` in-place
54319 BN.prototype.iadd = function iadd (num) {
54320 var r;
54321
54322 // negative + positive
54323 if (this.negative !== 0 && num.negative === 0) {
54324 this.negative = 0;
54325 r = this.isub(num);
54326 this.negative ^= 1;
54327 return this._normSign();
54328
54329 // positive + negative
54330 } else if (this.negative === 0 && num.negative !== 0) {
54331 num.negative = 0;
54332 r = this.isub(num);
54333 num.negative = 1;
54334 return r._normSign();
54335 }
54336
54337 // a.length > b.length
54338 var a, b;
54339 if (this.length > num.length) {
54340 a = this;
54341 b = num;
54342 } else {
54343 a = num;
54344 b = this;
54345 }
54346
54347 var carry = 0;
54348 for (var i = 0; i < b.length; i++) {
54349 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
54350 this.words[i] = r & 0x3ffffff;
54351 carry = r >>> 26;
54352 }
54353 for (; carry !== 0 && i < a.length; i++) {
54354 r = (a.words[i] | 0) + carry;
54355 this.words[i] = r & 0x3ffffff;
54356 carry = r >>> 26;
54357 }
54358
54359 this.length = a.length;
54360 if (carry !== 0) {
54361 this.words[this.length] = carry;
54362 this.length++;
54363 // Copy the rest of the words
54364 } else if (a !== this) {
54365 for (; i < a.length; i++) {
54366 this.words[i] = a.words[i];
54367 }
54368 }
54369
54370 return this;
54371 };
54372
54373 // Add `num` to `this`
54374 BN.prototype.add = function add (num) {
54375 var res;
54376 if (num.negative !== 0 && this.negative === 0) {
54377 num.negative = 0;
54378 res = this.sub(num);
54379 num.negative ^= 1;
54380 return res;
54381 } else if (num.negative === 0 && this.negative !== 0) {
54382 this.negative = 0;
54383 res = num.sub(this);
54384 this.negative = 1;
54385 return res;
54386 }
54387
54388 if (this.length > num.length) return this.clone().iadd(num);
54389
54390 return num.clone().iadd(this);
54391 };
54392
54393 // Subtract `num` from `this` in-place
54394 BN.prototype.isub = function isub (num) {
54395 // this - (-num) = this + num
54396 if (num.negative !== 0) {
54397 num.negative = 0;
54398 var r = this.iadd(num);
54399 num.negative = 1;
54400 return r._normSign();
54401
54402 // -this - num = -(this + num)
54403 } else if (this.negative !== 0) {
54404 this.negative = 0;
54405 this.iadd(num);
54406 this.negative = 1;
54407 return this._normSign();
54408 }
54409
54410 // At this point both numbers are positive
54411 var cmp = this.cmp(num);
54412
54413 // Optimization - zeroify
54414 if (cmp === 0) {
54415 this.negative = 0;
54416 this.length = 1;
54417 this.words[0] = 0;
54418 return this;
54419 }
54420
54421 // a > b
54422 var a, b;
54423 if (cmp > 0) {
54424 a = this;
54425 b = num;
54426 } else {
54427 a = num;
54428 b = this;
54429 }
54430
54431 var carry = 0;
54432 for (var i = 0; i < b.length; i++) {
54433 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
54434 carry = r >> 26;
54435 this.words[i] = r & 0x3ffffff;
54436 }
54437 for (; carry !== 0 && i < a.length; i++) {
54438 r = (a.words[i] | 0) + carry;
54439 carry = r >> 26;
54440 this.words[i] = r & 0x3ffffff;
54441 }
54442
54443 // Copy rest of the words
54444 if (carry === 0 && i < a.length && a !== this) {
54445 for (; i < a.length; i++) {
54446 this.words[i] = a.words[i];
54447 }
54448 }
54449
54450 this.length = Math.max(this.length, i);
54451
54452 if (a !== this) {
54453 this.negative = 1;
54454 }
54455
54456 return this.strip();
54457 };
54458
54459 // Subtract `num` from `this`
54460 BN.prototype.sub = function sub (num) {
54461 return this.clone().isub(num);
54462 };
54463
54464 function smallMulTo (self, num, out) {
54465 out.negative = num.negative ^ self.negative;
54466 var len = (self.length + num.length) | 0;
54467 out.length = len;
54468 len = (len - 1) | 0;
54469
54470 // Peel one iteration (compiler can't do it, because of code complexity)
54471 var a = self.words[0] | 0;
54472 var b = num.words[0] | 0;
54473 var r = a * b;
54474
54475 var lo = r & 0x3ffffff;
54476 var carry = (r / 0x4000000) | 0;
54477 out.words[0] = lo;
54478
54479 for (var k = 1; k < len; k++) {
54480 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
54481 // note that ncarry could be >= 0x3ffffff
54482 var ncarry = carry >>> 26;
54483 var rword = carry & 0x3ffffff;
54484 var maxJ = Math.min(k, num.length - 1);
54485 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
54486 var i = (k - j) | 0;
54487 a = self.words[i] | 0;
54488 b = num.words[j] | 0;
54489 r = a * b + rword;
54490 ncarry += (r / 0x4000000) | 0;
54491 rword = r & 0x3ffffff;
54492 }
54493 out.words[k] = rword | 0;
54494 carry = ncarry | 0;
54495 }
54496 if (carry !== 0) {
54497 out.words[k] = carry | 0;
54498 } else {
54499 out.length--;
54500 }
54501
54502 return out.strip();
54503 }
54504
54505 // TODO(indutny): it may be reasonable to omit it for users who don't need
54506 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
54507 // multiplication (like elliptic secp256k1).
54508 var comb10MulTo = function comb10MulTo (self, num, out) {
54509 var a = self.words;
54510 var b = num.words;
54511 var o = out.words;
54512 var c = 0;
54513 var lo;
54514 var mid;
54515 var hi;
54516 var a0 = a[0] | 0;
54517 var al0 = a0 & 0x1fff;
54518 var ah0 = a0 >>> 13;
54519 var a1 = a[1] | 0;
54520 var al1 = a1 & 0x1fff;
54521 var ah1 = a1 >>> 13;
54522 var a2 = a[2] | 0;
54523 var al2 = a2 & 0x1fff;
54524 var ah2 = a2 >>> 13;
54525 var a3 = a[3] | 0;
54526 var al3 = a3 & 0x1fff;
54527 var ah3 = a3 >>> 13;
54528 var a4 = a[4] | 0;
54529 var al4 = a4 & 0x1fff;
54530 var ah4 = a4 >>> 13;
54531 var a5 = a[5] | 0;
54532 var al5 = a5 & 0x1fff;
54533 var ah5 = a5 >>> 13;
54534 var a6 = a[6] | 0;
54535 var al6 = a6 & 0x1fff;
54536 var ah6 = a6 >>> 13;
54537 var a7 = a[7] | 0;
54538 var al7 = a7 & 0x1fff;
54539 var ah7 = a7 >>> 13;
54540 var a8 = a[8] | 0;
54541 var al8 = a8 & 0x1fff;
54542 var ah8 = a8 >>> 13;
54543 var a9 = a[9] | 0;
54544 var al9 = a9 & 0x1fff;
54545 var ah9 = a9 >>> 13;
54546 var b0 = b[0] | 0;
54547 var bl0 = b0 & 0x1fff;
54548 var bh0 = b0 >>> 13;
54549 var b1 = b[1] | 0;
54550 var bl1 = b1 & 0x1fff;
54551 var bh1 = b1 >>> 13;
54552 var b2 = b[2] | 0;
54553 var bl2 = b2 & 0x1fff;
54554 var bh2 = b2 >>> 13;
54555 var b3 = b[3] | 0;
54556 var bl3 = b3 & 0x1fff;
54557 var bh3 = b3 >>> 13;
54558 var b4 = b[4] | 0;
54559 var bl4 = b4 & 0x1fff;
54560 var bh4 = b4 >>> 13;
54561 var b5 = b[5] | 0;
54562 var bl5 = b5 & 0x1fff;
54563 var bh5 = b5 >>> 13;
54564 var b6 = b[6] | 0;
54565 var bl6 = b6 & 0x1fff;
54566 var bh6 = b6 >>> 13;
54567 var b7 = b[7] | 0;
54568 var bl7 = b7 & 0x1fff;
54569 var bh7 = b7 >>> 13;
54570 var b8 = b[8] | 0;
54571 var bl8 = b8 & 0x1fff;
54572 var bh8 = b8 >>> 13;
54573 var b9 = b[9] | 0;
54574 var bl9 = b9 & 0x1fff;
54575 var bh9 = b9 >>> 13;
54576
54577 out.negative = self.negative ^ num.negative;
54578 out.length = 19;
54579 /* k = 0 */
54580 lo = Math.imul(al0, bl0);
54581 mid = Math.imul(al0, bh0);
54582 mid = (mid + Math.imul(ah0, bl0)) | 0;
54583 hi = Math.imul(ah0, bh0);
54584 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54585 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
54586 w0 &= 0x3ffffff;
54587 /* k = 1 */
54588 lo = Math.imul(al1, bl0);
54589 mid = Math.imul(al1, bh0);
54590 mid = (mid + Math.imul(ah1, bl0)) | 0;
54591 hi = Math.imul(ah1, bh0);
54592 lo = (lo + Math.imul(al0, bl1)) | 0;
54593 mid = (mid + Math.imul(al0, bh1)) | 0;
54594 mid = (mid + Math.imul(ah0, bl1)) | 0;
54595 hi = (hi + Math.imul(ah0, bh1)) | 0;
54596 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54597 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
54598 w1 &= 0x3ffffff;
54599 /* k = 2 */
54600 lo = Math.imul(al2, bl0);
54601 mid = Math.imul(al2, bh0);
54602 mid = (mid + Math.imul(ah2, bl0)) | 0;
54603 hi = Math.imul(ah2, bh0);
54604 lo = (lo + Math.imul(al1, bl1)) | 0;
54605 mid = (mid + Math.imul(al1, bh1)) | 0;
54606 mid = (mid + Math.imul(ah1, bl1)) | 0;
54607 hi = (hi + Math.imul(ah1, bh1)) | 0;
54608 lo = (lo + Math.imul(al0, bl2)) | 0;
54609 mid = (mid + Math.imul(al0, bh2)) | 0;
54610 mid = (mid + Math.imul(ah0, bl2)) | 0;
54611 hi = (hi + Math.imul(ah0, bh2)) | 0;
54612 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54613 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
54614 w2 &= 0x3ffffff;
54615 /* k = 3 */
54616 lo = Math.imul(al3, bl0);
54617 mid = Math.imul(al3, bh0);
54618 mid = (mid + Math.imul(ah3, bl0)) | 0;
54619 hi = Math.imul(ah3, bh0);
54620 lo = (lo + Math.imul(al2, bl1)) | 0;
54621 mid = (mid + Math.imul(al2, bh1)) | 0;
54622 mid = (mid + Math.imul(ah2, bl1)) | 0;
54623 hi = (hi + Math.imul(ah2, bh1)) | 0;
54624 lo = (lo + Math.imul(al1, bl2)) | 0;
54625 mid = (mid + Math.imul(al1, bh2)) | 0;
54626 mid = (mid + Math.imul(ah1, bl2)) | 0;
54627 hi = (hi + Math.imul(ah1, bh2)) | 0;
54628 lo = (lo + Math.imul(al0, bl3)) | 0;
54629 mid = (mid + Math.imul(al0, bh3)) | 0;
54630 mid = (mid + Math.imul(ah0, bl3)) | 0;
54631 hi = (hi + Math.imul(ah0, bh3)) | 0;
54632 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54633 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
54634 w3 &= 0x3ffffff;
54635 /* k = 4 */
54636 lo = Math.imul(al4, bl0);
54637 mid = Math.imul(al4, bh0);
54638 mid = (mid + Math.imul(ah4, bl0)) | 0;
54639 hi = Math.imul(ah4, bh0);
54640 lo = (lo + Math.imul(al3, bl1)) | 0;
54641 mid = (mid + Math.imul(al3, bh1)) | 0;
54642 mid = (mid + Math.imul(ah3, bl1)) | 0;
54643 hi = (hi + Math.imul(ah3, bh1)) | 0;
54644 lo = (lo + Math.imul(al2, bl2)) | 0;
54645 mid = (mid + Math.imul(al2, bh2)) | 0;
54646 mid = (mid + Math.imul(ah2, bl2)) | 0;
54647 hi = (hi + Math.imul(ah2, bh2)) | 0;
54648 lo = (lo + Math.imul(al1, bl3)) | 0;
54649 mid = (mid + Math.imul(al1, bh3)) | 0;
54650 mid = (mid + Math.imul(ah1, bl3)) | 0;
54651 hi = (hi + Math.imul(ah1, bh3)) | 0;
54652 lo = (lo + Math.imul(al0, bl4)) | 0;
54653 mid = (mid + Math.imul(al0, bh4)) | 0;
54654 mid = (mid + Math.imul(ah0, bl4)) | 0;
54655 hi = (hi + Math.imul(ah0, bh4)) | 0;
54656 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54657 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
54658 w4 &= 0x3ffffff;
54659 /* k = 5 */
54660 lo = Math.imul(al5, bl0);
54661 mid = Math.imul(al5, bh0);
54662 mid = (mid + Math.imul(ah5, bl0)) | 0;
54663 hi = Math.imul(ah5, bh0);
54664 lo = (lo + Math.imul(al4, bl1)) | 0;
54665 mid = (mid + Math.imul(al4, bh1)) | 0;
54666 mid = (mid + Math.imul(ah4, bl1)) | 0;
54667 hi = (hi + Math.imul(ah4, bh1)) | 0;
54668 lo = (lo + Math.imul(al3, bl2)) | 0;
54669 mid = (mid + Math.imul(al3, bh2)) | 0;
54670 mid = (mid + Math.imul(ah3, bl2)) | 0;
54671 hi = (hi + Math.imul(ah3, bh2)) | 0;
54672 lo = (lo + Math.imul(al2, bl3)) | 0;
54673 mid = (mid + Math.imul(al2, bh3)) | 0;
54674 mid = (mid + Math.imul(ah2, bl3)) | 0;
54675 hi = (hi + Math.imul(ah2, bh3)) | 0;
54676 lo = (lo + Math.imul(al1, bl4)) | 0;
54677 mid = (mid + Math.imul(al1, bh4)) | 0;
54678 mid = (mid + Math.imul(ah1, bl4)) | 0;
54679 hi = (hi + Math.imul(ah1, bh4)) | 0;
54680 lo = (lo + Math.imul(al0, bl5)) | 0;
54681 mid = (mid + Math.imul(al0, bh5)) | 0;
54682 mid = (mid + Math.imul(ah0, bl5)) | 0;
54683 hi = (hi + Math.imul(ah0, bh5)) | 0;
54684 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54685 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
54686 w5 &= 0x3ffffff;
54687 /* k = 6 */
54688 lo = Math.imul(al6, bl0);
54689 mid = Math.imul(al6, bh0);
54690 mid = (mid + Math.imul(ah6, bl0)) | 0;
54691 hi = Math.imul(ah6, bh0);
54692 lo = (lo + Math.imul(al5, bl1)) | 0;
54693 mid = (mid + Math.imul(al5, bh1)) | 0;
54694 mid = (mid + Math.imul(ah5, bl1)) | 0;
54695 hi = (hi + Math.imul(ah5, bh1)) | 0;
54696 lo = (lo + Math.imul(al4, bl2)) | 0;
54697 mid = (mid + Math.imul(al4, bh2)) | 0;
54698 mid = (mid + Math.imul(ah4, bl2)) | 0;
54699 hi = (hi + Math.imul(ah4, bh2)) | 0;
54700 lo = (lo + Math.imul(al3, bl3)) | 0;
54701 mid = (mid + Math.imul(al3, bh3)) | 0;
54702 mid = (mid + Math.imul(ah3, bl3)) | 0;
54703 hi = (hi + Math.imul(ah3, bh3)) | 0;
54704 lo = (lo + Math.imul(al2, bl4)) | 0;
54705 mid = (mid + Math.imul(al2, bh4)) | 0;
54706 mid = (mid + Math.imul(ah2, bl4)) | 0;
54707 hi = (hi + Math.imul(ah2, bh4)) | 0;
54708 lo = (lo + Math.imul(al1, bl5)) | 0;
54709 mid = (mid + Math.imul(al1, bh5)) | 0;
54710 mid = (mid + Math.imul(ah1, bl5)) | 0;
54711 hi = (hi + Math.imul(ah1, bh5)) | 0;
54712 lo = (lo + Math.imul(al0, bl6)) | 0;
54713 mid = (mid + Math.imul(al0, bh6)) | 0;
54714 mid = (mid + Math.imul(ah0, bl6)) | 0;
54715 hi = (hi + Math.imul(ah0, bh6)) | 0;
54716 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54717 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
54718 w6 &= 0x3ffffff;
54719 /* k = 7 */
54720 lo = Math.imul(al7, bl0);
54721 mid = Math.imul(al7, bh0);
54722 mid = (mid + Math.imul(ah7, bl0)) | 0;
54723 hi = Math.imul(ah7, bh0);
54724 lo = (lo + Math.imul(al6, bl1)) | 0;
54725 mid = (mid + Math.imul(al6, bh1)) | 0;
54726 mid = (mid + Math.imul(ah6, bl1)) | 0;
54727 hi = (hi + Math.imul(ah6, bh1)) | 0;
54728 lo = (lo + Math.imul(al5, bl2)) | 0;
54729 mid = (mid + Math.imul(al5, bh2)) | 0;
54730 mid = (mid + Math.imul(ah5, bl2)) | 0;
54731 hi = (hi + Math.imul(ah5, bh2)) | 0;
54732 lo = (lo + Math.imul(al4, bl3)) | 0;
54733 mid = (mid + Math.imul(al4, bh3)) | 0;
54734 mid = (mid + Math.imul(ah4, bl3)) | 0;
54735 hi = (hi + Math.imul(ah4, bh3)) | 0;
54736 lo = (lo + Math.imul(al3, bl4)) | 0;
54737 mid = (mid + Math.imul(al3, bh4)) | 0;
54738 mid = (mid + Math.imul(ah3, bl4)) | 0;
54739 hi = (hi + Math.imul(ah3, bh4)) | 0;
54740 lo = (lo + Math.imul(al2, bl5)) | 0;
54741 mid = (mid + Math.imul(al2, bh5)) | 0;
54742 mid = (mid + Math.imul(ah2, bl5)) | 0;
54743 hi = (hi + Math.imul(ah2, bh5)) | 0;
54744 lo = (lo + Math.imul(al1, bl6)) | 0;
54745 mid = (mid + Math.imul(al1, bh6)) | 0;
54746 mid = (mid + Math.imul(ah1, bl6)) | 0;
54747 hi = (hi + Math.imul(ah1, bh6)) | 0;
54748 lo = (lo + Math.imul(al0, bl7)) | 0;
54749 mid = (mid + Math.imul(al0, bh7)) | 0;
54750 mid = (mid + Math.imul(ah0, bl7)) | 0;
54751 hi = (hi + Math.imul(ah0, bh7)) | 0;
54752 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54753 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
54754 w7 &= 0x3ffffff;
54755 /* k = 8 */
54756 lo = Math.imul(al8, bl0);
54757 mid = Math.imul(al8, bh0);
54758 mid = (mid + Math.imul(ah8, bl0)) | 0;
54759 hi = Math.imul(ah8, bh0);
54760 lo = (lo + Math.imul(al7, bl1)) | 0;
54761 mid = (mid + Math.imul(al7, bh1)) | 0;
54762 mid = (mid + Math.imul(ah7, bl1)) | 0;
54763 hi = (hi + Math.imul(ah7, bh1)) | 0;
54764 lo = (lo + Math.imul(al6, bl2)) | 0;
54765 mid = (mid + Math.imul(al6, bh2)) | 0;
54766 mid = (mid + Math.imul(ah6, bl2)) | 0;
54767 hi = (hi + Math.imul(ah6, bh2)) | 0;
54768 lo = (lo + Math.imul(al5, bl3)) | 0;
54769 mid = (mid + Math.imul(al5, bh3)) | 0;
54770 mid = (mid + Math.imul(ah5, bl3)) | 0;
54771 hi = (hi + Math.imul(ah5, bh3)) | 0;
54772 lo = (lo + Math.imul(al4, bl4)) | 0;
54773 mid = (mid + Math.imul(al4, bh4)) | 0;
54774 mid = (mid + Math.imul(ah4, bl4)) | 0;
54775 hi = (hi + Math.imul(ah4, bh4)) | 0;
54776 lo = (lo + Math.imul(al3, bl5)) | 0;
54777 mid = (mid + Math.imul(al3, bh5)) | 0;
54778 mid = (mid + Math.imul(ah3, bl5)) | 0;
54779 hi = (hi + Math.imul(ah3, bh5)) | 0;
54780 lo = (lo + Math.imul(al2, bl6)) | 0;
54781 mid = (mid + Math.imul(al2, bh6)) | 0;
54782 mid = (mid + Math.imul(ah2, bl6)) | 0;
54783 hi = (hi + Math.imul(ah2, bh6)) | 0;
54784 lo = (lo + Math.imul(al1, bl7)) | 0;
54785 mid = (mid + Math.imul(al1, bh7)) | 0;
54786 mid = (mid + Math.imul(ah1, bl7)) | 0;
54787 hi = (hi + Math.imul(ah1, bh7)) | 0;
54788 lo = (lo + Math.imul(al0, bl8)) | 0;
54789 mid = (mid + Math.imul(al0, bh8)) | 0;
54790 mid = (mid + Math.imul(ah0, bl8)) | 0;
54791 hi = (hi + Math.imul(ah0, bh8)) | 0;
54792 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54793 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
54794 w8 &= 0x3ffffff;
54795 /* k = 9 */
54796 lo = Math.imul(al9, bl0);
54797 mid = Math.imul(al9, bh0);
54798 mid = (mid + Math.imul(ah9, bl0)) | 0;
54799 hi = Math.imul(ah9, bh0);
54800 lo = (lo + Math.imul(al8, bl1)) | 0;
54801 mid = (mid + Math.imul(al8, bh1)) | 0;
54802 mid = (mid + Math.imul(ah8, bl1)) | 0;
54803 hi = (hi + Math.imul(ah8, bh1)) | 0;
54804 lo = (lo + Math.imul(al7, bl2)) | 0;
54805 mid = (mid + Math.imul(al7, bh2)) | 0;
54806 mid = (mid + Math.imul(ah7, bl2)) | 0;
54807 hi = (hi + Math.imul(ah7, bh2)) | 0;
54808 lo = (lo + Math.imul(al6, bl3)) | 0;
54809 mid = (mid + Math.imul(al6, bh3)) | 0;
54810 mid = (mid + Math.imul(ah6, bl3)) | 0;
54811 hi = (hi + Math.imul(ah6, bh3)) | 0;
54812 lo = (lo + Math.imul(al5, bl4)) | 0;
54813 mid = (mid + Math.imul(al5, bh4)) | 0;
54814 mid = (mid + Math.imul(ah5, bl4)) | 0;
54815 hi = (hi + Math.imul(ah5, bh4)) | 0;
54816 lo = (lo + Math.imul(al4, bl5)) | 0;
54817 mid = (mid + Math.imul(al4, bh5)) | 0;
54818 mid = (mid + Math.imul(ah4, bl5)) | 0;
54819 hi = (hi + Math.imul(ah4, bh5)) | 0;
54820 lo = (lo + Math.imul(al3, bl6)) | 0;
54821 mid = (mid + Math.imul(al3, bh6)) | 0;
54822 mid = (mid + Math.imul(ah3, bl6)) | 0;
54823 hi = (hi + Math.imul(ah3, bh6)) | 0;
54824 lo = (lo + Math.imul(al2, bl7)) | 0;
54825 mid = (mid + Math.imul(al2, bh7)) | 0;
54826 mid = (mid + Math.imul(ah2, bl7)) | 0;
54827 hi = (hi + Math.imul(ah2, bh7)) | 0;
54828 lo = (lo + Math.imul(al1, bl8)) | 0;
54829 mid = (mid + Math.imul(al1, bh8)) | 0;
54830 mid = (mid + Math.imul(ah1, bl8)) | 0;
54831 hi = (hi + Math.imul(ah1, bh8)) | 0;
54832 lo = (lo + Math.imul(al0, bl9)) | 0;
54833 mid = (mid + Math.imul(al0, bh9)) | 0;
54834 mid = (mid + Math.imul(ah0, bl9)) | 0;
54835 hi = (hi + Math.imul(ah0, bh9)) | 0;
54836 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54837 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
54838 w9 &= 0x3ffffff;
54839 /* k = 10 */
54840 lo = Math.imul(al9, bl1);
54841 mid = Math.imul(al9, bh1);
54842 mid = (mid + Math.imul(ah9, bl1)) | 0;
54843 hi = Math.imul(ah9, bh1);
54844 lo = (lo + Math.imul(al8, bl2)) | 0;
54845 mid = (mid + Math.imul(al8, bh2)) | 0;
54846 mid = (mid + Math.imul(ah8, bl2)) | 0;
54847 hi = (hi + Math.imul(ah8, bh2)) | 0;
54848 lo = (lo + Math.imul(al7, bl3)) | 0;
54849 mid = (mid + Math.imul(al7, bh3)) | 0;
54850 mid = (mid + Math.imul(ah7, bl3)) | 0;
54851 hi = (hi + Math.imul(ah7, bh3)) | 0;
54852 lo = (lo + Math.imul(al6, bl4)) | 0;
54853 mid = (mid + Math.imul(al6, bh4)) | 0;
54854 mid = (mid + Math.imul(ah6, bl4)) | 0;
54855 hi = (hi + Math.imul(ah6, bh4)) | 0;
54856 lo = (lo + Math.imul(al5, bl5)) | 0;
54857 mid = (mid + Math.imul(al5, bh5)) | 0;
54858 mid = (mid + Math.imul(ah5, bl5)) | 0;
54859 hi = (hi + Math.imul(ah5, bh5)) | 0;
54860 lo = (lo + Math.imul(al4, bl6)) | 0;
54861 mid = (mid + Math.imul(al4, bh6)) | 0;
54862 mid = (mid + Math.imul(ah4, bl6)) | 0;
54863 hi = (hi + Math.imul(ah4, bh6)) | 0;
54864 lo = (lo + Math.imul(al3, bl7)) | 0;
54865 mid = (mid + Math.imul(al3, bh7)) | 0;
54866 mid = (mid + Math.imul(ah3, bl7)) | 0;
54867 hi = (hi + Math.imul(ah3, bh7)) | 0;
54868 lo = (lo + Math.imul(al2, bl8)) | 0;
54869 mid = (mid + Math.imul(al2, bh8)) | 0;
54870 mid = (mid + Math.imul(ah2, bl8)) | 0;
54871 hi = (hi + Math.imul(ah2, bh8)) | 0;
54872 lo = (lo + Math.imul(al1, bl9)) | 0;
54873 mid = (mid + Math.imul(al1, bh9)) | 0;
54874 mid = (mid + Math.imul(ah1, bl9)) | 0;
54875 hi = (hi + Math.imul(ah1, bh9)) | 0;
54876 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54877 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
54878 w10 &= 0x3ffffff;
54879 /* k = 11 */
54880 lo = Math.imul(al9, bl2);
54881 mid = Math.imul(al9, bh2);
54882 mid = (mid + Math.imul(ah9, bl2)) | 0;
54883 hi = Math.imul(ah9, bh2);
54884 lo = (lo + Math.imul(al8, bl3)) | 0;
54885 mid = (mid + Math.imul(al8, bh3)) | 0;
54886 mid = (mid + Math.imul(ah8, bl3)) | 0;
54887 hi = (hi + Math.imul(ah8, bh3)) | 0;
54888 lo = (lo + Math.imul(al7, bl4)) | 0;
54889 mid = (mid + Math.imul(al7, bh4)) | 0;
54890 mid = (mid + Math.imul(ah7, bl4)) | 0;
54891 hi = (hi + Math.imul(ah7, bh4)) | 0;
54892 lo = (lo + Math.imul(al6, bl5)) | 0;
54893 mid = (mid + Math.imul(al6, bh5)) | 0;
54894 mid = (mid + Math.imul(ah6, bl5)) | 0;
54895 hi = (hi + Math.imul(ah6, bh5)) | 0;
54896 lo = (lo + Math.imul(al5, bl6)) | 0;
54897 mid = (mid + Math.imul(al5, bh6)) | 0;
54898 mid = (mid + Math.imul(ah5, bl6)) | 0;
54899 hi = (hi + Math.imul(ah5, bh6)) | 0;
54900 lo = (lo + Math.imul(al4, bl7)) | 0;
54901 mid = (mid + Math.imul(al4, bh7)) | 0;
54902 mid = (mid + Math.imul(ah4, bl7)) | 0;
54903 hi = (hi + Math.imul(ah4, bh7)) | 0;
54904 lo = (lo + Math.imul(al3, bl8)) | 0;
54905 mid = (mid + Math.imul(al3, bh8)) | 0;
54906 mid = (mid + Math.imul(ah3, bl8)) | 0;
54907 hi = (hi + Math.imul(ah3, bh8)) | 0;
54908 lo = (lo + Math.imul(al2, bl9)) | 0;
54909 mid = (mid + Math.imul(al2, bh9)) | 0;
54910 mid = (mid + Math.imul(ah2, bl9)) | 0;
54911 hi = (hi + Math.imul(ah2, bh9)) | 0;
54912 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54913 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
54914 w11 &= 0x3ffffff;
54915 /* k = 12 */
54916 lo = Math.imul(al9, bl3);
54917 mid = Math.imul(al9, bh3);
54918 mid = (mid + Math.imul(ah9, bl3)) | 0;
54919 hi = Math.imul(ah9, bh3);
54920 lo = (lo + Math.imul(al8, bl4)) | 0;
54921 mid = (mid + Math.imul(al8, bh4)) | 0;
54922 mid = (mid + Math.imul(ah8, bl4)) | 0;
54923 hi = (hi + Math.imul(ah8, bh4)) | 0;
54924 lo = (lo + Math.imul(al7, bl5)) | 0;
54925 mid = (mid + Math.imul(al7, bh5)) | 0;
54926 mid = (mid + Math.imul(ah7, bl5)) | 0;
54927 hi = (hi + Math.imul(ah7, bh5)) | 0;
54928 lo = (lo + Math.imul(al6, bl6)) | 0;
54929 mid = (mid + Math.imul(al6, bh6)) | 0;
54930 mid = (mid + Math.imul(ah6, bl6)) | 0;
54931 hi = (hi + Math.imul(ah6, bh6)) | 0;
54932 lo = (lo + Math.imul(al5, bl7)) | 0;
54933 mid = (mid + Math.imul(al5, bh7)) | 0;
54934 mid = (mid + Math.imul(ah5, bl7)) | 0;
54935 hi = (hi + Math.imul(ah5, bh7)) | 0;
54936 lo = (lo + Math.imul(al4, bl8)) | 0;
54937 mid = (mid + Math.imul(al4, bh8)) | 0;
54938 mid = (mid + Math.imul(ah4, bl8)) | 0;
54939 hi = (hi + Math.imul(ah4, bh8)) | 0;
54940 lo = (lo + Math.imul(al3, bl9)) | 0;
54941 mid = (mid + Math.imul(al3, bh9)) | 0;
54942 mid = (mid + Math.imul(ah3, bl9)) | 0;
54943 hi = (hi + Math.imul(ah3, bh9)) | 0;
54944 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54945 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
54946 w12 &= 0x3ffffff;
54947 /* k = 13 */
54948 lo = Math.imul(al9, bl4);
54949 mid = Math.imul(al9, bh4);
54950 mid = (mid + Math.imul(ah9, bl4)) | 0;
54951 hi = Math.imul(ah9, bh4);
54952 lo = (lo + Math.imul(al8, bl5)) | 0;
54953 mid = (mid + Math.imul(al8, bh5)) | 0;
54954 mid = (mid + Math.imul(ah8, bl5)) | 0;
54955 hi = (hi + Math.imul(ah8, bh5)) | 0;
54956 lo = (lo + Math.imul(al7, bl6)) | 0;
54957 mid = (mid + Math.imul(al7, bh6)) | 0;
54958 mid = (mid + Math.imul(ah7, bl6)) | 0;
54959 hi = (hi + Math.imul(ah7, bh6)) | 0;
54960 lo = (lo + Math.imul(al6, bl7)) | 0;
54961 mid = (mid + Math.imul(al6, bh7)) | 0;
54962 mid = (mid + Math.imul(ah6, bl7)) | 0;
54963 hi = (hi + Math.imul(ah6, bh7)) | 0;
54964 lo = (lo + Math.imul(al5, bl8)) | 0;
54965 mid = (mid + Math.imul(al5, bh8)) | 0;
54966 mid = (mid + Math.imul(ah5, bl8)) | 0;
54967 hi = (hi + Math.imul(ah5, bh8)) | 0;
54968 lo = (lo + Math.imul(al4, bl9)) | 0;
54969 mid = (mid + Math.imul(al4, bh9)) | 0;
54970 mid = (mid + Math.imul(ah4, bl9)) | 0;
54971 hi = (hi + Math.imul(ah4, bh9)) | 0;
54972 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54973 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
54974 w13 &= 0x3ffffff;
54975 /* k = 14 */
54976 lo = Math.imul(al9, bl5);
54977 mid = Math.imul(al9, bh5);
54978 mid = (mid + Math.imul(ah9, bl5)) | 0;
54979 hi = Math.imul(ah9, bh5);
54980 lo = (lo + Math.imul(al8, bl6)) | 0;
54981 mid = (mid + Math.imul(al8, bh6)) | 0;
54982 mid = (mid + Math.imul(ah8, bl6)) | 0;
54983 hi = (hi + Math.imul(ah8, bh6)) | 0;
54984 lo = (lo + Math.imul(al7, bl7)) | 0;
54985 mid = (mid + Math.imul(al7, bh7)) | 0;
54986 mid = (mid + Math.imul(ah7, bl7)) | 0;
54987 hi = (hi + Math.imul(ah7, bh7)) | 0;
54988 lo = (lo + Math.imul(al6, bl8)) | 0;
54989 mid = (mid + Math.imul(al6, bh8)) | 0;
54990 mid = (mid + Math.imul(ah6, bl8)) | 0;
54991 hi = (hi + Math.imul(ah6, bh8)) | 0;
54992 lo = (lo + Math.imul(al5, bl9)) | 0;
54993 mid = (mid + Math.imul(al5, bh9)) | 0;
54994 mid = (mid + Math.imul(ah5, bl9)) | 0;
54995 hi = (hi + Math.imul(ah5, bh9)) | 0;
54996 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54997 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
54998 w14 &= 0x3ffffff;
54999 /* k = 15 */
55000 lo = Math.imul(al9, bl6);
55001 mid = Math.imul(al9, bh6);
55002 mid = (mid + Math.imul(ah9, bl6)) | 0;
55003 hi = Math.imul(ah9, bh6);
55004 lo = (lo + Math.imul(al8, bl7)) | 0;
55005 mid = (mid + Math.imul(al8, bh7)) | 0;
55006 mid = (mid + Math.imul(ah8, bl7)) | 0;
55007 hi = (hi + Math.imul(ah8, bh7)) | 0;
55008 lo = (lo + Math.imul(al7, bl8)) | 0;
55009 mid = (mid + Math.imul(al7, bh8)) | 0;
55010 mid = (mid + Math.imul(ah7, bl8)) | 0;
55011 hi = (hi + Math.imul(ah7, bh8)) | 0;
55012 lo = (lo + Math.imul(al6, bl9)) | 0;
55013 mid = (mid + Math.imul(al6, bh9)) | 0;
55014 mid = (mid + Math.imul(ah6, bl9)) | 0;
55015 hi = (hi + Math.imul(ah6, bh9)) | 0;
55016 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55017 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
55018 w15 &= 0x3ffffff;
55019 /* k = 16 */
55020 lo = Math.imul(al9, bl7);
55021 mid = Math.imul(al9, bh7);
55022 mid = (mid + Math.imul(ah9, bl7)) | 0;
55023 hi = Math.imul(ah9, bh7);
55024 lo = (lo + Math.imul(al8, bl8)) | 0;
55025 mid = (mid + Math.imul(al8, bh8)) | 0;
55026 mid = (mid + Math.imul(ah8, bl8)) | 0;
55027 hi = (hi + Math.imul(ah8, bh8)) | 0;
55028 lo = (lo + Math.imul(al7, bl9)) | 0;
55029 mid = (mid + Math.imul(al7, bh9)) | 0;
55030 mid = (mid + Math.imul(ah7, bl9)) | 0;
55031 hi = (hi + Math.imul(ah7, bh9)) | 0;
55032 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55033 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
55034 w16 &= 0x3ffffff;
55035 /* k = 17 */
55036 lo = Math.imul(al9, bl8);
55037 mid = Math.imul(al9, bh8);
55038 mid = (mid + Math.imul(ah9, bl8)) | 0;
55039 hi = Math.imul(ah9, bh8);
55040 lo = (lo + Math.imul(al8, bl9)) | 0;
55041 mid = (mid + Math.imul(al8, bh9)) | 0;
55042 mid = (mid + Math.imul(ah8, bl9)) | 0;
55043 hi = (hi + Math.imul(ah8, bh9)) | 0;
55044 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55045 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
55046 w17 &= 0x3ffffff;
55047 /* k = 18 */
55048 lo = Math.imul(al9, bl9);
55049 mid = Math.imul(al9, bh9);
55050 mid = (mid + Math.imul(ah9, bl9)) | 0;
55051 hi = Math.imul(ah9, bh9);
55052 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55053 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
55054 w18 &= 0x3ffffff;
55055 o[0] = w0;
55056 o[1] = w1;
55057 o[2] = w2;
55058 o[3] = w3;
55059 o[4] = w4;
55060 o[5] = w5;
55061 o[6] = w6;
55062 o[7] = w7;
55063 o[8] = w8;
55064 o[9] = w9;
55065 o[10] = w10;
55066 o[11] = w11;
55067 o[12] = w12;
55068 o[13] = w13;
55069 o[14] = w14;
55070 o[15] = w15;
55071 o[16] = w16;
55072 o[17] = w17;
55073 o[18] = w18;
55074 if (c !== 0) {
55075 o[19] = c;
55076 out.length++;
55077 }
55078 return out;
55079 };
55080
55081 // Polyfill comb
55082 if (!Math.imul) {
55083 comb10MulTo = smallMulTo;
55084 }
55085
55086 function bigMulTo (self, num, out) {
55087 out.negative = num.negative ^ self.negative;
55088 out.length = self.length + num.length;
55089
55090 var carry = 0;
55091 var hncarry = 0;
55092 for (var k = 0; k < out.length - 1; k++) {
55093 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
55094 // note that ncarry could be >= 0x3ffffff
55095 var ncarry = hncarry;
55096 hncarry = 0;
55097 var rword = carry & 0x3ffffff;
55098 var maxJ = Math.min(k, num.length - 1);
55099 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
55100 var i = k - j;
55101 var a = self.words[i] | 0;
55102 var b = num.words[j] | 0;
55103 var r = a * b;
55104
55105 var lo = r & 0x3ffffff;
55106 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
55107 lo = (lo + rword) | 0;
55108 rword = lo & 0x3ffffff;
55109 ncarry = (ncarry + (lo >>> 26)) | 0;
55110
55111 hncarry += ncarry >>> 26;
55112 ncarry &= 0x3ffffff;
55113 }
55114 out.words[k] = rword;
55115 carry = ncarry;
55116 ncarry = hncarry;
55117 }
55118 if (carry !== 0) {
55119 out.words[k] = carry;
55120 } else {
55121 out.length--;
55122 }
55123
55124 return out.strip();
55125 }
55126
55127 function jumboMulTo (self, num, out) {
55128 var fftm = new FFTM();
55129 return fftm.mulp(self, num, out);
55130 }
55131
55132 BN.prototype.mulTo = function mulTo (num, out) {
55133 var res;
55134 var len = this.length + num.length;
55135 if (this.length === 10 && num.length === 10) {
55136 res = comb10MulTo(this, num, out);
55137 } else if (len < 63) {
55138 res = smallMulTo(this, num, out);
55139 } else if (len < 1024) {
55140 res = bigMulTo(this, num, out);
55141 } else {
55142 res = jumboMulTo(this, num, out);
55143 }
55144
55145 return res;
55146 };
55147
55148 // Cooley-Tukey algorithm for FFT
55149 // slightly revisited to rely on looping instead of recursion
55150
55151 function FFTM (x, y) {
55152 this.x = x;
55153 this.y = y;
55154 }
55155
55156 FFTM.prototype.makeRBT = function makeRBT (N) {
55157 var t = new Array(N);
55158 var l = BN.prototype._countBits(N) - 1;
55159 for (var i = 0; i < N; i++) {
55160 t[i] = this.revBin(i, l, N);
55161 }
55162
55163 return t;
55164 };
55165
55166 // Returns binary-reversed representation of `x`
55167 FFTM.prototype.revBin = function revBin (x, l, N) {
55168 if (x === 0 || x === N - 1) return x;
55169
55170 var rb = 0;
55171 for (var i = 0; i < l; i++) {
55172 rb |= (x & 1) << (l - i - 1);
55173 x >>= 1;
55174 }
55175
55176 return rb;
55177 };
55178
55179 // Performs "tweedling" phase, therefore 'emulating'
55180 // behaviour of the recursive algorithm
55181 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
55182 for (var i = 0; i < N; i++) {
55183 rtws[i] = rws[rbt[i]];
55184 itws[i] = iws[rbt[i]];
55185 }
55186 };
55187
55188 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
55189 this.permute(rbt, rws, iws, rtws, itws, N);
55190
55191 for (var s = 1; s < N; s <<= 1) {
55192 var l = s << 1;
55193
55194 var rtwdf = Math.cos(2 * Math.PI / l);
55195 var itwdf = Math.sin(2 * Math.PI / l);
55196
55197 for (var p = 0; p < N; p += l) {
55198 var rtwdf_ = rtwdf;
55199 var itwdf_ = itwdf;
55200
55201 for (var j = 0; j < s; j++) {
55202 var re = rtws[p + j];
55203 var ie = itws[p + j];
55204
55205 var ro = rtws[p + j + s];
55206 var io = itws[p + j + s];
55207
55208 var rx = rtwdf_ * ro - itwdf_ * io;
55209
55210 io = rtwdf_ * io + itwdf_ * ro;
55211 ro = rx;
55212
55213 rtws[p + j] = re + ro;
55214 itws[p + j] = ie + io;
55215
55216 rtws[p + j + s] = re - ro;
55217 itws[p + j + s] = ie - io;
55218
55219 /* jshint maxdepth : false */
55220 if (j !== l) {
55221 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
55222
55223 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
55224 rtwdf_ = rx;
55225 }
55226 }
55227 }
55228 }
55229 };
55230
55231 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
55232 var N = Math.max(m, n) | 1;
55233 var odd = N & 1;
55234 var i = 0;
55235 for (N = N / 2 | 0; N; N = N >>> 1) {
55236 i++;
55237 }
55238
55239 return 1 << i + 1 + odd;
55240 };
55241
55242 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
55243 if (N <= 1) return;
55244
55245 for (var i = 0; i < N / 2; i++) {
55246 var t = rws[i];
55247
55248 rws[i] = rws[N - i - 1];
55249 rws[N - i - 1] = t;
55250
55251 t = iws[i];
55252
55253 iws[i] = -iws[N - i - 1];
55254 iws[N - i - 1] = -t;
55255 }
55256 };
55257
55258 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
55259 var carry = 0;
55260 for (var i = 0; i < N / 2; i++) {
55261 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
55262 Math.round(ws[2 * i] / N) +
55263 carry;
55264
55265 ws[i] = w & 0x3ffffff;
55266
55267 if (w < 0x4000000) {
55268 carry = 0;
55269 } else {
55270 carry = w / 0x4000000 | 0;
55271 }
55272 }
55273
55274 return ws;
55275 };
55276
55277 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
55278 var carry = 0;
55279 for (var i = 0; i < len; i++) {
55280 carry = carry + (ws[i] | 0);
55281
55282 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
55283 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
55284 }
55285
55286 // Pad with zeroes
55287 for (i = 2 * len; i < N; ++i) {
55288 rws[i] = 0;
55289 }
55290
55291 assert(carry === 0);
55292 assert((carry & ~0x1fff) === 0);
55293 };
55294
55295 FFTM.prototype.stub = function stub (N) {
55296 var ph = new Array(N);
55297 for (var i = 0; i < N; i++) {
55298 ph[i] = 0;
55299 }
55300
55301 return ph;
55302 };
55303
55304 FFTM.prototype.mulp = function mulp (x, y, out) {
55305 var N = 2 * this.guessLen13b(x.length, y.length);
55306
55307 var rbt = this.makeRBT(N);
55308
55309 var _ = this.stub(N);
55310
55311 var rws = new Array(N);
55312 var rwst = new Array(N);
55313 var iwst = new Array(N);
55314
55315 var nrws = new Array(N);
55316 var nrwst = new Array(N);
55317 var niwst = new Array(N);
55318
55319 var rmws = out.words;
55320 rmws.length = N;
55321
55322 this.convert13b(x.words, x.length, rws, N);
55323 this.convert13b(y.words, y.length, nrws, N);
55324
55325 this.transform(rws, _, rwst, iwst, N, rbt);
55326 this.transform(nrws, _, nrwst, niwst, N, rbt);
55327
55328 for (var i = 0; i < N; i++) {
55329 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
55330 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
55331 rwst[i] = rx;
55332 }
55333
55334 this.conjugate(rwst, iwst, N);
55335 this.transform(rwst, iwst, rmws, _, N, rbt);
55336 this.conjugate(rmws, _, N);
55337 this.normalize13b(rmws, N);
55338
55339 out.negative = x.negative ^ y.negative;
55340 out.length = x.length + y.length;
55341 return out.strip();
55342 };
55343
55344 // Multiply `this` by `num`
55345 BN.prototype.mul = function mul (num) {
55346 var out = new BN(null);
55347 out.words = new Array(this.length + num.length);
55348 return this.mulTo(num, out);
55349 };
55350
55351 // Multiply employing FFT
55352 BN.prototype.mulf = function mulf (num) {
55353 var out = new BN(null);
55354 out.words = new Array(this.length + num.length);
55355 return jumboMulTo(this, num, out);
55356 };
55357
55358 // In-place Multiplication
55359 BN.prototype.imul = function imul (num) {
55360 return this.clone().mulTo(num, this);
55361 };
55362
55363 BN.prototype.imuln = function imuln (num) {
55364 assert(typeof num === 'number');
55365 assert(num < 0x4000000);
55366
55367 // Carry
55368 var carry = 0;
55369 for (var i = 0; i < this.length; i++) {
55370 var w = (this.words[i] | 0) * num;
55371 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
55372 carry >>= 26;
55373 carry += (w / 0x4000000) | 0;
55374 // NOTE: lo is 27bit maximum
55375 carry += lo >>> 26;
55376 this.words[i] = lo & 0x3ffffff;
55377 }
55378
55379 if (carry !== 0) {
55380 this.words[i] = carry;
55381 this.length++;
55382 }
55383
55384 return this;
55385 };
55386
55387 BN.prototype.muln = function muln (num) {
55388 return this.clone().imuln(num);
55389 };
55390
55391 // `this` * `this`
55392 BN.prototype.sqr = function sqr () {
55393 return this.mul(this);
55394 };
55395
55396 // `this` * `this` in-place
55397 BN.prototype.isqr = function isqr () {
55398 return this.imul(this.clone());
55399 };
55400
55401 // Math.pow(`this`, `num`)
55402 BN.prototype.pow = function pow (num) {
55403 var w = toBitArray(num);
55404 if (w.length === 0) return new BN(1);
55405
55406 // Skip leading zeroes
55407 var res = this;
55408 for (var i = 0; i < w.length; i++, res = res.sqr()) {
55409 if (w[i] !== 0) break;
55410 }
55411
55412 if (++i < w.length) {
55413 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
55414 if (w[i] === 0) continue;
55415
55416 res = res.mul(q);
55417 }
55418 }
55419
55420 return res;
55421 };
55422
55423 // Shift-left in-place
55424 BN.prototype.iushln = function iushln (bits) {
55425 assert(typeof bits === 'number' && bits >= 0);
55426 var r = bits % 26;
55427 var s = (bits - r) / 26;
55428 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
55429 var i;
55430
55431 if (r !== 0) {
55432 var carry = 0;
55433
55434 for (i = 0; i < this.length; i++) {
55435 var newCarry = this.words[i] & carryMask;
55436 var c = ((this.words[i] | 0) - newCarry) << r;
55437 this.words[i] = c | carry;
55438 carry = newCarry >>> (26 - r);
55439 }
55440
55441 if (carry) {
55442 this.words[i] = carry;
55443 this.length++;
55444 }
55445 }
55446
55447 if (s !== 0) {
55448 for (i = this.length - 1; i >= 0; i--) {
55449 this.words[i + s] = this.words[i];
55450 }
55451
55452 for (i = 0; i < s; i++) {
55453 this.words[i] = 0;
55454 }
55455
55456 this.length += s;
55457 }
55458
55459 return this.strip();
55460 };
55461
55462 BN.prototype.ishln = function ishln (bits) {
55463 // TODO(indutny): implement me
55464 assert(this.negative === 0);
55465 return this.iushln(bits);
55466 };
55467
55468 // Shift-right in-place
55469 // NOTE: `hint` is a lowest bit before trailing zeroes
55470 // NOTE: if `extended` is present - it will be filled with destroyed bits
55471 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
55472 assert(typeof bits === 'number' && bits >= 0);
55473 var h;
55474 if (hint) {
55475 h = (hint - (hint % 26)) / 26;
55476 } else {
55477 h = 0;
55478 }
55479
55480 var r = bits % 26;
55481 var s = Math.min((bits - r) / 26, this.length);
55482 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55483 var maskedWords = extended;
55484
55485 h -= s;
55486 h = Math.max(0, h);
55487
55488 // Extended mode, copy masked part
55489 if (maskedWords) {
55490 for (var i = 0; i < s; i++) {
55491 maskedWords.words[i] = this.words[i];
55492 }
55493 maskedWords.length = s;
55494 }
55495
55496 if (s === 0) {
55497 // No-op, we should not move anything at all
55498 } else if (this.length > s) {
55499 this.length -= s;
55500 for (i = 0; i < this.length; i++) {
55501 this.words[i] = this.words[i + s];
55502 }
55503 } else {
55504 this.words[0] = 0;
55505 this.length = 1;
55506 }
55507
55508 var carry = 0;
55509 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
55510 var word = this.words[i] | 0;
55511 this.words[i] = (carry << (26 - r)) | (word >>> r);
55512 carry = word & mask;
55513 }
55514
55515 // Push carried bits as a mask
55516 if (maskedWords && carry !== 0) {
55517 maskedWords.words[maskedWords.length++] = carry;
55518 }
55519
55520 if (this.length === 0) {
55521 this.words[0] = 0;
55522 this.length = 1;
55523 }
55524
55525 return this.strip();
55526 };
55527
55528 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
55529 // TODO(indutny): implement me
55530 assert(this.negative === 0);
55531 return this.iushrn(bits, hint, extended);
55532 };
55533
55534 // Shift-left
55535 BN.prototype.shln = function shln (bits) {
55536 return this.clone().ishln(bits);
55537 };
55538
55539 BN.prototype.ushln = function ushln (bits) {
55540 return this.clone().iushln(bits);
55541 };
55542
55543 // Shift-right
55544 BN.prototype.shrn = function shrn (bits) {
55545 return this.clone().ishrn(bits);
55546 };
55547
55548 BN.prototype.ushrn = function ushrn (bits) {
55549 return this.clone().iushrn(bits);
55550 };
55551
55552 // Test if n bit is set
55553 BN.prototype.testn = function testn (bit) {
55554 assert(typeof bit === 'number' && bit >= 0);
55555 var r = bit % 26;
55556 var s = (bit - r) / 26;
55557 var q = 1 << r;
55558
55559 // Fast case: bit is much higher than all existing words
55560 if (this.length <= s) return false;
55561
55562 // Check bit and return
55563 var w = this.words[s];
55564
55565 return !!(w & q);
55566 };
55567
55568 // Return only lowers bits of number (in-place)
55569 BN.prototype.imaskn = function imaskn (bits) {
55570 assert(typeof bits === 'number' && bits >= 0);
55571 var r = bits % 26;
55572 var s = (bits - r) / 26;
55573
55574 assert(this.negative === 0, 'imaskn works only with positive numbers');
55575
55576 if (this.length <= s) {
55577 return this;
55578 }
55579
55580 if (r !== 0) {
55581 s++;
55582 }
55583 this.length = Math.min(s, this.length);
55584
55585 if (r !== 0) {
55586 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55587 this.words[this.length - 1] &= mask;
55588 }
55589
55590 return this.strip();
55591 };
55592
55593 // Return only lowers bits of number
55594 BN.prototype.maskn = function maskn (bits) {
55595 return this.clone().imaskn(bits);
55596 };
55597
55598 // Add plain number `num` to `this`
55599 BN.prototype.iaddn = function iaddn (num) {
55600 assert(typeof num === 'number');
55601 assert(num < 0x4000000);
55602 if (num < 0) return this.isubn(-num);
55603
55604 // Possible sign change
55605 if (this.negative !== 0) {
55606 if (this.length === 1 && (this.words[0] | 0) < num) {
55607 this.words[0] = num - (this.words[0] | 0);
55608 this.negative = 0;
55609 return this;
55610 }
55611
55612 this.negative = 0;
55613 this.isubn(num);
55614 this.negative = 1;
55615 return this;
55616 }
55617
55618 // Add without checks
55619 return this._iaddn(num);
55620 };
55621
55622 BN.prototype._iaddn = function _iaddn (num) {
55623 this.words[0] += num;
55624
55625 // Carry
55626 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
55627 this.words[i] -= 0x4000000;
55628 if (i === this.length - 1) {
55629 this.words[i + 1] = 1;
55630 } else {
55631 this.words[i + 1]++;
55632 }
55633 }
55634 this.length = Math.max(this.length, i + 1);
55635
55636 return this;
55637 };
55638
55639 // Subtract plain number `num` from `this`
55640 BN.prototype.isubn = function isubn (num) {
55641 assert(typeof num === 'number');
55642 assert(num < 0x4000000);
55643 if (num < 0) return this.iaddn(-num);
55644
55645 if (this.negative !== 0) {
55646 this.negative = 0;
55647 this.iaddn(num);
55648 this.negative = 1;
55649 return this;
55650 }
55651
55652 this.words[0] -= num;
55653
55654 if (this.length === 1 && this.words[0] < 0) {
55655 this.words[0] = -this.words[0];
55656 this.negative = 1;
55657 } else {
55658 // Carry
55659 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
55660 this.words[i] += 0x4000000;
55661 this.words[i + 1] -= 1;
55662 }
55663 }
55664
55665 return this.strip();
55666 };
55667
55668 BN.prototype.addn = function addn (num) {
55669 return this.clone().iaddn(num);
55670 };
55671
55672 BN.prototype.subn = function subn (num) {
55673 return this.clone().isubn(num);
55674 };
55675
55676 BN.prototype.iabs = function iabs () {
55677 this.negative = 0;
55678
55679 return this;
55680 };
55681
55682 BN.prototype.abs = function abs () {
55683 return this.clone().iabs();
55684 };
55685
55686 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
55687 var len = num.length + shift;
55688 var i;
55689
55690 this._expand(len);
55691
55692 var w;
55693 var carry = 0;
55694 for (i = 0; i < num.length; i++) {
55695 w = (this.words[i + shift] | 0) + carry;
55696 var right = (num.words[i] | 0) * mul;
55697 w -= right & 0x3ffffff;
55698 carry = (w >> 26) - ((right / 0x4000000) | 0);
55699 this.words[i + shift] = w & 0x3ffffff;
55700 }
55701 for (; i < this.length - shift; i++) {
55702 w = (this.words[i + shift] | 0) + carry;
55703 carry = w >> 26;
55704 this.words[i + shift] = w & 0x3ffffff;
55705 }
55706
55707 if (carry === 0) return this.strip();
55708
55709 // Subtraction overflow
55710 assert(carry === -1);
55711 carry = 0;
55712 for (i = 0; i < this.length; i++) {
55713 w = -(this.words[i] | 0) + carry;
55714 carry = w >> 26;
55715 this.words[i] = w & 0x3ffffff;
55716 }
55717 this.negative = 1;
55718
55719 return this.strip();
55720 };
55721
55722 BN.prototype._wordDiv = function _wordDiv (num, mode) {
55723 var shift = this.length - num.length;
55724
55725 var a = this.clone();
55726 var b = num;
55727
55728 // Normalize
55729 var bhi = b.words[b.length - 1] | 0;
55730 var bhiBits = this._countBits(bhi);
55731 shift = 26 - bhiBits;
55732 if (shift !== 0) {
55733 b = b.ushln(shift);
55734 a.iushln(shift);
55735 bhi = b.words[b.length - 1] | 0;
55736 }
55737
55738 // Initialize quotient
55739 var m = a.length - b.length;
55740 var q;
55741
55742 if (mode !== 'mod') {
55743 q = new BN(null);
55744 q.length = m + 1;
55745 q.words = new Array(q.length);
55746 for (var i = 0; i < q.length; i++) {
55747 q.words[i] = 0;
55748 }
55749 }
55750
55751 var diff = a.clone()._ishlnsubmul(b, 1, m);
55752 if (diff.negative === 0) {
55753 a = diff;
55754 if (q) {
55755 q.words[m] = 1;
55756 }
55757 }
55758
55759 for (var j = m - 1; j >= 0; j--) {
55760 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
55761 (a.words[b.length + j - 1] | 0);
55762
55763 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
55764 // (0x7ffffff)
55765 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
55766
55767 a._ishlnsubmul(b, qj, j);
55768 while (a.negative !== 0) {
55769 qj--;
55770 a.negative = 0;
55771 a._ishlnsubmul(b, 1, j);
55772 if (!a.isZero()) {
55773 a.negative ^= 1;
55774 }
55775 }
55776 if (q) {
55777 q.words[j] = qj;
55778 }
55779 }
55780 if (q) {
55781 q.strip();
55782 }
55783 a.strip();
55784
55785 // Denormalize
55786 if (mode !== 'div' && shift !== 0) {
55787 a.iushrn(shift);
55788 }
55789
55790 return {
55791 div: q || null,
55792 mod: a
55793 };
55794 };
55795
55796 // NOTE: 1) `mode` can be set to `mod` to request mod only,
55797 // to `div` to request div only, or be absent to
55798 // request both div & mod
55799 // 2) `positive` is true if unsigned mod is requested
55800 BN.prototype.divmod = function divmod (num, mode, positive) {
55801 assert(!num.isZero());
55802
55803 if (this.isZero()) {
55804 return {
55805 div: new BN(0),
55806 mod: new BN(0)
55807 };
55808 }
55809
55810 var div, mod, res;
55811 if (this.negative !== 0 && num.negative === 0) {
55812 res = this.neg().divmod(num, mode);
55813
55814 if (mode !== 'mod') {
55815 div = res.div.neg();
55816 }
55817
55818 if (mode !== 'div') {
55819 mod = res.mod.neg();
55820 if (positive && mod.negative !== 0) {
55821 mod.iadd(num);
55822 }
55823 }
55824
55825 return {
55826 div: div,
55827 mod: mod
55828 };
55829 }
55830
55831 if (this.negative === 0 && num.negative !== 0) {
55832 res = this.divmod(num.neg(), mode);
55833
55834 if (mode !== 'mod') {
55835 div = res.div.neg();
55836 }
55837
55838 return {
55839 div: div,
55840 mod: res.mod
55841 };
55842 }
55843
55844 if ((this.negative & num.negative) !== 0) {
55845 res = this.neg().divmod(num.neg(), mode);
55846
55847 if (mode !== 'div') {
55848 mod = res.mod.neg();
55849 if (positive && mod.negative !== 0) {
55850 mod.isub(num);
55851 }
55852 }
55853
55854 return {
55855 div: res.div,
55856 mod: mod
55857 };
55858 }
55859
55860 // Both numbers are positive at this point
55861
55862 // Strip both numbers to approximate shift value
55863 if (num.length > this.length || this.cmp(num) < 0) {
55864 return {
55865 div: new BN(0),
55866 mod: this
55867 };
55868 }
55869
55870 // Very short reduction
55871 if (num.length === 1) {
55872 if (mode === 'div') {
55873 return {
55874 div: this.divn(num.words[0]),
55875 mod: null
55876 };
55877 }
55878
55879 if (mode === 'mod') {
55880 return {
55881 div: null,
55882 mod: new BN(this.modn(num.words[0]))
55883 };
55884 }
55885
55886 return {
55887 div: this.divn(num.words[0]),
55888 mod: new BN(this.modn(num.words[0]))
55889 };
55890 }
55891
55892 return this._wordDiv(num, mode);
55893 };
55894
55895 // Find `this` / `num`
55896 BN.prototype.div = function div (num) {
55897 return this.divmod(num, 'div', false).div;
55898 };
55899
55900 // Find `this` % `num`
55901 BN.prototype.mod = function mod (num) {
55902 return this.divmod(num, 'mod', false).mod;
55903 };
55904
55905 BN.prototype.umod = function umod (num) {
55906 return this.divmod(num, 'mod', true).mod;
55907 };
55908
55909 // Find Round(`this` / `num`)
55910 BN.prototype.divRound = function divRound (num) {
55911 var dm = this.divmod(num);
55912
55913 // Fast case - exact division
55914 if (dm.mod.isZero()) return dm.div;
55915
55916 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
55917
55918 var half = num.ushrn(1);
55919 var r2 = num.andln(1);
55920 var cmp = mod.cmp(half);
55921
55922 // Round down
55923 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
55924
55925 // Round up
55926 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
55927 };
55928
55929 BN.prototype.modn = function modn (num) {
55930 assert(num <= 0x3ffffff);
55931 var p = (1 << 26) % num;
55932
55933 var acc = 0;
55934 for (var i = this.length - 1; i >= 0; i--) {
55935 acc = (p * acc + (this.words[i] | 0)) % num;
55936 }
55937
55938 return acc;
55939 };
55940
55941 // In-place division by number
55942 BN.prototype.idivn = function idivn (num) {
55943 assert(num <= 0x3ffffff);
55944
55945 var carry = 0;
55946 for (var i = this.length - 1; i >= 0; i--) {
55947 var w = (this.words[i] | 0) + carry * 0x4000000;
55948 this.words[i] = (w / num) | 0;
55949 carry = w % num;
55950 }
55951
55952 return this.strip();
55953 };
55954
55955 BN.prototype.divn = function divn (num) {
55956 return this.clone().idivn(num);
55957 };
55958
55959 BN.prototype.egcd = function egcd (p) {
55960 assert(p.negative === 0);
55961 assert(!p.isZero());
55962
55963 var x = this;
55964 var y = p.clone();
55965
55966 if (x.negative !== 0) {
55967 x = x.umod(p);
55968 } else {
55969 x = x.clone();
55970 }
55971
55972 // A * x + B * y = x
55973 var A = new BN(1);
55974 var B = new BN(0);
55975
55976 // C * x + D * y = y
55977 var C = new BN(0);
55978 var D = new BN(1);
55979
55980 var g = 0;
55981
55982 while (x.isEven() && y.isEven()) {
55983 x.iushrn(1);
55984 y.iushrn(1);
55985 ++g;
55986 }
55987
55988 var yp = y.clone();
55989 var xp = x.clone();
55990
55991 while (!x.isZero()) {
55992 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
55993 if (i > 0) {
55994 x.iushrn(i);
55995 while (i-- > 0) {
55996 if (A.isOdd() || B.isOdd()) {
55997 A.iadd(yp);
55998 B.isub(xp);
55999 }
56000
56001 A.iushrn(1);
56002 B.iushrn(1);
56003 }
56004 }
56005
56006 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
56007 if (j > 0) {
56008 y.iushrn(j);
56009 while (j-- > 0) {
56010 if (C.isOdd() || D.isOdd()) {
56011 C.iadd(yp);
56012 D.isub(xp);
56013 }
56014
56015 C.iushrn(1);
56016 D.iushrn(1);
56017 }
56018 }
56019
56020 if (x.cmp(y) >= 0) {
56021 x.isub(y);
56022 A.isub(C);
56023 B.isub(D);
56024 } else {
56025 y.isub(x);
56026 C.isub(A);
56027 D.isub(B);
56028 }
56029 }
56030
56031 return {
56032 a: C,
56033 b: D,
56034 gcd: y.iushln(g)
56035 };
56036 };
56037
56038 // This is reduced incarnation of the binary EEA
56039 // above, designated to invert members of the
56040 // _prime_ fields F(p) at a maximal speed
56041 BN.prototype._invmp = function _invmp (p) {
56042 assert(p.negative === 0);
56043 assert(!p.isZero());
56044
56045 var a = this;
56046 var b = p.clone();
56047
56048 if (a.negative !== 0) {
56049 a = a.umod(p);
56050 } else {
56051 a = a.clone();
56052 }
56053
56054 var x1 = new BN(1);
56055 var x2 = new BN(0);
56056
56057 var delta = b.clone();
56058
56059 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
56060 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
56061 if (i > 0) {
56062 a.iushrn(i);
56063 while (i-- > 0) {
56064 if (x1.isOdd()) {
56065 x1.iadd(delta);
56066 }
56067
56068 x1.iushrn(1);
56069 }
56070 }
56071
56072 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
56073 if (j > 0) {
56074 b.iushrn(j);
56075 while (j-- > 0) {
56076 if (x2.isOdd()) {
56077 x2.iadd(delta);
56078 }
56079
56080 x2.iushrn(1);
56081 }
56082 }
56083
56084 if (a.cmp(b) >= 0) {
56085 a.isub(b);
56086 x1.isub(x2);
56087 } else {
56088 b.isub(a);
56089 x2.isub(x1);
56090 }
56091 }
56092
56093 var res;
56094 if (a.cmpn(1) === 0) {
56095 res = x1;
56096 } else {
56097 res = x2;
56098 }
56099
56100 if (res.cmpn(0) < 0) {
56101 res.iadd(p);
56102 }
56103
56104 return res;
56105 };
56106
56107 BN.prototype.gcd = function gcd (num) {
56108 if (this.isZero()) return num.abs();
56109 if (num.isZero()) return this.abs();
56110
56111 var a = this.clone();
56112 var b = num.clone();
56113 a.negative = 0;
56114 b.negative = 0;
56115
56116 // Remove common factor of two
56117 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
56118 a.iushrn(1);
56119 b.iushrn(1);
56120 }
56121
56122 do {
56123 while (a.isEven()) {
56124 a.iushrn(1);
56125 }
56126 while (b.isEven()) {
56127 b.iushrn(1);
56128 }
56129
56130 var r = a.cmp(b);
56131 if (r < 0) {
56132 // Swap `a` and `b` to make `a` always bigger than `b`
56133 var t = a;
56134 a = b;
56135 b = t;
56136 } else if (r === 0 || b.cmpn(1) === 0) {
56137 break;
56138 }
56139
56140 a.isub(b);
56141 } while (true);
56142
56143 return b.iushln(shift);
56144 };
56145
56146 // Invert number in the field F(num)
56147 BN.prototype.invm = function invm (num) {
56148 return this.egcd(num).a.umod(num);
56149 };
56150
56151 BN.prototype.isEven = function isEven () {
56152 return (this.words[0] & 1) === 0;
56153 };
56154
56155 BN.prototype.isOdd = function isOdd () {
56156 return (this.words[0] & 1) === 1;
56157 };
56158
56159 // And first word and num
56160 BN.prototype.andln = function andln (num) {
56161 return this.words[0] & num;
56162 };
56163
56164 // Increment at the bit position in-line
56165 BN.prototype.bincn = function bincn (bit) {
56166 assert(typeof bit === 'number');
56167 var r = bit % 26;
56168 var s = (bit - r) / 26;
56169 var q = 1 << r;
56170
56171 // Fast case: bit is much higher than all existing words
56172 if (this.length <= s) {
56173 this._expand(s + 1);
56174 this.words[s] |= q;
56175 return this;
56176 }
56177
56178 // Add bit and propagate, if needed
56179 var carry = q;
56180 for (var i = s; carry !== 0 && i < this.length; i++) {
56181 var w = this.words[i] | 0;
56182 w += carry;
56183 carry = w >>> 26;
56184 w &= 0x3ffffff;
56185 this.words[i] = w;
56186 }
56187 if (carry !== 0) {
56188 this.words[i] = carry;
56189 this.length++;
56190 }
56191 return this;
56192 };
56193
56194 BN.prototype.isZero = function isZero () {
56195 return this.length === 1 && this.words[0] === 0;
56196 };
56197
56198 BN.prototype.cmpn = function cmpn (num) {
56199 var negative = num < 0;
56200
56201 if (this.negative !== 0 && !negative) return -1;
56202 if (this.negative === 0 && negative) return 1;
56203
56204 this.strip();
56205
56206 var res;
56207 if (this.length > 1) {
56208 res = 1;
56209 } else {
56210 if (negative) {
56211 num = -num;
56212 }
56213
56214 assert(num <= 0x3ffffff, 'Number is too big');
56215
56216 var w = this.words[0] | 0;
56217 res = w === num ? 0 : w < num ? -1 : 1;
56218 }
56219 if (this.negative !== 0) return -res | 0;
56220 return res;
56221 };
56222
56223 // Compare two numbers and return:
56224 // 1 - if `this` > `num`
56225 // 0 - if `this` == `num`
56226 // -1 - if `this` < `num`
56227 BN.prototype.cmp = function cmp (num) {
56228 if (this.negative !== 0 && num.negative === 0) return -1;
56229 if (this.negative === 0 && num.negative !== 0) return 1;
56230
56231 var res = this.ucmp(num);
56232 if (this.negative !== 0) return -res | 0;
56233 return res;
56234 };
56235
56236 // Unsigned comparison
56237 BN.prototype.ucmp = function ucmp (num) {
56238 // At this point both numbers have the same sign
56239 if (this.length > num.length) return 1;
56240 if (this.length < num.length) return -1;
56241
56242 var res = 0;
56243 for (var i = this.length - 1; i >= 0; i--) {
56244 var a = this.words[i] | 0;
56245 var b = num.words[i] | 0;
56246
56247 if (a === b) continue;
56248 if (a < b) {
56249 res = -1;
56250 } else if (a > b) {
56251 res = 1;
56252 }
56253 break;
56254 }
56255 return res;
56256 };
56257
56258 BN.prototype.gtn = function gtn (num) {
56259 return this.cmpn(num) === 1;
56260 };
56261
56262 BN.prototype.gt = function gt (num) {
56263 return this.cmp(num) === 1;
56264 };
56265
56266 BN.prototype.gten = function gten (num) {
56267 return this.cmpn(num) >= 0;
56268 };
56269
56270 BN.prototype.gte = function gte (num) {
56271 return this.cmp(num) >= 0;
56272 };
56273
56274 BN.prototype.ltn = function ltn (num) {
56275 return this.cmpn(num) === -1;
56276 };
56277
56278 BN.prototype.lt = function lt (num) {
56279 return this.cmp(num) === -1;
56280 };
56281
56282 BN.prototype.lten = function lten (num) {
56283 return this.cmpn(num) <= 0;
56284 };
56285
56286 BN.prototype.lte = function lte (num) {
56287 return this.cmp(num) <= 0;
56288 };
56289
56290 BN.prototype.eqn = function eqn (num) {
56291 return this.cmpn(num) === 0;
56292 };
56293
56294 BN.prototype.eq = function eq (num) {
56295 return this.cmp(num) === 0;
56296 };
56297
56298 //
56299 // A reduce context, could be using montgomery or something better, depending
56300 // on the `m` itself.
56301 //
56302 BN.red = function red (num) {
56303 return new Red(num);
56304 };
56305
56306 BN.prototype.toRed = function toRed (ctx) {
56307 assert(!this.red, 'Already a number in reduction context');
56308 assert(this.negative === 0, 'red works only with positives');
56309 return ctx.convertTo(this)._forceRed(ctx);
56310 };
56311
56312 BN.prototype.fromRed = function fromRed () {
56313 assert(this.red, 'fromRed works only with numbers in reduction context');
56314 return this.red.convertFrom(this);
56315 };
56316
56317 BN.prototype._forceRed = function _forceRed (ctx) {
56318 this.red = ctx;
56319 return this;
56320 };
56321
56322 BN.prototype.forceRed = function forceRed (ctx) {
56323 assert(!this.red, 'Already a number in reduction context');
56324 return this._forceRed(ctx);
56325 };
56326
56327 BN.prototype.redAdd = function redAdd (num) {
56328 assert(this.red, 'redAdd works only with red numbers');
56329 return this.red.add(this, num);
56330 };
56331
56332 BN.prototype.redIAdd = function redIAdd (num) {
56333 assert(this.red, 'redIAdd works only with red numbers');
56334 return this.red.iadd(this, num);
56335 };
56336
56337 BN.prototype.redSub = function redSub (num) {
56338 assert(this.red, 'redSub works only with red numbers');
56339 return this.red.sub(this, num);
56340 };
56341
56342 BN.prototype.redISub = function redISub (num) {
56343 assert(this.red, 'redISub works only with red numbers');
56344 return this.red.isub(this, num);
56345 };
56346
56347 BN.prototype.redShl = function redShl (num) {
56348 assert(this.red, 'redShl works only with red numbers');
56349 return this.red.shl(this, num);
56350 };
56351
56352 BN.prototype.redMul = function redMul (num) {
56353 assert(this.red, 'redMul works only with red numbers');
56354 this.red._verify2(this, num);
56355 return this.red.mul(this, num);
56356 };
56357
56358 BN.prototype.redIMul = function redIMul (num) {
56359 assert(this.red, 'redMul works only with red numbers');
56360 this.red._verify2(this, num);
56361 return this.red.imul(this, num);
56362 };
56363
56364 BN.prototype.redSqr = function redSqr () {
56365 assert(this.red, 'redSqr works only with red numbers');
56366 this.red._verify1(this);
56367 return this.red.sqr(this);
56368 };
56369
56370 BN.prototype.redISqr = function redISqr () {
56371 assert(this.red, 'redISqr works only with red numbers');
56372 this.red._verify1(this);
56373 return this.red.isqr(this);
56374 };
56375
56376 // Square root over p
56377 BN.prototype.redSqrt = function redSqrt () {
56378 assert(this.red, 'redSqrt works only with red numbers');
56379 this.red._verify1(this);
56380 return this.red.sqrt(this);
56381 };
56382
56383 BN.prototype.redInvm = function redInvm () {
56384 assert(this.red, 'redInvm works only with red numbers');
56385 this.red._verify1(this);
56386 return this.red.invm(this);
56387 };
56388
56389 // Return negative clone of `this` % `red modulo`
56390 BN.prototype.redNeg = function redNeg () {
56391 assert(this.red, 'redNeg works only with red numbers');
56392 this.red._verify1(this);
56393 return this.red.neg(this);
56394 };
56395
56396 BN.prototype.redPow = function redPow (num) {
56397 assert(this.red && !num.red, 'redPow(normalNum)');
56398 this.red._verify1(this);
56399 return this.red.pow(this, num);
56400 };
56401
56402 // Prime numbers with efficient reduction
56403 var primes = {
56404 k256: null,
56405 p224: null,
56406 p192: null,
56407 p25519: null
56408 };
56409
56410 // Pseudo-Mersenne prime
56411 function MPrime (name, p) {
56412 // P = 2 ^ N - K
56413 this.name = name;
56414 this.p = new BN(p, 16);
56415 this.n = this.p.bitLength();
56416 this.k = new BN(1).iushln(this.n).isub(this.p);
56417
56418 this.tmp = this._tmp();
56419 }
56420
56421 MPrime.prototype._tmp = function _tmp () {
56422 var tmp = new BN(null);
56423 tmp.words = new Array(Math.ceil(this.n / 13));
56424 return tmp;
56425 };
56426
56427 MPrime.prototype.ireduce = function ireduce (num) {
56428 // Assumes that `num` is less than `P^2`
56429 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
56430 var r = num;
56431 var rlen;
56432
56433 do {
56434 this.split(r, this.tmp);
56435 r = this.imulK(r);
56436 r = r.iadd(this.tmp);
56437 rlen = r.bitLength();
56438 } while (rlen > this.n);
56439
56440 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
56441 if (cmp === 0) {
56442 r.words[0] = 0;
56443 r.length = 1;
56444 } else if (cmp > 0) {
56445 r.isub(this.p);
56446 } else {
56447 r.strip();
56448 }
56449
56450 return r;
56451 };
56452
56453 MPrime.prototype.split = function split (input, out) {
56454 input.iushrn(this.n, 0, out);
56455 };
56456
56457 MPrime.prototype.imulK = function imulK (num) {
56458 return num.imul(this.k);
56459 };
56460
56461 function K256 () {
56462 MPrime.call(
56463 this,
56464 'k256',
56465 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
56466 }
56467 inherits(K256, MPrime);
56468
56469 K256.prototype.split = function split (input, output) {
56470 // 256 = 9 * 26 + 22
56471 var mask = 0x3fffff;
56472
56473 var outLen = Math.min(input.length, 9);
56474 for (var i = 0; i < outLen; i++) {
56475 output.words[i] = input.words[i];
56476 }
56477 output.length = outLen;
56478
56479 if (input.length <= 9) {
56480 input.words[0] = 0;
56481 input.length = 1;
56482 return;
56483 }
56484
56485 // Shift by 9 limbs
56486 var prev = input.words[9];
56487 output.words[output.length++] = prev & mask;
56488
56489 for (i = 10; i < input.length; i++) {
56490 var next = input.words[i] | 0;
56491 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
56492 prev = next;
56493 }
56494 prev >>>= 22;
56495 input.words[i - 10] = prev;
56496 if (prev === 0 && input.length > 10) {
56497 input.length -= 10;
56498 } else {
56499 input.length -= 9;
56500 }
56501 };
56502
56503 K256.prototype.imulK = function imulK (num) {
56504 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
56505 num.words[num.length] = 0;
56506 num.words[num.length + 1] = 0;
56507 num.length += 2;
56508
56509 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
56510 var lo = 0;
56511 for (var i = 0; i < num.length; i++) {
56512 var w = num.words[i] | 0;
56513 lo += w * 0x3d1;
56514 num.words[i] = lo & 0x3ffffff;
56515 lo = w * 0x40 + ((lo / 0x4000000) | 0);
56516 }
56517
56518 // Fast length reduction
56519 if (num.words[num.length - 1] === 0) {
56520 num.length--;
56521 if (num.words[num.length - 1] === 0) {
56522 num.length--;
56523 }
56524 }
56525 return num;
56526 };
56527
56528 function P224 () {
56529 MPrime.call(
56530 this,
56531 'p224',
56532 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
56533 }
56534 inherits(P224, MPrime);
56535
56536 function P192 () {
56537 MPrime.call(
56538 this,
56539 'p192',
56540 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
56541 }
56542 inherits(P192, MPrime);
56543
56544 function P25519 () {
56545 // 2 ^ 255 - 19
56546 MPrime.call(
56547 this,
56548 '25519',
56549 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
56550 }
56551 inherits(P25519, MPrime);
56552
56553 P25519.prototype.imulK = function imulK (num) {
56554 // K = 0x13
56555 var carry = 0;
56556 for (var i = 0; i < num.length; i++) {
56557 var hi = (num.words[i] | 0) * 0x13 + carry;
56558 var lo = hi & 0x3ffffff;
56559 hi >>>= 26;
56560
56561 num.words[i] = lo;
56562 carry = hi;
56563 }
56564 if (carry !== 0) {
56565 num.words[num.length++] = carry;
56566 }
56567 return num;
56568 };
56569
56570 // Exported mostly for testing purposes, use plain name instead
56571 BN._prime = function prime (name) {
56572 // Cached version of prime
56573 if (primes[name]) return primes[name];
56574
56575 var prime;
56576 if (name === 'k256') {
56577 prime = new K256();
56578 } else if (name === 'p224') {
56579 prime = new P224();
56580 } else if (name === 'p192') {
56581 prime = new P192();
56582 } else if (name === 'p25519') {
56583 prime = new P25519();
56584 } else {
56585 throw new Error('Unknown prime ' + name);
56586 }
56587 primes[name] = prime;
56588
56589 return prime;
56590 };
56591
56592 //
56593 // Base reduction engine
56594 //
56595 function Red (m) {
56596 if (typeof m === 'string') {
56597 var prime = BN._prime(m);
56598 this.m = prime.p;
56599 this.prime = prime;
56600 } else {
56601 assert(m.gtn(1), 'modulus must be greater than 1');
56602 this.m = m;
56603 this.prime = null;
56604 }
56605 }
56606
56607 Red.prototype._verify1 = function _verify1 (a) {
56608 assert(a.negative === 0, 'red works only with positives');
56609 assert(a.red, 'red works only with red numbers');
56610 };
56611
56612 Red.prototype._verify2 = function _verify2 (a, b) {
56613 assert((a.negative | b.negative) === 0, 'red works only with positives');
56614 assert(a.red && a.red === b.red,
56615 'red works only with red numbers');
56616 };
56617
56618 Red.prototype.imod = function imod (a) {
56619 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
56620 return a.umod(this.m)._forceRed(this);
56621 };
56622
56623 Red.prototype.neg = function neg (a) {
56624 if (a.isZero()) {
56625 return a.clone();
56626 }
56627
56628 return this.m.sub(a)._forceRed(this);
56629 };
56630
56631 Red.prototype.add = function add (a, b) {
56632 this._verify2(a, b);
56633
56634 var res = a.add(b);
56635 if (res.cmp(this.m) >= 0) {
56636 res.isub(this.m);
56637 }
56638 return res._forceRed(this);
56639 };
56640
56641 Red.prototype.iadd = function iadd (a, b) {
56642 this._verify2(a, b);
56643
56644 var res = a.iadd(b);
56645 if (res.cmp(this.m) >= 0) {
56646 res.isub(this.m);
56647 }
56648 return res;
56649 };
56650
56651 Red.prototype.sub = function sub (a, b) {
56652 this._verify2(a, b);
56653
56654 var res = a.sub(b);
56655 if (res.cmpn(0) < 0) {
56656 res.iadd(this.m);
56657 }
56658 return res._forceRed(this);
56659 };
56660
56661 Red.prototype.isub = function isub (a, b) {
56662 this._verify2(a, b);
56663
56664 var res = a.isub(b);
56665 if (res.cmpn(0) < 0) {
56666 res.iadd(this.m);
56667 }
56668 return res;
56669 };
56670
56671 Red.prototype.shl = function shl (a, num) {
56672 this._verify1(a);
56673 return this.imod(a.ushln(num));
56674 };
56675
56676 Red.prototype.imul = function imul (a, b) {
56677 this._verify2(a, b);
56678 return this.imod(a.imul(b));
56679 };
56680
56681 Red.prototype.mul = function mul (a, b) {
56682 this._verify2(a, b);
56683 return this.imod(a.mul(b));
56684 };
56685
56686 Red.prototype.isqr = function isqr (a) {
56687 return this.imul(a, a.clone());
56688 };
56689
56690 Red.prototype.sqr = function sqr (a) {
56691 return this.mul(a, a);
56692 };
56693
56694 Red.prototype.sqrt = function sqrt (a) {
56695 if (a.isZero()) return a.clone();
56696
56697 var mod3 = this.m.andln(3);
56698 assert(mod3 % 2 === 1);
56699
56700 // Fast case
56701 if (mod3 === 3) {
56702 var pow = this.m.add(new BN(1)).iushrn(2);
56703 return this.pow(a, pow);
56704 }
56705
56706 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
56707 //
56708 // Find Q and S, that Q * 2 ^ S = (P - 1)
56709 var q = this.m.subn(1);
56710 var s = 0;
56711 while (!q.isZero() && q.andln(1) === 0) {
56712 s++;
56713 q.iushrn(1);
56714 }
56715 assert(!q.isZero());
56716
56717 var one = new BN(1).toRed(this);
56718 var nOne = one.redNeg();
56719
56720 // Find quadratic non-residue
56721 // NOTE: Max is such because of generalized Riemann hypothesis.
56722 var lpow = this.m.subn(1).iushrn(1);
56723 var z = this.m.bitLength();
56724 z = new BN(2 * z * z).toRed(this);
56725
56726 while (this.pow(z, lpow).cmp(nOne) !== 0) {
56727 z.redIAdd(nOne);
56728 }
56729
56730 var c = this.pow(z, q);
56731 var r = this.pow(a, q.addn(1).iushrn(1));
56732 var t = this.pow(a, q);
56733 var m = s;
56734 while (t.cmp(one) !== 0) {
56735 var tmp = t;
56736 for (var i = 0; tmp.cmp(one) !== 0; i++) {
56737 tmp = tmp.redSqr();
56738 }
56739 assert(i < m);
56740 var b = this.pow(c, new BN(1).iushln(m - i - 1));
56741
56742 r = r.redMul(b);
56743 c = b.redSqr();
56744 t = t.redMul(c);
56745 m = i;
56746 }
56747
56748 return r;
56749 };
56750
56751 Red.prototype.invm = function invm (a) {
56752 var inv = a._invmp(this.m);
56753 if (inv.negative !== 0) {
56754 inv.negative = 0;
56755 return this.imod(inv).redNeg();
56756 } else {
56757 return this.imod(inv);
56758 }
56759 };
56760
56761 Red.prototype.pow = function pow (a, num) {
56762 if (num.isZero()) return new BN(1);
56763 if (num.cmpn(1) === 0) return a.clone();
56764
56765 var windowSize = 4;
56766 var wnd = new Array(1 << windowSize);
56767 wnd[0] = new BN(1).toRed(this);
56768 wnd[1] = a;
56769 for (var i = 2; i < wnd.length; i++) {
56770 wnd[i] = this.mul(wnd[i - 1], a);
56771 }
56772
56773 var res = wnd[0];
56774 var current = 0;
56775 var currentLen = 0;
56776 var start = num.bitLength() % 26;
56777 if (start === 0) {
56778 start = 26;
56779 }
56780
56781 for (i = num.length - 1; i >= 0; i--) {
56782 var word = num.words[i];
56783 for (var j = start - 1; j >= 0; j--) {
56784 var bit = (word >> j) & 1;
56785 if (res !== wnd[0]) {
56786 res = this.sqr(res);
56787 }
56788
56789 if (bit === 0 && current === 0) {
56790 currentLen = 0;
56791 continue;
56792 }
56793
56794 current <<= 1;
56795 current |= bit;
56796 currentLen++;
56797 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
56798
56799 res = this.mul(res, wnd[current]);
56800 currentLen = 0;
56801 current = 0;
56802 }
56803 start = 26;
56804 }
56805
56806 return res;
56807 };
56808
56809 Red.prototype.convertTo = function convertTo (num) {
56810 var r = num.umod(this.m);
56811
56812 return r === num ? r.clone() : r;
56813 };
56814
56815 Red.prototype.convertFrom = function convertFrom (num) {
56816 var res = num.clone();
56817 res.red = null;
56818 return res;
56819 };
56820
56821 //
56822 // Montgomery method engine
56823 //
56824
56825 BN.mont = function mont (num) {
56826 return new Mont(num);
56827 };
56828
56829 function Mont (m) {
56830 Red.call(this, m);
56831
56832 this.shift = this.m.bitLength();
56833 if (this.shift % 26 !== 0) {
56834 this.shift += 26 - (this.shift % 26);
56835 }
56836
56837 this.r = new BN(1).iushln(this.shift);
56838 this.r2 = this.imod(this.r.sqr());
56839 this.rinv = this.r._invmp(this.m);
56840
56841 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
56842 this.minv = this.minv.umod(this.r);
56843 this.minv = this.r.sub(this.minv);
56844 }
56845 inherits(Mont, Red);
56846
56847 Mont.prototype.convertTo = function convertTo (num) {
56848 return this.imod(num.ushln(this.shift));
56849 };
56850
56851 Mont.prototype.convertFrom = function convertFrom (num) {
56852 var r = this.imod(num.mul(this.rinv));
56853 r.red = null;
56854 return r;
56855 };
56856
56857 Mont.prototype.imul = function imul (a, b) {
56858 if (a.isZero() || b.isZero()) {
56859 a.words[0] = 0;
56860 a.length = 1;
56861 return a;
56862 }
56863
56864 var t = a.imul(b);
56865 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56866 var u = t.isub(c).iushrn(this.shift);
56867 var res = u;
56868
56869 if (u.cmp(this.m) >= 0) {
56870 res = u.isub(this.m);
56871 } else if (u.cmpn(0) < 0) {
56872 res = u.iadd(this.m);
56873 }
56874
56875 return res._forceRed(this);
56876 };
56877
56878 Mont.prototype.mul = function mul (a, b) {
56879 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
56880
56881 var t = a.mul(b);
56882 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56883 var u = t.isub(c).iushrn(this.shift);
56884 var res = u;
56885 if (u.cmp(this.m) >= 0) {
56886 res = u.isub(this.m);
56887 } else if (u.cmpn(0) < 0) {
56888 res = u.iadd(this.m);
56889 }
56890
56891 return res._forceRed(this);
56892 };
56893
56894 Mont.prototype.invm = function invm (a) {
56895 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
56896 var res = this.imod(a._invmp(this.m).mul(this.r2));
56897 return res._forceRed(this);
56898 };
56899 })(typeof module === 'undefined' || module, this);
56900
56901 },{}],18:[function(require,module,exports){
56902 var r;
56903
56904 module.exports = function rand(len) {
56905 if (!r)
56906 r = new Rand(null);
56907
56908 return r.generate(len);
56909 };
56910
56911 function Rand(rand) {
56912 this.rand = rand;
56913 }
56914 module.exports.Rand = Rand;
56915
56916 Rand.prototype.generate = function generate(len) {
56917 return this._rand(len);
56918 };
56919
56920 // Emulate crypto API using randy
56921 Rand.prototype._rand = function _rand(n) {
56922 if (this.rand.getBytes)
56923 return this.rand.getBytes(n);
56924
56925 var res = new Uint8Array(n);
56926 for (var i = 0; i < res.length; i++)
56927 res[i] = this.rand.getByte();
56928 return res;
56929 };
56930
56931 if (typeof self === 'object') {
56932 if (self.crypto && self.crypto.getRandomValues) {
56933 // Modern browsers
56934 Rand.prototype._rand = function _rand(n) {
56935 var arr = new Uint8Array(n);
56936 self.crypto.getRandomValues(arr);
56937 return arr;
56938 };
56939 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
56940 // IE
56941 Rand.prototype._rand = function _rand(n) {
56942 var arr = new Uint8Array(n);
56943 self.msCrypto.getRandomValues(arr);
56944 return arr;
56945 };
56946
56947 // Safari's WebWorkers do not have `crypto`
56948 } else if (typeof window === 'object') {
56949 // Old junk
56950 Rand.prototype._rand = function() {
56951 throw new Error('Not implemented yet');
56952 };
56953 }
56954 } else {
56955 // Node.js or Web worker with no crypto support
56956 try {
56957 var crypto = require('crypto');
56958 if (typeof crypto.randomBytes !== 'function')
56959 throw new Error('Not supported');
56960
56961 Rand.prototype._rand = function _rand(n) {
56962 return crypto.randomBytes(n);
56963 };
56964 } catch (e) {
56965 }
56966 }
56967
56968 },{"crypto":19}],19:[function(require,module,exports){
56969
56970 },{}],20:[function(require,module,exports){
56971 (function (Buffer){
56972 // based on the aes implimentation in triple sec
56973 // https://github.com/keybase/triplesec
56974
56975 // which is in turn based on the one from crypto-js
56976 // https://code.google.com/p/crypto-js/
56977
56978 var uint_max = Math.pow(2, 32)
56979 function fixup_uint32 (x) {
56980 var ret, x_pos
56981 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
56982 return ret
56983 }
56984 function scrub_vec (v) {
56985 for (var i = 0; i < v.length; v++) {
56986 v[i] = 0
56987 }
56988 return false
56989 }
56990
56991 function Global () {
56992 this.SBOX = []
56993 this.INV_SBOX = []
56994 this.SUB_MIX = [[], [], [], []]
56995 this.INV_SUB_MIX = [[], [], [], []]
56996 this.init()
56997 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
56998 }
56999
57000 Global.prototype.init = function () {
57001 var d, i, sx, t, x, x2, x4, x8, xi, _i
57002 d = (function () {
57003 var _i, _results
57004 _results = []
57005 for (i = _i = 0; _i < 256; i = ++_i) {
57006 if (i < 128) {
57007 _results.push(i << 1)
57008 } else {
57009 _results.push((i << 1) ^ 0x11b)
57010 }
57011 }
57012 return _results
57013 })()
57014 x = 0
57015 xi = 0
57016 for (i = _i = 0; _i < 256; i = ++_i) {
57017 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
57018 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
57019 this.SBOX[x] = sx
57020 this.INV_SBOX[sx] = x
57021 x2 = d[x]
57022 x4 = d[x2]
57023 x8 = d[x4]
57024 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
57025 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
57026 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
57027 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
57028 this.SUB_MIX[3][x] = t
57029 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
57030 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
57031 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
57032 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
57033 this.INV_SUB_MIX[3][sx] = t
57034 if (x === 0) {
57035 x = xi = 1
57036 } else {
57037 x = x2 ^ d[d[d[x8 ^ x2]]]
57038 xi ^= d[d[xi]]
57039 }
57040 }
57041 return true
57042 }
57043
57044 var G = new Global()
57045
57046 AES.blockSize = 4 * 4
57047
57048 AES.prototype.blockSize = AES.blockSize
57049
57050 AES.keySize = 256 / 8
57051
57052 AES.prototype.keySize = AES.keySize
57053
57054 function bufferToArray (buf) {
57055 var len = buf.length / 4
57056 var out = new Array(len)
57057 var i = -1
57058 while (++i < len) {
57059 out[i] = buf.readUInt32BE(i * 4)
57060 }
57061 return out
57062 }
57063 function AES (key) {
57064 this._key = bufferToArray(key)
57065 this._doReset()
57066 }
57067
57068 AES.prototype._doReset = function () {
57069 var invKsRow, keySize, keyWords, ksRow, ksRows, t
57070 keyWords = this._key
57071 keySize = keyWords.length
57072 this._nRounds = keySize + 6
57073 ksRows = (this._nRounds + 1) * 4
57074 this._keySchedule = []
57075 for (ksRow = 0; ksRow < ksRows; ksRow++) {
57076 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)
57077 }
57078 this._invKeySchedule = []
57079 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
57080 ksRow = ksRows - invKsRow
57081 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
57082 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]]
57083 }
57084 return true
57085 }
57086
57087 AES.prototype.encryptBlock = function (M) {
57088 M = bufferToArray(new Buffer(M))
57089 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
57090 var buf = new Buffer(16)
57091 buf.writeUInt32BE(out[0], 0)
57092 buf.writeUInt32BE(out[1], 4)
57093 buf.writeUInt32BE(out[2], 8)
57094 buf.writeUInt32BE(out[3], 12)
57095 return buf
57096 }
57097
57098 AES.prototype.decryptBlock = function (M) {
57099 M = bufferToArray(new Buffer(M))
57100 var temp = [M[3], M[1]]
57101 M[1] = temp[0]
57102 M[3] = temp[1]
57103 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
57104 var buf = new Buffer(16)
57105 buf.writeUInt32BE(out[0], 0)
57106 buf.writeUInt32BE(out[3], 4)
57107 buf.writeUInt32BE(out[2], 8)
57108 buf.writeUInt32BE(out[1], 12)
57109 return buf
57110 }
57111
57112 AES.prototype.scrub = function () {
57113 scrub_vec(this._keySchedule)
57114 scrub_vec(this._invKeySchedule)
57115 scrub_vec(this._key)
57116 }
57117
57118 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
57119 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
57120
57121 s0 = M[0] ^ keySchedule[0]
57122 s1 = M[1] ^ keySchedule[1]
57123 s2 = M[2] ^ keySchedule[2]
57124 s3 = M[3] ^ keySchedule[3]
57125 ksRow = 4
57126 for (var round = 1; round < this._nRounds; round++) {
57127 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++]
57128 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++]
57129 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++]
57130 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++]
57131 s0 = t0
57132 s1 = t1
57133 s2 = t2
57134 s3 = t3
57135 }
57136 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
57137 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
57138 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
57139 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
57140 return [
57141 fixup_uint32(t0),
57142 fixup_uint32(t1),
57143 fixup_uint32(t2),
57144 fixup_uint32(t3)
57145 ]
57146 }
57147
57148 exports.AES = AES
57149
57150 }).call(this,require("buffer").Buffer)
57151 },{"buffer":47}],21:[function(require,module,exports){
57152 (function (Buffer){
57153 var aes = require('./aes')
57154 var Transform = require('cipher-base')
57155 var inherits = require('inherits')
57156 var GHASH = require('./ghash')
57157 var xor = require('buffer-xor')
57158 inherits(StreamCipher, Transform)
57159 module.exports = StreamCipher
57160
57161 function StreamCipher (mode, key, iv, decrypt) {
57162 if (!(this instanceof StreamCipher)) {
57163 return new StreamCipher(mode, key, iv)
57164 }
57165 Transform.call(this)
57166 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
57167 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
57168 this._cipher = new aes.AES(key)
57169 this._prev = new Buffer(iv.length)
57170 this._cache = new Buffer('')
57171 this._secCache = new Buffer('')
57172 this._decrypt = decrypt
57173 this._alen = 0
57174 this._len = 0
57175 iv.copy(this._prev)
57176 this._mode = mode
57177 var h = new Buffer(4)
57178 h.fill(0)
57179 this._ghash = new GHASH(this._cipher.encryptBlock(h))
57180 this._authTag = null
57181 this._called = false
57182 }
57183 StreamCipher.prototype._update = function (chunk) {
57184 if (!this._called && this._alen) {
57185 var rump = 16 - (this._alen % 16)
57186 if (rump < 16) {
57187 rump = new Buffer(rump)
57188 rump.fill(0)
57189 this._ghash.update(rump)
57190 }
57191 }
57192 this._called = true
57193 var out = this._mode.encrypt(this, chunk)
57194 if (this._decrypt) {
57195 this._ghash.update(chunk)
57196 } else {
57197 this._ghash.update(out)
57198 }
57199 this._len += chunk.length
57200 return out
57201 }
57202 StreamCipher.prototype._final = function () {
57203 if (this._decrypt && !this._authTag) {
57204 throw new Error('Unsupported state or unable to authenticate data')
57205 }
57206 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
57207 if (this._decrypt) {
57208 if (xorTest(tag, this._authTag)) {
57209 throw new Error('Unsupported state or unable to authenticate data')
57210 }
57211 } else {
57212 this._authTag = tag
57213 }
57214 this._cipher.scrub()
57215 }
57216 StreamCipher.prototype.getAuthTag = function getAuthTag () {
57217 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
57218 return this._authTag
57219 } else {
57220 throw new Error('Attempting to get auth tag in unsupported state')
57221 }
57222 }
57223 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
57224 if (this._decrypt) {
57225 this._authTag = tag
57226 } else {
57227 throw new Error('Attempting to set auth tag in unsupported state')
57228 }
57229 }
57230 StreamCipher.prototype.setAAD = function setAAD (buf) {
57231 if (!this._called) {
57232 this._ghash.update(buf)
57233 this._alen += buf.length
57234 } else {
57235 throw new Error('Attempting to set AAD in unsupported state')
57236 }
57237 }
57238 function xorTest (a, b) {
57239 var out = 0
57240 if (a.length !== b.length) {
57241 out++
57242 }
57243 var len = Math.min(a.length, b.length)
57244 var i = -1
57245 while (++i < len) {
57246 out += (a[i] ^ b[i])
57247 }
57248 return out
57249 }
57250
57251 }).call(this,require("buffer").Buffer)
57252 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
57253 var ciphers = require('./encrypter')
57254 exports.createCipher = exports.Cipher = ciphers.createCipher
57255 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
57256 var deciphers = require('./decrypter')
57257 exports.createDecipher = exports.Decipher = deciphers.createDecipher
57258 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
57259 var modes = require('./modes')
57260 function getCiphers () {
57261 return Object.keys(modes)
57262 }
57263 exports.listCiphers = exports.getCiphers = getCiphers
57264
57265 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
57266 (function (Buffer){
57267 var aes = require('./aes')
57268 var Transform = require('cipher-base')
57269 var inherits = require('inherits')
57270 var modes = require('./modes')
57271 var StreamCipher = require('./streamCipher')
57272 var AuthCipher = require('./authCipher')
57273 var ebtk = require('evp_bytestokey')
57274
57275 inherits(Decipher, Transform)
57276 function Decipher (mode, key, iv) {
57277 if (!(this instanceof Decipher)) {
57278 return new Decipher(mode, key, iv)
57279 }
57280 Transform.call(this)
57281 this._cache = new Splitter()
57282 this._last = void 0
57283 this._cipher = new aes.AES(key)
57284 this._prev = new Buffer(iv.length)
57285 iv.copy(this._prev)
57286 this._mode = mode
57287 this._autopadding = true
57288 }
57289 Decipher.prototype._update = function (data) {
57290 this._cache.add(data)
57291 var chunk
57292 var thing
57293 var out = []
57294 while ((chunk = this._cache.get(this._autopadding))) {
57295 thing = this._mode.decrypt(this, chunk)
57296 out.push(thing)
57297 }
57298 return Buffer.concat(out)
57299 }
57300 Decipher.prototype._final = function () {
57301 var chunk = this._cache.flush()
57302 if (this._autopadding) {
57303 return unpad(this._mode.decrypt(this, chunk))
57304 } else if (chunk) {
57305 throw new Error('data not multiple of block length')
57306 }
57307 }
57308 Decipher.prototype.setAutoPadding = function (setTo) {
57309 this._autopadding = !!setTo
57310 return this
57311 }
57312 function Splitter () {
57313 if (!(this instanceof Splitter)) {
57314 return new Splitter()
57315 }
57316 this.cache = new Buffer('')
57317 }
57318 Splitter.prototype.add = function (data) {
57319 this.cache = Buffer.concat([this.cache, data])
57320 }
57321
57322 Splitter.prototype.get = function (autoPadding) {
57323 var out
57324 if (autoPadding) {
57325 if (this.cache.length > 16) {
57326 out = this.cache.slice(0, 16)
57327 this.cache = this.cache.slice(16)
57328 return out
57329 }
57330 } else {
57331 if (this.cache.length >= 16) {
57332 out = this.cache.slice(0, 16)
57333 this.cache = this.cache.slice(16)
57334 return out
57335 }
57336 }
57337 return null
57338 }
57339 Splitter.prototype.flush = function () {
57340 if (this.cache.length) {
57341 return this.cache
57342 }
57343 }
57344 function unpad (last) {
57345 var padded = last[15]
57346 var i = -1
57347 while (++i < padded) {
57348 if (last[(i + (16 - padded))] !== padded) {
57349 throw new Error('unable to decrypt data')
57350 }
57351 }
57352 if (padded === 16) {
57353 return
57354 }
57355 return last.slice(0, 16 - padded)
57356 }
57357
57358 var modelist = {
57359 ECB: require('./modes/ecb'),
57360 CBC: require('./modes/cbc'),
57361 CFB: require('./modes/cfb'),
57362 CFB8: require('./modes/cfb8'),
57363 CFB1: require('./modes/cfb1'),
57364 OFB: require('./modes/ofb'),
57365 CTR: require('./modes/ctr'),
57366 GCM: require('./modes/ctr')
57367 }
57368
57369 function createDecipheriv (suite, password, iv) {
57370 var config = modes[suite.toLowerCase()]
57371 if (!config) {
57372 throw new TypeError('invalid suite type')
57373 }
57374 if (typeof iv === 'string') {
57375 iv = new Buffer(iv)
57376 }
57377 if (typeof password === 'string') {
57378 password = new Buffer(password)
57379 }
57380 if (password.length !== config.key / 8) {
57381 throw new TypeError('invalid key length ' + password.length)
57382 }
57383 if (iv.length !== config.iv) {
57384 throw new TypeError('invalid iv length ' + iv.length)
57385 }
57386 if (config.type === 'stream') {
57387 return new StreamCipher(modelist[config.mode], password, iv, true)
57388 } else if (config.type === 'auth') {
57389 return new AuthCipher(modelist[config.mode], password, iv, true)
57390 }
57391 return new Decipher(modelist[config.mode], password, iv)
57392 }
57393
57394 function createDecipher (suite, password) {
57395 var config = modes[suite.toLowerCase()]
57396 if (!config) {
57397 throw new TypeError('invalid suite type')
57398 }
57399 var keys = ebtk(password, false, config.key, config.iv)
57400 return createDecipheriv(suite, keys.key, keys.iv)
57401 }
57402 exports.createDecipher = createDecipher
57403 exports.createDecipheriv = createDecipheriv
57404
57405 }).call(this,require("buffer").Buffer)
57406 },{"./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){
57407 (function (Buffer){
57408 var aes = require('./aes')
57409 var Transform = require('cipher-base')
57410 var inherits = require('inherits')
57411 var modes = require('./modes')
57412 var ebtk = require('evp_bytestokey')
57413 var StreamCipher = require('./streamCipher')
57414 var AuthCipher = require('./authCipher')
57415 inherits(Cipher, Transform)
57416 function Cipher (mode, key, iv) {
57417 if (!(this instanceof Cipher)) {
57418 return new Cipher(mode, key, iv)
57419 }
57420 Transform.call(this)
57421 this._cache = new Splitter()
57422 this._cipher = new aes.AES(key)
57423 this._prev = new Buffer(iv.length)
57424 iv.copy(this._prev)
57425 this._mode = mode
57426 this._autopadding = true
57427 }
57428 Cipher.prototype._update = function (data) {
57429 this._cache.add(data)
57430 var chunk
57431 var thing
57432 var out = []
57433 while ((chunk = this._cache.get())) {
57434 thing = this._mode.encrypt(this, chunk)
57435 out.push(thing)
57436 }
57437 return Buffer.concat(out)
57438 }
57439 Cipher.prototype._final = function () {
57440 var chunk = this._cache.flush()
57441 if (this._autopadding) {
57442 chunk = this._mode.encrypt(this, chunk)
57443 this._cipher.scrub()
57444 return chunk
57445 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
57446 this._cipher.scrub()
57447 throw new Error('data not multiple of block length')
57448 }
57449 }
57450 Cipher.prototype.setAutoPadding = function (setTo) {
57451 this._autopadding = !!setTo
57452 return this
57453 }
57454
57455 function Splitter () {
57456 if (!(this instanceof Splitter)) {
57457 return new Splitter()
57458 }
57459 this.cache = new Buffer('')
57460 }
57461 Splitter.prototype.add = function (data) {
57462 this.cache = Buffer.concat([this.cache, data])
57463 }
57464
57465 Splitter.prototype.get = function () {
57466 if (this.cache.length > 15) {
57467 var out = this.cache.slice(0, 16)
57468 this.cache = this.cache.slice(16)
57469 return out
57470 }
57471 return null
57472 }
57473 Splitter.prototype.flush = function () {
57474 var len = 16 - this.cache.length
57475 var padBuff = new Buffer(len)
57476
57477 var i = -1
57478 while (++i < len) {
57479 padBuff.writeUInt8(len, i)
57480 }
57481 var out = Buffer.concat([this.cache, padBuff])
57482 return out
57483 }
57484 var modelist = {
57485 ECB: require('./modes/ecb'),
57486 CBC: require('./modes/cbc'),
57487 CFB: require('./modes/cfb'),
57488 CFB8: require('./modes/cfb8'),
57489 CFB1: require('./modes/cfb1'),
57490 OFB: require('./modes/ofb'),
57491 CTR: require('./modes/ctr'),
57492 GCM: require('./modes/ctr')
57493 }
57494
57495 function createCipheriv (suite, password, iv) {
57496 var config = modes[suite.toLowerCase()]
57497 if (!config) {
57498 throw new TypeError('invalid suite type')
57499 }
57500 if (typeof iv === 'string') {
57501 iv = new Buffer(iv)
57502 }
57503 if (typeof password === 'string') {
57504 password = new Buffer(password)
57505 }
57506 if (password.length !== config.key / 8) {
57507 throw new TypeError('invalid key length ' + password.length)
57508 }
57509 if (iv.length !== config.iv) {
57510 throw new TypeError('invalid iv length ' + iv.length)
57511 }
57512 if (config.type === 'stream') {
57513 return new StreamCipher(modelist[config.mode], password, iv)
57514 } else if (config.type === 'auth') {
57515 return new AuthCipher(modelist[config.mode], password, iv)
57516 }
57517 return new Cipher(modelist[config.mode], password, iv)
57518 }
57519 function createCipher (suite, password) {
57520 var config = modes[suite.toLowerCase()]
57521 if (!config) {
57522 throw new TypeError('invalid suite type')
57523 }
57524 var keys = ebtk(password, false, config.key, config.iv)
57525 return createCipheriv(suite, keys.key, keys.iv)
57526 }
57527
57528 exports.createCipheriv = createCipheriv
57529 exports.createCipher = createCipher
57530
57531 }).call(this,require("buffer").Buffer)
57532 },{"./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){
57533 (function (Buffer){
57534 var zeros = new Buffer(16)
57535 zeros.fill(0)
57536 module.exports = GHASH
57537 function GHASH (key) {
57538 this.h = key
57539 this.state = new Buffer(16)
57540 this.state.fill(0)
57541 this.cache = new Buffer('')
57542 }
57543 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
57544 // by Juho Vähä-Herttua
57545 GHASH.prototype.ghash = function (block) {
57546 var i = -1
57547 while (++i < block.length) {
57548 this.state[i] ^= block[i]
57549 }
57550 this._multiply()
57551 }
57552
57553 GHASH.prototype._multiply = function () {
57554 var Vi = toArray(this.h)
57555 var Zi = [0, 0, 0, 0]
57556 var j, xi, lsb_Vi
57557 var i = -1
57558 while (++i < 128) {
57559 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
57560 if (xi) {
57561 // Z_i+1 = Z_i ^ V_i
57562 Zi = xor(Zi, Vi)
57563 }
57564
57565 // Store the value of LSB(V_i)
57566 lsb_Vi = (Vi[3] & 1) !== 0
57567
57568 // V_i+1 = V_i >> 1
57569 for (j = 3; j > 0; j--) {
57570 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
57571 }
57572 Vi[0] = Vi[0] >>> 1
57573
57574 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
57575 if (lsb_Vi) {
57576 Vi[0] = Vi[0] ^ (0xe1 << 24)
57577 }
57578 }
57579 this.state = fromArray(Zi)
57580 }
57581 GHASH.prototype.update = function (buf) {
57582 this.cache = Buffer.concat([this.cache, buf])
57583 var chunk
57584 while (this.cache.length >= 16) {
57585 chunk = this.cache.slice(0, 16)
57586 this.cache = this.cache.slice(16)
57587 this.ghash(chunk)
57588 }
57589 }
57590 GHASH.prototype.final = function (abl, bl) {
57591 if (this.cache.length) {
57592 this.ghash(Buffer.concat([this.cache, zeros], 16))
57593 }
57594 this.ghash(fromArray([
57595 0, abl,
57596 0, bl
57597 ]))
57598 return this.state
57599 }
57600
57601 function toArray (buf) {
57602 return [
57603 buf.readUInt32BE(0),
57604 buf.readUInt32BE(4),
57605 buf.readUInt32BE(8),
57606 buf.readUInt32BE(12)
57607 ]
57608 }
57609 function fromArray (out) {
57610 out = out.map(fixup_uint32)
57611 var buf = new Buffer(16)
57612 buf.writeUInt32BE(out[0], 0)
57613 buf.writeUInt32BE(out[1], 4)
57614 buf.writeUInt32BE(out[2], 8)
57615 buf.writeUInt32BE(out[3], 12)
57616 return buf
57617 }
57618 var uint_max = Math.pow(2, 32)
57619 function fixup_uint32 (x) {
57620 var ret, x_pos
57621 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
57622 return ret
57623 }
57624 function xor (a, b) {
57625 return [
57626 a[0] ^ b[0],
57627 a[1] ^ b[1],
57628 a[2] ^ b[2],
57629 a[3] ^ b[3]
57630 ]
57631 }
57632
57633 }).call(this,require("buffer").Buffer)
57634 },{"buffer":47}],26:[function(require,module,exports){
57635 exports['aes-128-ecb'] = {
57636 cipher: 'AES',
57637 key: 128,
57638 iv: 0,
57639 mode: 'ECB',
57640 type: 'block'
57641 }
57642 exports['aes-192-ecb'] = {
57643 cipher: 'AES',
57644 key: 192,
57645 iv: 0,
57646 mode: 'ECB',
57647 type: 'block'
57648 }
57649 exports['aes-256-ecb'] = {
57650 cipher: 'AES',
57651 key: 256,
57652 iv: 0,
57653 mode: 'ECB',
57654 type: 'block'
57655 }
57656 exports['aes-128-cbc'] = {
57657 cipher: 'AES',
57658 key: 128,
57659 iv: 16,
57660 mode: 'CBC',
57661 type: 'block'
57662 }
57663 exports['aes-192-cbc'] = {
57664 cipher: 'AES',
57665 key: 192,
57666 iv: 16,
57667 mode: 'CBC',
57668 type: 'block'
57669 }
57670 exports['aes-256-cbc'] = {
57671 cipher: 'AES',
57672 key: 256,
57673 iv: 16,
57674 mode: 'CBC',
57675 type: 'block'
57676 }
57677 exports['aes128'] = exports['aes-128-cbc']
57678 exports['aes192'] = exports['aes-192-cbc']
57679 exports['aes256'] = exports['aes-256-cbc']
57680 exports['aes-128-cfb'] = {
57681 cipher: 'AES',
57682 key: 128,
57683 iv: 16,
57684 mode: 'CFB',
57685 type: 'stream'
57686 }
57687 exports['aes-192-cfb'] = {
57688 cipher: 'AES',
57689 key: 192,
57690 iv: 16,
57691 mode: 'CFB',
57692 type: 'stream'
57693 }
57694 exports['aes-256-cfb'] = {
57695 cipher: 'AES',
57696 key: 256,
57697 iv: 16,
57698 mode: 'CFB',
57699 type: 'stream'
57700 }
57701 exports['aes-128-cfb8'] = {
57702 cipher: 'AES',
57703 key: 128,
57704 iv: 16,
57705 mode: 'CFB8',
57706 type: 'stream'
57707 }
57708 exports['aes-192-cfb8'] = {
57709 cipher: 'AES',
57710 key: 192,
57711 iv: 16,
57712 mode: 'CFB8',
57713 type: 'stream'
57714 }
57715 exports['aes-256-cfb8'] = {
57716 cipher: 'AES',
57717 key: 256,
57718 iv: 16,
57719 mode: 'CFB8',
57720 type: 'stream'
57721 }
57722 exports['aes-128-cfb1'] = {
57723 cipher: 'AES',
57724 key: 128,
57725 iv: 16,
57726 mode: 'CFB1',
57727 type: 'stream'
57728 }
57729 exports['aes-192-cfb1'] = {
57730 cipher: 'AES',
57731 key: 192,
57732 iv: 16,
57733 mode: 'CFB1',
57734 type: 'stream'
57735 }
57736 exports['aes-256-cfb1'] = {
57737 cipher: 'AES',
57738 key: 256,
57739 iv: 16,
57740 mode: 'CFB1',
57741 type: 'stream'
57742 }
57743 exports['aes-128-ofb'] = {
57744 cipher: 'AES',
57745 key: 128,
57746 iv: 16,
57747 mode: 'OFB',
57748 type: 'stream'
57749 }
57750 exports['aes-192-ofb'] = {
57751 cipher: 'AES',
57752 key: 192,
57753 iv: 16,
57754 mode: 'OFB',
57755 type: 'stream'
57756 }
57757 exports['aes-256-ofb'] = {
57758 cipher: 'AES',
57759 key: 256,
57760 iv: 16,
57761 mode: 'OFB',
57762 type: 'stream'
57763 }
57764 exports['aes-128-ctr'] = {
57765 cipher: 'AES',
57766 key: 128,
57767 iv: 16,
57768 mode: 'CTR',
57769 type: 'stream'
57770 }
57771 exports['aes-192-ctr'] = {
57772 cipher: 'AES',
57773 key: 192,
57774 iv: 16,
57775 mode: 'CTR',
57776 type: 'stream'
57777 }
57778 exports['aes-256-ctr'] = {
57779 cipher: 'AES',
57780 key: 256,
57781 iv: 16,
57782 mode: 'CTR',
57783 type: 'stream'
57784 }
57785 exports['aes-128-gcm'] = {
57786 cipher: 'AES',
57787 key: 128,
57788 iv: 12,
57789 mode: 'GCM',
57790 type: 'auth'
57791 }
57792 exports['aes-192-gcm'] = {
57793 cipher: 'AES',
57794 key: 192,
57795 iv: 12,
57796 mode: 'GCM',
57797 type: 'auth'
57798 }
57799 exports['aes-256-gcm'] = {
57800 cipher: 'AES',
57801 key: 256,
57802 iv: 12,
57803 mode: 'GCM',
57804 type: 'auth'
57805 }
57806
57807 },{}],27:[function(require,module,exports){
57808 var xor = require('buffer-xor')
57809
57810 exports.encrypt = function (self, block) {
57811 var data = xor(block, self._prev)
57812
57813 self._prev = self._cipher.encryptBlock(data)
57814 return self._prev
57815 }
57816
57817 exports.decrypt = function (self, block) {
57818 var pad = self._prev
57819
57820 self._prev = block
57821 var out = self._cipher.decryptBlock(block)
57822
57823 return xor(out, pad)
57824 }
57825
57826 },{"buffer-xor":46}],28:[function(require,module,exports){
57827 (function (Buffer){
57828 var xor = require('buffer-xor')
57829
57830 exports.encrypt = function (self, data, decrypt) {
57831 var out = new Buffer('')
57832 var len
57833
57834 while (data.length) {
57835 if (self._cache.length === 0) {
57836 self._cache = self._cipher.encryptBlock(self._prev)
57837 self._prev = new Buffer('')
57838 }
57839
57840 if (self._cache.length <= data.length) {
57841 len = self._cache.length
57842 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
57843 data = data.slice(len)
57844 } else {
57845 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
57846 break
57847 }
57848 }
57849
57850 return out
57851 }
57852 function encryptStart (self, data, decrypt) {
57853 var len = data.length
57854 var out = xor(data, self._cache)
57855 self._cache = self._cache.slice(len)
57856 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
57857 return out
57858 }
57859
57860 }).call(this,require("buffer").Buffer)
57861 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
57862 (function (Buffer){
57863 function encryptByte (self, byteParam, decrypt) {
57864 var pad
57865 var i = -1
57866 var len = 8
57867 var out = 0
57868 var bit, value
57869 while (++i < len) {
57870 pad = self._cipher.encryptBlock(self._prev)
57871 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
57872 value = pad[0] ^ bit
57873 out += ((value & 0x80) >> (i % 8))
57874 self._prev = shiftIn(self._prev, decrypt ? bit : value)
57875 }
57876 return out
57877 }
57878 exports.encrypt = function (self, chunk, decrypt) {
57879 var len = chunk.length
57880 var out = new Buffer(len)
57881 var i = -1
57882 while (++i < len) {
57883 out[i] = encryptByte(self, chunk[i], decrypt)
57884 }
57885 return out
57886 }
57887 function shiftIn (buffer, value) {
57888 var len = buffer.length
57889 var i = -1
57890 var out = new Buffer(buffer.length)
57891 buffer = Buffer.concat([buffer, new Buffer([value])])
57892 while (++i < len) {
57893 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
57894 }
57895 return out
57896 }
57897
57898 }).call(this,require("buffer").Buffer)
57899 },{"buffer":47}],30:[function(require,module,exports){
57900 (function (Buffer){
57901 function encryptByte (self, byteParam, decrypt) {
57902 var pad = self._cipher.encryptBlock(self._prev)
57903 var out = pad[0] ^ byteParam
57904 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
57905 return out
57906 }
57907 exports.encrypt = function (self, chunk, decrypt) {
57908 var len = chunk.length
57909 var out = new Buffer(len)
57910 var i = -1
57911 while (++i < len) {
57912 out[i] = encryptByte(self, chunk[i], decrypt)
57913 }
57914 return out
57915 }
57916
57917 }).call(this,require("buffer").Buffer)
57918 },{"buffer":47}],31:[function(require,module,exports){
57919 (function (Buffer){
57920 var xor = require('buffer-xor')
57921
57922 function incr32 (iv) {
57923 var len = iv.length
57924 var item
57925 while (len--) {
57926 item = iv.readUInt8(len)
57927 if (item === 255) {
57928 iv.writeUInt8(0, len)
57929 } else {
57930 item++
57931 iv.writeUInt8(item, len)
57932 break
57933 }
57934 }
57935 }
57936
57937 function getBlock (self) {
57938 var out = self._cipher.encryptBlock(self._prev)
57939 incr32(self._prev)
57940 return out
57941 }
57942
57943 exports.encrypt = function (self, chunk) {
57944 while (self._cache.length < chunk.length) {
57945 self._cache = Buffer.concat([self._cache, getBlock(self)])
57946 }
57947 var pad = self._cache.slice(0, chunk.length)
57948 self._cache = self._cache.slice(chunk.length)
57949 return xor(chunk, pad)
57950 }
57951
57952 }).call(this,require("buffer").Buffer)
57953 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
57954 exports.encrypt = function (self, block) {
57955 return self._cipher.encryptBlock(block)
57956 }
57957 exports.decrypt = function (self, block) {
57958 return self._cipher.decryptBlock(block)
57959 }
57960
57961 },{}],33:[function(require,module,exports){
57962 (function (Buffer){
57963 var xor = require('buffer-xor')
57964
57965 function getBlock (self) {
57966 self._prev = self._cipher.encryptBlock(self._prev)
57967 return self._prev
57968 }
57969
57970 exports.encrypt = function (self, chunk) {
57971 while (self._cache.length < chunk.length) {
57972 self._cache = Buffer.concat([self._cache, getBlock(self)])
57973 }
57974
57975 var pad = self._cache.slice(0, chunk.length)
57976 self._cache = self._cache.slice(chunk.length)
57977 return xor(chunk, pad)
57978 }
57979
57980 }).call(this,require("buffer").Buffer)
57981 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
57982 (function (Buffer){
57983 var aes = require('./aes')
57984 var Transform = require('cipher-base')
57985 var inherits = require('inherits')
57986
57987 inherits(StreamCipher, Transform)
57988 module.exports = StreamCipher
57989 function StreamCipher (mode, key, iv, decrypt) {
57990 if (!(this instanceof StreamCipher)) {
57991 return new StreamCipher(mode, key, iv)
57992 }
57993 Transform.call(this)
57994 this._cipher = new aes.AES(key)
57995 this._prev = new Buffer(iv.length)
57996 this._cache = new Buffer('')
57997 this._secCache = new Buffer('')
57998 this._decrypt = decrypt
57999 iv.copy(this._prev)
58000 this._mode = mode
58001 }
58002 StreamCipher.prototype._update = function (chunk) {
58003 return this._mode.encrypt(this, chunk, this._decrypt)
58004 }
58005 StreamCipher.prototype._final = function () {
58006 this._cipher.scrub()
58007 }
58008
58009 }).call(this,require("buffer").Buffer)
58010 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
58011 var ebtk = require('evp_bytestokey')
58012 var aes = require('browserify-aes/browser')
58013 var DES = require('browserify-des')
58014 var desModes = require('browserify-des/modes')
58015 var aesModes = require('browserify-aes/modes')
58016 function createCipher (suite, password) {
58017 var keyLen, ivLen
58018 suite = suite.toLowerCase()
58019 if (aesModes[suite]) {
58020 keyLen = aesModes[suite].key
58021 ivLen = aesModes[suite].iv
58022 } else if (desModes[suite]) {
58023 keyLen = desModes[suite].key * 8
58024 ivLen = desModes[suite].iv
58025 } else {
58026 throw new TypeError('invalid suite type')
58027 }
58028 var keys = ebtk(password, false, keyLen, ivLen)
58029 return createCipheriv(suite, keys.key, keys.iv)
58030 }
58031 function createDecipher (suite, password) {
58032 var keyLen, ivLen
58033 suite = suite.toLowerCase()
58034 if (aesModes[suite]) {
58035 keyLen = aesModes[suite].key
58036 ivLen = aesModes[suite].iv
58037 } else if (desModes[suite]) {
58038 keyLen = desModes[suite].key * 8
58039 ivLen = desModes[suite].iv
58040 } else {
58041 throw new TypeError('invalid suite type')
58042 }
58043 var keys = ebtk(password, false, keyLen, ivLen)
58044 return createDecipheriv(suite, keys.key, keys.iv)
58045 }
58046
58047 function createCipheriv (suite, key, iv) {
58048 suite = suite.toLowerCase()
58049 if (aesModes[suite]) {
58050 return aes.createCipheriv(suite, key, iv)
58051 } else if (desModes[suite]) {
58052 return new DES({
58053 key: key,
58054 iv: iv,
58055 mode: suite
58056 })
58057 } else {
58058 throw new TypeError('invalid suite type')
58059 }
58060 }
58061 function createDecipheriv (suite, key, iv) {
58062 suite = suite.toLowerCase()
58063 if (aesModes[suite]) {
58064 return aes.createDecipheriv(suite, key, iv)
58065 } else if (desModes[suite]) {
58066 return new DES({
58067 key: key,
58068 iv: iv,
58069 mode: suite,
58070 decrypt: true
58071 })
58072 } else {
58073 throw new TypeError('invalid suite type')
58074 }
58075 }
58076 exports.createCipher = exports.Cipher = createCipher
58077 exports.createCipheriv = exports.Cipheriv = createCipheriv
58078 exports.createDecipher = exports.Decipher = createDecipher
58079 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
58080 function getCiphers () {
58081 return Object.keys(desModes).concat(aes.getCiphers())
58082 }
58083 exports.listCiphers = exports.getCiphers = getCiphers
58084
58085 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
58086 (function (Buffer){
58087 var CipherBase = require('cipher-base')
58088 var des = require('des.js')
58089 var inherits = require('inherits')
58090
58091 var modes = {
58092 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
58093 'des-ede3': des.EDE,
58094 'des-ede-cbc': des.CBC.instantiate(des.EDE),
58095 'des-ede': des.EDE,
58096 'des-cbc': des.CBC.instantiate(des.DES),
58097 'des-ecb': des.DES
58098 }
58099 modes.des = modes['des-cbc']
58100 modes.des3 = modes['des-ede3-cbc']
58101 module.exports = DES
58102 inherits(DES, CipherBase)
58103 function DES (opts) {
58104 CipherBase.call(this)
58105 var modeName = opts.mode.toLowerCase()
58106 var mode = modes[modeName]
58107 var type
58108 if (opts.decrypt) {
58109 type = 'decrypt'
58110 } else {
58111 type = 'encrypt'
58112 }
58113 var key = opts.key
58114 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
58115 key = Buffer.concat([key, key.slice(0, 8)])
58116 }
58117 var iv = opts.iv
58118 this._des = mode.create({
58119 key: key,
58120 iv: iv,
58121 type: type
58122 })
58123 }
58124 DES.prototype._update = function (data) {
58125 return new Buffer(this._des.update(data))
58126 }
58127 DES.prototype._final = function () {
58128 return new Buffer(this._des.final())
58129 }
58130
58131 }).call(this,require("buffer").Buffer)
58132 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
58133 exports['des-ecb'] = {
58134 key: 8,
58135 iv: 0
58136 }
58137 exports['des-cbc'] = exports.des = {
58138 key: 8,
58139 iv: 8
58140 }
58141 exports['des-ede3-cbc'] = exports.des3 = {
58142 key: 24,
58143 iv: 8
58144 }
58145 exports['des-ede3'] = {
58146 key: 24,
58147 iv: 0
58148 }
58149 exports['des-ede-cbc'] = {
58150 key: 16,
58151 iv: 8
58152 }
58153 exports['des-ede'] = {
58154 key: 16,
58155 iv: 0
58156 }
58157
58158 },{}],38:[function(require,module,exports){
58159 (function (Buffer){
58160 var bn = require('bn.js');
58161 var randomBytes = require('randombytes');
58162 module.exports = crt;
58163 function blind(priv) {
58164 var r = getr(priv);
58165 var blinder = r.toRed(bn.mont(priv.modulus))
58166 .redPow(new bn(priv.publicExponent)).fromRed();
58167 return {
58168 blinder: blinder,
58169 unblinder:r.invm(priv.modulus)
58170 };
58171 }
58172 function crt(msg, priv) {
58173 var blinds = blind(priv);
58174 var len = priv.modulus.byteLength();
58175 var mod = bn.mont(priv.modulus);
58176 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
58177 var c1 = blinded.toRed(bn.mont(priv.prime1));
58178 var c2 = blinded.toRed(bn.mont(priv.prime2));
58179 var qinv = priv.coefficient;
58180 var p = priv.prime1;
58181 var q = priv.prime2;
58182 var m1 = c1.redPow(priv.exponent1);
58183 var m2 = c2.redPow(priv.exponent2);
58184 m1 = m1.fromRed();
58185 m2 = m2.fromRed();
58186 var h = m1.isub(m2).imul(qinv).umod(p);
58187 h.imul(q);
58188 m2.iadd(h);
58189 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
58190 }
58191 crt.getr = getr;
58192 function getr(priv) {
58193 var len = priv.modulus.byteLength();
58194 var r = new bn(randomBytes(len));
58195 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
58196 r = new bn(randomBytes(len));
58197 }
58198 return r;
58199 }
58200
58201 }).call(this,require("buffer").Buffer)
58202 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
58203 module.exports = require('./browser/algorithms.json')
58204
58205 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
58206 module.exports={
58207 "sha224WithRSAEncryption": {
58208 "sign": "rsa",
58209 "hash": "sha224",
58210 "id": "302d300d06096086480165030402040500041c"
58211 },
58212 "RSA-SHA224": {
58213 "sign": "ecdsa/rsa",
58214 "hash": "sha224",
58215 "id": "302d300d06096086480165030402040500041c"
58216 },
58217 "sha256WithRSAEncryption": {
58218 "sign": "rsa",
58219 "hash": "sha256",
58220 "id": "3031300d060960864801650304020105000420"
58221 },
58222 "RSA-SHA256": {
58223 "sign": "ecdsa/rsa",
58224 "hash": "sha256",
58225 "id": "3031300d060960864801650304020105000420"
58226 },
58227 "sha384WithRSAEncryption": {
58228 "sign": "rsa",
58229 "hash": "sha384",
58230 "id": "3041300d060960864801650304020205000430"
58231 },
58232 "RSA-SHA384": {
58233 "sign": "ecdsa/rsa",
58234 "hash": "sha384",
58235 "id": "3041300d060960864801650304020205000430"
58236 },
58237 "sha512WithRSAEncryption": {
58238 "sign": "rsa",
58239 "hash": "sha512",
58240 "id": "3051300d060960864801650304020305000440"
58241 },
58242 "RSA-SHA512": {
58243 "sign": "ecdsa/rsa",
58244 "hash": "sha512",
58245 "id": "3051300d060960864801650304020305000440"
58246 },
58247 "RSA-SHA1": {
58248 "sign": "rsa",
58249 "hash": "sha1",
58250 "id": "3021300906052b0e03021a05000414"
58251 },
58252 "ecdsa-with-SHA1": {
58253 "sign": "ecdsa",
58254 "hash": "sha1",
58255 "id": ""
58256 },
58257 "sha256": {
58258 "sign": "ecdsa",
58259 "hash": "sha256",
58260 "id": ""
58261 },
58262 "sha224": {
58263 "sign": "ecdsa",
58264 "hash": "sha224",
58265 "id": ""
58266 },
58267 "sha384": {
58268 "sign": "ecdsa",
58269 "hash": "sha384",
58270 "id": ""
58271 },
58272 "sha512": {
58273 "sign": "ecdsa",
58274 "hash": "sha512",
58275 "id": ""
58276 },
58277 "DSA-SHA": {
58278 "sign": "dsa",
58279 "hash": "sha1",
58280 "id": ""
58281 },
58282 "DSA-SHA1": {
58283 "sign": "dsa",
58284 "hash": "sha1",
58285 "id": ""
58286 },
58287 "DSA": {
58288 "sign": "dsa",
58289 "hash": "sha1",
58290 "id": ""
58291 },
58292 "DSA-WITH-SHA224": {
58293 "sign": "dsa",
58294 "hash": "sha224",
58295 "id": ""
58296 },
58297 "DSA-SHA224": {
58298 "sign": "dsa",
58299 "hash": "sha224",
58300 "id": ""
58301 },
58302 "DSA-WITH-SHA256": {
58303 "sign": "dsa",
58304 "hash": "sha256",
58305 "id": ""
58306 },
58307 "DSA-SHA256": {
58308 "sign": "dsa",
58309 "hash": "sha256",
58310 "id": ""
58311 },
58312 "DSA-WITH-SHA384": {
58313 "sign": "dsa",
58314 "hash": "sha384",
58315 "id": ""
58316 },
58317 "DSA-SHA384": {
58318 "sign": "dsa",
58319 "hash": "sha384",
58320 "id": ""
58321 },
58322 "DSA-WITH-SHA512": {
58323 "sign": "dsa",
58324 "hash": "sha512",
58325 "id": ""
58326 },
58327 "DSA-SHA512": {
58328 "sign": "dsa",
58329 "hash": "sha512",
58330 "id": ""
58331 },
58332 "DSA-RIPEMD160": {
58333 "sign": "dsa",
58334 "hash": "rmd160",
58335 "id": ""
58336 },
58337 "ripemd160WithRSA": {
58338 "sign": "rsa",
58339 "hash": "rmd160",
58340 "id": "3021300906052b2403020105000414"
58341 },
58342 "RSA-RIPEMD160": {
58343 "sign": "rsa",
58344 "hash": "rmd160",
58345 "id": "3021300906052b2403020105000414"
58346 },
58347 "md5WithRSAEncryption": {
58348 "sign": "rsa",
58349 "hash": "md5",
58350 "id": "3020300c06082a864886f70d020505000410"
58351 },
58352 "RSA-MD5": {
58353 "sign": "rsa",
58354 "hash": "md5",
58355 "id": "3020300c06082a864886f70d020505000410"
58356 }
58357 }
58358
58359 },{}],41:[function(require,module,exports){
58360 module.exports={
58361 "1.3.132.0.10": "secp256k1",
58362 "1.3.132.0.33": "p224",
58363 "1.2.840.10045.3.1.1": "p192",
58364 "1.2.840.10045.3.1.7": "p256",
58365 "1.3.132.0.34": "p384",
58366 "1.3.132.0.35": "p521"
58367 }
58368
58369 },{}],42:[function(require,module,exports){
58370 (function (Buffer){
58371 var createHash = require('create-hash')
58372 var stream = require('stream')
58373 var inherits = require('inherits')
58374 var sign = require('./sign')
58375 var verify = require('./verify')
58376
58377 var algorithms = require('./algorithms.json')
58378 Object.keys(algorithms).forEach(function (key) {
58379 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
58380 algorithms[key.toLowerCase()] = algorithms[key]
58381 })
58382
58383 function Sign (algorithm) {
58384 stream.Writable.call(this)
58385
58386 var data = algorithms[algorithm]
58387 if (!data) throw new Error('Unknown message digest')
58388
58389 this._hashType = data.hash
58390 this._hash = createHash(data.hash)
58391 this._tag = data.id
58392 this._signType = data.sign
58393 }
58394 inherits(Sign, stream.Writable)
58395
58396 Sign.prototype._write = function _write (data, _, done) {
58397 this._hash.update(data)
58398 done()
58399 }
58400
58401 Sign.prototype.update = function update (data, enc) {
58402 if (typeof data === 'string') data = new Buffer(data, enc)
58403
58404 this._hash.update(data)
58405 return this
58406 }
58407
58408 Sign.prototype.sign = function signMethod (key, enc) {
58409 this.end()
58410 var hash = this._hash.digest()
58411 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
58412
58413 return enc ? sig.toString(enc) : sig
58414 }
58415
58416 function Verify (algorithm) {
58417 stream.Writable.call(this)
58418
58419 var data = algorithms[algorithm]
58420 if (!data) throw new Error('Unknown message digest')
58421
58422 this._hash = createHash(data.hash)
58423 this._tag = data.id
58424 this._signType = data.sign
58425 }
58426 inherits(Verify, stream.Writable)
58427
58428 Verify.prototype._write = function _write (data, _, done) {
58429 this._hash.update(data)
58430 done()
58431 }
58432
58433 Verify.prototype.update = function update (data, enc) {
58434 if (typeof data === 'string') data = new Buffer(data, enc)
58435
58436 this._hash.update(data)
58437 return this
58438 }
58439
58440 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
58441 if (typeof sig === 'string') sig = new Buffer(sig, enc)
58442
58443 this.end()
58444 var hash = this._hash.digest()
58445 return verify(sig, hash, key, this._signType, this._tag)
58446 }
58447
58448 function createSign (algorithm) {
58449 return new Sign(algorithm)
58450 }
58451
58452 function createVerify (algorithm) {
58453 return new Verify(algorithm)
58454 }
58455
58456 module.exports = {
58457 Sign: createSign,
58458 Verify: createVerify,
58459 createSign: createSign,
58460 createVerify: createVerify
58461 }
58462
58463 }).call(this,require("buffer").Buffer)
58464 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
58465 (function (Buffer){
58466 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58467 var createHmac = require('create-hmac')
58468 var crt = require('browserify-rsa')
58469 var EC = require('elliptic').ec
58470 var BN = require('bn.js')
58471 var parseKeys = require('parse-asn1')
58472 var curves = require('./curves.json')
58473
58474 function sign (hash, key, hashType, signType, tag) {
58475 var priv = parseKeys(key)
58476 if (priv.curve) {
58477 // rsa keys can be interpreted as ecdsa ones in openssl
58478 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58479 return ecSign(hash, priv)
58480 } else if (priv.type === 'dsa') {
58481 if (signType !== 'dsa') throw new Error('wrong private key type')
58482 return dsaSign(hash, priv, hashType)
58483 } else {
58484 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58485 }
58486 hash = Buffer.concat([tag, hash])
58487 var len = priv.modulus.byteLength()
58488 var pad = [ 0, 1 ]
58489 while (hash.length + pad.length + 1 < len) pad.push(0xff)
58490 pad.push(0x00)
58491 var i = -1
58492 while (++i < hash.length) pad.push(hash[i])
58493
58494 var out = crt(pad, priv)
58495 return out
58496 }
58497
58498 function ecSign (hash, priv) {
58499 var curveId = curves[priv.curve.join('.')]
58500 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
58501
58502 var curve = new EC(curveId)
58503 var key = curve.keyFromPrivate(priv.privateKey)
58504 var out = key.sign(hash)
58505
58506 return new Buffer(out.toDER())
58507 }
58508
58509 function dsaSign (hash, priv, algo) {
58510 var x = priv.params.priv_key
58511 var p = priv.params.p
58512 var q = priv.params.q
58513 var g = priv.params.g
58514 var r = new BN(0)
58515 var k
58516 var H = bits2int(hash, q).mod(q)
58517 var s = false
58518 var kv = getKey(x, q, hash, algo)
58519 while (s === false) {
58520 k = makeKey(q, kv, algo)
58521 r = makeR(g, k, p, q)
58522 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
58523 if (s.cmpn(0) === 0) {
58524 s = false
58525 r = new BN(0)
58526 }
58527 }
58528 return toDER(r, s)
58529 }
58530
58531 function toDER (r, s) {
58532 r = r.toArray()
58533 s = s.toArray()
58534
58535 // Pad values
58536 if (r[0] & 0x80) r = [ 0 ].concat(r)
58537 if (s[0] & 0x80) s = [ 0 ].concat(s)
58538
58539 var total = r.length + s.length + 4
58540 var res = [ 0x30, total, 0x02, r.length ]
58541 res = res.concat(r, [ 0x02, s.length ], s)
58542 return new Buffer(res)
58543 }
58544
58545 function getKey (x, q, hash, algo) {
58546 x = new Buffer(x.toArray())
58547 if (x.length < q.byteLength()) {
58548 var zeros = new Buffer(q.byteLength() - x.length)
58549 zeros.fill(0)
58550 x = Buffer.concat([ zeros, x ])
58551 }
58552 var hlen = hash.length
58553 var hbits = bits2octets(hash, q)
58554 var v = new Buffer(hlen)
58555 v.fill(1)
58556 var k = new Buffer(hlen)
58557 k.fill(0)
58558 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
58559 v = createHmac(algo, k).update(v).digest()
58560 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
58561 v = createHmac(algo, k).update(v).digest()
58562 return { k: k, v: v }
58563 }
58564
58565 function bits2int (obits, q) {
58566 var bits = new BN(obits)
58567 var shift = (obits.length << 3) - q.bitLength()
58568 if (shift > 0) bits.ishrn(shift)
58569 return bits
58570 }
58571
58572 function bits2octets (bits, q) {
58573 bits = bits2int(bits, q)
58574 bits = bits.mod(q)
58575 var out = new Buffer(bits.toArray())
58576 if (out.length < q.byteLength()) {
58577 var zeros = new Buffer(q.byteLength() - out.length)
58578 zeros.fill(0)
58579 out = Buffer.concat([ zeros, out ])
58580 }
58581 return out
58582 }
58583
58584 function makeKey (q, kv, algo) {
58585 var t
58586 var k
58587
58588 do {
58589 t = new Buffer(0)
58590
58591 while (t.length * 8 < q.bitLength()) {
58592 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58593 t = Buffer.concat([ t, kv.v ])
58594 }
58595
58596 k = bits2int(t, q)
58597 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
58598 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58599 } while (k.cmp(q) !== -1)
58600
58601 return k
58602 }
58603
58604 function makeR (g, k, p, q) {
58605 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
58606 }
58607
58608 module.exports = sign
58609 module.exports.getKey = getKey
58610 module.exports.makeKey = makeKey
58611
58612 }).call(this,require("buffer").Buffer)
58613 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
58614 (function (Buffer){
58615 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58616 var BN = require('bn.js')
58617 var EC = require('elliptic').ec
58618 var parseKeys = require('parse-asn1')
58619 var curves = require('./curves.json')
58620
58621 function verify (sig, hash, key, signType, tag) {
58622 var pub = parseKeys(key)
58623 if (pub.type === 'ec') {
58624 // rsa keys can be interpreted as ecdsa ones in openssl
58625 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58626 return ecVerify(sig, hash, pub)
58627 } else if (pub.type === 'dsa') {
58628 if (signType !== 'dsa') throw new Error('wrong public key type')
58629 return dsaVerify(sig, hash, pub)
58630 } else {
58631 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58632 }
58633 hash = Buffer.concat([tag, hash])
58634 var len = pub.modulus.byteLength()
58635 var pad = [ 1 ]
58636 var padNum = 0
58637 while (hash.length + pad.length + 2 < len) {
58638 pad.push(0xff)
58639 padNum++
58640 }
58641 pad.push(0x00)
58642 var i = -1
58643 while (++i < hash.length) {
58644 pad.push(hash[i])
58645 }
58646 pad = new Buffer(pad)
58647 var red = BN.mont(pub.modulus)
58648 sig = new BN(sig).toRed(red)
58649
58650 sig = sig.redPow(new BN(pub.publicExponent))
58651 sig = new Buffer(sig.fromRed().toArray())
58652 var out = padNum < 8 ? 1 : 0
58653 len = Math.min(sig.length, pad.length)
58654 if (sig.length !== pad.length) out = 1
58655
58656 i = -1
58657 while (++i < len) out |= sig[i] ^ pad[i]
58658 return out === 0
58659 }
58660
58661 function ecVerify (sig, hash, pub) {
58662 var curveId = curves[pub.data.algorithm.curve.join('.')]
58663 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
58664
58665 var curve = new EC(curveId)
58666 var pubkey = pub.data.subjectPrivateKey.data
58667
58668 return curve.verify(hash, sig, pubkey)
58669 }
58670
58671 function dsaVerify (sig, hash, pub) {
58672 var p = pub.data.p
58673 var q = pub.data.q
58674 var g = pub.data.g
58675 var y = pub.data.pub_key
58676 var unpacked = parseKeys.signature.decode(sig, 'der')
58677 var s = unpacked.s
58678 var r = unpacked.r
58679 checkValue(s, q)
58680 checkValue(r, q)
58681 var montp = BN.mont(p)
58682 var w = s.invm(q)
58683 var v = g.toRed(montp)
58684 .redPow(new BN(hash).mul(w).mod(q))
58685 .fromRed()
58686 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
58687 .mod(p)
58688 .mod(q)
58689 return v.cmp(r) === 0
58690 }
58691
58692 function checkValue (b, q) {
58693 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
58694 if (b.cmp(q) >= q) throw new Error('invalid sig')
58695 }
58696
58697 module.exports = verify
58698
58699 }).call(this,require("buffer").Buffer)
58700 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
58701 (function (global){
58702 'use strict';
58703
58704 var buffer = require('buffer');
58705 var Buffer = buffer.Buffer;
58706 var SlowBuffer = buffer.SlowBuffer;
58707 var MAX_LEN = buffer.kMaxLength || 2147483647;
58708 exports.alloc = function alloc(size, fill, encoding) {
58709 if (typeof Buffer.alloc === 'function') {
58710 return Buffer.alloc(size, fill, encoding);
58711 }
58712 if (typeof encoding === 'number') {
58713 throw new TypeError('encoding must not be number');
58714 }
58715 if (typeof size !== 'number') {
58716 throw new TypeError('size must be a number');
58717 }
58718 if (size > MAX_LEN) {
58719 throw new RangeError('size is too large');
58720 }
58721 var enc = encoding;
58722 var _fill = fill;
58723 if (_fill === undefined) {
58724 enc = undefined;
58725 _fill = 0;
58726 }
58727 var buf = new Buffer(size);
58728 if (typeof _fill === 'string') {
58729 var fillBuf = new Buffer(_fill, enc);
58730 var flen = fillBuf.length;
58731 var i = -1;
58732 while (++i < size) {
58733 buf[i] = fillBuf[i % flen];
58734 }
58735 } else {
58736 buf.fill(_fill);
58737 }
58738 return buf;
58739 }
58740 exports.allocUnsafe = function allocUnsafe(size) {
58741 if (typeof Buffer.allocUnsafe === 'function') {
58742 return Buffer.allocUnsafe(size);
58743 }
58744 if (typeof size !== 'number') {
58745 throw new TypeError('size must be a number');
58746 }
58747 if (size > MAX_LEN) {
58748 throw new RangeError('size is too large');
58749 }
58750 return new Buffer(size);
58751 }
58752 exports.from = function from(value, encodingOrOffset, length) {
58753 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
58754 return Buffer.from(value, encodingOrOffset, length);
58755 }
58756 if (typeof value === 'number') {
58757 throw new TypeError('"value" argument must not be a number');
58758 }
58759 if (typeof value === 'string') {
58760 return new Buffer(value, encodingOrOffset);
58761 }
58762 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
58763 var offset = encodingOrOffset;
58764 if (arguments.length === 1) {
58765 return new Buffer(value);
58766 }
58767 if (typeof offset === 'undefined') {
58768 offset = 0;
58769 }
58770 var len = length;
58771 if (typeof len === 'undefined') {
58772 len = value.byteLength - offset;
58773 }
58774 if (offset >= value.byteLength) {
58775 throw new RangeError('\'offset\' is out of bounds');
58776 }
58777 if (len > value.byteLength - offset) {
58778 throw new RangeError('\'length\' is out of bounds');
58779 }
58780 return new Buffer(value.slice(offset, offset + len));
58781 }
58782 if (Buffer.isBuffer(value)) {
58783 var out = new Buffer(value.length);
58784 value.copy(out, 0, 0, value.length);
58785 return out;
58786 }
58787 if (value) {
58788 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
58789 return new Buffer(value);
58790 }
58791 if (value.type === 'Buffer' && Array.isArray(value.data)) {
58792 return new Buffer(value.data);
58793 }
58794 }
58795
58796 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
58797 }
58798 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
58799 if (typeof Buffer.allocUnsafeSlow === 'function') {
58800 return Buffer.allocUnsafeSlow(size);
58801 }
58802 if (typeof size !== 'number') {
58803 throw new TypeError('size must be a number');
58804 }
58805 if (size >= MAX_LEN) {
58806 throw new RangeError('size is too large');
58807 }
58808 return new SlowBuffer(size);
58809 }
58810
58811 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
58812 },{"buffer":47}],46:[function(require,module,exports){
58813 (function (Buffer){
58814 module.exports = function xor (a, b) {
58815 var length = Math.min(a.length, b.length)
58816 var buffer = new Buffer(length)
58817
58818 for (var i = 0; i < length; ++i) {
58819 buffer[i] = a[i] ^ b[i]
58820 }
58821
58822 return buffer
58823 }
58824
58825 }).call(this,require("buffer").Buffer)
58826 },{"buffer":47}],47:[function(require,module,exports){
58827 /*!
58828 * The buffer module from node.js, for the browser.
58829 *
58830 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
58831 * @license MIT
58832 */
58833 /* eslint-disable no-proto */
58834
58835 'use strict'
58836
58837 var base64 = require('base64-js')
58838 var ieee754 = require('ieee754')
58839
58840 exports.Buffer = Buffer
58841 exports.SlowBuffer = SlowBuffer
58842 exports.INSPECT_MAX_BYTES = 50
58843
58844 var K_MAX_LENGTH = 0x7fffffff
58845 exports.kMaxLength = K_MAX_LENGTH
58846
58847 /**
58848 * If `Buffer.TYPED_ARRAY_SUPPORT`:
58849 * === true Use Uint8Array implementation (fastest)
58850 * === false Print warning and recommend using `buffer` v4.x which has an Object
58851 * implementation (most compatible, even IE6)
58852 *
58853 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
58854 * Opera 11.6+, iOS 4.2+.
58855 *
58856 * We report that the browser does not support typed arrays if the are not subclassable
58857 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
58858 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
58859 * for __proto__ and has a buggy typed array implementation.
58860 */
58861 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
58862
58863 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
58864 typeof console.error === 'function') {
58865 console.error(
58866 'This browser lacks typed array (Uint8Array) support which is required by ' +
58867 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
58868 )
58869 }
58870
58871 function typedArraySupport () {
58872 // Can typed array instances can be augmented?
58873 try {
58874 var arr = new Uint8Array(1)
58875 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
58876 return arr.foo() === 42
58877 } catch (e) {
58878 return false
58879 }
58880 }
58881
58882 function createBuffer (length) {
58883 if (length > K_MAX_LENGTH) {
58884 throw new RangeError('Invalid typed array length')
58885 }
58886 // Return an augmented `Uint8Array` instance
58887 var buf = new Uint8Array(length)
58888 buf.__proto__ = Buffer.prototype
58889 return buf
58890 }
58891
58892 /**
58893 * The Buffer constructor returns instances of `Uint8Array` that have their
58894 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
58895 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
58896 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
58897 * returns a single octet.
58898 *
58899 * The `Uint8Array` prototype remains unmodified.
58900 */
58901
58902 function Buffer (arg, encodingOrOffset, length) {
58903 // Common case.
58904 if (typeof arg === 'number') {
58905 if (typeof encodingOrOffset === 'string') {
58906 throw new Error(
58907 'If encoding is specified then the first argument must be a string'
58908 )
58909 }
58910 return allocUnsafe(arg)
58911 }
58912 return from(arg, encodingOrOffset, length)
58913 }
58914
58915 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
58916 if (typeof Symbol !== 'undefined' && Symbol.species &&
58917 Buffer[Symbol.species] === Buffer) {
58918 Object.defineProperty(Buffer, Symbol.species, {
58919 value: null,
58920 configurable: true,
58921 enumerable: false,
58922 writable: false
58923 })
58924 }
58925
58926 Buffer.poolSize = 8192 // not used by this implementation
58927
58928 function from (value, encodingOrOffset, length) {
58929 if (typeof value === 'number') {
58930 throw new TypeError('"value" argument must not be a number')
58931 }
58932
58933 if (value instanceof ArrayBuffer) {
58934 return fromArrayBuffer(value, encodingOrOffset, length)
58935 }
58936
58937 if (typeof value === 'string') {
58938 return fromString(value, encodingOrOffset)
58939 }
58940
58941 return fromObject(value)
58942 }
58943
58944 /**
58945 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
58946 * if value is a number.
58947 * Buffer.from(str[, encoding])
58948 * Buffer.from(array)
58949 * Buffer.from(buffer)
58950 * Buffer.from(arrayBuffer[, byteOffset[, length]])
58951 **/
58952 Buffer.from = function (value, encodingOrOffset, length) {
58953 return from(value, encodingOrOffset, length)
58954 }
58955
58956 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
58957 // https://github.com/feross/buffer/pull/148
58958 Buffer.prototype.__proto__ = Uint8Array.prototype
58959 Buffer.__proto__ = Uint8Array
58960
58961 function assertSize (size) {
58962 if (typeof size !== 'number') {
58963 throw new TypeError('"size" argument must be a number')
58964 } else if (size < 0) {
58965 throw new RangeError('"size" argument must not be negative')
58966 }
58967 }
58968
58969 function alloc (size, fill, encoding) {
58970 assertSize(size)
58971 if (size <= 0) {
58972 return createBuffer(size)
58973 }
58974 if (fill !== undefined) {
58975 // Only pay attention to encoding if it's a string. This
58976 // prevents accidentally sending in a number that would
58977 // be interpretted as a start offset.
58978 return typeof encoding === 'string'
58979 ? createBuffer(size).fill(fill, encoding)
58980 : createBuffer(size).fill(fill)
58981 }
58982 return createBuffer(size)
58983 }
58984
58985 /**
58986 * Creates a new filled Buffer instance.
58987 * alloc(size[, fill[, encoding]])
58988 **/
58989 Buffer.alloc = function (size, fill, encoding) {
58990 return alloc(size, fill, encoding)
58991 }
58992
58993 function allocUnsafe (size) {
58994 assertSize(size)
58995 return createBuffer(size < 0 ? 0 : checked(size) | 0)
58996 }
58997
58998 /**
58999 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
59000 * */
59001 Buffer.allocUnsafe = function (size) {
59002 return allocUnsafe(size)
59003 }
59004 /**
59005 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
59006 */
59007 Buffer.allocUnsafeSlow = function (size) {
59008 return allocUnsafe(size)
59009 }
59010
59011 function fromString (string, encoding) {
59012 if (typeof encoding !== 'string' || encoding === '') {
59013 encoding = 'utf8'
59014 }
59015
59016 if (!Buffer.isEncoding(encoding)) {
59017 throw new TypeError('"encoding" must be a valid string encoding')
59018 }
59019
59020 var length = byteLength(string, encoding) | 0
59021 var buf = createBuffer(length)
59022
59023 var actual = buf.write(string, encoding)
59024
59025 if (actual !== length) {
59026 // Writing a hex string, for example, that contains invalid characters will
59027 // cause everything after the first invalid character to be ignored. (e.g.
59028 // 'abxxcd' will be treated as 'ab')
59029 buf = buf.slice(0, actual)
59030 }
59031
59032 return buf
59033 }
59034
59035 function fromArrayLike (array) {
59036 var length = array.length < 0 ? 0 : checked(array.length) | 0
59037 var buf = createBuffer(length)
59038 for (var i = 0; i < length; i += 1) {
59039 buf[i] = array[i] & 255
59040 }
59041 return buf
59042 }
59043
59044 function fromArrayBuffer (array, byteOffset, length) {
59045 if (byteOffset < 0 || array.byteLength < byteOffset) {
59046 throw new RangeError('\'offset\' is out of bounds')
59047 }
59048
59049 if (array.byteLength < byteOffset + (length || 0)) {
59050 throw new RangeError('\'length\' is out of bounds')
59051 }
59052
59053 var buf
59054 if (byteOffset === undefined && length === undefined) {
59055 buf = new Uint8Array(array)
59056 } else if (length === undefined) {
59057 buf = new Uint8Array(array, byteOffset)
59058 } else {
59059 buf = new Uint8Array(array, byteOffset, length)
59060 }
59061
59062 // Return an augmented `Uint8Array` instance
59063 buf.__proto__ = Buffer.prototype
59064 return buf
59065 }
59066
59067 function fromObject (obj) {
59068 if (Buffer.isBuffer(obj)) {
59069 var len = checked(obj.length) | 0
59070 var buf = createBuffer(len)
59071
59072 if (buf.length === 0) {
59073 return buf
59074 }
59075
59076 obj.copy(buf, 0, 0, len)
59077 return buf
59078 }
59079
59080 if (obj) {
59081 if (isArrayBufferView(obj) || 'length' in obj) {
59082 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
59083 return createBuffer(0)
59084 }
59085 return fromArrayLike(obj)
59086 }
59087
59088 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
59089 return fromArrayLike(obj.data)
59090 }
59091 }
59092
59093 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
59094 }
59095
59096 function checked (length) {
59097 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
59098 // length is NaN (which is otherwise coerced to zero.)
59099 if (length >= K_MAX_LENGTH) {
59100 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
59101 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
59102 }
59103 return length | 0
59104 }
59105
59106 function SlowBuffer (length) {
59107 if (+length != length) { // eslint-disable-line eqeqeq
59108 length = 0
59109 }
59110 return Buffer.alloc(+length)
59111 }
59112
59113 Buffer.isBuffer = function isBuffer (b) {
59114 return b != null && b._isBuffer === true
59115 }
59116
59117 Buffer.compare = function compare (a, b) {
59118 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
59119 throw new TypeError('Arguments must be Buffers')
59120 }
59121
59122 if (a === b) return 0
59123
59124 var x = a.length
59125 var y = b.length
59126
59127 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
59128 if (a[i] !== b[i]) {
59129 x = a[i]
59130 y = b[i]
59131 break
59132 }
59133 }
59134
59135 if (x < y) return -1
59136 if (y < x) return 1
59137 return 0
59138 }
59139
59140 Buffer.isEncoding = function isEncoding (encoding) {
59141 switch (String(encoding).toLowerCase()) {
59142 case 'hex':
59143 case 'utf8':
59144 case 'utf-8':
59145 case 'ascii':
59146 case 'latin1':
59147 case 'binary':
59148 case 'base64':
59149 case 'ucs2':
59150 case 'ucs-2':
59151 case 'utf16le':
59152 case 'utf-16le':
59153 return true
59154 default:
59155 return false
59156 }
59157 }
59158
59159 Buffer.concat = function concat (list, length) {
59160 if (!Array.isArray(list)) {
59161 throw new TypeError('"list" argument must be an Array of Buffers')
59162 }
59163
59164 if (list.length === 0) {
59165 return Buffer.alloc(0)
59166 }
59167
59168 var i
59169 if (length === undefined) {
59170 length = 0
59171 for (i = 0; i < list.length; ++i) {
59172 length += list[i].length
59173 }
59174 }
59175
59176 var buffer = Buffer.allocUnsafe(length)
59177 var pos = 0
59178 for (i = 0; i < list.length; ++i) {
59179 var buf = list[i]
59180 if (!Buffer.isBuffer(buf)) {
59181 throw new TypeError('"list" argument must be an Array of Buffers')
59182 }
59183 buf.copy(buffer, pos)
59184 pos += buf.length
59185 }
59186 return buffer
59187 }
59188
59189 function byteLength (string, encoding) {
59190 if (Buffer.isBuffer(string)) {
59191 return string.length
59192 }
59193 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
59194 return string.byteLength
59195 }
59196 if (typeof string !== 'string') {
59197 string = '' + string
59198 }
59199
59200 var len = string.length
59201 if (len === 0) return 0
59202
59203 // Use a for loop to avoid recursion
59204 var loweredCase = false
59205 for (;;) {
59206 switch (encoding) {
59207 case 'ascii':
59208 case 'latin1':
59209 case 'binary':
59210 return len
59211 case 'utf8':
59212 case 'utf-8':
59213 case undefined:
59214 return utf8ToBytes(string).length
59215 case 'ucs2':
59216 case 'ucs-2':
59217 case 'utf16le':
59218 case 'utf-16le':
59219 return len * 2
59220 case 'hex':
59221 return len >>> 1
59222 case 'base64':
59223 return base64ToBytes(string).length
59224 default:
59225 if (loweredCase) return utf8ToBytes(string).length // assume utf8
59226 encoding = ('' + encoding).toLowerCase()
59227 loweredCase = true
59228 }
59229 }
59230 }
59231 Buffer.byteLength = byteLength
59232
59233 function slowToString (encoding, start, end) {
59234 var loweredCase = false
59235
59236 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
59237 // property of a typed array.
59238
59239 // This behaves neither like String nor Uint8Array in that we set start/end
59240 // to their upper/lower bounds if the value passed is out of range.
59241 // undefined is handled specially as per ECMA-262 6th Edition,
59242 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
59243 if (start === undefined || start < 0) {
59244 start = 0
59245 }
59246 // Return early if start > this.length. Done here to prevent potential uint32
59247 // coercion fail below.
59248 if (start > this.length) {
59249 return ''
59250 }
59251
59252 if (end === undefined || end > this.length) {
59253 end = this.length
59254 }
59255
59256 if (end <= 0) {
59257 return ''
59258 }
59259
59260 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
59261 end >>>= 0
59262 start >>>= 0
59263
59264 if (end <= start) {
59265 return ''
59266 }
59267
59268 if (!encoding) encoding = 'utf8'
59269
59270 while (true) {
59271 switch (encoding) {
59272 case 'hex':
59273 return hexSlice(this, start, end)
59274
59275 case 'utf8':
59276 case 'utf-8':
59277 return utf8Slice(this, start, end)
59278
59279 case 'ascii':
59280 return asciiSlice(this, start, end)
59281
59282 case 'latin1':
59283 case 'binary':
59284 return latin1Slice(this, start, end)
59285
59286 case 'base64':
59287 return base64Slice(this, start, end)
59288
59289 case 'ucs2':
59290 case 'ucs-2':
59291 case 'utf16le':
59292 case 'utf-16le':
59293 return utf16leSlice(this, start, end)
59294
59295 default:
59296 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59297 encoding = (encoding + '').toLowerCase()
59298 loweredCase = true
59299 }
59300 }
59301 }
59302
59303 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
59304 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
59305 // reliably in a browserify context because there could be multiple different
59306 // copies of the 'buffer' package in use. This method works even for Buffer
59307 // instances that were created from another copy of the `buffer` package.
59308 // See: https://github.com/feross/buffer/issues/154
59309 Buffer.prototype._isBuffer = true
59310
59311 function swap (b, n, m) {
59312 var i = b[n]
59313 b[n] = b[m]
59314 b[m] = i
59315 }
59316
59317 Buffer.prototype.swap16 = function swap16 () {
59318 var len = this.length
59319 if (len % 2 !== 0) {
59320 throw new RangeError('Buffer size must be a multiple of 16-bits')
59321 }
59322 for (var i = 0; i < len; i += 2) {
59323 swap(this, i, i + 1)
59324 }
59325 return this
59326 }
59327
59328 Buffer.prototype.swap32 = function swap32 () {
59329 var len = this.length
59330 if (len % 4 !== 0) {
59331 throw new RangeError('Buffer size must be a multiple of 32-bits')
59332 }
59333 for (var i = 0; i < len; i += 4) {
59334 swap(this, i, i + 3)
59335 swap(this, i + 1, i + 2)
59336 }
59337 return this
59338 }
59339
59340 Buffer.prototype.swap64 = function swap64 () {
59341 var len = this.length
59342 if (len % 8 !== 0) {
59343 throw new RangeError('Buffer size must be a multiple of 64-bits')
59344 }
59345 for (var i = 0; i < len; i += 8) {
59346 swap(this, i, i + 7)
59347 swap(this, i + 1, i + 6)
59348 swap(this, i + 2, i + 5)
59349 swap(this, i + 3, i + 4)
59350 }
59351 return this
59352 }
59353
59354 Buffer.prototype.toString = function toString () {
59355 var length = this.length
59356 if (length === 0) return ''
59357 if (arguments.length === 0) return utf8Slice(this, 0, length)
59358 return slowToString.apply(this, arguments)
59359 }
59360
59361 Buffer.prototype.equals = function equals (b) {
59362 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
59363 if (this === b) return true
59364 return Buffer.compare(this, b) === 0
59365 }
59366
59367 Buffer.prototype.inspect = function inspect () {
59368 var str = ''
59369 var max = exports.INSPECT_MAX_BYTES
59370 if (this.length > 0) {
59371 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
59372 if (this.length > max) str += ' ... '
59373 }
59374 return '<Buffer ' + str + '>'
59375 }
59376
59377 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
59378 if (!Buffer.isBuffer(target)) {
59379 throw new TypeError('Argument must be a Buffer')
59380 }
59381
59382 if (start === undefined) {
59383 start = 0
59384 }
59385 if (end === undefined) {
59386 end = target ? target.length : 0
59387 }
59388 if (thisStart === undefined) {
59389 thisStart = 0
59390 }
59391 if (thisEnd === undefined) {
59392 thisEnd = this.length
59393 }
59394
59395 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
59396 throw new RangeError('out of range index')
59397 }
59398
59399 if (thisStart >= thisEnd && start >= end) {
59400 return 0
59401 }
59402 if (thisStart >= thisEnd) {
59403 return -1
59404 }
59405 if (start >= end) {
59406 return 1
59407 }
59408
59409 start >>>= 0
59410 end >>>= 0
59411 thisStart >>>= 0
59412 thisEnd >>>= 0
59413
59414 if (this === target) return 0
59415
59416 var x = thisEnd - thisStart
59417 var y = end - start
59418 var len = Math.min(x, y)
59419
59420 var thisCopy = this.slice(thisStart, thisEnd)
59421 var targetCopy = target.slice(start, end)
59422
59423 for (var i = 0; i < len; ++i) {
59424 if (thisCopy[i] !== targetCopy[i]) {
59425 x = thisCopy[i]
59426 y = targetCopy[i]
59427 break
59428 }
59429 }
59430
59431 if (x < y) return -1
59432 if (y < x) return 1
59433 return 0
59434 }
59435
59436 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
59437 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
59438 //
59439 // Arguments:
59440 // - buffer - a Buffer to search
59441 // - val - a string, Buffer, or number
59442 // - byteOffset - an index into `buffer`; will be clamped to an int32
59443 // - encoding - an optional encoding, relevant is val is a string
59444 // - dir - true for indexOf, false for lastIndexOf
59445 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
59446 // Empty buffer means no match
59447 if (buffer.length === 0) return -1
59448
59449 // Normalize byteOffset
59450 if (typeof byteOffset === 'string') {
59451 encoding = byteOffset
59452 byteOffset = 0
59453 } else if (byteOffset > 0x7fffffff) {
59454 byteOffset = 0x7fffffff
59455 } else if (byteOffset < -0x80000000) {
59456 byteOffset = -0x80000000
59457 }
59458 byteOffset = +byteOffset // Coerce to Number.
59459 if (numberIsNaN(byteOffset)) {
59460 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
59461 byteOffset = dir ? 0 : (buffer.length - 1)
59462 }
59463
59464 // Normalize byteOffset: negative offsets start from the end of the buffer
59465 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
59466 if (byteOffset >= buffer.length) {
59467 if (dir) return -1
59468 else byteOffset = buffer.length - 1
59469 } else if (byteOffset < 0) {
59470 if (dir) byteOffset = 0
59471 else return -1
59472 }
59473
59474 // Normalize val
59475 if (typeof val === 'string') {
59476 val = Buffer.from(val, encoding)
59477 }
59478
59479 // Finally, search either indexOf (if dir is true) or lastIndexOf
59480 if (Buffer.isBuffer(val)) {
59481 // Special case: looking for empty string/buffer always fails
59482 if (val.length === 0) {
59483 return -1
59484 }
59485 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
59486 } else if (typeof val === 'number') {
59487 val = val & 0xFF // Search for a byte value [0-255]
59488 if (typeof Uint8Array.prototype.indexOf === 'function') {
59489 if (dir) {
59490 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
59491 } else {
59492 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
59493 }
59494 }
59495 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
59496 }
59497
59498 throw new TypeError('val must be string, number or Buffer')
59499 }
59500
59501 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
59502 var indexSize = 1
59503 var arrLength = arr.length
59504 var valLength = val.length
59505
59506 if (encoding !== undefined) {
59507 encoding = String(encoding).toLowerCase()
59508 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
59509 encoding === 'utf16le' || encoding === 'utf-16le') {
59510 if (arr.length < 2 || val.length < 2) {
59511 return -1
59512 }
59513 indexSize = 2
59514 arrLength /= 2
59515 valLength /= 2
59516 byteOffset /= 2
59517 }
59518 }
59519
59520 function read (buf, i) {
59521 if (indexSize === 1) {
59522 return buf[i]
59523 } else {
59524 return buf.readUInt16BE(i * indexSize)
59525 }
59526 }
59527
59528 var i
59529 if (dir) {
59530 var foundIndex = -1
59531 for (i = byteOffset; i < arrLength; i++) {
59532 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
59533 if (foundIndex === -1) foundIndex = i
59534 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
59535 } else {
59536 if (foundIndex !== -1) i -= i - foundIndex
59537 foundIndex = -1
59538 }
59539 }
59540 } else {
59541 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
59542 for (i = byteOffset; i >= 0; i--) {
59543 var found = true
59544 for (var j = 0; j < valLength; j++) {
59545 if (read(arr, i + j) !== read(val, j)) {
59546 found = false
59547 break
59548 }
59549 }
59550 if (found) return i
59551 }
59552 }
59553
59554 return -1
59555 }
59556
59557 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
59558 return this.indexOf(val, byteOffset, encoding) !== -1
59559 }
59560
59561 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
59562 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
59563 }
59564
59565 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
59566 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
59567 }
59568
59569 function hexWrite (buf, string, offset, length) {
59570 offset = Number(offset) || 0
59571 var remaining = buf.length - offset
59572 if (!length) {
59573 length = remaining
59574 } else {
59575 length = Number(length)
59576 if (length > remaining) {
59577 length = remaining
59578 }
59579 }
59580
59581 // must be an even number of digits
59582 var strLen = string.length
59583 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
59584
59585 if (length > strLen / 2) {
59586 length = strLen / 2
59587 }
59588 for (var i = 0; i < length; ++i) {
59589 var parsed = parseInt(string.substr(i * 2, 2), 16)
59590 if (numberIsNaN(parsed)) return i
59591 buf[offset + i] = parsed
59592 }
59593 return i
59594 }
59595
59596 function utf8Write (buf, string, offset, length) {
59597 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
59598 }
59599
59600 function asciiWrite (buf, string, offset, length) {
59601 return blitBuffer(asciiToBytes(string), buf, offset, length)
59602 }
59603
59604 function latin1Write (buf, string, offset, length) {
59605 return asciiWrite(buf, string, offset, length)
59606 }
59607
59608 function base64Write (buf, string, offset, length) {
59609 return blitBuffer(base64ToBytes(string), buf, offset, length)
59610 }
59611
59612 function ucs2Write (buf, string, offset, length) {
59613 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
59614 }
59615
59616 Buffer.prototype.write = function write (string, offset, length, encoding) {
59617 // Buffer#write(string)
59618 if (offset === undefined) {
59619 encoding = 'utf8'
59620 length = this.length
59621 offset = 0
59622 // Buffer#write(string, encoding)
59623 } else if (length === undefined && typeof offset === 'string') {
59624 encoding = offset
59625 length = this.length
59626 offset = 0
59627 // Buffer#write(string, offset[, length][, encoding])
59628 } else if (isFinite(offset)) {
59629 offset = offset >>> 0
59630 if (isFinite(length)) {
59631 length = length >>> 0
59632 if (encoding === undefined) encoding = 'utf8'
59633 } else {
59634 encoding = length
59635 length = undefined
59636 }
59637 } else {
59638 throw new Error(
59639 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
59640 )
59641 }
59642
59643 var remaining = this.length - offset
59644 if (length === undefined || length > remaining) length = remaining
59645
59646 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
59647 throw new RangeError('Attempt to write outside buffer bounds')
59648 }
59649
59650 if (!encoding) encoding = 'utf8'
59651
59652 var loweredCase = false
59653 for (;;) {
59654 switch (encoding) {
59655 case 'hex':
59656 return hexWrite(this, string, offset, length)
59657
59658 case 'utf8':
59659 case 'utf-8':
59660 return utf8Write(this, string, offset, length)
59661
59662 case 'ascii':
59663 return asciiWrite(this, string, offset, length)
59664
59665 case 'latin1':
59666 case 'binary':
59667 return latin1Write(this, string, offset, length)
59668
59669 case 'base64':
59670 // Warning: maxLength not taken into account in base64Write
59671 return base64Write(this, string, offset, length)
59672
59673 case 'ucs2':
59674 case 'ucs-2':
59675 case 'utf16le':
59676 case 'utf-16le':
59677 return ucs2Write(this, string, offset, length)
59678
59679 default:
59680 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59681 encoding = ('' + encoding).toLowerCase()
59682 loweredCase = true
59683 }
59684 }
59685 }
59686
59687 Buffer.prototype.toJSON = function toJSON () {
59688 return {
59689 type: 'Buffer',
59690 data: Array.prototype.slice.call(this._arr || this, 0)
59691 }
59692 }
59693
59694 function base64Slice (buf, start, end) {
59695 if (start === 0 && end === buf.length) {
59696 return base64.fromByteArray(buf)
59697 } else {
59698 return base64.fromByteArray(buf.slice(start, end))
59699 }
59700 }
59701
59702 function utf8Slice (buf, start, end) {
59703 end = Math.min(buf.length, end)
59704 var res = []
59705
59706 var i = start
59707 while (i < end) {
59708 var firstByte = buf[i]
59709 var codePoint = null
59710 var bytesPerSequence = (firstByte > 0xEF) ? 4
59711 : (firstByte > 0xDF) ? 3
59712 : (firstByte > 0xBF) ? 2
59713 : 1
59714
59715 if (i + bytesPerSequence <= end) {
59716 var secondByte, thirdByte, fourthByte, tempCodePoint
59717
59718 switch (bytesPerSequence) {
59719 case 1:
59720 if (firstByte < 0x80) {
59721 codePoint = firstByte
59722 }
59723 break
59724 case 2:
59725 secondByte = buf[i + 1]
59726 if ((secondByte & 0xC0) === 0x80) {
59727 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
59728 if (tempCodePoint > 0x7F) {
59729 codePoint = tempCodePoint
59730 }
59731 }
59732 break
59733 case 3:
59734 secondByte = buf[i + 1]
59735 thirdByte = buf[i + 2]
59736 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
59737 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
59738 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
59739 codePoint = tempCodePoint
59740 }
59741 }
59742 break
59743 case 4:
59744 secondByte = buf[i + 1]
59745 thirdByte = buf[i + 2]
59746 fourthByte = buf[i + 3]
59747 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
59748 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
59749 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
59750 codePoint = tempCodePoint
59751 }
59752 }
59753 }
59754 }
59755
59756 if (codePoint === null) {
59757 // we did not generate a valid codePoint so insert a
59758 // replacement char (U+FFFD) and advance only 1 byte
59759 codePoint = 0xFFFD
59760 bytesPerSequence = 1
59761 } else if (codePoint > 0xFFFF) {
59762 // encode to utf16 (surrogate pair dance)
59763 codePoint -= 0x10000
59764 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
59765 codePoint = 0xDC00 | codePoint & 0x3FF
59766 }
59767
59768 res.push(codePoint)
59769 i += bytesPerSequence
59770 }
59771
59772 return decodeCodePointsArray(res)
59773 }
59774
59775 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
59776 // the lowest limit is Chrome, with 0x10000 args.
59777 // We go 1 magnitude less, for safety
59778 var MAX_ARGUMENTS_LENGTH = 0x1000
59779
59780 function decodeCodePointsArray (codePoints) {
59781 var len = codePoints.length
59782 if (len <= MAX_ARGUMENTS_LENGTH) {
59783 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
59784 }
59785
59786 // Decode in chunks to avoid "call stack size exceeded".
59787 var res = ''
59788 var i = 0
59789 while (i < len) {
59790 res += String.fromCharCode.apply(
59791 String,
59792 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
59793 )
59794 }
59795 return res
59796 }
59797
59798 function asciiSlice (buf, start, end) {
59799 var ret = ''
59800 end = Math.min(buf.length, end)
59801
59802 for (var i = start; i < end; ++i) {
59803 ret += String.fromCharCode(buf[i] & 0x7F)
59804 }
59805 return ret
59806 }
59807
59808 function latin1Slice (buf, start, end) {
59809 var ret = ''
59810 end = Math.min(buf.length, end)
59811
59812 for (var i = start; i < end; ++i) {
59813 ret += String.fromCharCode(buf[i])
59814 }
59815 return ret
59816 }
59817
59818 function hexSlice (buf, start, end) {
59819 var len = buf.length
59820
59821 if (!start || start < 0) start = 0
59822 if (!end || end < 0 || end > len) end = len
59823
59824 var out = ''
59825 for (var i = start; i < end; ++i) {
59826 out += toHex(buf[i])
59827 }
59828 return out
59829 }
59830
59831 function utf16leSlice (buf, start, end) {
59832 var bytes = buf.slice(start, end)
59833 var res = ''
59834 for (var i = 0; i < bytes.length; i += 2) {
59835 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
59836 }
59837 return res
59838 }
59839
59840 Buffer.prototype.slice = function slice (start, end) {
59841 var len = this.length
59842 start = ~~start
59843 end = end === undefined ? len : ~~end
59844
59845 if (start < 0) {
59846 start += len
59847 if (start < 0) start = 0
59848 } else if (start > len) {
59849 start = len
59850 }
59851
59852 if (end < 0) {
59853 end += len
59854 if (end < 0) end = 0
59855 } else if (end > len) {
59856 end = len
59857 }
59858
59859 if (end < start) end = start
59860
59861 var newBuf = this.subarray(start, end)
59862 // Return an augmented `Uint8Array` instance
59863 newBuf.__proto__ = Buffer.prototype
59864 return newBuf
59865 }
59866
59867 /*
59868 * Need to make sure that buffer isn't trying to write out of bounds.
59869 */
59870 function checkOffset (offset, ext, length) {
59871 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
59872 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
59873 }
59874
59875 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
59876 offset = offset >>> 0
59877 byteLength = byteLength >>> 0
59878 if (!noAssert) checkOffset(offset, byteLength, this.length)
59879
59880 var val = this[offset]
59881 var mul = 1
59882 var i = 0
59883 while (++i < byteLength && (mul *= 0x100)) {
59884 val += this[offset + i] * mul
59885 }
59886
59887 return val
59888 }
59889
59890 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
59891 offset = offset >>> 0
59892 byteLength = byteLength >>> 0
59893 if (!noAssert) {
59894 checkOffset(offset, byteLength, this.length)
59895 }
59896
59897 var val = this[offset + --byteLength]
59898 var mul = 1
59899 while (byteLength > 0 && (mul *= 0x100)) {
59900 val += this[offset + --byteLength] * mul
59901 }
59902
59903 return val
59904 }
59905
59906 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
59907 offset = offset >>> 0
59908 if (!noAssert) checkOffset(offset, 1, this.length)
59909 return this[offset]
59910 }
59911
59912 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
59913 offset = offset >>> 0
59914 if (!noAssert) checkOffset(offset, 2, this.length)
59915 return this[offset] | (this[offset + 1] << 8)
59916 }
59917
59918 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
59919 offset = offset >>> 0
59920 if (!noAssert) checkOffset(offset, 2, this.length)
59921 return (this[offset] << 8) | this[offset + 1]
59922 }
59923
59924 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
59925 offset = offset >>> 0
59926 if (!noAssert) checkOffset(offset, 4, this.length)
59927
59928 return ((this[offset]) |
59929 (this[offset + 1] << 8) |
59930 (this[offset + 2] << 16)) +
59931 (this[offset + 3] * 0x1000000)
59932 }
59933
59934 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
59935 offset = offset >>> 0
59936 if (!noAssert) checkOffset(offset, 4, this.length)
59937
59938 return (this[offset] * 0x1000000) +
59939 ((this[offset + 1] << 16) |
59940 (this[offset + 2] << 8) |
59941 this[offset + 3])
59942 }
59943
59944 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
59945 offset = offset >>> 0
59946 byteLength = byteLength >>> 0
59947 if (!noAssert) checkOffset(offset, byteLength, this.length)
59948
59949 var val = this[offset]
59950 var mul = 1
59951 var i = 0
59952 while (++i < byteLength && (mul *= 0x100)) {
59953 val += this[offset + i] * mul
59954 }
59955 mul *= 0x80
59956
59957 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59958
59959 return val
59960 }
59961
59962 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
59963 offset = offset >>> 0
59964 byteLength = byteLength >>> 0
59965 if (!noAssert) checkOffset(offset, byteLength, this.length)
59966
59967 var i = byteLength
59968 var mul = 1
59969 var val = this[offset + --i]
59970 while (i > 0 && (mul *= 0x100)) {
59971 val += this[offset + --i] * mul
59972 }
59973 mul *= 0x80
59974
59975 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59976
59977 return val
59978 }
59979
59980 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
59981 offset = offset >>> 0
59982 if (!noAssert) checkOffset(offset, 1, this.length)
59983 if (!(this[offset] & 0x80)) return (this[offset])
59984 return ((0xff - this[offset] + 1) * -1)
59985 }
59986
59987 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
59988 offset = offset >>> 0
59989 if (!noAssert) checkOffset(offset, 2, this.length)
59990 var val = this[offset] | (this[offset + 1] << 8)
59991 return (val & 0x8000) ? val | 0xFFFF0000 : val
59992 }
59993
59994 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
59995 offset = offset >>> 0
59996 if (!noAssert) checkOffset(offset, 2, this.length)
59997 var val = this[offset + 1] | (this[offset] << 8)
59998 return (val & 0x8000) ? val | 0xFFFF0000 : val
59999 }
60000
60001 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
60002 offset = offset >>> 0
60003 if (!noAssert) checkOffset(offset, 4, this.length)
60004
60005 return (this[offset]) |
60006 (this[offset + 1] << 8) |
60007 (this[offset + 2] << 16) |
60008 (this[offset + 3] << 24)
60009 }
60010
60011 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
60012 offset = offset >>> 0
60013 if (!noAssert) checkOffset(offset, 4, this.length)
60014
60015 return (this[offset] << 24) |
60016 (this[offset + 1] << 16) |
60017 (this[offset + 2] << 8) |
60018 (this[offset + 3])
60019 }
60020
60021 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
60022 offset = offset >>> 0
60023 if (!noAssert) checkOffset(offset, 4, this.length)
60024 return ieee754.read(this, offset, true, 23, 4)
60025 }
60026
60027 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
60028 offset = offset >>> 0
60029 if (!noAssert) checkOffset(offset, 4, this.length)
60030 return ieee754.read(this, offset, false, 23, 4)
60031 }
60032
60033 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
60034 offset = offset >>> 0
60035 if (!noAssert) checkOffset(offset, 8, this.length)
60036 return ieee754.read(this, offset, true, 52, 8)
60037 }
60038
60039 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
60040 offset = offset >>> 0
60041 if (!noAssert) checkOffset(offset, 8, this.length)
60042 return ieee754.read(this, offset, false, 52, 8)
60043 }
60044
60045 function checkInt (buf, value, offset, ext, max, min) {
60046 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
60047 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
60048 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60049 }
60050
60051 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
60052 value = +value
60053 offset = offset >>> 0
60054 byteLength = byteLength >>> 0
60055 if (!noAssert) {
60056 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60057 checkInt(this, value, offset, byteLength, maxBytes, 0)
60058 }
60059
60060 var mul = 1
60061 var i = 0
60062 this[offset] = value & 0xFF
60063 while (++i < byteLength && (mul *= 0x100)) {
60064 this[offset + i] = (value / mul) & 0xFF
60065 }
60066
60067 return offset + byteLength
60068 }
60069
60070 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
60071 value = +value
60072 offset = offset >>> 0
60073 byteLength = byteLength >>> 0
60074 if (!noAssert) {
60075 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60076 checkInt(this, value, offset, byteLength, maxBytes, 0)
60077 }
60078
60079 var i = byteLength - 1
60080 var mul = 1
60081 this[offset + i] = value & 0xFF
60082 while (--i >= 0 && (mul *= 0x100)) {
60083 this[offset + i] = (value / mul) & 0xFF
60084 }
60085
60086 return offset + byteLength
60087 }
60088
60089 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
60090 value = +value
60091 offset = offset >>> 0
60092 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
60093 this[offset] = (value & 0xff)
60094 return offset + 1
60095 }
60096
60097 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
60098 value = +value
60099 offset = offset >>> 0
60100 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60101 this[offset] = (value & 0xff)
60102 this[offset + 1] = (value >>> 8)
60103 return offset + 2
60104 }
60105
60106 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
60107 value = +value
60108 offset = offset >>> 0
60109 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60110 this[offset] = (value >>> 8)
60111 this[offset + 1] = (value & 0xff)
60112 return offset + 2
60113 }
60114
60115 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
60116 value = +value
60117 offset = offset >>> 0
60118 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60119 this[offset + 3] = (value >>> 24)
60120 this[offset + 2] = (value >>> 16)
60121 this[offset + 1] = (value >>> 8)
60122 this[offset] = (value & 0xff)
60123 return offset + 4
60124 }
60125
60126 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
60127 value = +value
60128 offset = offset >>> 0
60129 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60130 this[offset] = (value >>> 24)
60131 this[offset + 1] = (value >>> 16)
60132 this[offset + 2] = (value >>> 8)
60133 this[offset + 3] = (value & 0xff)
60134 return offset + 4
60135 }
60136
60137 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
60138 value = +value
60139 offset = offset >>> 0
60140 if (!noAssert) {
60141 var limit = Math.pow(2, (8 * byteLength) - 1)
60142
60143 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60144 }
60145
60146 var i = 0
60147 var mul = 1
60148 var sub = 0
60149 this[offset] = value & 0xFF
60150 while (++i < byteLength && (mul *= 0x100)) {
60151 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
60152 sub = 1
60153 }
60154 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60155 }
60156
60157 return offset + byteLength
60158 }
60159
60160 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
60161 value = +value
60162 offset = offset >>> 0
60163 if (!noAssert) {
60164 var limit = Math.pow(2, (8 * byteLength) - 1)
60165
60166 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60167 }
60168
60169 var i = byteLength - 1
60170 var mul = 1
60171 var sub = 0
60172 this[offset + i] = value & 0xFF
60173 while (--i >= 0 && (mul *= 0x100)) {
60174 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
60175 sub = 1
60176 }
60177 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60178 }
60179
60180 return offset + byteLength
60181 }
60182
60183 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
60184 value = +value
60185 offset = offset >>> 0
60186 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
60187 if (value < 0) value = 0xff + value + 1
60188 this[offset] = (value & 0xff)
60189 return offset + 1
60190 }
60191
60192 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
60193 value = +value
60194 offset = offset >>> 0
60195 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60196 this[offset] = (value & 0xff)
60197 this[offset + 1] = (value >>> 8)
60198 return offset + 2
60199 }
60200
60201 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
60202 value = +value
60203 offset = offset >>> 0
60204 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60205 this[offset] = (value >>> 8)
60206 this[offset + 1] = (value & 0xff)
60207 return offset + 2
60208 }
60209
60210 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
60211 value = +value
60212 offset = offset >>> 0
60213 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60214 this[offset] = (value & 0xff)
60215 this[offset + 1] = (value >>> 8)
60216 this[offset + 2] = (value >>> 16)
60217 this[offset + 3] = (value >>> 24)
60218 return offset + 4
60219 }
60220
60221 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
60222 value = +value
60223 offset = offset >>> 0
60224 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60225 if (value < 0) value = 0xffffffff + value + 1
60226 this[offset] = (value >>> 24)
60227 this[offset + 1] = (value >>> 16)
60228 this[offset + 2] = (value >>> 8)
60229 this[offset + 3] = (value & 0xff)
60230 return offset + 4
60231 }
60232
60233 function checkIEEE754 (buf, value, offset, ext, max, min) {
60234 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60235 if (offset < 0) throw new RangeError('Index out of range')
60236 }
60237
60238 function writeFloat (buf, value, offset, littleEndian, noAssert) {
60239 value = +value
60240 offset = offset >>> 0
60241 if (!noAssert) {
60242 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
60243 }
60244 ieee754.write(buf, value, offset, littleEndian, 23, 4)
60245 return offset + 4
60246 }
60247
60248 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
60249 return writeFloat(this, value, offset, true, noAssert)
60250 }
60251
60252 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
60253 return writeFloat(this, value, offset, false, noAssert)
60254 }
60255
60256 function writeDouble (buf, value, offset, littleEndian, noAssert) {
60257 value = +value
60258 offset = offset >>> 0
60259 if (!noAssert) {
60260 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
60261 }
60262 ieee754.write(buf, value, offset, littleEndian, 52, 8)
60263 return offset + 8
60264 }
60265
60266 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
60267 return writeDouble(this, value, offset, true, noAssert)
60268 }
60269
60270 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
60271 return writeDouble(this, value, offset, false, noAssert)
60272 }
60273
60274 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
60275 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
60276 if (!start) start = 0
60277 if (!end && end !== 0) end = this.length
60278 if (targetStart >= target.length) targetStart = target.length
60279 if (!targetStart) targetStart = 0
60280 if (end > 0 && end < start) end = start
60281
60282 // Copy 0 bytes; we're done
60283 if (end === start) return 0
60284 if (target.length === 0 || this.length === 0) return 0
60285
60286 // Fatal error conditions
60287 if (targetStart < 0) {
60288 throw new RangeError('targetStart out of bounds')
60289 }
60290 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
60291 if (end < 0) throw new RangeError('sourceEnd out of bounds')
60292
60293 // Are we oob?
60294 if (end > this.length) end = this.length
60295 if (target.length - targetStart < end - start) {
60296 end = target.length - targetStart + start
60297 }
60298
60299 var len = end - start
60300 var i
60301
60302 if (this === target && start < targetStart && targetStart < end) {
60303 // descending copy from end
60304 for (i = len - 1; i >= 0; --i) {
60305 target[i + targetStart] = this[i + start]
60306 }
60307 } else if (len < 1000) {
60308 // ascending copy from start
60309 for (i = 0; i < len; ++i) {
60310 target[i + targetStart] = this[i + start]
60311 }
60312 } else {
60313 Uint8Array.prototype.set.call(
60314 target,
60315 this.subarray(start, start + len),
60316 targetStart
60317 )
60318 }
60319
60320 return len
60321 }
60322
60323 // Usage:
60324 // buffer.fill(number[, offset[, end]])
60325 // buffer.fill(buffer[, offset[, end]])
60326 // buffer.fill(string[, offset[, end]][, encoding])
60327 Buffer.prototype.fill = function fill (val, start, end, encoding) {
60328 // Handle string cases:
60329 if (typeof val === 'string') {
60330 if (typeof start === 'string') {
60331 encoding = start
60332 start = 0
60333 end = this.length
60334 } else if (typeof end === 'string') {
60335 encoding = end
60336 end = this.length
60337 }
60338 if (val.length === 1) {
60339 var code = val.charCodeAt(0)
60340 if (code < 256) {
60341 val = code
60342 }
60343 }
60344 if (encoding !== undefined && typeof encoding !== 'string') {
60345 throw new TypeError('encoding must be a string')
60346 }
60347 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
60348 throw new TypeError('Unknown encoding: ' + encoding)
60349 }
60350 } else if (typeof val === 'number') {
60351 val = val & 255
60352 }
60353
60354 // Invalid ranges are not set to a default, so can range check early.
60355 if (start < 0 || this.length < start || this.length < end) {
60356 throw new RangeError('Out of range index')
60357 }
60358
60359 if (end <= start) {
60360 return this
60361 }
60362
60363 start = start >>> 0
60364 end = end === undefined ? this.length : end >>> 0
60365
60366 if (!val) val = 0
60367
60368 var i
60369 if (typeof val === 'number') {
60370 for (i = start; i < end; ++i) {
60371 this[i] = val
60372 }
60373 } else {
60374 var bytes = Buffer.isBuffer(val)
60375 ? val
60376 : new Buffer(val, encoding)
60377 var len = bytes.length
60378 for (i = 0; i < end - start; ++i) {
60379 this[i + start] = bytes[i % len]
60380 }
60381 }
60382
60383 return this
60384 }
60385
60386 // HELPER FUNCTIONS
60387 // ================
60388
60389 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
60390
60391 function base64clean (str) {
60392 // Node strips out invalid characters like \n and \t from the string, base64-js does not
60393 str = str.trim().replace(INVALID_BASE64_RE, '')
60394 // Node converts strings with length < 2 to ''
60395 if (str.length < 2) return ''
60396 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
60397 while (str.length % 4 !== 0) {
60398 str = str + '='
60399 }
60400 return str
60401 }
60402
60403 function toHex (n) {
60404 if (n < 16) return '0' + n.toString(16)
60405 return n.toString(16)
60406 }
60407
60408 function utf8ToBytes (string, units) {
60409 units = units || Infinity
60410 var codePoint
60411 var length = string.length
60412 var leadSurrogate = null
60413 var bytes = []
60414
60415 for (var i = 0; i < length; ++i) {
60416 codePoint = string.charCodeAt(i)
60417
60418 // is surrogate component
60419 if (codePoint > 0xD7FF && codePoint < 0xE000) {
60420 // last char was a lead
60421 if (!leadSurrogate) {
60422 // no lead yet
60423 if (codePoint > 0xDBFF) {
60424 // unexpected trail
60425 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60426 continue
60427 } else if (i + 1 === length) {
60428 // unpaired lead
60429 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60430 continue
60431 }
60432
60433 // valid lead
60434 leadSurrogate = codePoint
60435
60436 continue
60437 }
60438
60439 // 2 leads in a row
60440 if (codePoint < 0xDC00) {
60441 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60442 leadSurrogate = codePoint
60443 continue
60444 }
60445
60446 // valid surrogate pair
60447 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
60448 } else if (leadSurrogate) {
60449 // valid bmp char, but last char was a lead
60450 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60451 }
60452
60453 leadSurrogate = null
60454
60455 // encode utf8
60456 if (codePoint < 0x80) {
60457 if ((units -= 1) < 0) break
60458 bytes.push(codePoint)
60459 } else if (codePoint < 0x800) {
60460 if ((units -= 2) < 0) break
60461 bytes.push(
60462 codePoint >> 0x6 | 0xC0,
60463 codePoint & 0x3F | 0x80
60464 )
60465 } else if (codePoint < 0x10000) {
60466 if ((units -= 3) < 0) break
60467 bytes.push(
60468 codePoint >> 0xC | 0xE0,
60469 codePoint >> 0x6 & 0x3F | 0x80,
60470 codePoint & 0x3F | 0x80
60471 )
60472 } else if (codePoint < 0x110000) {
60473 if ((units -= 4) < 0) break
60474 bytes.push(
60475 codePoint >> 0x12 | 0xF0,
60476 codePoint >> 0xC & 0x3F | 0x80,
60477 codePoint >> 0x6 & 0x3F | 0x80,
60478 codePoint & 0x3F | 0x80
60479 )
60480 } else {
60481 throw new Error('Invalid code point')
60482 }
60483 }
60484
60485 return bytes
60486 }
60487
60488 function asciiToBytes (str) {
60489 var byteArray = []
60490 for (var i = 0; i < str.length; ++i) {
60491 // Node's code seems to be doing this and not & 0x7F..
60492 byteArray.push(str.charCodeAt(i) & 0xFF)
60493 }
60494 return byteArray
60495 }
60496
60497 function utf16leToBytes (str, units) {
60498 var c, hi, lo
60499 var byteArray = []
60500 for (var i = 0; i < str.length; ++i) {
60501 if ((units -= 2) < 0) break
60502
60503 c = str.charCodeAt(i)
60504 hi = c >> 8
60505 lo = c % 256
60506 byteArray.push(lo)
60507 byteArray.push(hi)
60508 }
60509
60510 return byteArray
60511 }
60512
60513 function base64ToBytes (str) {
60514 return base64.toByteArray(base64clean(str))
60515 }
60516
60517 function blitBuffer (src, dst, offset, length) {
60518 for (var i = 0; i < length; ++i) {
60519 if ((i + offset >= dst.length) || (i >= src.length)) break
60520 dst[i + offset] = src[i]
60521 }
60522 return i
60523 }
60524
60525 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
60526 function isArrayBufferView (obj) {
60527 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
60528 }
60529
60530 function numberIsNaN (obj) {
60531 return obj !== obj // eslint-disable-line no-self-compare
60532 }
60533
60534 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
60535 (function (Buffer){
60536 var Transform = require('stream').Transform
60537 var inherits = require('inherits')
60538 var StringDecoder = require('string_decoder').StringDecoder
60539 module.exports = CipherBase
60540 inherits(CipherBase, Transform)
60541 function CipherBase (hashMode) {
60542 Transform.call(this)
60543 this.hashMode = typeof hashMode === 'string'
60544 if (this.hashMode) {
60545 this[hashMode] = this._finalOrDigest
60546 } else {
60547 this.final = this._finalOrDigest
60548 }
60549 this._decoder = null
60550 this._encoding = null
60551 }
60552 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
60553 if (typeof data === 'string') {
60554 data = new Buffer(data, inputEnc)
60555 }
60556 var outData = this._update(data)
60557 if (this.hashMode) {
60558 return this
60559 }
60560 if (outputEnc) {
60561 outData = this._toString(outData, outputEnc)
60562 }
60563 return outData
60564 }
60565
60566 CipherBase.prototype.setAutoPadding = function () {}
60567
60568 CipherBase.prototype.getAuthTag = function () {
60569 throw new Error('trying to get auth tag in unsupported state')
60570 }
60571
60572 CipherBase.prototype.setAuthTag = function () {
60573 throw new Error('trying to set auth tag in unsupported state')
60574 }
60575
60576 CipherBase.prototype.setAAD = function () {
60577 throw new Error('trying to set aad in unsupported state')
60578 }
60579
60580 CipherBase.prototype._transform = function (data, _, next) {
60581 var err
60582 try {
60583 if (this.hashMode) {
60584 this._update(data)
60585 } else {
60586 this.push(this._update(data))
60587 }
60588 } catch (e) {
60589 err = e
60590 } finally {
60591 next(err)
60592 }
60593 }
60594 CipherBase.prototype._flush = function (done) {
60595 var err
60596 try {
60597 this.push(this._final())
60598 } catch (e) {
60599 err = e
60600 } finally {
60601 done(err)
60602 }
60603 }
60604 CipherBase.prototype._finalOrDigest = function (outputEnc) {
60605 var outData = this._final() || new Buffer('')
60606 if (outputEnc) {
60607 outData = this._toString(outData, outputEnc, true)
60608 }
60609 return outData
60610 }
60611
60612 CipherBase.prototype._toString = function (value, enc, fin) {
60613 if (!this._decoder) {
60614 this._decoder = new StringDecoder(enc)
60615 this._encoding = enc
60616 }
60617 if (this._encoding !== enc) {
60618 throw new Error('can\'t switch encodings')
60619 }
60620 var out = this._decoder.write(value)
60621 if (fin) {
60622 out += this._decoder.end()
60623 }
60624 return out
60625 }
60626
60627 }).call(this,require("buffer").Buffer)
60628 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
60629 (function (Buffer){
60630 // Copyright Joyent, Inc. and other Node contributors.
60631 //
60632 // Permission is hereby granted, free of charge, to any person obtaining a
60633 // copy of this software and associated documentation files (the
60634 // "Software"), to deal in the Software without restriction, including
60635 // without limitation the rights to use, copy, modify, merge, publish,
60636 // distribute, sublicense, and/or sell copies of the Software, and to permit
60637 // persons to whom the Software is furnished to do so, subject to the
60638 // following conditions:
60639 //
60640 // The above copyright notice and this permission notice shall be included
60641 // in all copies or substantial portions of the Software.
60642 //
60643 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
60644 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60645 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
60646 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
60647 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
60648 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
60649 // USE OR OTHER DEALINGS IN THE SOFTWARE.
60650
60651 // NOTE: These type checking functions intentionally don't use `instanceof`
60652 // because it is fragile and can be easily faked with `Object.create()`.
60653
60654 function isArray(arg) {
60655 if (Array.isArray) {
60656 return Array.isArray(arg);
60657 }
60658 return objectToString(arg) === '[object Array]';
60659 }
60660 exports.isArray = isArray;
60661
60662 function isBoolean(arg) {
60663 return typeof arg === 'boolean';
60664 }
60665 exports.isBoolean = isBoolean;
60666
60667 function isNull(arg) {
60668 return arg === null;
60669 }
60670 exports.isNull = isNull;
60671
60672 function isNullOrUndefined(arg) {
60673 return arg == null;
60674 }
60675 exports.isNullOrUndefined = isNullOrUndefined;
60676
60677 function isNumber(arg) {
60678 return typeof arg === 'number';
60679 }
60680 exports.isNumber = isNumber;
60681
60682 function isString(arg) {
60683 return typeof arg === 'string';
60684 }
60685 exports.isString = isString;
60686
60687 function isSymbol(arg) {
60688 return typeof arg === 'symbol';
60689 }
60690 exports.isSymbol = isSymbol;
60691
60692 function isUndefined(arg) {
60693 return arg === void 0;
60694 }
60695 exports.isUndefined = isUndefined;
60696
60697 function isRegExp(re) {
60698 return objectToString(re) === '[object RegExp]';
60699 }
60700 exports.isRegExp = isRegExp;
60701
60702 function isObject(arg) {
60703 return typeof arg === 'object' && arg !== null;
60704 }
60705 exports.isObject = isObject;
60706
60707 function isDate(d) {
60708 return objectToString(d) === '[object Date]';
60709 }
60710 exports.isDate = isDate;
60711
60712 function isError(e) {
60713 return (objectToString(e) === '[object Error]' || e instanceof Error);
60714 }
60715 exports.isError = isError;
60716
60717 function isFunction(arg) {
60718 return typeof arg === 'function';
60719 }
60720 exports.isFunction = isFunction;
60721
60722 function isPrimitive(arg) {
60723 return arg === null ||
60724 typeof arg === 'boolean' ||
60725 typeof arg === 'number' ||
60726 typeof arg === 'string' ||
60727 typeof arg === 'symbol' || // ES6 symbol
60728 typeof arg === 'undefined';
60729 }
60730 exports.isPrimitive = isPrimitive;
60731
60732 exports.isBuffer = Buffer.isBuffer;
60733
60734 function objectToString(o) {
60735 return Object.prototype.toString.call(o);
60736 }
60737
60738 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
60739 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
60740 (function (Buffer){
60741 var elliptic = require('elliptic');
60742 var BN = require('bn.js');
60743
60744 module.exports = function createECDH(curve) {
60745 return new ECDH(curve);
60746 };
60747
60748 var aliases = {
60749 secp256k1: {
60750 name: 'secp256k1',
60751 byteLength: 32
60752 },
60753 secp224r1: {
60754 name: 'p224',
60755 byteLength: 28
60756 },
60757 prime256v1: {
60758 name: 'p256',
60759 byteLength: 32
60760 },
60761 prime192v1: {
60762 name: 'p192',
60763 byteLength: 24
60764 },
60765 ed25519: {
60766 name: 'ed25519',
60767 byteLength: 32
60768 },
60769 secp384r1: {
60770 name: 'p384',
60771 byteLength: 48
60772 },
60773 secp521r1: {
60774 name: 'p521',
60775 byteLength: 66
60776 }
60777 };
60778
60779 aliases.p224 = aliases.secp224r1;
60780 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
60781 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
60782 aliases.p384 = aliases.secp384r1;
60783 aliases.p521 = aliases.secp521r1;
60784
60785 function ECDH(curve) {
60786 this.curveType = aliases[curve];
60787 if (!this.curveType ) {
60788 this.curveType = {
60789 name: curve
60790 };
60791 }
60792 this.curve = new elliptic.ec(this.curveType.name);
60793 this.keys = void 0;
60794 }
60795
60796 ECDH.prototype.generateKeys = function (enc, format) {
60797 this.keys = this.curve.genKeyPair();
60798 return this.getPublicKey(enc, format);
60799 };
60800
60801 ECDH.prototype.computeSecret = function (other, inenc, enc) {
60802 inenc = inenc || 'utf8';
60803 if (!Buffer.isBuffer(other)) {
60804 other = new Buffer(other, inenc);
60805 }
60806 var otherPub = this.curve.keyFromPublic(other).getPublic();
60807 var out = otherPub.mul(this.keys.getPrivate()).getX();
60808 return formatReturnValue(out, enc, this.curveType.byteLength);
60809 };
60810
60811 ECDH.prototype.getPublicKey = function (enc, format) {
60812 var key = this.keys.getPublic(format === 'compressed', true);
60813 if (format === 'hybrid') {
60814 if (key[key.length - 1] % 2) {
60815 key[0] = 7;
60816 } else {
60817 key [0] = 6;
60818 }
60819 }
60820 return formatReturnValue(key, enc);
60821 };
60822
60823 ECDH.prototype.getPrivateKey = function (enc) {
60824 return formatReturnValue(this.keys.getPrivate(), enc);
60825 };
60826
60827 ECDH.prototype.setPublicKey = function (pub, enc) {
60828 enc = enc || 'utf8';
60829 if (!Buffer.isBuffer(pub)) {
60830 pub = new Buffer(pub, enc);
60831 }
60832 this.keys._importPublic(pub);
60833 return this;
60834 };
60835
60836 ECDH.prototype.setPrivateKey = function (priv, enc) {
60837 enc = enc || 'utf8';
60838 if (!Buffer.isBuffer(priv)) {
60839 priv = new Buffer(priv, enc);
60840 }
60841 var _priv = new BN(priv);
60842 _priv = _priv.toString(16);
60843 this.keys._importPrivate(_priv);
60844 return this;
60845 };
60846
60847 function formatReturnValue(bn, enc, len) {
60848 if (!Array.isArray(bn)) {
60849 bn = bn.toArray();
60850 }
60851 var buf = new Buffer(bn);
60852 if (len && buf.length < len) {
60853 var zeros = new Buffer(len - buf.length);
60854 zeros.fill(0);
60855 buf = Buffer.concat([zeros, buf]);
60856 }
60857 if (!enc) {
60858 return buf;
60859 } else {
60860 return buf.toString(enc);
60861 }
60862 }
60863
60864 }).call(this,require("buffer").Buffer)
60865 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
60866 (function (Buffer){
60867 'use strict'
60868 var inherits = require('inherits')
60869 var md5 = require('./md5')
60870 var RIPEMD160 = require('ripemd160')
60871 var sha = require('sha.js')
60872
60873 var Base = require('cipher-base')
60874
60875 function HashNoConstructor (hash) {
60876 Base.call(this, 'digest')
60877
60878 this._hash = hash
60879 this.buffers = []
60880 }
60881
60882 inherits(HashNoConstructor, Base)
60883
60884 HashNoConstructor.prototype._update = function (data) {
60885 this.buffers.push(data)
60886 }
60887
60888 HashNoConstructor.prototype._final = function () {
60889 var buf = Buffer.concat(this.buffers)
60890 var r = this._hash(buf)
60891 this.buffers = null
60892
60893 return r
60894 }
60895
60896 function Hash (hash) {
60897 Base.call(this, 'digest')
60898
60899 this._hash = hash
60900 }
60901
60902 inherits(Hash, Base)
60903
60904 Hash.prototype._update = function (data) {
60905 this._hash.update(data)
60906 }
60907
60908 Hash.prototype._final = function () {
60909 return this._hash.digest()
60910 }
60911
60912 module.exports = function createHash (alg) {
60913 alg = alg.toLowerCase()
60914 if (alg === 'md5') return new HashNoConstructor(md5)
60915 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
60916
60917 return new Hash(sha(alg))
60918 }
60919
60920 }).call(this,require("buffer").Buffer)
60921 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
60922 (function (Buffer){
60923 'use strict'
60924 var intSize = 4
60925 var zeroBuffer = new Buffer(intSize)
60926 zeroBuffer.fill(0)
60927
60928 var charSize = 8
60929 var hashSize = 16
60930
60931 function toArray (buf) {
60932 if ((buf.length % intSize) !== 0) {
60933 var len = buf.length + (intSize - (buf.length % intSize))
60934 buf = Buffer.concat([buf, zeroBuffer], len)
60935 }
60936
60937 var arr = new Array(buf.length >>> 2)
60938 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
60939 arr[j] = buf.readInt32LE(i)
60940 }
60941
60942 return arr
60943 }
60944
60945 module.exports = function hash (buf, fn) {
60946 var arr = fn(toArray(buf), buf.length * charSize)
60947 buf = new Buffer(hashSize)
60948 for (var i = 0; i < arr.length; i++) {
60949 buf.writeInt32LE(arr[i], i << 2, true)
60950 }
60951 return buf
60952 }
60953
60954 }).call(this,require("buffer").Buffer)
60955 },{"buffer":47}],53:[function(require,module,exports){
60956 'use strict'
60957 /*
60958 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
60959 * Digest Algorithm, as defined in RFC 1321.
60960 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
60961 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
60962 * Distributed under the BSD License
60963 * See http://pajhome.org.uk/crypt/md5 for more info.
60964 */
60965
60966 var makeHash = require('./make-hash')
60967
60968 /*
60969 * Calculate the MD5 of an array of little-endian words, and a bit length
60970 */
60971 function core_md5 (x, len) {
60972 /* append padding */
60973 x[len >> 5] |= 0x80 << ((len) % 32)
60974 x[(((len + 64) >>> 9) << 4) + 14] = len
60975
60976 var a = 1732584193
60977 var b = -271733879
60978 var c = -1732584194
60979 var d = 271733878
60980
60981 for (var i = 0; i < x.length; i += 16) {
60982 var olda = a
60983 var oldb = b
60984 var oldc = c
60985 var oldd = d
60986
60987 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
60988 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
60989 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
60990 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
60991 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
60992 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
60993 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
60994 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
60995 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
60996 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
60997 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
60998 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
60999 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
61000 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
61001 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
61002 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
61003
61004 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
61005 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
61006 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
61007 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
61008 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
61009 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
61010 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
61011 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
61012 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
61013 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
61014 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
61015 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
61016 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
61017 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
61018 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
61019 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
61020
61021 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
61022 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
61023 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
61024 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
61025 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
61026 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
61027 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
61028 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
61029 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
61030 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
61031 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
61032 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
61033 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
61034 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
61035 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
61036 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
61037
61038 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
61039 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
61040 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
61041 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
61042 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
61043 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
61044 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
61045 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
61046 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
61047 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
61048 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
61049 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
61050 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
61051 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
61052 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
61053 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
61054
61055 a = safe_add(a, olda)
61056 b = safe_add(b, oldb)
61057 c = safe_add(c, oldc)
61058 d = safe_add(d, oldd)
61059 }
61060
61061 return [a, b, c, d]
61062 }
61063
61064 /*
61065 * These functions implement the four basic operations the algorithm uses.
61066 */
61067 function md5_cmn (q, a, b, x, s, t) {
61068 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
61069 }
61070
61071 function md5_ff (a, b, c, d, x, s, t) {
61072 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
61073 }
61074
61075 function md5_gg (a, b, c, d, x, s, t) {
61076 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
61077 }
61078
61079 function md5_hh (a, b, c, d, x, s, t) {
61080 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
61081 }
61082
61083 function md5_ii (a, b, c, d, x, s, t) {
61084 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
61085 }
61086
61087 /*
61088 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
61089 * to work around bugs in some JS interpreters.
61090 */
61091 function safe_add (x, y) {
61092 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
61093 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
61094 return (msw << 16) | (lsw & 0xFFFF)
61095 }
61096
61097 /*
61098 * Bitwise rotate a 32-bit number to the left.
61099 */
61100 function bit_rol (num, cnt) {
61101 return (num << cnt) | (num >>> (32 - cnt))
61102 }
61103
61104 module.exports = function md5 (buf) {
61105 return makeHash(buf, core_md5)
61106 }
61107
61108 },{"./make-hash":52}],54:[function(require,module,exports){
61109 'use strict'
61110 var inherits = require('inherits')
61111 var Legacy = require('./legacy')
61112 var Base = require('cipher-base')
61113 var Buffer = require('safe-buffer').Buffer
61114 var md5 = require('create-hash/md5')
61115 var RIPEMD160 = require('ripemd160')
61116
61117 var sha = require('sha.js')
61118
61119 var ZEROS = Buffer.alloc(128)
61120
61121 function Hmac (alg, key) {
61122 Base.call(this, 'digest')
61123 if (typeof key === 'string') {
61124 key = Buffer.from(key)
61125 }
61126
61127 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
61128
61129 this._alg = alg
61130 this._key = key
61131 if (key.length > blocksize) {
61132 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61133 key = hash.update(key).digest()
61134 } else if (key.length < blocksize) {
61135 key = Buffer.concat([key, ZEROS], blocksize)
61136 }
61137
61138 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61139 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61140
61141 for (var i = 0; i < blocksize; i++) {
61142 ipad[i] = key[i] ^ 0x36
61143 opad[i] = key[i] ^ 0x5C
61144 }
61145 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61146 this._hash.update(ipad)
61147 }
61148
61149 inherits(Hmac, Base)
61150
61151 Hmac.prototype._update = function (data) {
61152 this._hash.update(data)
61153 }
61154
61155 Hmac.prototype._final = function () {
61156 var h = this._hash.digest()
61157 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
61158 return hash.update(this._opad).update(h).digest()
61159 }
61160
61161 module.exports = function createHmac (alg, key) {
61162 alg = alg.toLowerCase()
61163 if (alg === 'rmd160' || alg === 'ripemd160') {
61164 return new Hmac('rmd160', key)
61165 }
61166 if (alg === 'md5') {
61167 return new Legacy(md5, key)
61168 }
61169 return new Hmac(alg, key)
61170 }
61171
61172 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
61173 'use strict'
61174 var inherits = require('inherits')
61175 var Buffer = require('safe-buffer').Buffer
61176
61177 var Base = require('cipher-base')
61178
61179 var ZEROS = Buffer.alloc(128)
61180 var blocksize = 64
61181
61182 function Hmac (alg, key) {
61183 Base.call(this, 'digest')
61184 if (typeof key === 'string') {
61185 key = Buffer.from(key)
61186 }
61187
61188 this._alg = alg
61189 this._key = key
61190
61191 if (key.length > blocksize) {
61192 key = alg(key)
61193 } else if (key.length < blocksize) {
61194 key = Buffer.concat([key, ZEROS], blocksize)
61195 }
61196
61197 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61198 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61199
61200 for (var i = 0; i < blocksize; i++) {
61201 ipad[i] = key[i] ^ 0x36
61202 opad[i] = key[i] ^ 0x5C
61203 }
61204
61205 this._hash = [ipad]
61206 }
61207
61208 inherits(Hmac, Base)
61209
61210 Hmac.prototype._update = function (data) {
61211 this._hash.push(data)
61212 }
61213
61214 Hmac.prototype._final = function () {
61215 var h = this._alg(Buffer.concat(this._hash))
61216 return this._alg(Buffer.concat([this._opad, h]))
61217 }
61218 module.exports = Hmac
61219
61220 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
61221 'use strict'
61222
61223 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
61224 exports.createHash = exports.Hash = require('create-hash')
61225 exports.createHmac = exports.Hmac = require('create-hmac')
61226
61227 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
61228 exports.getHashes = function () {
61229 return hashes
61230 }
61231
61232 var p = require('pbkdf2')
61233 exports.pbkdf2 = p.pbkdf2
61234 exports.pbkdf2Sync = p.pbkdf2Sync
61235
61236 var aes = require('browserify-cipher')
61237 ;[
61238 'Cipher',
61239 'createCipher',
61240 'Cipheriv',
61241 'createCipheriv',
61242 'Decipher',
61243 'createDecipher',
61244 'Decipheriv',
61245 'createDecipheriv',
61246 'getCiphers',
61247 'listCiphers'
61248 ].forEach(function (key) {
61249 exports[key] = aes[key]
61250 })
61251
61252 var dh = require('diffie-hellman')
61253 ;[
61254 'DiffieHellmanGroup',
61255 'createDiffieHellmanGroup',
61256 'getDiffieHellman',
61257 'createDiffieHellman',
61258 'DiffieHellman'
61259 ].forEach(function (key) {
61260 exports[key] = dh[key]
61261 })
61262
61263 var sign = require('browserify-sign')
61264 ;[
61265 'createSign',
61266 'Sign',
61267 'createVerify',
61268 'Verify'
61269 ].forEach(function (key) {
61270 exports[key] = sign[key]
61271 })
61272
61273 exports.createECDH = require('create-ecdh')
61274
61275 var publicEncrypt = require('public-encrypt')
61276
61277 ;[
61278 'publicEncrypt',
61279 'privateEncrypt',
61280 'publicDecrypt',
61281 'privateDecrypt'
61282 ].forEach(function (key) {
61283 exports[key] = publicEncrypt[key]
61284 })
61285
61286 // the least I can do is make error messages for the rest of the node.js/crypto api.
61287 ;[
61288 'createCredentials'
61289 ].forEach(function (name) {
61290 exports[name] = function () {
61291 throw new Error([
61292 'sorry, ' + name + ' is not implemented yet',
61293 'we accept pull requests',
61294 'https://github.com/crypto-browserify/crypto-browserify'
61295 ].join('\n'))
61296 }
61297 })
61298
61299 },{"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){
61300 'use strict';
61301
61302 exports.utils = require('./des/utils');
61303 exports.Cipher = require('./des/cipher');
61304 exports.DES = require('./des/des');
61305 exports.CBC = require('./des/cbc');
61306 exports.EDE = require('./des/ede');
61307
61308 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
61309 'use strict';
61310
61311 var assert = require('minimalistic-assert');
61312 var inherits = require('inherits');
61313
61314 var proto = {};
61315
61316 function CBCState(iv) {
61317 assert.equal(iv.length, 8, 'Invalid IV length');
61318
61319 this.iv = new Array(8);
61320 for (var i = 0; i < this.iv.length; i++)
61321 this.iv[i] = iv[i];
61322 }
61323
61324 function instantiate(Base) {
61325 function CBC(options) {
61326 Base.call(this, options);
61327 this._cbcInit();
61328 }
61329 inherits(CBC, Base);
61330
61331 var keys = Object.keys(proto);
61332 for (var i = 0; i < keys.length; i++) {
61333 var key = keys[i];
61334 CBC.prototype[key] = proto[key];
61335 }
61336
61337 CBC.create = function create(options) {
61338 return new CBC(options);
61339 };
61340
61341 return CBC;
61342 }
61343
61344 exports.instantiate = instantiate;
61345
61346 proto._cbcInit = function _cbcInit() {
61347 var state = new CBCState(this.options.iv);
61348 this._cbcState = state;
61349 };
61350
61351 proto._update = function _update(inp, inOff, out, outOff) {
61352 var state = this._cbcState;
61353 var superProto = this.constructor.super_.prototype;
61354
61355 var iv = state.iv;
61356 if (this.type === 'encrypt') {
61357 for (var i = 0; i < this.blockSize; i++)
61358 iv[i] ^= inp[inOff + i];
61359
61360 superProto._update.call(this, iv, 0, out, outOff);
61361
61362 for (var i = 0; i < this.blockSize; i++)
61363 iv[i] = out[outOff + i];
61364 } else {
61365 superProto._update.call(this, inp, inOff, out, outOff);
61366
61367 for (var i = 0; i < this.blockSize; i++)
61368 out[outOff + i] ^= iv[i];
61369
61370 for (var i = 0; i < this.blockSize; i++)
61371 iv[i] = inp[inOff + i];
61372 }
61373 };
61374
61375 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
61376 'use strict';
61377
61378 var assert = require('minimalistic-assert');
61379
61380 function Cipher(options) {
61381 this.options = options;
61382
61383 this.type = this.options.type;
61384 this.blockSize = 8;
61385 this._init();
61386
61387 this.buffer = new Array(this.blockSize);
61388 this.bufferOff = 0;
61389 }
61390 module.exports = Cipher;
61391
61392 Cipher.prototype._init = function _init() {
61393 // Might be overrided
61394 };
61395
61396 Cipher.prototype.update = function update(data) {
61397 if (data.length === 0)
61398 return [];
61399
61400 if (this.type === 'decrypt')
61401 return this._updateDecrypt(data);
61402 else
61403 return this._updateEncrypt(data);
61404 };
61405
61406 Cipher.prototype._buffer = function _buffer(data, off) {
61407 // Append data to buffer
61408 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
61409 for (var i = 0; i < min; i++)
61410 this.buffer[this.bufferOff + i] = data[off + i];
61411 this.bufferOff += min;
61412
61413 // Shift next
61414 return min;
61415 };
61416
61417 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
61418 this._update(this.buffer, 0, out, off);
61419 this.bufferOff = 0;
61420 return this.blockSize;
61421 };
61422
61423 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
61424 var inputOff = 0;
61425 var outputOff = 0;
61426
61427 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
61428 var out = new Array(count * this.blockSize);
61429
61430 if (this.bufferOff !== 0) {
61431 inputOff += this._buffer(data, inputOff);
61432
61433 if (this.bufferOff === this.buffer.length)
61434 outputOff += this._flushBuffer(out, outputOff);
61435 }
61436
61437 // Write blocks
61438 var max = data.length - ((data.length - inputOff) % this.blockSize);
61439 for (; inputOff < max; inputOff += this.blockSize) {
61440 this._update(data, inputOff, out, outputOff);
61441 outputOff += this.blockSize;
61442 }
61443
61444 // Queue rest
61445 for (; inputOff < data.length; inputOff++, this.bufferOff++)
61446 this.buffer[this.bufferOff] = data[inputOff];
61447
61448 return out;
61449 };
61450
61451 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
61452 var inputOff = 0;
61453 var outputOff = 0;
61454
61455 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
61456 var out = new Array(count * this.blockSize);
61457
61458 // TODO(indutny): optimize it, this is far from optimal
61459 for (; count > 0; count--) {
61460 inputOff += this._buffer(data, inputOff);
61461 outputOff += this._flushBuffer(out, outputOff);
61462 }
61463
61464 // Buffer rest of the input
61465 inputOff += this._buffer(data, inputOff);
61466
61467 return out;
61468 };
61469
61470 Cipher.prototype.final = function final(buffer) {
61471 var first;
61472 if (buffer)
61473 first = this.update(buffer);
61474
61475 var last;
61476 if (this.type === 'encrypt')
61477 last = this._finalEncrypt();
61478 else
61479 last = this._finalDecrypt();
61480
61481 if (first)
61482 return first.concat(last);
61483 else
61484 return last;
61485 };
61486
61487 Cipher.prototype._pad = function _pad(buffer, off) {
61488 if (off === 0)
61489 return false;
61490
61491 while (off < buffer.length)
61492 buffer[off++] = 0;
61493
61494 return true;
61495 };
61496
61497 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
61498 if (!this._pad(this.buffer, this.bufferOff))
61499 return [];
61500
61501 var out = new Array(this.blockSize);
61502 this._update(this.buffer, 0, out, 0);
61503 return out;
61504 };
61505
61506 Cipher.prototype._unpad = function _unpad(buffer) {
61507 return buffer;
61508 };
61509
61510 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
61511 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
61512 var out = new Array(this.blockSize);
61513 this._flushBuffer(out, 0);
61514
61515 return this._unpad(out);
61516 };
61517
61518 },{"minimalistic-assert":99}],60:[function(require,module,exports){
61519 'use strict';
61520
61521 var assert = require('minimalistic-assert');
61522 var inherits = require('inherits');
61523
61524 var des = require('../des');
61525 var utils = des.utils;
61526 var Cipher = des.Cipher;
61527
61528 function DESState() {
61529 this.tmp = new Array(2);
61530 this.keys = null;
61531 }
61532
61533 function DES(options) {
61534 Cipher.call(this, options);
61535
61536 var state = new DESState();
61537 this._desState = state;
61538
61539 this.deriveKeys(state, options.key);
61540 }
61541 inherits(DES, Cipher);
61542 module.exports = DES;
61543
61544 DES.create = function create(options) {
61545 return new DES(options);
61546 };
61547
61548 var shiftTable = [
61549 1, 1, 2, 2, 2, 2, 2, 2,
61550 1, 2, 2, 2, 2, 2, 2, 1
61551 ];
61552
61553 DES.prototype.deriveKeys = function deriveKeys(state, key) {
61554 state.keys = new Array(16 * 2);
61555
61556 assert.equal(key.length, this.blockSize, 'Invalid key length');
61557
61558 var kL = utils.readUInt32BE(key, 0);
61559 var kR = utils.readUInt32BE(key, 4);
61560
61561 utils.pc1(kL, kR, state.tmp, 0);
61562 kL = state.tmp[0];
61563 kR = state.tmp[1];
61564 for (var i = 0; i < state.keys.length; i += 2) {
61565 var shift = shiftTable[i >>> 1];
61566 kL = utils.r28shl(kL, shift);
61567 kR = utils.r28shl(kR, shift);
61568 utils.pc2(kL, kR, state.keys, i);
61569 }
61570 };
61571
61572 DES.prototype._update = function _update(inp, inOff, out, outOff) {
61573 var state = this._desState;
61574
61575 var l = utils.readUInt32BE(inp, inOff);
61576 var r = utils.readUInt32BE(inp, inOff + 4);
61577
61578 // Initial Permutation
61579 utils.ip(l, r, state.tmp, 0);
61580 l = state.tmp[0];
61581 r = state.tmp[1];
61582
61583 if (this.type === 'encrypt')
61584 this._encrypt(state, l, r, state.tmp, 0);
61585 else
61586 this._decrypt(state, l, r, state.tmp, 0);
61587
61588 l = state.tmp[0];
61589 r = state.tmp[1];
61590
61591 utils.writeUInt32BE(out, l, outOff);
61592 utils.writeUInt32BE(out, r, outOff + 4);
61593 };
61594
61595 DES.prototype._pad = function _pad(buffer, off) {
61596 var value = buffer.length - off;
61597 for (var i = off; i < buffer.length; i++)
61598 buffer[i] = value;
61599
61600 return true;
61601 };
61602
61603 DES.prototype._unpad = function _unpad(buffer) {
61604 var pad = buffer[buffer.length - 1];
61605 for (var i = buffer.length - pad; i < buffer.length; i++)
61606 assert.equal(buffer[i], pad);
61607
61608 return buffer.slice(0, buffer.length - pad);
61609 };
61610
61611 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
61612 var l = lStart;
61613 var r = rStart;
61614
61615 // Apply f() x16 times
61616 for (var i = 0; i < state.keys.length; i += 2) {
61617 var keyL = state.keys[i];
61618 var keyR = state.keys[i + 1];
61619
61620 // f(r, k)
61621 utils.expand(r, state.tmp, 0);
61622
61623 keyL ^= state.tmp[0];
61624 keyR ^= state.tmp[1];
61625 var s = utils.substitute(keyL, keyR);
61626 var f = utils.permute(s);
61627
61628 var t = r;
61629 r = (l ^ f) >>> 0;
61630 l = t;
61631 }
61632
61633 // Reverse Initial Permutation
61634 utils.rip(r, l, out, off);
61635 };
61636
61637 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
61638 var l = rStart;
61639 var r = lStart;
61640
61641 // Apply f() x16 times
61642 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
61643 var keyL = state.keys[i];
61644 var keyR = state.keys[i + 1];
61645
61646 // f(r, k)
61647 utils.expand(l, state.tmp, 0);
61648
61649 keyL ^= state.tmp[0];
61650 keyR ^= state.tmp[1];
61651 var s = utils.substitute(keyL, keyR);
61652 var f = utils.permute(s);
61653
61654 var t = l;
61655 l = (r ^ f) >>> 0;
61656 r = t;
61657 }
61658
61659 // Reverse Initial Permutation
61660 utils.rip(l, r, out, off);
61661 };
61662
61663 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
61664 'use strict';
61665
61666 var assert = require('minimalistic-assert');
61667 var inherits = require('inherits');
61668
61669 var des = require('../des');
61670 var Cipher = des.Cipher;
61671 var DES = des.DES;
61672
61673 function EDEState(type, key) {
61674 assert.equal(key.length, 24, 'Invalid key length');
61675
61676 var k1 = key.slice(0, 8);
61677 var k2 = key.slice(8, 16);
61678 var k3 = key.slice(16, 24);
61679
61680 if (type === 'encrypt') {
61681 this.ciphers = [
61682 DES.create({ type: 'encrypt', key: k1 }),
61683 DES.create({ type: 'decrypt', key: k2 }),
61684 DES.create({ type: 'encrypt', key: k3 })
61685 ];
61686 } else {
61687 this.ciphers = [
61688 DES.create({ type: 'decrypt', key: k3 }),
61689 DES.create({ type: 'encrypt', key: k2 }),
61690 DES.create({ type: 'decrypt', key: k1 })
61691 ];
61692 }
61693 }
61694
61695 function EDE(options) {
61696 Cipher.call(this, options);
61697
61698 var state = new EDEState(this.type, this.options.key);
61699 this._edeState = state;
61700 }
61701 inherits(EDE, Cipher);
61702
61703 module.exports = EDE;
61704
61705 EDE.create = function create(options) {
61706 return new EDE(options);
61707 };
61708
61709 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
61710 var state = this._edeState;
61711
61712 state.ciphers[0]._update(inp, inOff, out, outOff);
61713 state.ciphers[1]._update(out, outOff, out, outOff);
61714 state.ciphers[2]._update(out, outOff, out, outOff);
61715 };
61716
61717 EDE.prototype._pad = DES.prototype._pad;
61718 EDE.prototype._unpad = DES.prototype._unpad;
61719
61720 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
61721 'use strict';
61722
61723 exports.readUInt32BE = function readUInt32BE(bytes, off) {
61724 var res = (bytes[0 + off] << 24) |
61725 (bytes[1 + off] << 16) |
61726 (bytes[2 + off] << 8) |
61727 bytes[3 + off];
61728 return res >>> 0;
61729 };
61730
61731 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
61732 bytes[0 + off] = value >>> 24;
61733 bytes[1 + off] = (value >>> 16) & 0xff;
61734 bytes[2 + off] = (value >>> 8) & 0xff;
61735 bytes[3 + off] = value & 0xff;
61736 };
61737
61738 exports.ip = function ip(inL, inR, out, off) {
61739 var outL = 0;
61740 var outR = 0;
61741
61742 for (var i = 6; i >= 0; i -= 2) {
61743 for (var j = 0; j <= 24; j += 8) {
61744 outL <<= 1;
61745 outL |= (inR >>> (j + i)) & 1;
61746 }
61747 for (var j = 0; j <= 24; j += 8) {
61748 outL <<= 1;
61749 outL |= (inL >>> (j + i)) & 1;
61750 }
61751 }
61752
61753 for (var i = 6; i >= 0; i -= 2) {
61754 for (var j = 1; j <= 25; j += 8) {
61755 outR <<= 1;
61756 outR |= (inR >>> (j + i)) & 1;
61757 }
61758 for (var j = 1; j <= 25; j += 8) {
61759 outR <<= 1;
61760 outR |= (inL >>> (j + i)) & 1;
61761 }
61762 }
61763
61764 out[off + 0] = outL >>> 0;
61765 out[off + 1] = outR >>> 0;
61766 };
61767
61768 exports.rip = function rip(inL, inR, out, off) {
61769 var outL = 0;
61770 var outR = 0;
61771
61772 for (var i = 0; i < 4; i++) {
61773 for (var j = 24; j >= 0; j -= 8) {
61774 outL <<= 1;
61775 outL |= (inR >>> (j + i)) & 1;
61776 outL <<= 1;
61777 outL |= (inL >>> (j + i)) & 1;
61778 }
61779 }
61780 for (var i = 4; i < 8; i++) {
61781 for (var j = 24; j >= 0; j -= 8) {
61782 outR <<= 1;
61783 outR |= (inR >>> (j + i)) & 1;
61784 outR <<= 1;
61785 outR |= (inL >>> (j + i)) & 1;
61786 }
61787 }
61788
61789 out[off + 0] = outL >>> 0;
61790 out[off + 1] = outR >>> 0;
61791 };
61792
61793 exports.pc1 = function pc1(inL, inR, out, off) {
61794 var outL = 0;
61795 var outR = 0;
61796
61797 // 7, 15, 23, 31, 39, 47, 55, 63
61798 // 6, 14, 22, 30, 39, 47, 55, 63
61799 // 5, 13, 21, 29, 39, 47, 55, 63
61800 // 4, 12, 20, 28
61801 for (var i = 7; i >= 5; i--) {
61802 for (var j = 0; j <= 24; j += 8) {
61803 outL <<= 1;
61804 outL |= (inR >> (j + i)) & 1;
61805 }
61806 for (var j = 0; j <= 24; j += 8) {
61807 outL <<= 1;
61808 outL |= (inL >> (j + i)) & 1;
61809 }
61810 }
61811 for (var j = 0; j <= 24; j += 8) {
61812 outL <<= 1;
61813 outL |= (inR >> (j + i)) & 1;
61814 }
61815
61816 // 1, 9, 17, 25, 33, 41, 49, 57
61817 // 2, 10, 18, 26, 34, 42, 50, 58
61818 // 3, 11, 19, 27, 35, 43, 51, 59
61819 // 36, 44, 52, 60
61820 for (var i = 1; i <= 3; i++) {
61821 for (var j = 0; j <= 24; j += 8) {
61822 outR <<= 1;
61823 outR |= (inR >> (j + i)) & 1;
61824 }
61825 for (var j = 0; j <= 24; j += 8) {
61826 outR <<= 1;
61827 outR |= (inL >> (j + i)) & 1;
61828 }
61829 }
61830 for (var j = 0; j <= 24; j += 8) {
61831 outR <<= 1;
61832 outR |= (inL >> (j + i)) & 1;
61833 }
61834
61835 out[off + 0] = outL >>> 0;
61836 out[off + 1] = outR >>> 0;
61837 };
61838
61839 exports.r28shl = function r28shl(num, shift) {
61840 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
61841 };
61842
61843 var pc2table = [
61844 // inL => outL
61845 14, 11, 17, 4, 27, 23, 25, 0,
61846 13, 22, 7, 18, 5, 9, 16, 24,
61847 2, 20, 12, 21, 1, 8, 15, 26,
61848
61849 // inR => outR
61850 15, 4, 25, 19, 9, 1, 26, 16,
61851 5, 11, 23, 8, 12, 7, 17, 0,
61852 22, 3, 10, 14, 6, 20, 27, 24
61853 ];
61854
61855 exports.pc2 = function pc2(inL, inR, out, off) {
61856 var outL = 0;
61857 var outR = 0;
61858
61859 var len = pc2table.length >>> 1;
61860 for (var i = 0; i < len; i++) {
61861 outL <<= 1;
61862 outL |= (inL >>> pc2table[i]) & 0x1;
61863 }
61864 for (var i = len; i < pc2table.length; i++) {
61865 outR <<= 1;
61866 outR |= (inR >>> pc2table[i]) & 0x1;
61867 }
61868
61869 out[off + 0] = outL >>> 0;
61870 out[off + 1] = outR >>> 0;
61871 };
61872
61873 exports.expand = function expand(r, out, off) {
61874 var outL = 0;
61875 var outR = 0;
61876
61877 outL = ((r & 1) << 5) | (r >>> 27);
61878 for (var i = 23; i >= 15; i -= 4) {
61879 outL <<= 6;
61880 outL |= (r >>> i) & 0x3f;
61881 }
61882 for (var i = 11; i >= 3; i -= 4) {
61883 outR |= (r >>> i) & 0x3f;
61884 outR <<= 6;
61885 }
61886 outR |= ((r & 0x1f) << 1) | (r >>> 31);
61887
61888 out[off + 0] = outL >>> 0;
61889 out[off + 1] = outR >>> 0;
61890 };
61891
61892 var sTable = [
61893 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
61894 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
61895 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
61896 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
61897
61898 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
61899 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
61900 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
61901 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
61902
61903 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
61904 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
61905 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
61906 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
61907
61908 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
61909 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
61910 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
61911 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
61912
61913 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
61914 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
61915 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
61916 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
61917
61918 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
61919 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
61920 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
61921 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
61922
61923 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
61924 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
61925 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
61926 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
61927
61928 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
61929 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
61930 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
61931 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
61932 ];
61933
61934 exports.substitute = function substitute(inL, inR) {
61935 var out = 0;
61936 for (var i = 0; i < 4; i++) {
61937 var b = (inL >>> (18 - i * 6)) & 0x3f;
61938 var sb = sTable[i * 0x40 + b];
61939
61940 out <<= 4;
61941 out |= sb;
61942 }
61943 for (var i = 0; i < 4; i++) {
61944 var b = (inR >>> (18 - i * 6)) & 0x3f;
61945 var sb = sTable[4 * 0x40 + i * 0x40 + b];
61946
61947 out <<= 4;
61948 out |= sb;
61949 }
61950 return out >>> 0;
61951 };
61952
61953 var permuteTable = [
61954 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
61955 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
61956 ];
61957
61958 exports.permute = function permute(num) {
61959 var out = 0;
61960 for (var i = 0; i < permuteTable.length; i++) {
61961 out <<= 1;
61962 out |= (num >>> permuteTable[i]) & 0x1;
61963 }
61964 return out >>> 0;
61965 };
61966
61967 exports.padSplit = function padSplit(num, size, group) {
61968 var str = num.toString(2);
61969 while (str.length < size)
61970 str = '0' + str;
61971
61972 var out = [];
61973 for (var i = 0; i < size; i += group)
61974 out.push(str.slice(i, i + group));
61975 return out.join(' ');
61976 };
61977
61978 },{}],63:[function(require,module,exports){
61979 (function (Buffer){
61980 var generatePrime = require('./lib/generatePrime')
61981 var primes = require('./lib/primes.json')
61982
61983 var DH = require('./lib/dh')
61984
61985 function getDiffieHellman (mod) {
61986 var prime = new Buffer(primes[mod].prime, 'hex')
61987 var gen = new Buffer(primes[mod].gen, 'hex')
61988
61989 return new DH(prime, gen)
61990 }
61991
61992 var ENCODINGS = {
61993 'binary': true, 'hex': true, 'base64': true
61994 }
61995
61996 function createDiffieHellman (prime, enc, generator, genc) {
61997 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
61998 return createDiffieHellman(prime, 'binary', enc, generator)
61999 }
62000
62001 enc = enc || 'binary'
62002 genc = genc || 'binary'
62003 generator = generator || new Buffer([2])
62004
62005 if (!Buffer.isBuffer(generator)) {
62006 generator = new Buffer(generator, genc)
62007 }
62008
62009 if (typeof prime === 'number') {
62010 return new DH(generatePrime(prime, generator), generator, true)
62011 }
62012
62013 if (!Buffer.isBuffer(prime)) {
62014 prime = new Buffer(prime, enc)
62015 }
62016
62017 return new DH(prime, generator, true)
62018 }
62019
62020 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
62021 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
62022
62023 }).call(this,require("buffer").Buffer)
62024 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
62025 (function (Buffer){
62026 var BN = require('bn.js');
62027 var MillerRabin = require('miller-rabin');
62028 var millerRabin = new MillerRabin();
62029 var TWENTYFOUR = new BN(24);
62030 var ELEVEN = new BN(11);
62031 var TEN = new BN(10);
62032 var THREE = new BN(3);
62033 var SEVEN = new BN(7);
62034 var primes = require('./generatePrime');
62035 var randomBytes = require('randombytes');
62036 module.exports = DH;
62037
62038 function setPublicKey(pub, enc) {
62039 enc = enc || 'utf8';
62040 if (!Buffer.isBuffer(pub)) {
62041 pub = new Buffer(pub, enc);
62042 }
62043 this._pub = new BN(pub);
62044 return this;
62045 }
62046
62047 function setPrivateKey(priv, enc) {
62048 enc = enc || 'utf8';
62049 if (!Buffer.isBuffer(priv)) {
62050 priv = new Buffer(priv, enc);
62051 }
62052 this._priv = new BN(priv);
62053 return this;
62054 }
62055
62056 var primeCache = {};
62057 function checkPrime(prime, generator) {
62058 var gen = generator.toString('hex');
62059 var hex = [gen, prime.toString(16)].join('_');
62060 if (hex in primeCache) {
62061 return primeCache[hex];
62062 }
62063 var error = 0;
62064
62065 if (prime.isEven() ||
62066 !primes.simpleSieve ||
62067 !primes.fermatTest(prime) ||
62068 !millerRabin.test(prime)) {
62069 //not a prime so +1
62070 error += 1;
62071
62072 if (gen === '02' || gen === '05') {
62073 // we'd be able to check the generator
62074 // it would fail so +8
62075 error += 8;
62076 } else {
62077 //we wouldn't be able to test the generator
62078 // so +4
62079 error += 4;
62080 }
62081 primeCache[hex] = error;
62082 return error;
62083 }
62084 if (!millerRabin.test(prime.shrn(1))) {
62085 //not a safe prime
62086 error += 2;
62087 }
62088 var rem;
62089 switch (gen) {
62090 case '02':
62091 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
62092 // unsuidable generator
62093 error += 8;
62094 }
62095 break;
62096 case '05':
62097 rem = prime.mod(TEN);
62098 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
62099 // prime mod 10 needs to equal 3 or 7
62100 error += 8;
62101 }
62102 break;
62103 default:
62104 error += 4;
62105 }
62106 primeCache[hex] = error;
62107 return error;
62108 }
62109
62110 function DH(prime, generator, malleable) {
62111 this.setGenerator(generator);
62112 this.__prime = new BN(prime);
62113 this._prime = BN.mont(this.__prime);
62114 this._primeLen = prime.length;
62115 this._pub = undefined;
62116 this._priv = undefined;
62117 this._primeCode = undefined;
62118 if (malleable) {
62119 this.setPublicKey = setPublicKey;
62120 this.setPrivateKey = setPrivateKey;
62121 } else {
62122 this._primeCode = 8;
62123 }
62124 }
62125 Object.defineProperty(DH.prototype, 'verifyError', {
62126 enumerable: true,
62127 get: function () {
62128 if (typeof this._primeCode !== 'number') {
62129 this._primeCode = checkPrime(this.__prime, this.__gen);
62130 }
62131 return this._primeCode;
62132 }
62133 });
62134 DH.prototype.generateKeys = function () {
62135 if (!this._priv) {
62136 this._priv = new BN(randomBytes(this._primeLen));
62137 }
62138 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
62139 return this.getPublicKey();
62140 };
62141
62142 DH.prototype.computeSecret = function (other) {
62143 other = new BN(other);
62144 other = other.toRed(this._prime);
62145 var secret = other.redPow(this._priv).fromRed();
62146 var out = new Buffer(secret.toArray());
62147 var prime = this.getPrime();
62148 if (out.length < prime.length) {
62149 var front = new Buffer(prime.length - out.length);
62150 front.fill(0);
62151 out = Buffer.concat([front, out]);
62152 }
62153 return out;
62154 };
62155
62156 DH.prototype.getPublicKey = function getPublicKey(enc) {
62157 return formatReturnValue(this._pub, enc);
62158 };
62159
62160 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
62161 return formatReturnValue(this._priv, enc);
62162 };
62163
62164 DH.prototype.getPrime = function (enc) {
62165 return formatReturnValue(this.__prime, enc);
62166 };
62167
62168 DH.prototype.getGenerator = function (enc) {
62169 return formatReturnValue(this._gen, enc);
62170 };
62171
62172 DH.prototype.setGenerator = function (gen, enc) {
62173 enc = enc || 'utf8';
62174 if (!Buffer.isBuffer(gen)) {
62175 gen = new Buffer(gen, enc);
62176 }
62177 this.__gen = gen;
62178 this._gen = new BN(gen);
62179 return this;
62180 };
62181
62182 function formatReturnValue(bn, enc) {
62183 var buf = new Buffer(bn.toArray());
62184 if (!enc) {
62185 return buf;
62186 } else {
62187 return buf.toString(enc);
62188 }
62189 }
62190
62191 }).call(this,require("buffer").Buffer)
62192 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
62193 var randomBytes = require('randombytes');
62194 module.exports = findPrime;
62195 findPrime.simpleSieve = simpleSieve;
62196 findPrime.fermatTest = fermatTest;
62197 var BN = require('bn.js');
62198 var TWENTYFOUR = new BN(24);
62199 var MillerRabin = require('miller-rabin');
62200 var millerRabin = new MillerRabin();
62201 var ONE = new BN(1);
62202 var TWO = new BN(2);
62203 var FIVE = new BN(5);
62204 var SIXTEEN = new BN(16);
62205 var EIGHT = new BN(8);
62206 var TEN = new BN(10);
62207 var THREE = new BN(3);
62208 var SEVEN = new BN(7);
62209 var ELEVEN = new BN(11);
62210 var FOUR = new BN(4);
62211 var TWELVE = new BN(12);
62212 var primes = null;
62213
62214 function _getPrimes() {
62215 if (primes !== null)
62216 return primes;
62217
62218 var limit = 0x100000;
62219 var res = [];
62220 res[0] = 2;
62221 for (var i = 1, k = 3; k < limit; k += 2) {
62222 var sqrt = Math.ceil(Math.sqrt(k));
62223 for (var j = 0; j < i && res[j] <= sqrt; j++)
62224 if (k % res[j] === 0)
62225 break;
62226
62227 if (i !== j && res[j] <= sqrt)
62228 continue;
62229
62230 res[i++] = k;
62231 }
62232 primes = res;
62233 return res;
62234 }
62235
62236 function simpleSieve(p) {
62237 var primes = _getPrimes();
62238
62239 for (var i = 0; i < primes.length; i++)
62240 if (p.modn(primes[i]) === 0) {
62241 if (p.cmpn(primes[i]) === 0) {
62242 return true;
62243 } else {
62244 return false;
62245 }
62246 }
62247
62248 return true;
62249 }
62250
62251 function fermatTest(p) {
62252 var red = BN.mont(p);
62253 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
62254 }
62255
62256 function findPrime(bits, gen) {
62257 if (bits < 16) {
62258 // this is what openssl does
62259 if (gen === 2 || gen === 5) {
62260 return new BN([0x8c, 0x7b]);
62261 } else {
62262 return new BN([0x8c, 0x27]);
62263 }
62264 }
62265 gen = new BN(gen);
62266
62267 var num, n2;
62268
62269 while (true) {
62270 num = new BN(randomBytes(Math.ceil(bits / 8)));
62271 while (num.bitLength() > bits) {
62272 num.ishrn(1);
62273 }
62274 if (num.isEven()) {
62275 num.iadd(ONE);
62276 }
62277 if (!num.testn(1)) {
62278 num.iadd(TWO);
62279 }
62280 if (!gen.cmp(TWO)) {
62281 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
62282 num.iadd(FOUR);
62283 }
62284 } else if (!gen.cmp(FIVE)) {
62285 while (num.mod(TEN).cmp(THREE)) {
62286 num.iadd(FOUR);
62287 }
62288 }
62289 n2 = num.shrn(1);
62290 if (simpleSieve(n2) && simpleSieve(num) &&
62291 fermatTest(n2) && fermatTest(num) &&
62292 millerRabin.test(n2) && millerRabin.test(num)) {
62293 return num;
62294 }
62295 }
62296
62297 }
62298
62299 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
62300 module.exports={
62301 "modp1": {
62302 "gen": "02",
62303 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
62304 },
62305 "modp2": {
62306 "gen": "02",
62307 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
62308 },
62309 "modp5": {
62310 "gen": "02",
62311 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
62312 },
62313 "modp14": {
62314 "gen": "02",
62315 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
62316 },
62317 "modp15": {
62318 "gen": "02",
62319 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
62320 },
62321 "modp16": {
62322 "gen": "02",
62323 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
62324 },
62325 "modp17": {
62326 "gen": "02",
62327 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
62328 },
62329 "modp18": {
62330 "gen": "02",
62331 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
62332 }
62333 }
62334 },{}],67:[function(require,module,exports){
62335 'use strict';
62336
62337 var elliptic = exports;
62338
62339 elliptic.version = require('../package.json').version;
62340 elliptic.utils = require('./elliptic/utils');
62341 elliptic.rand = require('brorand');
62342 elliptic.curve = require('./elliptic/curve');
62343 elliptic.curves = require('./elliptic/curves');
62344
62345 // Protocols
62346 elliptic.ec = require('./elliptic/ec');
62347 elliptic.eddsa = require('./elliptic/eddsa');
62348
62349 },{"../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){
62350 'use strict';
62351
62352 var BN = require('bn.js');
62353 var elliptic = require('../../elliptic');
62354 var utils = elliptic.utils;
62355 var getNAF = utils.getNAF;
62356 var getJSF = utils.getJSF;
62357 var assert = utils.assert;
62358
62359 function BaseCurve(type, conf) {
62360 this.type = type;
62361 this.p = new BN(conf.p, 16);
62362
62363 // Use Montgomery, when there is no fast reduction for the prime
62364 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
62365
62366 // Useful for many curves
62367 this.zero = new BN(0).toRed(this.red);
62368 this.one = new BN(1).toRed(this.red);
62369 this.two = new BN(2).toRed(this.red);
62370
62371 // Curve configuration, optional
62372 this.n = conf.n && new BN(conf.n, 16);
62373 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
62374
62375 // Temporary arrays
62376 this._wnafT1 = new Array(4);
62377 this._wnafT2 = new Array(4);
62378 this._wnafT3 = new Array(4);
62379 this._wnafT4 = new Array(4);
62380
62381 // Generalized Greg Maxwell's trick
62382 var adjustCount = this.n && this.p.div(this.n);
62383 if (!adjustCount || adjustCount.cmpn(100) > 0) {
62384 this.redN = null;
62385 } else {
62386 this._maxwellTrick = true;
62387 this.redN = this.n.toRed(this.red);
62388 }
62389 }
62390 module.exports = BaseCurve;
62391
62392 BaseCurve.prototype.point = function point() {
62393 throw new Error('Not implemented');
62394 };
62395
62396 BaseCurve.prototype.validate = function validate() {
62397 throw new Error('Not implemented');
62398 };
62399
62400 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
62401 assert(p.precomputed);
62402 var doubles = p._getDoubles();
62403
62404 var naf = getNAF(k, 1);
62405 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
62406 I /= 3;
62407
62408 // Translate into more windowed form
62409 var repr = [];
62410 for (var j = 0; j < naf.length; j += doubles.step) {
62411 var nafW = 0;
62412 for (var k = j + doubles.step - 1; k >= j; k--)
62413 nafW = (nafW << 1) + naf[k];
62414 repr.push(nafW);
62415 }
62416
62417 var a = this.jpoint(null, null, null);
62418 var b = this.jpoint(null, null, null);
62419 for (var i = I; i > 0; i--) {
62420 for (var j = 0; j < repr.length; j++) {
62421 var nafW = repr[j];
62422 if (nafW === i)
62423 b = b.mixedAdd(doubles.points[j]);
62424 else if (nafW === -i)
62425 b = b.mixedAdd(doubles.points[j].neg());
62426 }
62427 a = a.add(b);
62428 }
62429 return a.toP();
62430 };
62431
62432 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
62433 var w = 4;
62434
62435 // Precompute window
62436 var nafPoints = p._getNAFPoints(w);
62437 w = nafPoints.wnd;
62438 var wnd = nafPoints.points;
62439
62440 // Get NAF form
62441 var naf = getNAF(k, w);
62442
62443 // Add `this`*(N+1) for every w-NAF index
62444 var acc = this.jpoint(null, null, null);
62445 for (var i = naf.length - 1; i >= 0; i--) {
62446 // Count zeroes
62447 for (var k = 0; i >= 0 && naf[i] === 0; i--)
62448 k++;
62449 if (i >= 0)
62450 k++;
62451 acc = acc.dblp(k);
62452
62453 if (i < 0)
62454 break;
62455 var z = naf[i];
62456 assert(z !== 0);
62457 if (p.type === 'affine') {
62458 // J +- P
62459 if (z > 0)
62460 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
62461 else
62462 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
62463 } else {
62464 // J +- J
62465 if (z > 0)
62466 acc = acc.add(wnd[(z - 1) >> 1]);
62467 else
62468 acc = acc.add(wnd[(-z - 1) >> 1].neg());
62469 }
62470 }
62471 return p.type === 'affine' ? acc.toP() : acc;
62472 };
62473
62474 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
62475 points,
62476 coeffs,
62477 len,
62478 jacobianResult) {
62479 var wndWidth = this._wnafT1;
62480 var wnd = this._wnafT2;
62481 var naf = this._wnafT3;
62482
62483 // Fill all arrays
62484 var max = 0;
62485 for (var i = 0; i < len; i++) {
62486 var p = points[i];
62487 var nafPoints = p._getNAFPoints(defW);
62488 wndWidth[i] = nafPoints.wnd;
62489 wnd[i] = nafPoints.points;
62490 }
62491
62492 // Comb small window NAFs
62493 for (var i = len - 1; i >= 1; i -= 2) {
62494 var a = i - 1;
62495 var b = i;
62496 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
62497 naf[a] = getNAF(coeffs[a], wndWidth[a]);
62498 naf[b] = getNAF(coeffs[b], wndWidth[b]);
62499 max = Math.max(naf[a].length, max);
62500 max = Math.max(naf[b].length, max);
62501 continue;
62502 }
62503
62504 var comb = [
62505 points[a], /* 1 */
62506 null, /* 3 */
62507 null, /* 5 */
62508 points[b] /* 7 */
62509 ];
62510
62511 // Try to avoid Projective points, if possible
62512 if (points[a].y.cmp(points[b].y) === 0) {
62513 comb[1] = points[a].add(points[b]);
62514 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62515 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
62516 comb[1] = points[a].toJ().mixedAdd(points[b]);
62517 comb[2] = points[a].add(points[b].neg());
62518 } else {
62519 comb[1] = points[a].toJ().mixedAdd(points[b]);
62520 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62521 }
62522
62523 var index = [
62524 -3, /* -1 -1 */
62525 -1, /* -1 0 */
62526 -5, /* -1 1 */
62527 -7, /* 0 -1 */
62528 0, /* 0 0 */
62529 7, /* 0 1 */
62530 5, /* 1 -1 */
62531 1, /* 1 0 */
62532 3 /* 1 1 */
62533 ];
62534
62535 var jsf = getJSF(coeffs[a], coeffs[b]);
62536 max = Math.max(jsf[0].length, max);
62537 naf[a] = new Array(max);
62538 naf[b] = new Array(max);
62539 for (var j = 0; j < max; j++) {
62540 var ja = jsf[0][j] | 0;
62541 var jb = jsf[1][j] | 0;
62542
62543 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
62544 naf[b][j] = 0;
62545 wnd[a] = comb;
62546 }
62547 }
62548
62549 var acc = this.jpoint(null, null, null);
62550 var tmp = this._wnafT4;
62551 for (var i = max; i >= 0; i--) {
62552 var k = 0;
62553
62554 while (i >= 0) {
62555 var zero = true;
62556 for (var j = 0; j < len; j++) {
62557 tmp[j] = naf[j][i] | 0;
62558 if (tmp[j] !== 0)
62559 zero = false;
62560 }
62561 if (!zero)
62562 break;
62563 k++;
62564 i--;
62565 }
62566 if (i >= 0)
62567 k++;
62568 acc = acc.dblp(k);
62569 if (i < 0)
62570 break;
62571
62572 for (var j = 0; j < len; j++) {
62573 var z = tmp[j];
62574 var p;
62575 if (z === 0)
62576 continue;
62577 else if (z > 0)
62578 p = wnd[j][(z - 1) >> 1];
62579 else if (z < 0)
62580 p = wnd[j][(-z - 1) >> 1].neg();
62581
62582 if (p.type === 'affine')
62583 acc = acc.mixedAdd(p);
62584 else
62585 acc = acc.add(p);
62586 }
62587 }
62588 // Zeroify references
62589 for (var i = 0; i < len; i++)
62590 wnd[i] = null;
62591
62592 if (jacobianResult)
62593 return acc;
62594 else
62595 return acc.toP();
62596 };
62597
62598 function BasePoint(curve, type) {
62599 this.curve = curve;
62600 this.type = type;
62601 this.precomputed = null;
62602 }
62603 BaseCurve.BasePoint = BasePoint;
62604
62605 BasePoint.prototype.eq = function eq(/*other*/) {
62606 throw new Error('Not implemented');
62607 };
62608
62609 BasePoint.prototype.validate = function validate() {
62610 return this.curve.validate(this);
62611 };
62612
62613 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62614 bytes = utils.toArray(bytes, enc);
62615
62616 var len = this.p.byteLength();
62617
62618 // uncompressed, hybrid-odd, hybrid-even
62619 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
62620 bytes.length - 1 === 2 * len) {
62621 if (bytes[0] === 0x06)
62622 assert(bytes[bytes.length - 1] % 2 === 0);
62623 else if (bytes[0] === 0x07)
62624 assert(bytes[bytes.length - 1] % 2 === 1);
62625
62626 var res = this.point(bytes.slice(1, 1 + len),
62627 bytes.slice(1 + len, 1 + 2 * len));
62628
62629 return res;
62630 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
62631 bytes.length - 1 === len) {
62632 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
62633 }
62634 throw new Error('Unknown point format');
62635 };
62636
62637 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
62638 return this.encode(enc, true);
62639 };
62640
62641 BasePoint.prototype._encode = function _encode(compact) {
62642 var len = this.curve.p.byteLength();
62643 var x = this.getX().toArray('be', len);
62644
62645 if (compact)
62646 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
62647
62648 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
62649 };
62650
62651 BasePoint.prototype.encode = function encode(enc, compact) {
62652 return utils.encode(this._encode(compact), enc);
62653 };
62654
62655 BasePoint.prototype.precompute = function precompute(power) {
62656 if (this.precomputed)
62657 return this;
62658
62659 var precomputed = {
62660 doubles: null,
62661 naf: null,
62662 beta: null
62663 };
62664 precomputed.naf = this._getNAFPoints(8);
62665 precomputed.doubles = this._getDoubles(4, power);
62666 precomputed.beta = this._getBeta();
62667 this.precomputed = precomputed;
62668
62669 return this;
62670 };
62671
62672 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
62673 if (!this.precomputed)
62674 return false;
62675
62676 var doubles = this.precomputed.doubles;
62677 if (!doubles)
62678 return false;
62679
62680 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
62681 };
62682
62683 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
62684 if (this.precomputed && this.precomputed.doubles)
62685 return this.precomputed.doubles;
62686
62687 var doubles = [ this ];
62688 var acc = this;
62689 for (var i = 0; i < power; i += step) {
62690 for (var j = 0; j < step; j++)
62691 acc = acc.dbl();
62692 doubles.push(acc);
62693 }
62694 return {
62695 step: step,
62696 points: doubles
62697 };
62698 };
62699
62700 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
62701 if (this.precomputed && this.precomputed.naf)
62702 return this.precomputed.naf;
62703
62704 var res = [ this ];
62705 var max = (1 << wnd) - 1;
62706 var dbl = max === 1 ? null : this.dbl();
62707 for (var i = 1; i < max; i++)
62708 res[i] = res[i - 1].add(dbl);
62709 return {
62710 wnd: wnd,
62711 points: res
62712 };
62713 };
62714
62715 BasePoint.prototype._getBeta = function _getBeta() {
62716 return null;
62717 };
62718
62719 BasePoint.prototype.dblp = function dblp(k) {
62720 var r = this;
62721 for (var i = 0; i < k; i++)
62722 r = r.dbl();
62723 return r;
62724 };
62725
62726 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
62727 'use strict';
62728
62729 var curve = require('../curve');
62730 var elliptic = require('../../elliptic');
62731 var BN = require('bn.js');
62732 var inherits = require('inherits');
62733 var Base = curve.base;
62734
62735 var assert = elliptic.utils.assert;
62736
62737 function EdwardsCurve(conf) {
62738 // NOTE: Important as we are creating point in Base.call()
62739 this.twisted = (conf.a | 0) !== 1;
62740 this.mOneA = this.twisted && (conf.a | 0) === -1;
62741 this.extended = this.mOneA;
62742
62743 Base.call(this, 'edwards', conf);
62744
62745 this.a = new BN(conf.a, 16).umod(this.red.m);
62746 this.a = this.a.toRed(this.red);
62747 this.c = new BN(conf.c, 16).toRed(this.red);
62748 this.c2 = this.c.redSqr();
62749 this.d = new BN(conf.d, 16).toRed(this.red);
62750 this.dd = this.d.redAdd(this.d);
62751
62752 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
62753 this.oneC = (conf.c | 0) === 1;
62754 }
62755 inherits(EdwardsCurve, Base);
62756 module.exports = EdwardsCurve;
62757
62758 EdwardsCurve.prototype._mulA = function _mulA(num) {
62759 if (this.mOneA)
62760 return num.redNeg();
62761 else
62762 return this.a.redMul(num);
62763 };
62764
62765 EdwardsCurve.prototype._mulC = function _mulC(num) {
62766 if (this.oneC)
62767 return num;
62768 else
62769 return this.c.redMul(num);
62770 };
62771
62772 // Just for compatibility with Short curve
62773 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
62774 return this.point(x, y, z, t);
62775 };
62776
62777 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
62778 x = new BN(x, 16);
62779 if (!x.red)
62780 x = x.toRed(this.red);
62781
62782 var x2 = x.redSqr();
62783 var rhs = this.c2.redSub(this.a.redMul(x2));
62784 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
62785
62786 var y2 = rhs.redMul(lhs.redInvm());
62787 var y = y2.redSqrt();
62788 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62789 throw new Error('invalid point');
62790
62791 var isOdd = y.fromRed().isOdd();
62792 if (odd && !isOdd || !odd && isOdd)
62793 y = y.redNeg();
62794
62795 return this.point(x, y);
62796 };
62797
62798 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
62799 y = new BN(y, 16);
62800 if (!y.red)
62801 y = y.toRed(this.red);
62802
62803 // x^2 = (y^2 - 1) / (d y^2 + 1)
62804 var y2 = y.redSqr();
62805 var lhs = y2.redSub(this.one);
62806 var rhs = y2.redMul(this.d).redAdd(this.one);
62807 var x2 = lhs.redMul(rhs.redInvm());
62808
62809 if (x2.cmp(this.zero) === 0) {
62810 if (odd)
62811 throw new Error('invalid point');
62812 else
62813 return this.point(this.zero, y);
62814 }
62815
62816 var x = x2.redSqrt();
62817 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
62818 throw new Error('invalid point');
62819
62820 if (x.isOdd() !== odd)
62821 x = x.redNeg();
62822
62823 return this.point(x, y);
62824 };
62825
62826 EdwardsCurve.prototype.validate = function validate(point) {
62827 if (point.isInfinity())
62828 return true;
62829
62830 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
62831 point.normalize();
62832
62833 var x2 = point.x.redSqr();
62834 var y2 = point.y.redSqr();
62835 var lhs = x2.redMul(this.a).redAdd(y2);
62836 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
62837
62838 return lhs.cmp(rhs) === 0;
62839 };
62840
62841 function Point(curve, x, y, z, t) {
62842 Base.BasePoint.call(this, curve, 'projective');
62843 if (x === null && y === null && z === null) {
62844 this.x = this.curve.zero;
62845 this.y = this.curve.one;
62846 this.z = this.curve.one;
62847 this.t = this.curve.zero;
62848 this.zOne = true;
62849 } else {
62850 this.x = new BN(x, 16);
62851 this.y = new BN(y, 16);
62852 this.z = z ? new BN(z, 16) : this.curve.one;
62853 this.t = t && new BN(t, 16);
62854 if (!this.x.red)
62855 this.x = this.x.toRed(this.curve.red);
62856 if (!this.y.red)
62857 this.y = this.y.toRed(this.curve.red);
62858 if (!this.z.red)
62859 this.z = this.z.toRed(this.curve.red);
62860 if (this.t && !this.t.red)
62861 this.t = this.t.toRed(this.curve.red);
62862 this.zOne = this.z === this.curve.one;
62863
62864 // Use extended coordinates
62865 if (this.curve.extended && !this.t) {
62866 this.t = this.x.redMul(this.y);
62867 if (!this.zOne)
62868 this.t = this.t.redMul(this.z.redInvm());
62869 }
62870 }
62871 }
62872 inherits(Point, Base.BasePoint);
62873
62874 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62875 return Point.fromJSON(this, obj);
62876 };
62877
62878 EdwardsCurve.prototype.point = function point(x, y, z, t) {
62879 return new Point(this, x, y, z, t);
62880 };
62881
62882 Point.fromJSON = function fromJSON(curve, obj) {
62883 return new Point(curve, obj[0], obj[1], obj[2]);
62884 };
62885
62886 Point.prototype.inspect = function inspect() {
62887 if (this.isInfinity())
62888 return '<EC Point Infinity>';
62889 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62890 ' y: ' + this.y.fromRed().toString(16, 2) +
62891 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62892 };
62893
62894 Point.prototype.isInfinity = function isInfinity() {
62895 // XXX This code assumes that zero is always zero in red
62896 return this.x.cmpn(0) === 0 &&
62897 this.y.cmp(this.z) === 0;
62898 };
62899
62900 Point.prototype._extDbl = function _extDbl() {
62901 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62902 // #doubling-dbl-2008-hwcd
62903 // 4M + 4S
62904
62905 // A = X1^2
62906 var a = this.x.redSqr();
62907 // B = Y1^2
62908 var b = this.y.redSqr();
62909 // C = 2 * Z1^2
62910 var c = this.z.redSqr();
62911 c = c.redIAdd(c);
62912 // D = a * A
62913 var d = this.curve._mulA(a);
62914 // E = (X1 + Y1)^2 - A - B
62915 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
62916 // G = D + B
62917 var g = d.redAdd(b);
62918 // F = G - C
62919 var f = g.redSub(c);
62920 // H = D - B
62921 var h = d.redSub(b);
62922 // X3 = E * F
62923 var nx = e.redMul(f);
62924 // Y3 = G * H
62925 var ny = g.redMul(h);
62926 // T3 = E * H
62927 var nt = e.redMul(h);
62928 // Z3 = F * G
62929 var nz = f.redMul(g);
62930 return this.curve.point(nx, ny, nz, nt);
62931 };
62932
62933 Point.prototype._projDbl = function _projDbl() {
62934 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62935 // #doubling-dbl-2008-bbjlp
62936 // #doubling-dbl-2007-bl
62937 // and others
62938 // Generally 3M + 4S or 2M + 4S
62939
62940 // B = (X1 + Y1)^2
62941 var b = this.x.redAdd(this.y).redSqr();
62942 // C = X1^2
62943 var c = this.x.redSqr();
62944 // D = Y1^2
62945 var d = this.y.redSqr();
62946
62947 var nx;
62948 var ny;
62949 var nz;
62950 if (this.curve.twisted) {
62951 // E = a * C
62952 var e = this.curve._mulA(c);
62953 // F = E + D
62954 var f = e.redAdd(d);
62955 if (this.zOne) {
62956 // X3 = (B - C - D) * (F - 2)
62957 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
62958 // Y3 = F * (E - D)
62959 ny = f.redMul(e.redSub(d));
62960 // Z3 = F^2 - 2 * F
62961 nz = f.redSqr().redSub(f).redSub(f);
62962 } else {
62963 // H = Z1^2
62964 var h = this.z.redSqr();
62965 // J = F - 2 * H
62966 var j = f.redSub(h).redISub(h);
62967 // X3 = (B-C-D)*J
62968 nx = b.redSub(c).redISub(d).redMul(j);
62969 // Y3 = F * (E - D)
62970 ny = f.redMul(e.redSub(d));
62971 // Z3 = F * J
62972 nz = f.redMul(j);
62973 }
62974 } else {
62975 // E = C + D
62976 var e = c.redAdd(d);
62977 // H = (c * Z1)^2
62978 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
62979 // J = E - 2 * H
62980 var j = e.redSub(h).redSub(h);
62981 // X3 = c * (B - E) * J
62982 nx = this.curve._mulC(b.redISub(e)).redMul(j);
62983 // Y3 = c * E * (C - D)
62984 ny = this.curve._mulC(e).redMul(c.redISub(d));
62985 // Z3 = E * J
62986 nz = e.redMul(j);
62987 }
62988 return this.curve.point(nx, ny, nz);
62989 };
62990
62991 Point.prototype.dbl = function dbl() {
62992 if (this.isInfinity())
62993 return this;
62994
62995 // Double in extended coordinates
62996 if (this.curve.extended)
62997 return this._extDbl();
62998 else
62999 return this._projDbl();
63000 };
63001
63002 Point.prototype._extAdd = function _extAdd(p) {
63003 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
63004 // #addition-add-2008-hwcd-3
63005 // 8M
63006
63007 // A = (Y1 - X1) * (Y2 - X2)
63008 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
63009 // B = (Y1 + X1) * (Y2 + X2)
63010 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
63011 // C = T1 * k * T2
63012 var c = this.t.redMul(this.curve.dd).redMul(p.t);
63013 // D = Z1 * 2 * Z2
63014 var d = this.z.redMul(p.z.redAdd(p.z));
63015 // E = B - A
63016 var e = b.redSub(a);
63017 // F = D - C
63018 var f = d.redSub(c);
63019 // G = D + C
63020 var g = d.redAdd(c);
63021 // H = B + A
63022 var h = b.redAdd(a);
63023 // X3 = E * F
63024 var nx = e.redMul(f);
63025 // Y3 = G * H
63026 var ny = g.redMul(h);
63027 // T3 = E * H
63028 var nt = e.redMul(h);
63029 // Z3 = F * G
63030 var nz = f.redMul(g);
63031 return this.curve.point(nx, ny, nz, nt);
63032 };
63033
63034 Point.prototype._projAdd = function _projAdd(p) {
63035 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
63036 // #addition-add-2008-bbjlp
63037 // #addition-add-2007-bl
63038 // 10M + 1S
63039
63040 // A = Z1 * Z2
63041 var a = this.z.redMul(p.z);
63042 // B = A^2
63043 var b = a.redSqr();
63044 // C = X1 * X2
63045 var c = this.x.redMul(p.x);
63046 // D = Y1 * Y2
63047 var d = this.y.redMul(p.y);
63048 // E = d * C * D
63049 var e = this.curve.d.redMul(c).redMul(d);
63050 // F = B - E
63051 var f = b.redSub(e);
63052 // G = B + E
63053 var g = b.redAdd(e);
63054 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
63055 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
63056 var nx = a.redMul(f).redMul(tmp);
63057 var ny;
63058 var nz;
63059 if (this.curve.twisted) {
63060 // Y3 = A * G * (D - a * C)
63061 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
63062 // Z3 = F * G
63063 nz = f.redMul(g);
63064 } else {
63065 // Y3 = A * G * (D - C)
63066 ny = a.redMul(g).redMul(d.redSub(c));
63067 // Z3 = c * F * G
63068 nz = this.curve._mulC(f).redMul(g);
63069 }
63070 return this.curve.point(nx, ny, nz);
63071 };
63072
63073 Point.prototype.add = function add(p) {
63074 if (this.isInfinity())
63075 return p;
63076 if (p.isInfinity())
63077 return this;
63078
63079 if (this.curve.extended)
63080 return this._extAdd(p);
63081 else
63082 return this._projAdd(p);
63083 };
63084
63085 Point.prototype.mul = function mul(k) {
63086 if (this._hasDoubles(k))
63087 return this.curve._fixedNafMul(this, k);
63088 else
63089 return this.curve._wnafMul(this, k);
63090 };
63091
63092 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
63093 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
63094 };
63095
63096 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
63097 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
63098 };
63099
63100 Point.prototype.normalize = function normalize() {
63101 if (this.zOne)
63102 return this;
63103
63104 // Normalize coordinates
63105 var zi = this.z.redInvm();
63106 this.x = this.x.redMul(zi);
63107 this.y = this.y.redMul(zi);
63108 if (this.t)
63109 this.t = this.t.redMul(zi);
63110 this.z = this.curve.one;
63111 this.zOne = true;
63112 return this;
63113 };
63114
63115 Point.prototype.neg = function neg() {
63116 return this.curve.point(this.x.redNeg(),
63117 this.y,
63118 this.z,
63119 this.t && this.t.redNeg());
63120 };
63121
63122 Point.prototype.getX = function getX() {
63123 this.normalize();
63124 return this.x.fromRed();
63125 };
63126
63127 Point.prototype.getY = function getY() {
63128 this.normalize();
63129 return this.y.fromRed();
63130 };
63131
63132 Point.prototype.eq = function eq(other) {
63133 return this === other ||
63134 this.getX().cmp(other.getX()) === 0 &&
63135 this.getY().cmp(other.getY()) === 0;
63136 };
63137
63138 Point.prototype.eqXToP = function eqXToP(x) {
63139 var rx = x.toRed(this.curve.red).redMul(this.z);
63140 if (this.x.cmp(rx) === 0)
63141 return true;
63142
63143 var xc = x.clone();
63144 var t = this.curve.redN.redMul(this.z);
63145 for (;;) {
63146 xc.iadd(this.curve.n);
63147 if (xc.cmp(this.curve.p) >= 0)
63148 return false;
63149
63150 rx.redIAdd(t);
63151 if (this.x.cmp(rx) === 0)
63152 return true;
63153 }
63154 return false;
63155 };
63156
63157 // Compatibility with BaseCurve
63158 Point.prototype.toP = Point.prototype.normalize;
63159 Point.prototype.mixedAdd = Point.prototype.add;
63160
63161 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
63162 'use strict';
63163
63164 var curve = exports;
63165
63166 curve.base = require('./base');
63167 curve.short = require('./short');
63168 curve.mont = require('./mont');
63169 curve.edwards = require('./edwards');
63170
63171 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
63172 'use strict';
63173
63174 var curve = require('../curve');
63175 var BN = require('bn.js');
63176 var inherits = require('inherits');
63177 var Base = curve.base;
63178
63179 var elliptic = require('../../elliptic');
63180 var utils = elliptic.utils;
63181
63182 function MontCurve(conf) {
63183 Base.call(this, 'mont', conf);
63184
63185 this.a = new BN(conf.a, 16).toRed(this.red);
63186 this.b = new BN(conf.b, 16).toRed(this.red);
63187 this.i4 = new BN(4).toRed(this.red).redInvm();
63188 this.two = new BN(2).toRed(this.red);
63189 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
63190 }
63191 inherits(MontCurve, Base);
63192 module.exports = MontCurve;
63193
63194 MontCurve.prototype.validate = function validate(point) {
63195 var x = point.normalize().x;
63196 var x2 = x.redSqr();
63197 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
63198 var y = rhs.redSqrt();
63199
63200 return y.redSqr().cmp(rhs) === 0;
63201 };
63202
63203 function Point(curve, x, z) {
63204 Base.BasePoint.call(this, curve, 'projective');
63205 if (x === null && z === null) {
63206 this.x = this.curve.one;
63207 this.z = this.curve.zero;
63208 } else {
63209 this.x = new BN(x, 16);
63210 this.z = new BN(z, 16);
63211 if (!this.x.red)
63212 this.x = this.x.toRed(this.curve.red);
63213 if (!this.z.red)
63214 this.z = this.z.toRed(this.curve.red);
63215 }
63216 }
63217 inherits(Point, Base.BasePoint);
63218
63219 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
63220 return this.point(utils.toArray(bytes, enc), 1);
63221 };
63222
63223 MontCurve.prototype.point = function point(x, z) {
63224 return new Point(this, x, z);
63225 };
63226
63227 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
63228 return Point.fromJSON(this, obj);
63229 };
63230
63231 Point.prototype.precompute = function precompute() {
63232 // No-op
63233 };
63234
63235 Point.prototype._encode = function _encode() {
63236 return this.getX().toArray('be', this.curve.p.byteLength());
63237 };
63238
63239 Point.fromJSON = function fromJSON(curve, obj) {
63240 return new Point(curve, obj[0], obj[1] || curve.one);
63241 };
63242
63243 Point.prototype.inspect = function inspect() {
63244 if (this.isInfinity())
63245 return '<EC Point Infinity>';
63246 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63247 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
63248 };
63249
63250 Point.prototype.isInfinity = function isInfinity() {
63251 // XXX This code assumes that zero is always zero in red
63252 return this.z.cmpn(0) === 0;
63253 };
63254
63255 Point.prototype.dbl = function dbl() {
63256 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
63257 // 2M + 2S + 4A
63258
63259 // A = X1 + Z1
63260 var a = this.x.redAdd(this.z);
63261 // AA = A^2
63262 var aa = a.redSqr();
63263 // B = X1 - Z1
63264 var b = this.x.redSub(this.z);
63265 // BB = B^2
63266 var bb = b.redSqr();
63267 // C = AA - BB
63268 var c = aa.redSub(bb);
63269 // X3 = AA * BB
63270 var nx = aa.redMul(bb);
63271 // Z3 = C * (BB + A24 * C)
63272 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
63273 return this.curve.point(nx, nz);
63274 };
63275
63276 Point.prototype.add = function add() {
63277 throw new Error('Not supported on Montgomery curve');
63278 };
63279
63280 Point.prototype.diffAdd = function diffAdd(p, diff) {
63281 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
63282 // 4M + 2S + 6A
63283
63284 // A = X2 + Z2
63285 var a = this.x.redAdd(this.z);
63286 // B = X2 - Z2
63287 var b = this.x.redSub(this.z);
63288 // C = X3 + Z3
63289 var c = p.x.redAdd(p.z);
63290 // D = X3 - Z3
63291 var d = p.x.redSub(p.z);
63292 // DA = D * A
63293 var da = d.redMul(a);
63294 // CB = C * B
63295 var cb = c.redMul(b);
63296 // X5 = Z1 * (DA + CB)^2
63297 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
63298 // Z5 = X1 * (DA - CB)^2
63299 var nz = diff.x.redMul(da.redISub(cb).redSqr());
63300 return this.curve.point(nx, nz);
63301 };
63302
63303 Point.prototype.mul = function mul(k) {
63304 var t = k.clone();
63305 var a = this; // (N / 2) * Q + Q
63306 var b = this.curve.point(null, null); // (N / 2) * Q
63307 var c = this; // Q
63308
63309 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
63310 bits.push(t.andln(1));
63311
63312 for (var i = bits.length - 1; i >= 0; i--) {
63313 if (bits[i] === 0) {
63314 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
63315 a = a.diffAdd(b, c);
63316 // N * Q = 2 * ((N / 2) * Q + Q))
63317 b = b.dbl();
63318 } else {
63319 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
63320 b = a.diffAdd(b, c);
63321 // N * Q + Q = 2 * ((N / 2) * Q + Q)
63322 a = a.dbl();
63323 }
63324 }
63325 return b;
63326 };
63327
63328 Point.prototype.mulAdd = function mulAdd() {
63329 throw new Error('Not supported on Montgomery curve');
63330 };
63331
63332 Point.prototype.jumlAdd = function jumlAdd() {
63333 throw new Error('Not supported on Montgomery curve');
63334 };
63335
63336 Point.prototype.eq = function eq(other) {
63337 return this.getX().cmp(other.getX()) === 0;
63338 };
63339
63340 Point.prototype.normalize = function normalize() {
63341 this.x = this.x.redMul(this.z.redInvm());
63342 this.z = this.curve.one;
63343 return this;
63344 };
63345
63346 Point.prototype.getX = function getX() {
63347 // Normalize coordinates
63348 this.normalize();
63349
63350 return this.x.fromRed();
63351 };
63352
63353 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
63354 'use strict';
63355
63356 var curve = require('../curve');
63357 var elliptic = require('../../elliptic');
63358 var BN = require('bn.js');
63359 var inherits = require('inherits');
63360 var Base = curve.base;
63361
63362 var assert = elliptic.utils.assert;
63363
63364 function ShortCurve(conf) {
63365 Base.call(this, 'short', conf);
63366
63367 this.a = new BN(conf.a, 16).toRed(this.red);
63368 this.b = new BN(conf.b, 16).toRed(this.red);
63369 this.tinv = this.two.redInvm();
63370
63371 this.zeroA = this.a.fromRed().cmpn(0) === 0;
63372 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
63373
63374 // If the curve is endomorphic, precalculate beta and lambda
63375 this.endo = this._getEndomorphism(conf);
63376 this._endoWnafT1 = new Array(4);
63377 this._endoWnafT2 = new Array(4);
63378 }
63379 inherits(ShortCurve, Base);
63380 module.exports = ShortCurve;
63381
63382 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
63383 // No efficient endomorphism
63384 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
63385 return;
63386
63387 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
63388 var beta;
63389 var lambda;
63390 if (conf.beta) {
63391 beta = new BN(conf.beta, 16).toRed(this.red);
63392 } else {
63393 var betas = this._getEndoRoots(this.p);
63394 // Choose the smallest beta
63395 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
63396 beta = beta.toRed(this.red);
63397 }
63398 if (conf.lambda) {
63399 lambda = new BN(conf.lambda, 16);
63400 } else {
63401 // Choose the lambda that is matching selected beta
63402 var lambdas = this._getEndoRoots(this.n);
63403 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
63404 lambda = lambdas[0];
63405 } else {
63406 lambda = lambdas[1];
63407 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
63408 }
63409 }
63410
63411 // Get basis vectors, used for balanced length-two representation
63412 var basis;
63413 if (conf.basis) {
63414 basis = conf.basis.map(function(vec) {
63415 return {
63416 a: new BN(vec.a, 16),
63417 b: new BN(vec.b, 16)
63418 };
63419 });
63420 } else {
63421 basis = this._getEndoBasis(lambda);
63422 }
63423
63424 return {
63425 beta: beta,
63426 lambda: lambda,
63427 basis: basis
63428 };
63429 };
63430
63431 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
63432 // Find roots of for x^2 + x + 1 in F
63433 // Root = (-1 +- Sqrt(-3)) / 2
63434 //
63435 var red = num === this.p ? this.red : BN.mont(num);
63436 var tinv = new BN(2).toRed(red).redInvm();
63437 var ntinv = tinv.redNeg();
63438
63439 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
63440
63441 var l1 = ntinv.redAdd(s).fromRed();
63442 var l2 = ntinv.redSub(s).fromRed();
63443 return [ l1, l2 ];
63444 };
63445
63446 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
63447 // aprxSqrt >= sqrt(this.n)
63448 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
63449
63450 // 3.74
63451 // Run EGCD, until r(L + 1) < aprxSqrt
63452 var u = lambda;
63453 var v = this.n.clone();
63454 var x1 = new BN(1);
63455 var y1 = new BN(0);
63456 var x2 = new BN(0);
63457 var y2 = new BN(1);
63458
63459 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
63460 var a0;
63461 var b0;
63462 // First vector
63463 var a1;
63464 var b1;
63465 // Second vector
63466 var a2;
63467 var b2;
63468
63469 var prevR;
63470 var i = 0;
63471 var r;
63472 var x;
63473 while (u.cmpn(0) !== 0) {
63474 var q = v.div(u);
63475 r = v.sub(q.mul(u));
63476 x = x2.sub(q.mul(x1));
63477 var y = y2.sub(q.mul(y1));
63478
63479 if (!a1 && r.cmp(aprxSqrt) < 0) {
63480 a0 = prevR.neg();
63481 b0 = x1;
63482 a1 = r.neg();
63483 b1 = x;
63484 } else if (a1 && ++i === 2) {
63485 break;
63486 }
63487 prevR = r;
63488
63489 v = u;
63490 u = r;
63491 x2 = x1;
63492 x1 = x;
63493 y2 = y1;
63494 y1 = y;
63495 }
63496 a2 = r.neg();
63497 b2 = x;
63498
63499 var len1 = a1.sqr().add(b1.sqr());
63500 var len2 = a2.sqr().add(b2.sqr());
63501 if (len2.cmp(len1) >= 0) {
63502 a2 = a0;
63503 b2 = b0;
63504 }
63505
63506 // Normalize signs
63507 if (a1.negative) {
63508 a1 = a1.neg();
63509 b1 = b1.neg();
63510 }
63511 if (a2.negative) {
63512 a2 = a2.neg();
63513 b2 = b2.neg();
63514 }
63515
63516 return [
63517 { a: a1, b: b1 },
63518 { a: a2, b: b2 }
63519 ];
63520 };
63521
63522 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
63523 var basis = this.endo.basis;
63524 var v1 = basis[0];
63525 var v2 = basis[1];
63526
63527 var c1 = v2.b.mul(k).divRound(this.n);
63528 var c2 = v1.b.neg().mul(k).divRound(this.n);
63529
63530 var p1 = c1.mul(v1.a);
63531 var p2 = c2.mul(v2.a);
63532 var q1 = c1.mul(v1.b);
63533 var q2 = c2.mul(v2.b);
63534
63535 // Calculate answer
63536 var k1 = k.sub(p1).sub(p2);
63537 var k2 = q1.add(q2).neg();
63538 return { k1: k1, k2: k2 };
63539 };
63540
63541 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
63542 x = new BN(x, 16);
63543 if (!x.red)
63544 x = x.toRed(this.red);
63545
63546 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
63547 var y = y2.redSqrt();
63548 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
63549 throw new Error('invalid point');
63550
63551 // XXX Is there any way to tell if the number is odd without converting it
63552 // to non-red form?
63553 var isOdd = y.fromRed().isOdd();
63554 if (odd && !isOdd || !odd && isOdd)
63555 y = y.redNeg();
63556
63557 return this.point(x, y);
63558 };
63559
63560 ShortCurve.prototype.validate = function validate(point) {
63561 if (point.inf)
63562 return true;
63563
63564 var x = point.x;
63565 var y = point.y;
63566
63567 var ax = this.a.redMul(x);
63568 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
63569 return y.redSqr().redISub(rhs).cmpn(0) === 0;
63570 };
63571
63572 ShortCurve.prototype._endoWnafMulAdd =
63573 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
63574 var npoints = this._endoWnafT1;
63575 var ncoeffs = this._endoWnafT2;
63576 for (var i = 0; i < points.length; i++) {
63577 var split = this._endoSplit(coeffs[i]);
63578 var p = points[i];
63579 var beta = p._getBeta();
63580
63581 if (split.k1.negative) {
63582 split.k1.ineg();
63583 p = p.neg(true);
63584 }
63585 if (split.k2.negative) {
63586 split.k2.ineg();
63587 beta = beta.neg(true);
63588 }
63589
63590 npoints[i * 2] = p;
63591 npoints[i * 2 + 1] = beta;
63592 ncoeffs[i * 2] = split.k1;
63593 ncoeffs[i * 2 + 1] = split.k2;
63594 }
63595 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
63596
63597 // Clean-up references to points and coefficients
63598 for (var j = 0; j < i * 2; j++) {
63599 npoints[j] = null;
63600 ncoeffs[j] = null;
63601 }
63602 return res;
63603 };
63604
63605 function Point(curve, x, y, isRed) {
63606 Base.BasePoint.call(this, curve, 'affine');
63607 if (x === null && y === null) {
63608 this.x = null;
63609 this.y = null;
63610 this.inf = true;
63611 } else {
63612 this.x = new BN(x, 16);
63613 this.y = new BN(y, 16);
63614 // Force redgomery representation when loading from JSON
63615 if (isRed) {
63616 this.x.forceRed(this.curve.red);
63617 this.y.forceRed(this.curve.red);
63618 }
63619 if (!this.x.red)
63620 this.x = this.x.toRed(this.curve.red);
63621 if (!this.y.red)
63622 this.y = this.y.toRed(this.curve.red);
63623 this.inf = false;
63624 }
63625 }
63626 inherits(Point, Base.BasePoint);
63627
63628 ShortCurve.prototype.point = function point(x, y, isRed) {
63629 return new Point(this, x, y, isRed);
63630 };
63631
63632 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
63633 return Point.fromJSON(this, obj, red);
63634 };
63635
63636 Point.prototype._getBeta = function _getBeta() {
63637 if (!this.curve.endo)
63638 return;
63639
63640 var pre = this.precomputed;
63641 if (pre && pre.beta)
63642 return pre.beta;
63643
63644 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
63645 if (pre) {
63646 var curve = this.curve;
63647 var endoMul = function(p) {
63648 return curve.point(p.x.redMul(curve.endo.beta), p.y);
63649 };
63650 pre.beta = beta;
63651 beta.precomputed = {
63652 beta: null,
63653 naf: pre.naf && {
63654 wnd: pre.naf.wnd,
63655 points: pre.naf.points.map(endoMul)
63656 },
63657 doubles: pre.doubles && {
63658 step: pre.doubles.step,
63659 points: pre.doubles.points.map(endoMul)
63660 }
63661 };
63662 }
63663 return beta;
63664 };
63665
63666 Point.prototype.toJSON = function toJSON() {
63667 if (!this.precomputed)
63668 return [ this.x, this.y ];
63669
63670 return [ this.x, this.y, this.precomputed && {
63671 doubles: this.precomputed.doubles && {
63672 step: this.precomputed.doubles.step,
63673 points: this.precomputed.doubles.points.slice(1)
63674 },
63675 naf: this.precomputed.naf && {
63676 wnd: this.precomputed.naf.wnd,
63677 points: this.precomputed.naf.points.slice(1)
63678 }
63679 } ];
63680 };
63681
63682 Point.fromJSON = function fromJSON(curve, obj, red) {
63683 if (typeof obj === 'string')
63684 obj = JSON.parse(obj);
63685 var res = curve.point(obj[0], obj[1], red);
63686 if (!obj[2])
63687 return res;
63688
63689 function obj2point(obj) {
63690 return curve.point(obj[0], obj[1], red);
63691 }
63692
63693 var pre = obj[2];
63694 res.precomputed = {
63695 beta: null,
63696 doubles: pre.doubles && {
63697 step: pre.doubles.step,
63698 points: [ res ].concat(pre.doubles.points.map(obj2point))
63699 },
63700 naf: pre.naf && {
63701 wnd: pre.naf.wnd,
63702 points: [ res ].concat(pre.naf.points.map(obj2point))
63703 }
63704 };
63705 return res;
63706 };
63707
63708 Point.prototype.inspect = function inspect() {
63709 if (this.isInfinity())
63710 return '<EC Point Infinity>';
63711 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63712 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
63713 };
63714
63715 Point.prototype.isInfinity = function isInfinity() {
63716 return this.inf;
63717 };
63718
63719 Point.prototype.add = function add(p) {
63720 // O + P = P
63721 if (this.inf)
63722 return p;
63723
63724 // P + O = P
63725 if (p.inf)
63726 return this;
63727
63728 // P + P = 2P
63729 if (this.eq(p))
63730 return this.dbl();
63731
63732 // P + (-P) = O
63733 if (this.neg().eq(p))
63734 return this.curve.point(null, null);
63735
63736 // P + Q = O
63737 if (this.x.cmp(p.x) === 0)
63738 return this.curve.point(null, null);
63739
63740 var c = this.y.redSub(p.y);
63741 if (c.cmpn(0) !== 0)
63742 c = c.redMul(this.x.redSub(p.x).redInvm());
63743 var nx = c.redSqr().redISub(this.x).redISub(p.x);
63744 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63745 return this.curve.point(nx, ny);
63746 };
63747
63748 Point.prototype.dbl = function dbl() {
63749 if (this.inf)
63750 return this;
63751
63752 // 2P = O
63753 var ys1 = this.y.redAdd(this.y);
63754 if (ys1.cmpn(0) === 0)
63755 return this.curve.point(null, null);
63756
63757 var a = this.curve.a;
63758
63759 var x2 = this.x.redSqr();
63760 var dyinv = ys1.redInvm();
63761 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
63762
63763 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
63764 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63765 return this.curve.point(nx, ny);
63766 };
63767
63768 Point.prototype.getX = function getX() {
63769 return this.x.fromRed();
63770 };
63771
63772 Point.prototype.getY = function getY() {
63773 return this.y.fromRed();
63774 };
63775
63776 Point.prototype.mul = function mul(k) {
63777 k = new BN(k, 16);
63778
63779 if (this._hasDoubles(k))
63780 return this.curve._fixedNafMul(this, k);
63781 else if (this.curve.endo)
63782 return this.curve._endoWnafMulAdd([ this ], [ k ]);
63783 else
63784 return this.curve._wnafMul(this, k);
63785 };
63786
63787 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
63788 var points = [ this, p2 ];
63789 var coeffs = [ k1, k2 ];
63790 if (this.curve.endo)
63791 return this.curve._endoWnafMulAdd(points, coeffs);
63792 else
63793 return this.curve._wnafMulAdd(1, points, coeffs, 2);
63794 };
63795
63796 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
63797 var points = [ this, p2 ];
63798 var coeffs = [ k1, k2 ];
63799 if (this.curve.endo)
63800 return this.curve._endoWnafMulAdd(points, coeffs, true);
63801 else
63802 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
63803 };
63804
63805 Point.prototype.eq = function eq(p) {
63806 return this === p ||
63807 this.inf === p.inf &&
63808 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
63809 };
63810
63811 Point.prototype.neg = function neg(_precompute) {
63812 if (this.inf)
63813 return this;
63814
63815 var res = this.curve.point(this.x, this.y.redNeg());
63816 if (_precompute && this.precomputed) {
63817 var pre = this.precomputed;
63818 var negate = function(p) {
63819 return p.neg();
63820 };
63821 res.precomputed = {
63822 naf: pre.naf && {
63823 wnd: pre.naf.wnd,
63824 points: pre.naf.points.map(negate)
63825 },
63826 doubles: pre.doubles && {
63827 step: pre.doubles.step,
63828 points: pre.doubles.points.map(negate)
63829 }
63830 };
63831 }
63832 return res;
63833 };
63834
63835 Point.prototype.toJ = function toJ() {
63836 if (this.inf)
63837 return this.curve.jpoint(null, null, null);
63838
63839 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
63840 return res;
63841 };
63842
63843 function JPoint(curve, x, y, z) {
63844 Base.BasePoint.call(this, curve, 'jacobian');
63845 if (x === null && y === null && z === null) {
63846 this.x = this.curve.one;
63847 this.y = this.curve.one;
63848 this.z = new BN(0);
63849 } else {
63850 this.x = new BN(x, 16);
63851 this.y = new BN(y, 16);
63852 this.z = new BN(z, 16);
63853 }
63854 if (!this.x.red)
63855 this.x = this.x.toRed(this.curve.red);
63856 if (!this.y.red)
63857 this.y = this.y.toRed(this.curve.red);
63858 if (!this.z.red)
63859 this.z = this.z.toRed(this.curve.red);
63860
63861 this.zOne = this.z === this.curve.one;
63862 }
63863 inherits(JPoint, Base.BasePoint);
63864
63865 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
63866 return new JPoint(this, x, y, z);
63867 };
63868
63869 JPoint.prototype.toP = function toP() {
63870 if (this.isInfinity())
63871 return this.curve.point(null, null);
63872
63873 var zinv = this.z.redInvm();
63874 var zinv2 = zinv.redSqr();
63875 var ax = this.x.redMul(zinv2);
63876 var ay = this.y.redMul(zinv2).redMul(zinv);
63877
63878 return this.curve.point(ax, ay);
63879 };
63880
63881 JPoint.prototype.neg = function neg() {
63882 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
63883 };
63884
63885 JPoint.prototype.add = function add(p) {
63886 // O + P = P
63887 if (this.isInfinity())
63888 return p;
63889
63890 // P + O = P
63891 if (p.isInfinity())
63892 return this;
63893
63894 // 12M + 4S + 7A
63895 var pz2 = p.z.redSqr();
63896 var z2 = this.z.redSqr();
63897 var u1 = this.x.redMul(pz2);
63898 var u2 = p.x.redMul(z2);
63899 var s1 = this.y.redMul(pz2.redMul(p.z));
63900 var s2 = p.y.redMul(z2.redMul(this.z));
63901
63902 var h = u1.redSub(u2);
63903 var r = s1.redSub(s2);
63904 if (h.cmpn(0) === 0) {
63905 if (r.cmpn(0) !== 0)
63906 return this.curve.jpoint(null, null, null);
63907 else
63908 return this.dbl();
63909 }
63910
63911 var h2 = h.redSqr();
63912 var h3 = h2.redMul(h);
63913 var v = u1.redMul(h2);
63914
63915 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63916 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63917 var nz = this.z.redMul(p.z).redMul(h);
63918
63919 return this.curve.jpoint(nx, ny, nz);
63920 };
63921
63922 JPoint.prototype.mixedAdd = function mixedAdd(p) {
63923 // O + P = P
63924 if (this.isInfinity())
63925 return p.toJ();
63926
63927 // P + O = P
63928 if (p.isInfinity())
63929 return this;
63930
63931 // 8M + 3S + 7A
63932 var z2 = this.z.redSqr();
63933 var u1 = this.x;
63934 var u2 = p.x.redMul(z2);
63935 var s1 = this.y;
63936 var s2 = p.y.redMul(z2).redMul(this.z);
63937
63938 var h = u1.redSub(u2);
63939 var r = s1.redSub(s2);
63940 if (h.cmpn(0) === 0) {
63941 if (r.cmpn(0) !== 0)
63942 return this.curve.jpoint(null, null, null);
63943 else
63944 return this.dbl();
63945 }
63946
63947 var h2 = h.redSqr();
63948 var h3 = h2.redMul(h);
63949 var v = u1.redMul(h2);
63950
63951 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63952 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63953 var nz = this.z.redMul(h);
63954
63955 return this.curve.jpoint(nx, ny, nz);
63956 };
63957
63958 JPoint.prototype.dblp = function dblp(pow) {
63959 if (pow === 0)
63960 return this;
63961 if (this.isInfinity())
63962 return this;
63963 if (!pow)
63964 return this.dbl();
63965
63966 if (this.curve.zeroA || this.curve.threeA) {
63967 var r = this;
63968 for (var i = 0; i < pow; i++)
63969 r = r.dbl();
63970 return r;
63971 }
63972
63973 // 1M + 2S + 1A + N * (4S + 5M + 8A)
63974 // N = 1 => 6M + 6S + 9A
63975 var a = this.curve.a;
63976 var tinv = this.curve.tinv;
63977
63978 var jx = this.x;
63979 var jy = this.y;
63980 var jz = this.z;
63981 var jz4 = jz.redSqr().redSqr();
63982
63983 // Reuse results
63984 var jyd = jy.redAdd(jy);
63985 for (var i = 0; i < pow; i++) {
63986 var jx2 = jx.redSqr();
63987 var jyd2 = jyd.redSqr();
63988 var jyd4 = jyd2.redSqr();
63989 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63990
63991 var t1 = jx.redMul(jyd2);
63992 var nx = c.redSqr().redISub(t1.redAdd(t1));
63993 var t2 = t1.redISub(nx);
63994 var dny = c.redMul(t2);
63995 dny = dny.redIAdd(dny).redISub(jyd4);
63996 var nz = jyd.redMul(jz);
63997 if (i + 1 < pow)
63998 jz4 = jz4.redMul(jyd4);
63999
64000 jx = nx;
64001 jz = nz;
64002 jyd = dny;
64003 }
64004
64005 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
64006 };
64007
64008 JPoint.prototype.dbl = function dbl() {
64009 if (this.isInfinity())
64010 return this;
64011
64012 if (this.curve.zeroA)
64013 return this._zeroDbl();
64014 else if (this.curve.threeA)
64015 return this._threeDbl();
64016 else
64017 return this._dbl();
64018 };
64019
64020 JPoint.prototype._zeroDbl = function _zeroDbl() {
64021 var nx;
64022 var ny;
64023 var nz;
64024 // Z = 1
64025 if (this.zOne) {
64026 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
64027 // #doubling-mdbl-2007-bl
64028 // 1M + 5S + 14A
64029
64030 // XX = X1^2
64031 var xx = this.x.redSqr();
64032 // YY = Y1^2
64033 var yy = this.y.redSqr();
64034 // YYYY = YY^2
64035 var yyyy = yy.redSqr();
64036 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64037 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64038 s = s.redIAdd(s);
64039 // M = 3 * XX + a; a = 0
64040 var m = xx.redAdd(xx).redIAdd(xx);
64041 // T = M ^ 2 - 2*S
64042 var t = m.redSqr().redISub(s).redISub(s);
64043
64044 // 8 * YYYY
64045 var yyyy8 = yyyy.redIAdd(yyyy);
64046 yyyy8 = yyyy8.redIAdd(yyyy8);
64047 yyyy8 = yyyy8.redIAdd(yyyy8);
64048
64049 // X3 = T
64050 nx = t;
64051 // Y3 = M * (S - T) - 8 * YYYY
64052 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64053 // Z3 = 2*Y1
64054 nz = this.y.redAdd(this.y);
64055 } else {
64056 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
64057 // #doubling-dbl-2009-l
64058 // 2M + 5S + 13A
64059
64060 // A = X1^2
64061 var a = this.x.redSqr();
64062 // B = Y1^2
64063 var b = this.y.redSqr();
64064 // C = B^2
64065 var c = b.redSqr();
64066 // D = 2 * ((X1 + B)^2 - A - C)
64067 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
64068 d = d.redIAdd(d);
64069 // E = 3 * A
64070 var e = a.redAdd(a).redIAdd(a);
64071 // F = E^2
64072 var f = e.redSqr();
64073
64074 // 8 * C
64075 var c8 = c.redIAdd(c);
64076 c8 = c8.redIAdd(c8);
64077 c8 = c8.redIAdd(c8);
64078
64079 // X3 = F - 2 * D
64080 nx = f.redISub(d).redISub(d);
64081 // Y3 = E * (D - X3) - 8 * C
64082 ny = e.redMul(d.redISub(nx)).redISub(c8);
64083 // Z3 = 2 * Y1 * Z1
64084 nz = this.y.redMul(this.z);
64085 nz = nz.redIAdd(nz);
64086 }
64087
64088 return this.curve.jpoint(nx, ny, nz);
64089 };
64090
64091 JPoint.prototype._threeDbl = function _threeDbl() {
64092 var nx;
64093 var ny;
64094 var nz;
64095 // Z = 1
64096 if (this.zOne) {
64097 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
64098 // #doubling-mdbl-2007-bl
64099 // 1M + 5S + 15A
64100
64101 // XX = X1^2
64102 var xx = this.x.redSqr();
64103 // YY = Y1^2
64104 var yy = this.y.redSqr();
64105 // YYYY = YY^2
64106 var yyyy = yy.redSqr();
64107 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64108 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64109 s = s.redIAdd(s);
64110 // M = 3 * XX + a
64111 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
64112 // T = M^2 - 2 * S
64113 var t = m.redSqr().redISub(s).redISub(s);
64114 // X3 = T
64115 nx = t;
64116 // Y3 = M * (S - T) - 8 * YYYY
64117 var yyyy8 = yyyy.redIAdd(yyyy);
64118 yyyy8 = yyyy8.redIAdd(yyyy8);
64119 yyyy8 = yyyy8.redIAdd(yyyy8);
64120 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64121 // Z3 = 2 * Y1
64122 nz = this.y.redAdd(this.y);
64123 } else {
64124 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
64125 // 3M + 5S
64126
64127 // delta = Z1^2
64128 var delta = this.z.redSqr();
64129 // gamma = Y1^2
64130 var gamma = this.y.redSqr();
64131 // beta = X1 * gamma
64132 var beta = this.x.redMul(gamma);
64133 // alpha = 3 * (X1 - delta) * (X1 + delta)
64134 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
64135 alpha = alpha.redAdd(alpha).redIAdd(alpha);
64136 // X3 = alpha^2 - 8 * beta
64137 var beta4 = beta.redIAdd(beta);
64138 beta4 = beta4.redIAdd(beta4);
64139 var beta8 = beta4.redAdd(beta4);
64140 nx = alpha.redSqr().redISub(beta8);
64141 // Z3 = (Y1 + Z1)^2 - gamma - delta
64142 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
64143 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
64144 var ggamma8 = gamma.redSqr();
64145 ggamma8 = ggamma8.redIAdd(ggamma8);
64146 ggamma8 = ggamma8.redIAdd(ggamma8);
64147 ggamma8 = ggamma8.redIAdd(ggamma8);
64148 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
64149 }
64150
64151 return this.curve.jpoint(nx, ny, nz);
64152 };
64153
64154 JPoint.prototype._dbl = function _dbl() {
64155 var a = this.curve.a;
64156
64157 // 4M + 6S + 10A
64158 var jx = this.x;
64159 var jy = this.y;
64160 var jz = this.z;
64161 var jz4 = jz.redSqr().redSqr();
64162
64163 var jx2 = jx.redSqr();
64164 var jy2 = jy.redSqr();
64165
64166 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
64167
64168 var jxd4 = jx.redAdd(jx);
64169 jxd4 = jxd4.redIAdd(jxd4);
64170 var t1 = jxd4.redMul(jy2);
64171 var nx = c.redSqr().redISub(t1.redAdd(t1));
64172 var t2 = t1.redISub(nx);
64173
64174 var jyd8 = jy2.redSqr();
64175 jyd8 = jyd8.redIAdd(jyd8);
64176 jyd8 = jyd8.redIAdd(jyd8);
64177 jyd8 = jyd8.redIAdd(jyd8);
64178 var ny = c.redMul(t2).redISub(jyd8);
64179 var nz = jy.redAdd(jy).redMul(jz);
64180
64181 return this.curve.jpoint(nx, ny, nz);
64182 };
64183
64184 JPoint.prototype.trpl = function trpl() {
64185 if (!this.curve.zeroA)
64186 return this.dbl().add(this);
64187
64188 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
64189 // 5M + 10S + ...
64190
64191 // XX = X1^2
64192 var xx = this.x.redSqr();
64193 // YY = Y1^2
64194 var yy = this.y.redSqr();
64195 // ZZ = Z1^2
64196 var zz = this.z.redSqr();
64197 // YYYY = YY^2
64198 var yyyy = yy.redSqr();
64199 // M = 3 * XX + a * ZZ2; a = 0
64200 var m = xx.redAdd(xx).redIAdd(xx);
64201 // MM = M^2
64202 var mm = m.redSqr();
64203 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
64204 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64205 e = e.redIAdd(e);
64206 e = e.redAdd(e).redIAdd(e);
64207 e = e.redISub(mm);
64208 // EE = E^2
64209 var ee = e.redSqr();
64210 // T = 16*YYYY
64211 var t = yyyy.redIAdd(yyyy);
64212 t = t.redIAdd(t);
64213 t = t.redIAdd(t);
64214 t = t.redIAdd(t);
64215 // U = (M + E)^2 - MM - EE - T
64216 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
64217 // X3 = 4 * (X1 * EE - 4 * YY * U)
64218 var yyu4 = yy.redMul(u);
64219 yyu4 = yyu4.redIAdd(yyu4);
64220 yyu4 = yyu4.redIAdd(yyu4);
64221 var nx = this.x.redMul(ee).redISub(yyu4);
64222 nx = nx.redIAdd(nx);
64223 nx = nx.redIAdd(nx);
64224 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
64225 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
64226 ny = ny.redIAdd(ny);
64227 ny = ny.redIAdd(ny);
64228 ny = ny.redIAdd(ny);
64229 // Z3 = (Z1 + E)^2 - ZZ - EE
64230 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
64231
64232 return this.curve.jpoint(nx, ny, nz);
64233 };
64234
64235 JPoint.prototype.mul = function mul(k, kbase) {
64236 k = new BN(k, kbase);
64237
64238 return this.curve._wnafMul(this, k);
64239 };
64240
64241 JPoint.prototype.eq = function eq(p) {
64242 if (p.type === 'affine')
64243 return this.eq(p.toJ());
64244
64245 if (this === p)
64246 return true;
64247
64248 // x1 * z2^2 == x2 * z1^2
64249 var z2 = this.z.redSqr();
64250 var pz2 = p.z.redSqr();
64251 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
64252 return false;
64253
64254 // y1 * z2^3 == y2 * z1^3
64255 var z3 = z2.redMul(this.z);
64256 var pz3 = pz2.redMul(p.z);
64257 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
64258 };
64259
64260 JPoint.prototype.eqXToP = function eqXToP(x) {
64261 var zs = this.z.redSqr();
64262 var rx = x.toRed(this.curve.red).redMul(zs);
64263 if (this.x.cmp(rx) === 0)
64264 return true;
64265
64266 var xc = x.clone();
64267 var t = this.curve.redN.redMul(zs);
64268 for (;;) {
64269 xc.iadd(this.curve.n);
64270 if (xc.cmp(this.curve.p) >= 0)
64271 return false;
64272
64273 rx.redIAdd(t);
64274 if (this.x.cmp(rx) === 0)
64275 return true;
64276 }
64277 return false;
64278 };
64279
64280 JPoint.prototype.inspect = function inspect() {
64281 if (this.isInfinity())
64282 return '<EC JPoint Infinity>';
64283 return '<EC JPoint x: ' + this.x.toString(16, 2) +
64284 ' y: ' + this.y.toString(16, 2) +
64285 ' z: ' + this.z.toString(16, 2) + '>';
64286 };
64287
64288 JPoint.prototype.isInfinity = function isInfinity() {
64289 // XXX This code assumes that zero is always zero in red
64290 return this.z.cmpn(0) === 0;
64291 };
64292
64293 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
64294 'use strict';
64295
64296 var curves = exports;
64297
64298 var hash = require('hash.js');
64299 var elliptic = require('../elliptic');
64300
64301 var assert = elliptic.utils.assert;
64302
64303 function PresetCurve(options) {
64304 if (options.type === 'short')
64305 this.curve = new elliptic.curve.short(options);
64306 else if (options.type === 'edwards')
64307 this.curve = new elliptic.curve.edwards(options);
64308 else
64309 this.curve = new elliptic.curve.mont(options);
64310 this.g = this.curve.g;
64311 this.n = this.curve.n;
64312 this.hash = options.hash;
64313
64314 assert(this.g.validate(), 'Invalid curve');
64315 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
64316 }
64317 curves.PresetCurve = PresetCurve;
64318
64319 function defineCurve(name, options) {
64320 Object.defineProperty(curves, name, {
64321 configurable: true,
64322 enumerable: true,
64323 get: function() {
64324 var curve = new PresetCurve(options);
64325 Object.defineProperty(curves, name, {
64326 configurable: true,
64327 enumerable: true,
64328 value: curve
64329 });
64330 return curve;
64331 }
64332 });
64333 }
64334
64335 defineCurve('p192', {
64336 type: 'short',
64337 prime: 'p192',
64338 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
64339 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
64340 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
64341 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
64342 hash: hash.sha256,
64343 gRed: false,
64344 g: [
64345 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
64346 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
64347 ]
64348 });
64349
64350 defineCurve('p224', {
64351 type: 'short',
64352 prime: 'p224',
64353 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
64354 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
64355 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
64356 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
64357 hash: hash.sha256,
64358 gRed: false,
64359 g: [
64360 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
64361 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
64362 ]
64363 });
64364
64365 defineCurve('p256', {
64366 type: 'short',
64367 prime: null,
64368 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
64369 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
64370 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
64371 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
64372 hash: hash.sha256,
64373 gRed: false,
64374 g: [
64375 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
64376 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
64377 ]
64378 });
64379
64380 defineCurve('p384', {
64381 type: 'short',
64382 prime: null,
64383 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64384 'fffffffe ffffffff 00000000 00000000 ffffffff',
64385 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64386 'fffffffe ffffffff 00000000 00000000 fffffffc',
64387 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
64388 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
64389 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
64390 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
64391 hash: hash.sha384,
64392 gRed: false,
64393 g: [
64394 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
64395 '5502f25d bf55296c 3a545e38 72760ab7',
64396 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
64397 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
64398 ]
64399 });
64400
64401 defineCurve('p521', {
64402 type: 'short',
64403 prime: null,
64404 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64405 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64406 'ffffffff ffffffff ffffffff ffffffff ffffffff',
64407 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64408 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64409 'ffffffff ffffffff ffffffff ffffffff fffffffc',
64410 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
64411 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
64412 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
64413 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64414 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
64415 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
64416 hash: hash.sha512,
64417 gRed: false,
64418 g: [
64419 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
64420 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
64421 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
64422 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
64423 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
64424 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
64425 ]
64426 });
64427
64428 defineCurve('curve25519', {
64429 type: 'mont',
64430 prime: 'p25519',
64431 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64432 a: '76d06',
64433 b: '1',
64434 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64435 hash: hash.sha256,
64436 gRed: false,
64437 g: [
64438 '9'
64439 ]
64440 });
64441
64442 defineCurve('ed25519', {
64443 type: 'edwards',
64444 prime: 'p25519',
64445 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64446 a: '-1',
64447 c: '1',
64448 // -121665 * (121666^(-1)) (mod P)
64449 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
64450 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64451 hash: hash.sha256,
64452 gRed: false,
64453 g: [
64454 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
64455
64456 // 4/5
64457 '6666666666666666666666666666666666666666666666666666666666666658'
64458 ]
64459 });
64460
64461 var pre;
64462 try {
64463 pre = require('./precomputed/secp256k1');
64464 } catch (e) {
64465 pre = undefined;
64466 }
64467
64468 defineCurve('secp256k1', {
64469 type: 'short',
64470 prime: 'k256',
64471 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
64472 a: '0',
64473 b: '7',
64474 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
64475 h: '1',
64476 hash: hash.sha256,
64477
64478 // Precomputed endomorphism
64479 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
64480 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
64481 basis: [
64482 {
64483 a: '3086d221a7d46bcde86c90e49284eb15',
64484 b: '-e4437ed6010e88286f547fa90abfe4c3'
64485 },
64486 {
64487 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
64488 b: '3086d221a7d46bcde86c90e49284eb15'
64489 }
64490 ],
64491
64492 gRed: false,
64493 g: [
64494 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
64495 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
64496 pre
64497 ]
64498 });
64499
64500 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
64501 'use strict';
64502
64503 var BN = require('bn.js');
64504 var HmacDRBG = require('hmac-drbg');
64505 var elliptic = require('../../elliptic');
64506 var utils = elliptic.utils;
64507 var assert = utils.assert;
64508
64509 var KeyPair = require('./key');
64510 var Signature = require('./signature');
64511
64512 function EC(options) {
64513 if (!(this instanceof EC))
64514 return new EC(options);
64515
64516 // Shortcut `elliptic.ec(curve-name)`
64517 if (typeof options === 'string') {
64518 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
64519
64520 options = elliptic.curves[options];
64521 }
64522
64523 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
64524 if (options instanceof elliptic.curves.PresetCurve)
64525 options = { curve: options };
64526
64527 this.curve = options.curve.curve;
64528 this.n = this.curve.n;
64529 this.nh = this.n.ushrn(1);
64530 this.g = this.curve.g;
64531
64532 // Point on curve
64533 this.g = options.curve.g;
64534 this.g.precompute(options.curve.n.bitLength() + 1);
64535
64536 // Hash for function for DRBG
64537 this.hash = options.hash || options.curve.hash;
64538 }
64539 module.exports = EC;
64540
64541 EC.prototype.keyPair = function keyPair(options) {
64542 return new KeyPair(this, options);
64543 };
64544
64545 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
64546 return KeyPair.fromPrivate(this, priv, enc);
64547 };
64548
64549 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
64550 return KeyPair.fromPublic(this, pub, enc);
64551 };
64552
64553 EC.prototype.genKeyPair = function genKeyPair(options) {
64554 if (!options)
64555 options = {};
64556
64557 // Instantiate Hmac_DRBG
64558 var drbg = new HmacDRBG({
64559 hash: this.hash,
64560 pers: options.pers,
64561 persEnc: options.persEnc || 'utf8',
64562 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
64563 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
64564 nonce: this.n.toArray()
64565 });
64566
64567 var bytes = this.n.byteLength();
64568 var ns2 = this.n.sub(new BN(2));
64569 do {
64570 var priv = new BN(drbg.generate(bytes));
64571 if (priv.cmp(ns2) > 0)
64572 continue;
64573
64574 priv.iaddn(1);
64575 return this.keyFromPrivate(priv);
64576 } while (true);
64577 };
64578
64579 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
64580 var delta = msg.byteLength() * 8 - this.n.bitLength();
64581 if (delta > 0)
64582 msg = msg.ushrn(delta);
64583 if (!truncOnly && msg.cmp(this.n) >= 0)
64584 return msg.sub(this.n);
64585 else
64586 return msg;
64587 };
64588
64589 EC.prototype.sign = function sign(msg, key, enc, options) {
64590 if (typeof enc === 'object') {
64591 options = enc;
64592 enc = null;
64593 }
64594 if (!options)
64595 options = {};
64596
64597 key = this.keyFromPrivate(key, enc);
64598 msg = this._truncateToN(new BN(msg, 16));
64599
64600 // Zero-extend key to provide enough entropy
64601 var bytes = this.n.byteLength();
64602 var bkey = key.getPrivate().toArray('be', bytes);
64603
64604 // Zero-extend nonce to have the same byte size as N
64605 var nonce = msg.toArray('be', bytes);
64606
64607 // Instantiate Hmac_DRBG
64608 var drbg = new HmacDRBG({
64609 hash: this.hash,
64610 entropy: bkey,
64611 nonce: nonce,
64612 pers: options.pers,
64613 persEnc: options.persEnc || 'utf8'
64614 });
64615
64616 // Number of bytes to generate
64617 var ns1 = this.n.sub(new BN(1));
64618
64619 for (var iter = 0; true; iter++) {
64620 var k = options.k ?
64621 options.k(iter) :
64622 new BN(drbg.generate(this.n.byteLength()));
64623 k = this._truncateToN(k, true);
64624 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
64625 continue;
64626
64627 var kp = this.g.mul(k);
64628 if (kp.isInfinity())
64629 continue;
64630
64631 var kpX = kp.getX();
64632 var r = kpX.umod(this.n);
64633 if (r.cmpn(0) === 0)
64634 continue;
64635
64636 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
64637 s = s.umod(this.n);
64638 if (s.cmpn(0) === 0)
64639 continue;
64640
64641 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
64642 (kpX.cmp(r) !== 0 ? 2 : 0);
64643
64644 // Use complement of `s`, if it is > `n / 2`
64645 if (options.canonical && s.cmp(this.nh) > 0) {
64646 s = this.n.sub(s);
64647 recoveryParam ^= 1;
64648 }
64649
64650 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
64651 }
64652 };
64653
64654 EC.prototype.verify = function verify(msg, signature, key, enc) {
64655 msg = this._truncateToN(new BN(msg, 16));
64656 key = this.keyFromPublic(key, enc);
64657 signature = new Signature(signature, 'hex');
64658
64659 // Perform primitive values validation
64660 var r = signature.r;
64661 var s = signature.s;
64662 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
64663 return false;
64664 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
64665 return false;
64666
64667 // Validate signature
64668 var sinv = s.invm(this.n);
64669 var u1 = sinv.mul(msg).umod(this.n);
64670 var u2 = sinv.mul(r).umod(this.n);
64671
64672 if (!this.curve._maxwellTrick) {
64673 var p = this.g.mulAdd(u1, key.getPublic(), u2);
64674 if (p.isInfinity())
64675 return false;
64676
64677 return p.getX().umod(this.n).cmp(r) === 0;
64678 }
64679
64680 // NOTE: Greg Maxwell's trick, inspired by:
64681 // https://git.io/vad3K
64682
64683 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
64684 if (p.isInfinity())
64685 return false;
64686
64687 // Compare `p.x` of Jacobian point with `r`,
64688 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
64689 // inverse of `p.z^2`
64690 return p.eqXToP(r);
64691 };
64692
64693 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
64694 assert((3 & j) === j, 'The recovery param is more than two bits');
64695 signature = new Signature(signature, enc);
64696
64697 var n = this.n;
64698 var e = new BN(msg);
64699 var r = signature.r;
64700 var s = signature.s;
64701
64702 // A set LSB signifies that the y-coordinate is odd
64703 var isYOdd = j & 1;
64704 var isSecondKey = j >> 1;
64705 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
64706 throw new Error('Unable to find sencond key candinate');
64707
64708 // 1.1. Let x = r + jn.
64709 if (isSecondKey)
64710 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
64711 else
64712 r = this.curve.pointFromX(r, isYOdd);
64713
64714 var rInv = signature.r.invm(n);
64715 var s1 = n.sub(e).mul(rInv).umod(n);
64716 var s2 = s.mul(rInv).umod(n);
64717
64718 // 1.6.1 Compute Q = r^-1 (sR - eG)
64719 // Q = r^-1 (sR + -eG)
64720 return this.g.mulAdd(s1, r, s2);
64721 };
64722
64723 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
64724 signature = new Signature(signature, enc);
64725 if (signature.recoveryParam !== null)
64726 return signature.recoveryParam;
64727
64728 for (var i = 0; i < 4; i++) {
64729 var Qprime;
64730 try {
64731 Qprime = this.recoverPubKey(e, signature, i);
64732 } catch (e) {
64733 continue;
64734 }
64735
64736 if (Qprime.eq(Q))
64737 return i;
64738 }
64739 throw new Error('Unable to find valid recovery factor');
64740 };
64741
64742 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
64743 'use strict';
64744
64745 var BN = require('bn.js');
64746 var elliptic = require('../../elliptic');
64747 var utils = elliptic.utils;
64748 var assert = utils.assert;
64749
64750 function KeyPair(ec, options) {
64751 this.ec = ec;
64752 this.priv = null;
64753 this.pub = null;
64754
64755 // KeyPair(ec, { priv: ..., pub: ... })
64756 if (options.priv)
64757 this._importPrivate(options.priv, options.privEnc);
64758 if (options.pub)
64759 this._importPublic(options.pub, options.pubEnc);
64760 }
64761 module.exports = KeyPair;
64762
64763 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
64764 if (pub instanceof KeyPair)
64765 return pub;
64766
64767 return new KeyPair(ec, {
64768 pub: pub,
64769 pubEnc: enc
64770 });
64771 };
64772
64773 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
64774 if (priv instanceof KeyPair)
64775 return priv;
64776
64777 return new KeyPair(ec, {
64778 priv: priv,
64779 privEnc: enc
64780 });
64781 };
64782
64783 KeyPair.prototype.validate = function validate() {
64784 var pub = this.getPublic();
64785
64786 if (pub.isInfinity())
64787 return { result: false, reason: 'Invalid public key' };
64788 if (!pub.validate())
64789 return { result: false, reason: 'Public key is not a point' };
64790 if (!pub.mul(this.ec.curve.n).isInfinity())
64791 return { result: false, reason: 'Public key * N != O' };
64792
64793 return { result: true, reason: null };
64794 };
64795
64796 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
64797 // compact is optional argument
64798 if (typeof compact === 'string') {
64799 enc = compact;
64800 compact = null;
64801 }
64802
64803 if (!this.pub)
64804 this.pub = this.ec.g.mul(this.priv);
64805
64806 if (!enc)
64807 return this.pub;
64808
64809 return this.pub.encode(enc, compact);
64810 };
64811
64812 KeyPair.prototype.getPrivate = function getPrivate(enc) {
64813 if (enc === 'hex')
64814 return this.priv.toString(16, 2);
64815 else
64816 return this.priv;
64817 };
64818
64819 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
64820 this.priv = new BN(key, enc || 16);
64821
64822 // Ensure that the priv won't be bigger than n, otherwise we may fail
64823 // in fixed multiplication method
64824 this.priv = this.priv.umod(this.ec.curve.n);
64825 };
64826
64827 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
64828 if (key.x || key.y) {
64829 // Montgomery points only have an `x` coordinate.
64830 // Weierstrass/Edwards points on the other hand have both `x` and
64831 // `y` coordinates.
64832 if (this.ec.curve.type === 'mont') {
64833 assert(key.x, 'Need x coordinate');
64834 } else if (this.ec.curve.type === 'short' ||
64835 this.ec.curve.type === 'edwards') {
64836 assert(key.x && key.y, 'Need both x and y coordinate');
64837 }
64838 this.pub = this.ec.curve.point(key.x, key.y);
64839 return;
64840 }
64841 this.pub = this.ec.curve.decodePoint(key, enc);
64842 };
64843
64844 // ECDH
64845 KeyPair.prototype.derive = function derive(pub) {
64846 return pub.mul(this.priv).getX();
64847 };
64848
64849 // ECDSA
64850 KeyPair.prototype.sign = function sign(msg, enc, options) {
64851 return this.ec.sign(msg, this, enc, options);
64852 };
64853
64854 KeyPair.prototype.verify = function verify(msg, signature) {
64855 return this.ec.verify(msg, signature, this);
64856 };
64857
64858 KeyPair.prototype.inspect = function inspect() {
64859 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
64860 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
64861 };
64862
64863 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
64864 'use strict';
64865
64866 var BN = require('bn.js');
64867
64868 var elliptic = require('../../elliptic');
64869 var utils = elliptic.utils;
64870 var assert = utils.assert;
64871
64872 function Signature(options, enc) {
64873 if (options instanceof Signature)
64874 return options;
64875
64876 if (this._importDER(options, enc))
64877 return;
64878
64879 assert(options.r && options.s, 'Signature without r or s');
64880 this.r = new BN(options.r, 16);
64881 this.s = new BN(options.s, 16);
64882 if (options.recoveryParam === undefined)
64883 this.recoveryParam = null;
64884 else
64885 this.recoveryParam = options.recoveryParam;
64886 }
64887 module.exports = Signature;
64888
64889 function Position() {
64890 this.place = 0;
64891 }
64892
64893 function getLength(buf, p) {
64894 var initial = buf[p.place++];
64895 if (!(initial & 0x80)) {
64896 return initial;
64897 }
64898 var octetLen = initial & 0xf;
64899 var val = 0;
64900 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
64901 val <<= 8;
64902 val |= buf[off];
64903 }
64904 p.place = off;
64905 return val;
64906 }
64907
64908 function rmPadding(buf) {
64909 var i = 0;
64910 var len = buf.length - 1;
64911 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
64912 i++;
64913 }
64914 if (i === 0) {
64915 return buf;
64916 }
64917 return buf.slice(i);
64918 }
64919
64920 Signature.prototype._importDER = function _importDER(data, enc) {
64921 data = utils.toArray(data, enc);
64922 var p = new Position();
64923 if (data[p.place++] !== 0x30) {
64924 return false;
64925 }
64926 var len = getLength(data, p);
64927 if ((len + p.place) !== data.length) {
64928 return false;
64929 }
64930 if (data[p.place++] !== 0x02) {
64931 return false;
64932 }
64933 var rlen = getLength(data, p);
64934 var r = data.slice(p.place, rlen + p.place);
64935 p.place += rlen;
64936 if (data[p.place++] !== 0x02) {
64937 return false;
64938 }
64939 var slen = getLength(data, p);
64940 if (data.length !== slen + p.place) {
64941 return false;
64942 }
64943 var s = data.slice(p.place, slen + p.place);
64944 if (r[0] === 0 && (r[1] & 0x80)) {
64945 r = r.slice(1);
64946 }
64947 if (s[0] === 0 && (s[1] & 0x80)) {
64948 s = s.slice(1);
64949 }
64950
64951 this.r = new BN(r);
64952 this.s = new BN(s);
64953 this.recoveryParam = null;
64954
64955 return true;
64956 };
64957
64958 function constructLength(arr, len) {
64959 if (len < 0x80) {
64960 arr.push(len);
64961 return;
64962 }
64963 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
64964 arr.push(octets | 0x80);
64965 while (--octets) {
64966 arr.push((len >>> (octets << 3)) & 0xff);
64967 }
64968 arr.push(len);
64969 }
64970
64971 Signature.prototype.toDER = function toDER(enc) {
64972 var r = this.r.toArray();
64973 var s = this.s.toArray();
64974
64975 // Pad values
64976 if (r[0] & 0x80)
64977 r = [ 0 ].concat(r);
64978 // Pad values
64979 if (s[0] & 0x80)
64980 s = [ 0 ].concat(s);
64981
64982 r = rmPadding(r);
64983 s = rmPadding(s);
64984
64985 while (!s[0] && !(s[1] & 0x80)) {
64986 s = s.slice(1);
64987 }
64988 var arr = [ 0x02 ];
64989 constructLength(arr, r.length);
64990 arr = arr.concat(r);
64991 arr.push(0x02);
64992 constructLength(arr, s.length);
64993 var backHalf = arr.concat(s);
64994 var res = [ 0x30 ];
64995 constructLength(res, backHalf.length);
64996 res = res.concat(backHalf);
64997 return utils.encode(res, enc);
64998 };
64999
65000 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
65001 'use strict';
65002
65003 var hash = require('hash.js');
65004 var elliptic = require('../../elliptic');
65005 var utils = elliptic.utils;
65006 var assert = utils.assert;
65007 var parseBytes = utils.parseBytes;
65008 var KeyPair = require('./key');
65009 var Signature = require('./signature');
65010
65011 function EDDSA(curve) {
65012 assert(curve === 'ed25519', 'only tested with ed25519 so far');
65013
65014 if (!(this instanceof EDDSA))
65015 return new EDDSA(curve);
65016
65017 var curve = elliptic.curves[curve].curve;
65018 this.curve = curve;
65019 this.g = curve.g;
65020 this.g.precompute(curve.n.bitLength() + 1);
65021
65022 this.pointClass = curve.point().constructor;
65023 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
65024 this.hash = hash.sha512;
65025 }
65026
65027 module.exports = EDDSA;
65028
65029 /**
65030 * @param {Array|String} message - message bytes
65031 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
65032 * @returns {Signature} - signature
65033 */
65034 EDDSA.prototype.sign = function sign(message, secret) {
65035 message = parseBytes(message);
65036 var key = this.keyFromSecret(secret);
65037 var r = this.hashInt(key.messagePrefix(), message);
65038 var R = this.g.mul(r);
65039 var Rencoded = this.encodePoint(R);
65040 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
65041 .mul(key.priv());
65042 var S = r.add(s_).umod(this.curve.n);
65043 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
65044 };
65045
65046 /**
65047 * @param {Array} message - message bytes
65048 * @param {Array|String|Signature} sig - sig bytes
65049 * @param {Array|String|Point|KeyPair} pub - public key
65050 * @returns {Boolean} - true if public key matches sig of message
65051 */
65052 EDDSA.prototype.verify = function verify(message, sig, pub) {
65053 message = parseBytes(message);
65054 sig = this.makeSignature(sig);
65055 var key = this.keyFromPublic(pub);
65056 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
65057 var SG = this.g.mul(sig.S());
65058 var RplusAh = sig.R().add(key.pub().mul(h));
65059 return RplusAh.eq(SG);
65060 };
65061
65062 EDDSA.prototype.hashInt = function hashInt() {
65063 var hash = this.hash();
65064 for (var i = 0; i < arguments.length; i++)
65065 hash.update(arguments[i]);
65066 return utils.intFromLE(hash.digest()).umod(this.curve.n);
65067 };
65068
65069 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
65070 return KeyPair.fromPublic(this, pub);
65071 };
65072
65073 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
65074 return KeyPair.fromSecret(this, secret);
65075 };
65076
65077 EDDSA.prototype.makeSignature = function makeSignature(sig) {
65078 if (sig instanceof Signature)
65079 return sig;
65080 return new Signature(this, sig);
65081 };
65082
65083 /**
65084 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
65085 *
65086 * EDDSA defines methods for encoding and decoding points and integers. These are
65087 * helper convenience methods, that pass along to utility functions implied
65088 * parameters.
65089 *
65090 */
65091 EDDSA.prototype.encodePoint = function encodePoint(point) {
65092 var enc = point.getY().toArray('le', this.encodingLength);
65093 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
65094 return enc;
65095 };
65096
65097 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
65098 bytes = utils.parseBytes(bytes);
65099
65100 var lastIx = bytes.length - 1;
65101 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
65102 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
65103
65104 var y = utils.intFromLE(normed);
65105 return this.curve.pointFromY(y, xIsOdd);
65106 };
65107
65108 EDDSA.prototype.encodeInt = function encodeInt(num) {
65109 return num.toArray('le', this.encodingLength);
65110 };
65111
65112 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
65113 return utils.intFromLE(bytes);
65114 };
65115
65116 EDDSA.prototype.isPoint = function isPoint(val) {
65117 return val instanceof this.pointClass;
65118 };
65119
65120 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
65121 'use strict';
65122
65123 var elliptic = require('../../elliptic');
65124 var utils = elliptic.utils;
65125 var assert = utils.assert;
65126 var parseBytes = utils.parseBytes;
65127 var cachedProperty = utils.cachedProperty;
65128
65129 /**
65130 * @param {EDDSA} eddsa - instance
65131 * @param {Object} params - public/private key parameters
65132 *
65133 * @param {Array<Byte>} [params.secret] - secret seed bytes
65134 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
65135 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
65136 *
65137 */
65138 function KeyPair(eddsa, params) {
65139 this.eddsa = eddsa;
65140 this._secret = parseBytes(params.secret);
65141 if (eddsa.isPoint(params.pub))
65142 this._pub = params.pub;
65143 else
65144 this._pubBytes = parseBytes(params.pub);
65145 }
65146
65147 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
65148 if (pub instanceof KeyPair)
65149 return pub;
65150 return new KeyPair(eddsa, { pub: pub });
65151 };
65152
65153 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
65154 if (secret instanceof KeyPair)
65155 return secret;
65156 return new KeyPair(eddsa, { secret: secret });
65157 };
65158
65159 KeyPair.prototype.secret = function secret() {
65160 return this._secret;
65161 };
65162
65163 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
65164 return this.eddsa.encodePoint(this.pub());
65165 });
65166
65167 cachedProperty(KeyPair, 'pub', function pub() {
65168 if (this._pubBytes)
65169 return this.eddsa.decodePoint(this._pubBytes);
65170 return this.eddsa.g.mul(this.priv());
65171 });
65172
65173 cachedProperty(KeyPair, 'privBytes', function privBytes() {
65174 var eddsa = this.eddsa;
65175 var hash = this.hash();
65176 var lastIx = eddsa.encodingLength - 1;
65177
65178 var a = hash.slice(0, eddsa.encodingLength);
65179 a[0] &= 248;
65180 a[lastIx] &= 127;
65181 a[lastIx] |= 64;
65182
65183 return a;
65184 });
65185
65186 cachedProperty(KeyPair, 'priv', function priv() {
65187 return this.eddsa.decodeInt(this.privBytes());
65188 });
65189
65190 cachedProperty(KeyPair, 'hash', function hash() {
65191 return this.eddsa.hash().update(this.secret()).digest();
65192 });
65193
65194 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
65195 return this.hash().slice(this.eddsa.encodingLength);
65196 });
65197
65198 KeyPair.prototype.sign = function sign(message) {
65199 assert(this._secret, 'KeyPair can only verify');
65200 return this.eddsa.sign(message, this);
65201 };
65202
65203 KeyPair.prototype.verify = function verify(message, sig) {
65204 return this.eddsa.verify(message, sig, this);
65205 };
65206
65207 KeyPair.prototype.getSecret = function getSecret(enc) {
65208 assert(this._secret, 'KeyPair is public only');
65209 return utils.encode(this.secret(), enc);
65210 };
65211
65212 KeyPair.prototype.getPublic = function getPublic(enc) {
65213 return utils.encode(this.pubBytes(), enc);
65214 };
65215
65216 module.exports = KeyPair;
65217
65218 },{"../../elliptic":67}],79:[function(require,module,exports){
65219 'use strict';
65220
65221 var BN = require('bn.js');
65222 var elliptic = require('../../elliptic');
65223 var utils = elliptic.utils;
65224 var assert = utils.assert;
65225 var cachedProperty = utils.cachedProperty;
65226 var parseBytes = utils.parseBytes;
65227
65228 /**
65229 * @param {EDDSA} eddsa - eddsa instance
65230 * @param {Array<Bytes>|Object} sig -
65231 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
65232 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
65233 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
65234 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
65235 */
65236 function Signature(eddsa, sig) {
65237 this.eddsa = eddsa;
65238
65239 if (typeof sig !== 'object')
65240 sig = parseBytes(sig);
65241
65242 if (Array.isArray(sig)) {
65243 sig = {
65244 R: sig.slice(0, eddsa.encodingLength),
65245 S: sig.slice(eddsa.encodingLength)
65246 };
65247 }
65248
65249 assert(sig.R && sig.S, 'Signature without R or S');
65250
65251 if (eddsa.isPoint(sig.R))
65252 this._R = sig.R;
65253 if (sig.S instanceof BN)
65254 this._S = sig.S;
65255
65256 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
65257 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
65258 }
65259
65260 cachedProperty(Signature, 'S', function S() {
65261 return this.eddsa.decodeInt(this.Sencoded());
65262 });
65263
65264 cachedProperty(Signature, 'R', function R() {
65265 return this.eddsa.decodePoint(this.Rencoded());
65266 });
65267
65268 cachedProperty(Signature, 'Rencoded', function Rencoded() {
65269 return this.eddsa.encodePoint(this.R());
65270 });
65271
65272 cachedProperty(Signature, 'Sencoded', function Sencoded() {
65273 return this.eddsa.encodeInt(this.S());
65274 });
65275
65276 Signature.prototype.toBytes = function toBytes() {
65277 return this.Rencoded().concat(this.Sencoded());
65278 };
65279
65280 Signature.prototype.toHex = function toHex() {
65281 return utils.encode(this.toBytes(), 'hex').toUpperCase();
65282 };
65283
65284 module.exports = Signature;
65285
65286 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
65287 module.exports = {
65288 doubles: {
65289 step: 4,
65290 points: [
65291 [
65292 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
65293 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
65294 ],
65295 [
65296 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
65297 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
65298 ],
65299 [
65300 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
65301 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
65302 ],
65303 [
65304 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
65305 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
65306 ],
65307 [
65308 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
65309 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
65310 ],
65311 [
65312 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
65313 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
65314 ],
65315 [
65316 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
65317 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
65318 ],
65319 [
65320 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
65321 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
65322 ],
65323 [
65324 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
65325 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
65326 ],
65327 [
65328 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
65329 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
65330 ],
65331 [
65332 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
65333 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
65334 ],
65335 [
65336 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
65337 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
65338 ],
65339 [
65340 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
65341 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
65342 ],
65343 [
65344 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
65345 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
65346 ],
65347 [
65348 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
65349 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
65350 ],
65351 [
65352 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
65353 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
65354 ],
65355 [
65356 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
65357 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
65358 ],
65359 [
65360 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
65361 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
65362 ],
65363 [
65364 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
65365 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
65366 ],
65367 [
65368 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
65369 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
65370 ],
65371 [
65372 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
65373 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
65374 ],
65375 [
65376 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
65377 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
65378 ],
65379 [
65380 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
65381 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
65382 ],
65383 [
65384 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
65385 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
65386 ],
65387 [
65388 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
65389 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
65390 ],
65391 [
65392 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
65393 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
65394 ],
65395 [
65396 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
65397 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
65398 ],
65399 [
65400 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
65401 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
65402 ],
65403 [
65404 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
65405 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
65406 ],
65407 [
65408 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
65409 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
65410 ],
65411 [
65412 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
65413 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
65414 ],
65415 [
65416 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
65417 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
65418 ],
65419 [
65420 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
65421 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
65422 ],
65423 [
65424 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
65425 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
65426 ],
65427 [
65428 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
65429 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
65430 ],
65431 [
65432 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
65433 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
65434 ],
65435 [
65436 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
65437 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
65438 ],
65439 [
65440 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
65441 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
65442 ],
65443 [
65444 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
65445 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
65446 ],
65447 [
65448 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
65449 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
65450 ],
65451 [
65452 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
65453 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
65454 ],
65455 [
65456 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
65457 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
65458 ],
65459 [
65460 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
65461 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
65462 ],
65463 [
65464 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
65465 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
65466 ],
65467 [
65468 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
65469 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
65470 ],
65471 [
65472 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
65473 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
65474 ],
65475 [
65476 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
65477 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
65478 ],
65479 [
65480 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
65481 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
65482 ],
65483 [
65484 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
65485 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
65486 ],
65487 [
65488 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
65489 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
65490 ],
65491 [
65492 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
65493 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
65494 ],
65495 [
65496 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
65497 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
65498 ],
65499 [
65500 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
65501 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
65502 ],
65503 [
65504 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
65505 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
65506 ],
65507 [
65508 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
65509 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
65510 ],
65511 [
65512 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
65513 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
65514 ],
65515 [
65516 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
65517 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
65518 ],
65519 [
65520 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
65521 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
65522 ],
65523 [
65524 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
65525 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
65526 ],
65527 [
65528 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
65529 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
65530 ],
65531 [
65532 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
65533 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
65534 ],
65535 [
65536 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
65537 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
65538 ],
65539 [
65540 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
65541 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
65542 ],
65543 [
65544 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
65545 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
65546 ],
65547 [
65548 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
65549 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
65550 ]
65551 ]
65552 },
65553 naf: {
65554 wnd: 7,
65555 points: [
65556 [
65557 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
65558 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
65559 ],
65560 [
65561 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
65562 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
65563 ],
65564 [
65565 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
65566 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
65567 ],
65568 [
65569 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
65570 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
65571 ],
65572 [
65573 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
65574 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
65575 ],
65576 [
65577 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
65578 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
65579 ],
65580 [
65581 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
65582 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
65583 ],
65584 [
65585 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
65586 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
65587 ],
65588 [
65589 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
65590 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
65591 ],
65592 [
65593 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
65594 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
65595 ],
65596 [
65597 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
65598 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
65599 ],
65600 [
65601 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
65602 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
65603 ],
65604 [
65605 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
65606 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
65607 ],
65608 [
65609 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
65610 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
65611 ],
65612 [
65613 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
65614 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
65615 ],
65616 [
65617 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
65618 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
65619 ],
65620 [
65621 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
65622 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
65623 ],
65624 [
65625 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
65626 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
65627 ],
65628 [
65629 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
65630 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
65631 ],
65632 [
65633 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
65634 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
65635 ],
65636 [
65637 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
65638 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
65639 ],
65640 [
65641 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
65642 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
65643 ],
65644 [
65645 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
65646 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
65647 ],
65648 [
65649 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
65650 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
65651 ],
65652 [
65653 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
65654 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
65655 ],
65656 [
65657 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
65658 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
65659 ],
65660 [
65661 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
65662 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
65663 ],
65664 [
65665 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
65666 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
65667 ],
65668 [
65669 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
65670 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
65671 ],
65672 [
65673 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
65674 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
65675 ],
65676 [
65677 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
65678 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
65679 ],
65680 [
65681 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
65682 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
65683 ],
65684 [
65685 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
65686 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
65687 ],
65688 [
65689 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
65690 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
65691 ],
65692 [
65693 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
65694 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
65695 ],
65696 [
65697 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
65698 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
65699 ],
65700 [
65701 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
65702 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
65703 ],
65704 [
65705 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
65706 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
65707 ],
65708 [
65709 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
65710 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
65711 ],
65712 [
65713 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
65714 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
65715 ],
65716 [
65717 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
65718 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
65719 ],
65720 [
65721 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
65722 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
65723 ],
65724 [
65725 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
65726 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
65727 ],
65728 [
65729 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
65730 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
65731 ],
65732 [
65733 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
65734 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
65735 ],
65736 [
65737 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
65738 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
65739 ],
65740 [
65741 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
65742 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
65743 ],
65744 [
65745 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
65746 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
65747 ],
65748 [
65749 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
65750 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
65751 ],
65752 [
65753 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
65754 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
65755 ],
65756 [
65757 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
65758 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
65759 ],
65760 [
65761 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
65762 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
65763 ],
65764 [
65765 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
65766 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
65767 ],
65768 [
65769 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
65770 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
65771 ],
65772 [
65773 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
65774 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
65775 ],
65776 [
65777 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
65778 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
65779 ],
65780 [
65781 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
65782 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
65783 ],
65784 [
65785 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
65786 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
65787 ],
65788 [
65789 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
65790 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
65791 ],
65792 [
65793 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
65794 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
65795 ],
65796 [
65797 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
65798 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
65799 ],
65800 [
65801 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
65802 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
65803 ],
65804 [
65805 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
65806 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
65807 ],
65808 [
65809 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
65810 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
65811 ],
65812 [
65813 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
65814 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
65815 ],
65816 [
65817 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
65818 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
65819 ],
65820 [
65821 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
65822 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
65823 ],
65824 [
65825 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
65826 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
65827 ],
65828 [
65829 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
65830 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
65831 ],
65832 [
65833 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
65834 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
65835 ],
65836 [
65837 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
65838 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
65839 ],
65840 [
65841 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
65842 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
65843 ],
65844 [
65845 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
65846 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
65847 ],
65848 [
65849 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
65850 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
65851 ],
65852 [
65853 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
65854 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
65855 ],
65856 [
65857 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
65858 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
65859 ],
65860 [
65861 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
65862 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
65863 ],
65864 [
65865 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
65866 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
65867 ],
65868 [
65869 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
65870 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
65871 ],
65872 [
65873 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
65874 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
65875 ],
65876 [
65877 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
65878 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
65879 ],
65880 [
65881 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
65882 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
65883 ],
65884 [
65885 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
65886 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
65887 ],
65888 [
65889 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
65890 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
65891 ],
65892 [
65893 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
65894 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
65895 ],
65896 [
65897 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
65898 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
65899 ],
65900 [
65901 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
65902 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
65903 ],
65904 [
65905 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
65906 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
65907 ],
65908 [
65909 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
65910 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
65911 ],
65912 [
65913 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
65914 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
65915 ],
65916 [
65917 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
65918 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
65919 ],
65920 [
65921 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
65922 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
65923 ],
65924 [
65925 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
65926 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
65927 ],
65928 [
65929 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
65930 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
65931 ],
65932 [
65933 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
65934 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
65935 ],
65936 [
65937 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
65938 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
65939 ],
65940 [
65941 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
65942 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
65943 ],
65944 [
65945 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
65946 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
65947 ],
65948 [
65949 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
65950 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
65951 ],
65952 [
65953 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
65954 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
65955 ],
65956 [
65957 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
65958 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
65959 ],
65960 [
65961 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
65962 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
65963 ],
65964 [
65965 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
65966 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
65967 ],
65968 [
65969 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
65970 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
65971 ],
65972 [
65973 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
65974 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
65975 ],
65976 [
65977 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
65978 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
65979 ],
65980 [
65981 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
65982 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
65983 ],
65984 [
65985 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
65986 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
65987 ],
65988 [
65989 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
65990 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
65991 ],
65992 [
65993 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
65994 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
65995 ],
65996 [
65997 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
65998 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
65999 ],
66000 [
66001 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
66002 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
66003 ],
66004 [
66005 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
66006 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
66007 ],
66008 [
66009 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
66010 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
66011 ],
66012 [
66013 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
66014 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
66015 ],
66016 [
66017 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
66018 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
66019 ],
66020 [
66021 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
66022 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
66023 ],
66024 [
66025 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
66026 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
66027 ],
66028 [
66029 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
66030 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
66031 ],
66032 [
66033 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
66034 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
66035 ],
66036 [
66037 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
66038 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
66039 ],
66040 [
66041 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
66042 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
66043 ],
66044 [
66045 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
66046 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
66047 ],
66048 [
66049 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
66050 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
66051 ],
66052 [
66053 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
66054 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
66055 ],
66056 [
66057 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
66058 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
66059 ],
66060 [
66061 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
66062 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
66063 ]
66064 ]
66065 }
66066 };
66067
66068 },{}],81:[function(require,module,exports){
66069 'use strict';
66070
66071 var utils = exports;
66072 var BN = require('bn.js');
66073 var minAssert = require('minimalistic-assert');
66074 var minUtils = require('minimalistic-crypto-utils');
66075
66076 utils.assert = minAssert;
66077 utils.toArray = minUtils.toArray;
66078 utils.zero2 = minUtils.zero2;
66079 utils.toHex = minUtils.toHex;
66080 utils.encode = minUtils.encode;
66081
66082 // Represent num in a w-NAF form
66083 function getNAF(num, w) {
66084 var naf = [];
66085 var ws = 1 << (w + 1);
66086 var k = num.clone();
66087 while (k.cmpn(1) >= 0) {
66088 var z;
66089 if (k.isOdd()) {
66090 var mod = k.andln(ws - 1);
66091 if (mod > (ws >> 1) - 1)
66092 z = (ws >> 1) - mod;
66093 else
66094 z = mod;
66095 k.isubn(z);
66096 } else {
66097 z = 0;
66098 }
66099 naf.push(z);
66100
66101 // Optimization, shift by word if possible
66102 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
66103 for (var i = 1; i < shift; i++)
66104 naf.push(0);
66105 k.iushrn(shift);
66106 }
66107
66108 return naf;
66109 }
66110 utils.getNAF = getNAF;
66111
66112 // Represent k1, k2 in a Joint Sparse Form
66113 function getJSF(k1, k2) {
66114 var jsf = [
66115 [],
66116 []
66117 ];
66118
66119 k1 = k1.clone();
66120 k2 = k2.clone();
66121 var d1 = 0;
66122 var d2 = 0;
66123 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
66124
66125 // First phase
66126 var m14 = (k1.andln(3) + d1) & 3;
66127 var m24 = (k2.andln(3) + d2) & 3;
66128 if (m14 === 3)
66129 m14 = -1;
66130 if (m24 === 3)
66131 m24 = -1;
66132 var u1;
66133 if ((m14 & 1) === 0) {
66134 u1 = 0;
66135 } else {
66136 var m8 = (k1.andln(7) + d1) & 7;
66137 if ((m8 === 3 || m8 === 5) && m24 === 2)
66138 u1 = -m14;
66139 else
66140 u1 = m14;
66141 }
66142 jsf[0].push(u1);
66143
66144 var u2;
66145 if ((m24 & 1) === 0) {
66146 u2 = 0;
66147 } else {
66148 var m8 = (k2.andln(7) + d2) & 7;
66149 if ((m8 === 3 || m8 === 5) && m14 === 2)
66150 u2 = -m24;
66151 else
66152 u2 = m24;
66153 }
66154 jsf[1].push(u2);
66155
66156 // Second phase
66157 if (2 * d1 === u1 + 1)
66158 d1 = 1 - d1;
66159 if (2 * d2 === u2 + 1)
66160 d2 = 1 - d2;
66161 k1.iushrn(1);
66162 k2.iushrn(1);
66163 }
66164
66165 return jsf;
66166 }
66167 utils.getJSF = getJSF;
66168
66169 function cachedProperty(obj, name, computer) {
66170 var key = '_' + name;
66171 obj.prototype[name] = function cachedProperty() {
66172 return this[key] !== undefined ? this[key] :
66173 this[key] = computer.call(this);
66174 };
66175 }
66176 utils.cachedProperty = cachedProperty;
66177
66178 function parseBytes(bytes) {
66179 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
66180 bytes;
66181 }
66182 utils.parseBytes = parseBytes;
66183
66184 function intFromLE(bytes) {
66185 return new BN(bytes, 'hex', 'le');
66186 }
66187 utils.intFromLE = intFromLE;
66188
66189
66190 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
66191 module.exports={
66192 "_args": [
66193 [
66194 "elliptic@^6.0.0",
66195 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
66196 ]
66197 ],
66198 "_from": "elliptic@>=6.0.0 <7.0.0",
66199 "_id": "elliptic@6.4.0",
66200 "_inCache": true,
66201 "_installable": true,
66202 "_location": "/browserify/elliptic",
66203 "_nodeVersion": "7.0.0",
66204 "_npmOperationalInternal": {
66205 "host": "packages-18-east.internal.npmjs.com",
66206 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
66207 },
66208 "_npmUser": {
66209 "email": "fedor@indutny.com",
66210 "name": "indutny"
66211 },
66212 "_npmVersion": "3.10.8",
66213 "_phantomChildren": {},
66214 "_requested": {
66215 "name": "elliptic",
66216 "raw": "elliptic@^6.0.0",
66217 "rawSpec": "^6.0.0",
66218 "scope": null,
66219 "spec": ">=6.0.0 <7.0.0",
66220 "type": "range"
66221 },
66222 "_requiredBy": [
66223 "/browserify/browserify-sign",
66224 "/browserify/create-ecdh"
66225 ],
66226 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
66227 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66228 "_shrinkwrap": null,
66229 "_spec": "elliptic@^6.0.0",
66230 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
66231 "author": {
66232 "email": "fedor@indutny.com",
66233 "name": "Fedor Indutny"
66234 },
66235 "bugs": {
66236 "url": "https://github.com/indutny/elliptic/issues"
66237 },
66238 "dependencies": {
66239 "bn.js": "^4.4.0",
66240 "brorand": "^1.0.1",
66241 "hash.js": "^1.0.0",
66242 "hmac-drbg": "^1.0.0",
66243 "inherits": "^2.0.1",
66244 "minimalistic-assert": "^1.0.0",
66245 "minimalistic-crypto-utils": "^1.0.0"
66246 },
66247 "description": "EC cryptography",
66248 "devDependencies": {
66249 "brfs": "^1.4.3",
66250 "coveralls": "^2.11.3",
66251 "grunt": "^0.4.5",
66252 "grunt-browserify": "^5.0.0",
66253 "grunt-cli": "^1.2.0",
66254 "grunt-contrib-connect": "^1.0.0",
66255 "grunt-contrib-copy": "^1.0.0",
66256 "grunt-contrib-uglify": "^1.0.1",
66257 "grunt-mocha-istanbul": "^3.0.1",
66258 "grunt-saucelabs": "^8.6.2",
66259 "istanbul": "^0.4.2",
66260 "jscs": "^2.9.0",
66261 "jshint": "^2.6.0",
66262 "mocha": "^2.1.0"
66263 },
66264 "directories": {},
66265 "dist": {
66266 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66267 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
66268 },
66269 "files": [
66270 "lib"
66271 ],
66272 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
66273 "homepage": "https://github.com/indutny/elliptic",
66274 "keywords": [
66275 "EC",
66276 "Elliptic",
66277 "curve",
66278 "Cryptography"
66279 ],
66280 "license": "MIT",
66281 "main": "lib/elliptic.js",
66282 "maintainers": [
66283 {
66284 "email": "fedor@indutny.com",
66285 "name": "indutny"
66286 }
66287 ],
66288 "name": "elliptic",
66289 "optionalDependencies": {},
66290 "readme": "ERROR: No README data found!",
66291 "repository": {
66292 "type": "git",
66293 "url": "git+ssh://git@github.com/indutny/elliptic.git"
66294 },
66295 "scripts": {
66296 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66297 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66298 "lint": "npm run jscs && npm run jshint",
66299 "test": "npm run lint && npm run unit",
66300 "unit": "istanbul test _mocha --reporter=spec test/index.js",
66301 "version": "grunt dist && git add dist/"
66302 },
66303 "version": "6.4.0"
66304 }
66305
66306 },{}],83:[function(require,module,exports){
66307 // Copyright Joyent, Inc. and other Node contributors.
66308 //
66309 // Permission is hereby granted, free of charge, to any person obtaining a
66310 // copy of this software and associated documentation files (the
66311 // "Software"), to deal in the Software without restriction, including
66312 // without limitation the rights to use, copy, modify, merge, publish,
66313 // distribute, sublicense, and/or sell copies of the Software, and to permit
66314 // persons to whom the Software is furnished to do so, subject to the
66315 // following conditions:
66316 //
66317 // The above copyright notice and this permission notice shall be included
66318 // in all copies or substantial portions of the Software.
66319 //
66320 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
66321 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66322 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
66323 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
66324 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
66325 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
66326 // USE OR OTHER DEALINGS IN THE SOFTWARE.
66327
66328 function EventEmitter() {
66329 this._events = this._events || {};
66330 this._maxListeners = this._maxListeners || undefined;
66331 }
66332 module.exports = EventEmitter;
66333
66334 // Backwards-compat with node 0.10.x
66335 EventEmitter.EventEmitter = EventEmitter;
66336
66337 EventEmitter.prototype._events = undefined;
66338 EventEmitter.prototype._maxListeners = undefined;
66339
66340 // By default EventEmitters will print a warning if more than 10 listeners are
66341 // added to it. This is a useful default which helps finding memory leaks.
66342 EventEmitter.defaultMaxListeners = 10;
66343
66344 // Obviously not all Emitters should be limited to 10. This function allows
66345 // that to be increased. Set to zero for unlimited.
66346 EventEmitter.prototype.setMaxListeners = function(n) {
66347 if (!isNumber(n) || n < 0 || isNaN(n))
66348 throw TypeError('n must be a positive number');
66349 this._maxListeners = n;
66350 return this;
66351 };
66352
66353 EventEmitter.prototype.emit = function(type) {
66354 var er, handler, len, args, i, listeners;
66355
66356 if (!this._events)
66357 this._events = {};
66358
66359 // If there is no 'error' event listener then throw.
66360 if (type === 'error') {
66361 if (!this._events.error ||
66362 (isObject(this._events.error) && !this._events.error.length)) {
66363 er = arguments[1];
66364 if (er instanceof Error) {
66365 throw er; // Unhandled 'error' event
66366 } else {
66367 // At least give some kind of context to the user
66368 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
66369 err.context = er;
66370 throw err;
66371 }
66372 }
66373 }
66374
66375 handler = this._events[type];
66376
66377 if (isUndefined(handler))
66378 return false;
66379
66380 if (isFunction(handler)) {
66381 switch (arguments.length) {
66382 // fast cases
66383 case 1:
66384 handler.call(this);
66385 break;
66386 case 2:
66387 handler.call(this, arguments[1]);
66388 break;
66389 case 3:
66390 handler.call(this, arguments[1], arguments[2]);
66391 break;
66392 // slower
66393 default:
66394 args = Array.prototype.slice.call(arguments, 1);
66395 handler.apply(this, args);
66396 }
66397 } else if (isObject(handler)) {
66398 args = Array.prototype.slice.call(arguments, 1);
66399 listeners = handler.slice();
66400 len = listeners.length;
66401 for (i = 0; i < len; i++)
66402 listeners[i].apply(this, args);
66403 }
66404
66405 return true;
66406 };
66407
66408 EventEmitter.prototype.addListener = function(type, listener) {
66409 var m;
66410
66411 if (!isFunction(listener))
66412 throw TypeError('listener must be a function');
66413
66414 if (!this._events)
66415 this._events = {};
66416
66417 // To avoid recursion in the case that type === "newListener"! Before
66418 // adding it to the listeners, first emit "newListener".
66419 if (this._events.newListener)
66420 this.emit('newListener', type,
66421 isFunction(listener.listener) ?
66422 listener.listener : listener);
66423
66424 if (!this._events[type])
66425 // Optimize the case of one listener. Don't need the extra array object.
66426 this._events[type] = listener;
66427 else if (isObject(this._events[type]))
66428 // If we've already got an array, just append.
66429 this._events[type].push(listener);
66430 else
66431 // Adding the second element, need to change to array.
66432 this._events[type] = [this._events[type], listener];
66433
66434 // Check for listener leak
66435 if (isObject(this._events[type]) && !this._events[type].warned) {
66436 if (!isUndefined(this._maxListeners)) {
66437 m = this._maxListeners;
66438 } else {
66439 m = EventEmitter.defaultMaxListeners;
66440 }
66441
66442 if (m && m > 0 && this._events[type].length > m) {
66443 this._events[type].warned = true;
66444 console.error('(node) warning: possible EventEmitter memory ' +
66445 'leak detected. %d listeners added. ' +
66446 'Use emitter.setMaxListeners() to increase limit.',
66447 this._events[type].length);
66448 if (typeof console.trace === 'function') {
66449 // not supported in IE 10
66450 console.trace();
66451 }
66452 }
66453 }
66454
66455 return this;
66456 };
66457
66458 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
66459
66460 EventEmitter.prototype.once = function(type, listener) {
66461 if (!isFunction(listener))
66462 throw TypeError('listener must be a function');
66463
66464 var fired = false;
66465
66466 function g() {
66467 this.removeListener(type, g);
66468
66469 if (!fired) {
66470 fired = true;
66471 listener.apply(this, arguments);
66472 }
66473 }
66474
66475 g.listener = listener;
66476 this.on(type, g);
66477
66478 return this;
66479 };
66480
66481 // emits a 'removeListener' event iff the listener was removed
66482 EventEmitter.prototype.removeListener = function(type, listener) {
66483 var list, position, length, i;
66484
66485 if (!isFunction(listener))
66486 throw TypeError('listener must be a function');
66487
66488 if (!this._events || !this._events[type])
66489 return this;
66490
66491 list = this._events[type];
66492 length = list.length;
66493 position = -1;
66494
66495 if (list === listener ||
66496 (isFunction(list.listener) && list.listener === listener)) {
66497 delete this._events[type];
66498 if (this._events.removeListener)
66499 this.emit('removeListener', type, listener);
66500
66501 } else if (isObject(list)) {
66502 for (i = length; i-- > 0;) {
66503 if (list[i] === listener ||
66504 (list[i].listener && list[i].listener === listener)) {
66505 position = i;
66506 break;
66507 }
66508 }
66509
66510 if (position < 0)
66511 return this;
66512
66513 if (list.length === 1) {
66514 list.length = 0;
66515 delete this._events[type];
66516 } else {
66517 list.splice(position, 1);
66518 }
66519
66520 if (this._events.removeListener)
66521 this.emit('removeListener', type, listener);
66522 }
66523
66524 return this;
66525 };
66526
66527 EventEmitter.prototype.removeAllListeners = function(type) {
66528 var key, listeners;
66529
66530 if (!this._events)
66531 return this;
66532
66533 // not listening for removeListener, no need to emit
66534 if (!this._events.removeListener) {
66535 if (arguments.length === 0)
66536 this._events = {};
66537 else if (this._events[type])
66538 delete this._events[type];
66539 return this;
66540 }
66541
66542 // emit removeListener for all listeners on all events
66543 if (arguments.length === 0) {
66544 for (key in this._events) {
66545 if (key === 'removeListener') continue;
66546 this.removeAllListeners(key);
66547 }
66548 this.removeAllListeners('removeListener');
66549 this._events = {};
66550 return this;
66551 }
66552
66553 listeners = this._events[type];
66554
66555 if (isFunction(listeners)) {
66556 this.removeListener(type, listeners);
66557 } else if (listeners) {
66558 // LIFO order
66559 while (listeners.length)
66560 this.removeListener(type, listeners[listeners.length - 1]);
66561 }
66562 delete this._events[type];
66563
66564 return this;
66565 };
66566
66567 EventEmitter.prototype.listeners = function(type) {
66568 var ret;
66569 if (!this._events || !this._events[type])
66570 ret = [];
66571 else if (isFunction(this._events[type]))
66572 ret = [this._events[type]];
66573 else
66574 ret = this._events[type].slice();
66575 return ret;
66576 };
66577
66578 EventEmitter.prototype.listenerCount = function(type) {
66579 if (this._events) {
66580 var evlistener = this._events[type];
66581
66582 if (isFunction(evlistener))
66583 return 1;
66584 else if (evlistener)
66585 return evlistener.length;
66586 }
66587 return 0;
66588 };
66589
66590 EventEmitter.listenerCount = function(emitter, type) {
66591 return emitter.listenerCount(type);
66592 };
66593
66594 function isFunction(arg) {
66595 return typeof arg === 'function';
66596 }
66597
66598 function isNumber(arg) {
66599 return typeof arg === 'number';
66600 }
66601
66602 function isObject(arg) {
66603 return typeof arg === 'object' && arg !== null;
66604 }
66605
66606 function isUndefined(arg) {
66607 return arg === void 0;
66608 }
66609
66610 },{}],84:[function(require,module,exports){
66611 (function (Buffer){
66612 var md5 = require('create-hash/md5')
66613 module.exports = EVP_BytesToKey
66614 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
66615 if (!Buffer.isBuffer(password)) {
66616 password = new Buffer(password, 'binary')
66617 }
66618 if (salt && !Buffer.isBuffer(salt)) {
66619 salt = new Buffer(salt, 'binary')
66620 }
66621 keyLen = keyLen / 8
66622 ivLen = ivLen || 0
66623 var ki = 0
66624 var ii = 0
66625 var key = new Buffer(keyLen)
66626 var iv = new Buffer(ivLen)
66627 var addmd = 0
66628 var md_buf
66629 var i
66630 var bufs = []
66631 while (true) {
66632 if (addmd++ > 0) {
66633 bufs.push(md_buf)
66634 }
66635 bufs.push(password)
66636 if (salt) {
66637 bufs.push(salt)
66638 }
66639 md_buf = md5(Buffer.concat(bufs))
66640 bufs = []
66641 i = 0
66642 if (keyLen > 0) {
66643 while (true) {
66644 if (keyLen === 0) {
66645 break
66646 }
66647 if (i === md_buf.length) {
66648 break
66649 }
66650 key[ki++] = md_buf[i]
66651 keyLen--
66652 i++
66653 }
66654 }
66655 if (ivLen > 0 && i !== md_buf.length) {
66656 while (true) {
66657 if (ivLen === 0) {
66658 break
66659 }
66660 if (i === md_buf.length) {
66661 break
66662 }
66663 iv[ii++] = md_buf[i]
66664 ivLen--
66665 i++
66666 }
66667 }
66668 if (keyLen === 0 && ivLen === 0) {
66669 break
66670 }
66671 }
66672 for (i = 0; i < md_buf.length; i++) {
66673 md_buf[i] = 0
66674 }
66675 return {
66676 key: key,
66677 iv: iv
66678 }
66679 }
66680
66681 }).call(this,require("buffer").Buffer)
66682 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
66683 (function (Buffer){
66684 'use strict'
66685 var Transform = require('stream').Transform
66686 var inherits = require('inherits')
66687
66688 function HashBase (blockSize) {
66689 Transform.call(this)
66690
66691 this._block = new Buffer(blockSize)
66692 this._blockSize = blockSize
66693 this._blockOffset = 0
66694 this._length = [0, 0, 0, 0]
66695
66696 this._finalized = false
66697 }
66698
66699 inherits(HashBase, Transform)
66700
66701 HashBase.prototype._transform = function (chunk, encoding, callback) {
66702 var error = null
66703 try {
66704 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
66705 this.update(chunk)
66706 } catch (err) {
66707 error = err
66708 }
66709
66710 callback(error)
66711 }
66712
66713 HashBase.prototype._flush = function (callback) {
66714 var error = null
66715 try {
66716 this.push(this._digest())
66717 } catch (err) {
66718 error = err
66719 }
66720
66721 callback(error)
66722 }
66723
66724 HashBase.prototype.update = function (data, encoding) {
66725 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
66726 if (this._finalized) throw new Error('Digest already called')
66727 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
66728
66729 // consume data
66730 var block = this._block
66731 var offset = 0
66732 while (this._blockOffset + data.length - offset >= this._blockSize) {
66733 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
66734 this._update()
66735 this._blockOffset = 0
66736 }
66737 while (offset < data.length) block[this._blockOffset++] = data[offset++]
66738
66739 // update length
66740 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
66741 this._length[j] += carry
66742 carry = (this._length[j] / 0x0100000000) | 0
66743 if (carry > 0) this._length[j] -= 0x0100000000 * carry
66744 }
66745
66746 return this
66747 }
66748
66749 HashBase.prototype._update = function (data) {
66750 throw new Error('_update is not implemented')
66751 }
66752
66753 HashBase.prototype.digest = function (encoding) {
66754 if (this._finalized) throw new Error('Digest already called')
66755 this._finalized = true
66756
66757 var digest = this._digest()
66758 if (encoding !== undefined) digest = digest.toString(encoding)
66759 return digest
66760 }
66761
66762 HashBase.prototype._digest = function () {
66763 throw new Error('_digest is not implemented')
66764 }
66765
66766 module.exports = HashBase
66767
66768 }).call(this,require("buffer").Buffer)
66769 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
66770 var hash = exports;
66771
66772 hash.utils = require('./hash/utils');
66773 hash.common = require('./hash/common');
66774 hash.sha = require('./hash/sha');
66775 hash.ripemd = require('./hash/ripemd');
66776 hash.hmac = require('./hash/hmac');
66777
66778 // Proxy hash functions to the main object
66779 hash.sha1 = hash.sha.sha1;
66780 hash.sha256 = hash.sha.sha256;
66781 hash.sha224 = hash.sha.sha224;
66782 hash.sha384 = hash.sha.sha384;
66783 hash.sha512 = hash.sha.sha512;
66784 hash.ripemd160 = hash.ripemd.ripemd160;
66785
66786 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
66787 var hash = require('../hash');
66788 var utils = hash.utils;
66789 var assert = utils.assert;
66790
66791 function BlockHash() {
66792 this.pending = null;
66793 this.pendingTotal = 0;
66794 this.blockSize = this.constructor.blockSize;
66795 this.outSize = this.constructor.outSize;
66796 this.hmacStrength = this.constructor.hmacStrength;
66797 this.padLength = this.constructor.padLength / 8;
66798 this.endian = 'big';
66799
66800 this._delta8 = this.blockSize / 8;
66801 this._delta32 = this.blockSize / 32;
66802 }
66803 exports.BlockHash = BlockHash;
66804
66805 BlockHash.prototype.update = function update(msg, enc) {
66806 // Convert message to array, pad it, and join into 32bit blocks
66807 msg = utils.toArray(msg, enc);
66808 if (!this.pending)
66809 this.pending = msg;
66810 else
66811 this.pending = this.pending.concat(msg);
66812 this.pendingTotal += msg.length;
66813
66814 // Enough data, try updating
66815 if (this.pending.length >= this._delta8) {
66816 msg = this.pending;
66817
66818 // Process pending data in blocks
66819 var r = msg.length % this._delta8;
66820 this.pending = msg.slice(msg.length - r, msg.length);
66821 if (this.pending.length === 0)
66822 this.pending = null;
66823
66824 msg = utils.join32(msg, 0, msg.length - r, this.endian);
66825 for (var i = 0; i < msg.length; i += this._delta32)
66826 this._update(msg, i, i + this._delta32);
66827 }
66828
66829 return this;
66830 };
66831
66832 BlockHash.prototype.digest = function digest(enc) {
66833 this.update(this._pad());
66834 assert(this.pending === null);
66835
66836 return this._digest(enc);
66837 };
66838
66839 BlockHash.prototype._pad = function pad() {
66840 var len = this.pendingTotal;
66841 var bytes = this._delta8;
66842 var k = bytes - ((len + this.padLength) % bytes);
66843 var res = new Array(k + this.padLength);
66844 res[0] = 0x80;
66845 for (var i = 1; i < k; i++)
66846 res[i] = 0;
66847
66848 // Append length
66849 len <<= 3;
66850 if (this.endian === 'big') {
66851 for (var t = 8; t < this.padLength; t++)
66852 res[i++] = 0;
66853
66854 res[i++] = 0;
66855 res[i++] = 0;
66856 res[i++] = 0;
66857 res[i++] = 0;
66858 res[i++] = (len >>> 24) & 0xff;
66859 res[i++] = (len >>> 16) & 0xff;
66860 res[i++] = (len >>> 8) & 0xff;
66861 res[i++] = len & 0xff;
66862 } else {
66863 res[i++] = len & 0xff;
66864 res[i++] = (len >>> 8) & 0xff;
66865 res[i++] = (len >>> 16) & 0xff;
66866 res[i++] = (len >>> 24) & 0xff;
66867 res[i++] = 0;
66868 res[i++] = 0;
66869 res[i++] = 0;
66870 res[i++] = 0;
66871
66872 for (var t = 8; t < this.padLength; t++)
66873 res[i++] = 0;
66874 }
66875
66876 return res;
66877 };
66878
66879 },{"../hash":86}],88:[function(require,module,exports){
66880 var hmac = exports;
66881
66882 var hash = require('../hash');
66883 var utils = hash.utils;
66884 var assert = utils.assert;
66885
66886 function Hmac(hash, key, enc) {
66887 if (!(this instanceof Hmac))
66888 return new Hmac(hash, key, enc);
66889 this.Hash = hash;
66890 this.blockSize = hash.blockSize / 8;
66891 this.outSize = hash.outSize / 8;
66892 this.inner = null;
66893 this.outer = null;
66894
66895 this._init(utils.toArray(key, enc));
66896 }
66897 module.exports = Hmac;
66898
66899 Hmac.prototype._init = function init(key) {
66900 // Shorten key, if needed
66901 if (key.length > this.blockSize)
66902 key = new this.Hash().update(key).digest();
66903 assert(key.length <= this.blockSize);
66904
66905 // Add padding to key
66906 for (var i = key.length; i < this.blockSize; i++)
66907 key.push(0);
66908
66909 for (var i = 0; i < key.length; i++)
66910 key[i] ^= 0x36;
66911 this.inner = new this.Hash().update(key);
66912
66913 // 0x36 ^ 0x5c = 0x6a
66914 for (var i = 0; i < key.length; i++)
66915 key[i] ^= 0x6a;
66916 this.outer = new this.Hash().update(key);
66917 };
66918
66919 Hmac.prototype.update = function update(msg, enc) {
66920 this.inner.update(msg, enc);
66921 return this;
66922 };
66923
66924 Hmac.prototype.digest = function digest(enc) {
66925 this.outer.update(this.inner.digest());
66926 return this.outer.digest(enc);
66927 };
66928
66929 },{"../hash":86}],89:[function(require,module,exports){
66930 var hash = require('../hash');
66931 var utils = hash.utils;
66932
66933 var rotl32 = utils.rotl32;
66934 var sum32 = utils.sum32;
66935 var sum32_3 = utils.sum32_3;
66936 var sum32_4 = utils.sum32_4;
66937 var BlockHash = hash.common.BlockHash;
66938
66939 function RIPEMD160() {
66940 if (!(this instanceof RIPEMD160))
66941 return new RIPEMD160();
66942
66943 BlockHash.call(this);
66944
66945 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
66946 this.endian = 'little';
66947 }
66948 utils.inherits(RIPEMD160, BlockHash);
66949 exports.ripemd160 = RIPEMD160;
66950
66951 RIPEMD160.blockSize = 512;
66952 RIPEMD160.outSize = 160;
66953 RIPEMD160.hmacStrength = 192;
66954 RIPEMD160.padLength = 64;
66955
66956 RIPEMD160.prototype._update = function update(msg, start) {
66957 var A = this.h[0];
66958 var B = this.h[1];
66959 var C = this.h[2];
66960 var D = this.h[3];
66961 var E = this.h[4];
66962 var Ah = A;
66963 var Bh = B;
66964 var Ch = C;
66965 var Dh = D;
66966 var Eh = E;
66967 for (var j = 0; j < 80; j++) {
66968 var T = sum32(
66969 rotl32(
66970 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
66971 s[j]),
66972 E);
66973 A = E;
66974 E = D;
66975 D = rotl32(C, 10);
66976 C = B;
66977 B = T;
66978 T = sum32(
66979 rotl32(
66980 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
66981 sh[j]),
66982 Eh);
66983 Ah = Eh;
66984 Eh = Dh;
66985 Dh = rotl32(Ch, 10);
66986 Ch = Bh;
66987 Bh = T;
66988 }
66989 T = sum32_3(this.h[1], C, Dh);
66990 this.h[1] = sum32_3(this.h[2], D, Eh);
66991 this.h[2] = sum32_3(this.h[3], E, Ah);
66992 this.h[3] = sum32_3(this.h[4], A, Bh);
66993 this.h[4] = sum32_3(this.h[0], B, Ch);
66994 this.h[0] = T;
66995 };
66996
66997 RIPEMD160.prototype._digest = function digest(enc) {
66998 if (enc === 'hex')
66999 return utils.toHex32(this.h, 'little');
67000 else
67001 return utils.split32(this.h, 'little');
67002 };
67003
67004 function f(j, x, y, z) {
67005 if (j <= 15)
67006 return x ^ y ^ z;
67007 else if (j <= 31)
67008 return (x & y) | ((~x) & z);
67009 else if (j <= 47)
67010 return (x | (~y)) ^ z;
67011 else if (j <= 63)
67012 return (x & z) | (y & (~z));
67013 else
67014 return x ^ (y | (~z));
67015 }
67016
67017 function K(j) {
67018 if (j <= 15)
67019 return 0x00000000;
67020 else if (j <= 31)
67021 return 0x5a827999;
67022 else if (j <= 47)
67023 return 0x6ed9eba1;
67024 else if (j <= 63)
67025 return 0x8f1bbcdc;
67026 else
67027 return 0xa953fd4e;
67028 }
67029
67030 function Kh(j) {
67031 if (j <= 15)
67032 return 0x50a28be6;
67033 else if (j <= 31)
67034 return 0x5c4dd124;
67035 else if (j <= 47)
67036 return 0x6d703ef3;
67037 else if (j <= 63)
67038 return 0x7a6d76e9;
67039 else
67040 return 0x00000000;
67041 }
67042
67043 var r = [
67044 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67045 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67046 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67047 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67048 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67049 ];
67050
67051 var rh = [
67052 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67053 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67054 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67055 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67056 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67057 ];
67058
67059 var s = [
67060 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67061 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67062 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67063 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67064 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67065 ];
67066
67067 var sh = [
67068 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67069 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67070 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67071 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67072 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67073 ];
67074
67075 },{"../hash":86}],90:[function(require,module,exports){
67076 var hash = require('../hash');
67077 var utils = hash.utils;
67078 var assert = utils.assert;
67079
67080 var rotr32 = utils.rotr32;
67081 var rotl32 = utils.rotl32;
67082 var sum32 = utils.sum32;
67083 var sum32_4 = utils.sum32_4;
67084 var sum32_5 = utils.sum32_5;
67085 var rotr64_hi = utils.rotr64_hi;
67086 var rotr64_lo = utils.rotr64_lo;
67087 var shr64_hi = utils.shr64_hi;
67088 var shr64_lo = utils.shr64_lo;
67089 var sum64 = utils.sum64;
67090 var sum64_hi = utils.sum64_hi;
67091 var sum64_lo = utils.sum64_lo;
67092 var sum64_4_hi = utils.sum64_4_hi;
67093 var sum64_4_lo = utils.sum64_4_lo;
67094 var sum64_5_hi = utils.sum64_5_hi;
67095 var sum64_5_lo = utils.sum64_5_lo;
67096 var BlockHash = hash.common.BlockHash;
67097
67098 var sha256_K = [
67099 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
67100 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
67101 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
67102 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
67103 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
67104 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
67105 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
67106 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
67107 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
67108 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
67109 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
67110 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
67111 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
67112 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
67113 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
67114 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
67115 ];
67116
67117 var sha512_K = [
67118 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
67119 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
67120 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
67121 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
67122 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
67123 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
67124 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
67125 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
67126 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
67127 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
67128 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
67129 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
67130 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
67131 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
67132 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
67133 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
67134 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
67135 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
67136 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
67137 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
67138 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
67139 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
67140 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
67141 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
67142 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
67143 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
67144 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
67145 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
67146 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
67147 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
67148 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
67149 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
67150 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
67151 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
67152 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
67153 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
67154 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
67155 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
67156 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
67157 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
67158 ];
67159
67160 var sha1_K = [
67161 0x5A827999, 0x6ED9EBA1,
67162 0x8F1BBCDC, 0xCA62C1D6
67163 ];
67164
67165 function SHA256() {
67166 if (!(this instanceof SHA256))
67167 return new SHA256();
67168
67169 BlockHash.call(this);
67170 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
67171 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
67172 this.k = sha256_K;
67173 this.W = new Array(64);
67174 }
67175 utils.inherits(SHA256, BlockHash);
67176 exports.sha256 = SHA256;
67177
67178 SHA256.blockSize = 512;
67179 SHA256.outSize = 256;
67180 SHA256.hmacStrength = 192;
67181 SHA256.padLength = 64;
67182
67183 SHA256.prototype._update = function _update(msg, start) {
67184 var W = this.W;
67185
67186 for (var i = 0; i < 16; i++)
67187 W[i] = msg[start + i];
67188 for (; i < W.length; i++)
67189 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
67190
67191 var a = this.h[0];
67192 var b = this.h[1];
67193 var c = this.h[2];
67194 var d = this.h[3];
67195 var e = this.h[4];
67196 var f = this.h[5];
67197 var g = this.h[6];
67198 var h = this.h[7];
67199
67200 assert(this.k.length === W.length);
67201 for (var i = 0; i < W.length; i++) {
67202 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
67203 var T2 = sum32(s0_256(a), maj32(a, b, c));
67204 h = g;
67205 g = f;
67206 f = e;
67207 e = sum32(d, T1);
67208 d = c;
67209 c = b;
67210 b = a;
67211 a = sum32(T1, T2);
67212 }
67213
67214 this.h[0] = sum32(this.h[0], a);
67215 this.h[1] = sum32(this.h[1], b);
67216 this.h[2] = sum32(this.h[2], c);
67217 this.h[3] = sum32(this.h[3], d);
67218 this.h[4] = sum32(this.h[4], e);
67219 this.h[5] = sum32(this.h[5], f);
67220 this.h[6] = sum32(this.h[6], g);
67221 this.h[7] = sum32(this.h[7], h);
67222 };
67223
67224 SHA256.prototype._digest = function digest(enc) {
67225 if (enc === 'hex')
67226 return utils.toHex32(this.h, 'big');
67227 else
67228 return utils.split32(this.h, 'big');
67229 };
67230
67231 function SHA224() {
67232 if (!(this instanceof SHA224))
67233 return new SHA224();
67234
67235 SHA256.call(this);
67236 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
67237 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
67238 }
67239 utils.inherits(SHA224, SHA256);
67240 exports.sha224 = SHA224;
67241
67242 SHA224.blockSize = 512;
67243 SHA224.outSize = 224;
67244 SHA224.hmacStrength = 192;
67245 SHA224.padLength = 64;
67246
67247 SHA224.prototype._digest = function digest(enc) {
67248 // Just truncate output
67249 if (enc === 'hex')
67250 return utils.toHex32(this.h.slice(0, 7), 'big');
67251 else
67252 return utils.split32(this.h.slice(0, 7), 'big');
67253 };
67254
67255 function SHA512() {
67256 if (!(this instanceof SHA512))
67257 return new SHA512();
67258
67259 BlockHash.call(this);
67260 this.h = [ 0x6a09e667, 0xf3bcc908,
67261 0xbb67ae85, 0x84caa73b,
67262 0x3c6ef372, 0xfe94f82b,
67263 0xa54ff53a, 0x5f1d36f1,
67264 0x510e527f, 0xade682d1,
67265 0x9b05688c, 0x2b3e6c1f,
67266 0x1f83d9ab, 0xfb41bd6b,
67267 0x5be0cd19, 0x137e2179 ];
67268 this.k = sha512_K;
67269 this.W = new Array(160);
67270 }
67271 utils.inherits(SHA512, BlockHash);
67272 exports.sha512 = SHA512;
67273
67274 SHA512.blockSize = 1024;
67275 SHA512.outSize = 512;
67276 SHA512.hmacStrength = 192;
67277 SHA512.padLength = 128;
67278
67279 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
67280 var W = this.W;
67281
67282 // 32 x 32bit words
67283 for (var i = 0; i < 32; i++)
67284 W[i] = msg[start + i];
67285 for (; i < W.length; i += 2) {
67286 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
67287 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
67288 var c1_hi = W[i - 14]; // i - 7
67289 var c1_lo = W[i - 13];
67290 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
67291 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
67292 var c3_hi = W[i - 32]; // i - 16
67293 var c3_lo = W[i - 31];
67294
67295 W[i] = sum64_4_hi(c0_hi, c0_lo,
67296 c1_hi, c1_lo,
67297 c2_hi, c2_lo,
67298 c3_hi, c3_lo);
67299 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
67300 c1_hi, c1_lo,
67301 c2_hi, c2_lo,
67302 c3_hi, c3_lo);
67303 }
67304 };
67305
67306 SHA512.prototype._update = function _update(msg, start) {
67307 this._prepareBlock(msg, start);
67308
67309 var W = this.W;
67310
67311 var ah = this.h[0];
67312 var al = this.h[1];
67313 var bh = this.h[2];
67314 var bl = this.h[3];
67315 var ch = this.h[4];
67316 var cl = this.h[5];
67317 var dh = this.h[6];
67318 var dl = this.h[7];
67319 var eh = this.h[8];
67320 var el = this.h[9];
67321 var fh = this.h[10];
67322 var fl = this.h[11];
67323 var gh = this.h[12];
67324 var gl = this.h[13];
67325 var hh = this.h[14];
67326 var hl = this.h[15];
67327
67328 assert(this.k.length === W.length);
67329 for (var i = 0; i < W.length; i += 2) {
67330 var c0_hi = hh;
67331 var c0_lo = hl;
67332 var c1_hi = s1_512_hi(eh, el);
67333 var c1_lo = s1_512_lo(eh, el);
67334 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
67335 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
67336 var c3_hi = this.k[i];
67337 var c3_lo = this.k[i + 1];
67338 var c4_hi = W[i];
67339 var c4_lo = W[i + 1];
67340
67341 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
67342 c1_hi, c1_lo,
67343 c2_hi, c2_lo,
67344 c3_hi, c3_lo,
67345 c4_hi, c4_lo);
67346 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
67347 c1_hi, c1_lo,
67348 c2_hi, c2_lo,
67349 c3_hi, c3_lo,
67350 c4_hi, c4_lo);
67351
67352 var c0_hi = s0_512_hi(ah, al);
67353 var c0_lo = s0_512_lo(ah, al);
67354 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
67355 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
67356
67357 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
67358 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
67359
67360 hh = gh;
67361 hl = gl;
67362
67363 gh = fh;
67364 gl = fl;
67365
67366 fh = eh;
67367 fl = el;
67368
67369 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
67370 el = sum64_lo(dl, dl, T1_hi, T1_lo);
67371
67372 dh = ch;
67373 dl = cl;
67374
67375 ch = bh;
67376 cl = bl;
67377
67378 bh = ah;
67379 bl = al;
67380
67381 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
67382 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
67383 }
67384
67385 sum64(this.h, 0, ah, al);
67386 sum64(this.h, 2, bh, bl);
67387 sum64(this.h, 4, ch, cl);
67388 sum64(this.h, 6, dh, dl);
67389 sum64(this.h, 8, eh, el);
67390 sum64(this.h, 10, fh, fl);
67391 sum64(this.h, 12, gh, gl);
67392 sum64(this.h, 14, hh, hl);
67393 };
67394
67395 SHA512.prototype._digest = function digest(enc) {
67396 if (enc === 'hex')
67397 return utils.toHex32(this.h, 'big');
67398 else
67399 return utils.split32(this.h, 'big');
67400 };
67401
67402 function SHA384() {
67403 if (!(this instanceof SHA384))
67404 return new SHA384();
67405
67406 SHA512.call(this);
67407 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
67408 0x629a292a, 0x367cd507,
67409 0x9159015a, 0x3070dd17,
67410 0x152fecd8, 0xf70e5939,
67411 0x67332667, 0xffc00b31,
67412 0x8eb44a87, 0x68581511,
67413 0xdb0c2e0d, 0x64f98fa7,
67414 0x47b5481d, 0xbefa4fa4 ];
67415 }
67416 utils.inherits(SHA384, SHA512);
67417 exports.sha384 = SHA384;
67418
67419 SHA384.blockSize = 1024;
67420 SHA384.outSize = 384;
67421 SHA384.hmacStrength = 192;
67422 SHA384.padLength = 128;
67423
67424 SHA384.prototype._digest = function digest(enc) {
67425 if (enc === 'hex')
67426 return utils.toHex32(this.h.slice(0, 12), 'big');
67427 else
67428 return utils.split32(this.h.slice(0, 12), 'big');
67429 };
67430
67431 function SHA1() {
67432 if (!(this instanceof SHA1))
67433 return new SHA1();
67434
67435 BlockHash.call(this);
67436 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
67437 0x10325476, 0xc3d2e1f0 ];
67438 this.W = new Array(80);
67439 }
67440
67441 utils.inherits(SHA1, BlockHash);
67442 exports.sha1 = SHA1;
67443
67444 SHA1.blockSize = 512;
67445 SHA1.outSize = 160;
67446 SHA1.hmacStrength = 80;
67447 SHA1.padLength = 64;
67448
67449 SHA1.prototype._update = function _update(msg, start) {
67450 var W = this.W;
67451
67452 for (var i = 0; i < 16; i++)
67453 W[i] = msg[start + i];
67454
67455 for(; i < W.length; i++)
67456 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
67457
67458 var a = this.h[0];
67459 var b = this.h[1];
67460 var c = this.h[2];
67461 var d = this.h[3];
67462 var e = this.h[4];
67463
67464 for (var i = 0; i < W.length; i++) {
67465 var s = ~~(i / 20);
67466 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
67467 e = d;
67468 d = c;
67469 c = rotl32(b, 30);
67470 b = a;
67471 a = t;
67472 }
67473
67474 this.h[0] = sum32(this.h[0], a);
67475 this.h[1] = sum32(this.h[1], b);
67476 this.h[2] = sum32(this.h[2], c);
67477 this.h[3] = sum32(this.h[3], d);
67478 this.h[4] = sum32(this.h[4], e);
67479 };
67480
67481 SHA1.prototype._digest = function digest(enc) {
67482 if (enc === 'hex')
67483 return utils.toHex32(this.h, 'big');
67484 else
67485 return utils.split32(this.h, 'big');
67486 };
67487
67488 function ch32(x, y, z) {
67489 return (x & y) ^ ((~x) & z);
67490 }
67491
67492 function maj32(x, y, z) {
67493 return (x & y) ^ (x & z) ^ (y & z);
67494 }
67495
67496 function p32(x, y, z) {
67497 return x ^ y ^ z;
67498 }
67499
67500 function s0_256(x) {
67501 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
67502 }
67503
67504 function s1_256(x) {
67505 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
67506 }
67507
67508 function g0_256(x) {
67509 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
67510 }
67511
67512 function g1_256(x) {
67513 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
67514 }
67515
67516 function ft_1(s, x, y, z) {
67517 if (s === 0)
67518 return ch32(x, y, z);
67519 if (s === 1 || s === 3)
67520 return p32(x, y, z);
67521 if (s === 2)
67522 return maj32(x, y, z);
67523 }
67524
67525 function ch64_hi(xh, xl, yh, yl, zh, zl) {
67526 var r = (xh & yh) ^ ((~xh) & zh);
67527 if (r < 0)
67528 r += 0x100000000;
67529 return r;
67530 }
67531
67532 function ch64_lo(xh, xl, yh, yl, zh, zl) {
67533 var r = (xl & yl) ^ ((~xl) & zl);
67534 if (r < 0)
67535 r += 0x100000000;
67536 return r;
67537 }
67538
67539 function maj64_hi(xh, xl, yh, yl, zh, zl) {
67540 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
67541 if (r < 0)
67542 r += 0x100000000;
67543 return r;
67544 }
67545
67546 function maj64_lo(xh, xl, yh, yl, zh, zl) {
67547 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
67548 if (r < 0)
67549 r += 0x100000000;
67550 return r;
67551 }
67552
67553 function s0_512_hi(xh, xl) {
67554 var c0_hi = rotr64_hi(xh, xl, 28);
67555 var c1_hi = rotr64_hi(xl, xh, 2); // 34
67556 var c2_hi = rotr64_hi(xl, xh, 7); // 39
67557
67558 var r = c0_hi ^ c1_hi ^ c2_hi;
67559 if (r < 0)
67560 r += 0x100000000;
67561 return r;
67562 }
67563
67564 function s0_512_lo(xh, xl) {
67565 var c0_lo = rotr64_lo(xh, xl, 28);
67566 var c1_lo = rotr64_lo(xl, xh, 2); // 34
67567 var c2_lo = rotr64_lo(xl, xh, 7); // 39
67568
67569 var r = c0_lo ^ c1_lo ^ c2_lo;
67570 if (r < 0)
67571 r += 0x100000000;
67572 return r;
67573 }
67574
67575 function s1_512_hi(xh, xl) {
67576 var c0_hi = rotr64_hi(xh, xl, 14);
67577 var c1_hi = rotr64_hi(xh, xl, 18);
67578 var c2_hi = rotr64_hi(xl, xh, 9); // 41
67579
67580 var r = c0_hi ^ c1_hi ^ c2_hi;
67581 if (r < 0)
67582 r += 0x100000000;
67583 return r;
67584 }
67585
67586 function s1_512_lo(xh, xl) {
67587 var c0_lo = rotr64_lo(xh, xl, 14);
67588 var c1_lo = rotr64_lo(xh, xl, 18);
67589 var c2_lo = rotr64_lo(xl, xh, 9); // 41
67590
67591 var r = c0_lo ^ c1_lo ^ c2_lo;
67592 if (r < 0)
67593 r += 0x100000000;
67594 return r;
67595 }
67596
67597 function g0_512_hi(xh, xl) {
67598 var c0_hi = rotr64_hi(xh, xl, 1);
67599 var c1_hi = rotr64_hi(xh, xl, 8);
67600 var c2_hi = shr64_hi(xh, xl, 7);
67601
67602 var r = c0_hi ^ c1_hi ^ c2_hi;
67603 if (r < 0)
67604 r += 0x100000000;
67605 return r;
67606 }
67607
67608 function g0_512_lo(xh, xl) {
67609 var c0_lo = rotr64_lo(xh, xl, 1);
67610 var c1_lo = rotr64_lo(xh, xl, 8);
67611 var c2_lo = shr64_lo(xh, xl, 7);
67612
67613 var r = c0_lo ^ c1_lo ^ c2_lo;
67614 if (r < 0)
67615 r += 0x100000000;
67616 return r;
67617 }
67618
67619 function g1_512_hi(xh, xl) {
67620 var c0_hi = rotr64_hi(xh, xl, 19);
67621 var c1_hi = rotr64_hi(xl, xh, 29); // 61
67622 var c2_hi = shr64_hi(xh, xl, 6);
67623
67624 var r = c0_hi ^ c1_hi ^ c2_hi;
67625 if (r < 0)
67626 r += 0x100000000;
67627 return r;
67628 }
67629
67630 function g1_512_lo(xh, xl) {
67631 var c0_lo = rotr64_lo(xh, xl, 19);
67632 var c1_lo = rotr64_lo(xl, xh, 29); // 61
67633 var c2_lo = shr64_lo(xh, xl, 6);
67634
67635 var r = c0_lo ^ c1_lo ^ c2_lo;
67636 if (r < 0)
67637 r += 0x100000000;
67638 return r;
67639 }
67640
67641 },{"../hash":86}],91:[function(require,module,exports){
67642 var utils = exports;
67643 var inherits = require('inherits');
67644
67645 function toArray(msg, enc) {
67646 if (Array.isArray(msg))
67647 return msg.slice();
67648 if (!msg)
67649 return [];
67650 var res = [];
67651 if (typeof msg === 'string') {
67652 if (!enc) {
67653 for (var i = 0; i < msg.length; i++) {
67654 var c = msg.charCodeAt(i);
67655 var hi = c >> 8;
67656 var lo = c & 0xff;
67657 if (hi)
67658 res.push(hi, lo);
67659 else
67660 res.push(lo);
67661 }
67662 } else if (enc === 'hex') {
67663 msg = msg.replace(/[^a-z0-9]+/ig, '');
67664 if (msg.length % 2 !== 0)
67665 msg = '0' + msg;
67666 for (var i = 0; i < msg.length; i += 2)
67667 res.push(parseInt(msg[i] + msg[i + 1], 16));
67668 }
67669 } else {
67670 for (var i = 0; i < msg.length; i++)
67671 res[i] = msg[i] | 0;
67672 }
67673 return res;
67674 }
67675 utils.toArray = toArray;
67676
67677 function toHex(msg) {
67678 var res = '';
67679 for (var i = 0; i < msg.length; i++)
67680 res += zero2(msg[i].toString(16));
67681 return res;
67682 }
67683 utils.toHex = toHex;
67684
67685 function htonl(w) {
67686 var res = (w >>> 24) |
67687 ((w >>> 8) & 0xff00) |
67688 ((w << 8) & 0xff0000) |
67689 ((w & 0xff) << 24);
67690 return res >>> 0;
67691 }
67692 utils.htonl = htonl;
67693
67694 function toHex32(msg, endian) {
67695 var res = '';
67696 for (var i = 0; i < msg.length; i++) {
67697 var w = msg[i];
67698 if (endian === 'little')
67699 w = htonl(w);
67700 res += zero8(w.toString(16));
67701 }
67702 return res;
67703 }
67704 utils.toHex32 = toHex32;
67705
67706 function zero2(word) {
67707 if (word.length === 1)
67708 return '0' + word;
67709 else
67710 return word;
67711 }
67712 utils.zero2 = zero2;
67713
67714 function zero8(word) {
67715 if (word.length === 7)
67716 return '0' + word;
67717 else if (word.length === 6)
67718 return '00' + word;
67719 else if (word.length === 5)
67720 return '000' + word;
67721 else if (word.length === 4)
67722 return '0000' + word;
67723 else if (word.length === 3)
67724 return '00000' + word;
67725 else if (word.length === 2)
67726 return '000000' + word;
67727 else if (word.length === 1)
67728 return '0000000' + word;
67729 else
67730 return word;
67731 }
67732 utils.zero8 = zero8;
67733
67734 function join32(msg, start, end, endian) {
67735 var len = end - start;
67736 assert(len % 4 === 0);
67737 var res = new Array(len / 4);
67738 for (var i = 0, k = start; i < res.length; i++, k += 4) {
67739 var w;
67740 if (endian === 'big')
67741 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
67742 else
67743 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
67744 res[i] = w >>> 0;
67745 }
67746 return res;
67747 }
67748 utils.join32 = join32;
67749
67750 function split32(msg, endian) {
67751 var res = new Array(msg.length * 4);
67752 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
67753 var m = msg[i];
67754 if (endian === 'big') {
67755 res[k] = m >>> 24;
67756 res[k + 1] = (m >>> 16) & 0xff;
67757 res[k + 2] = (m >>> 8) & 0xff;
67758 res[k + 3] = m & 0xff;
67759 } else {
67760 res[k + 3] = m >>> 24;
67761 res[k + 2] = (m >>> 16) & 0xff;
67762 res[k + 1] = (m >>> 8) & 0xff;
67763 res[k] = m & 0xff;
67764 }
67765 }
67766 return res;
67767 }
67768 utils.split32 = split32;
67769
67770 function rotr32(w, b) {
67771 return (w >>> b) | (w << (32 - b));
67772 }
67773 utils.rotr32 = rotr32;
67774
67775 function rotl32(w, b) {
67776 return (w << b) | (w >>> (32 - b));
67777 }
67778 utils.rotl32 = rotl32;
67779
67780 function sum32(a, b) {
67781 return (a + b) >>> 0;
67782 }
67783 utils.sum32 = sum32;
67784
67785 function sum32_3(a, b, c) {
67786 return (a + b + c) >>> 0;
67787 }
67788 utils.sum32_3 = sum32_3;
67789
67790 function sum32_4(a, b, c, d) {
67791 return (a + b + c + d) >>> 0;
67792 }
67793 utils.sum32_4 = sum32_4;
67794
67795 function sum32_5(a, b, c, d, e) {
67796 return (a + b + c + d + e) >>> 0;
67797 }
67798 utils.sum32_5 = sum32_5;
67799
67800 function assert(cond, msg) {
67801 if (!cond)
67802 throw new Error(msg || 'Assertion failed');
67803 }
67804 utils.assert = assert;
67805
67806 utils.inherits = inherits;
67807
67808 function sum64(buf, pos, ah, al) {
67809 var bh = buf[pos];
67810 var bl = buf[pos + 1];
67811
67812 var lo = (al + bl) >>> 0;
67813 var hi = (lo < al ? 1 : 0) + ah + bh;
67814 buf[pos] = hi >>> 0;
67815 buf[pos + 1] = lo;
67816 }
67817 exports.sum64 = sum64;
67818
67819 function sum64_hi(ah, al, bh, bl) {
67820 var lo = (al + bl) >>> 0;
67821 var hi = (lo < al ? 1 : 0) + ah + bh;
67822 return hi >>> 0;
67823 };
67824 exports.sum64_hi = sum64_hi;
67825
67826 function sum64_lo(ah, al, bh, bl) {
67827 var lo = al + bl;
67828 return lo >>> 0;
67829 };
67830 exports.sum64_lo = sum64_lo;
67831
67832 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
67833 var carry = 0;
67834 var lo = al;
67835 lo = (lo + bl) >>> 0;
67836 carry += lo < al ? 1 : 0;
67837 lo = (lo + cl) >>> 0;
67838 carry += lo < cl ? 1 : 0;
67839 lo = (lo + dl) >>> 0;
67840 carry += lo < dl ? 1 : 0;
67841
67842 var hi = ah + bh + ch + dh + carry;
67843 return hi >>> 0;
67844 };
67845 exports.sum64_4_hi = sum64_4_hi;
67846
67847 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
67848 var lo = al + bl + cl + dl;
67849 return lo >>> 0;
67850 };
67851 exports.sum64_4_lo = sum64_4_lo;
67852
67853 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67854 var carry = 0;
67855 var lo = al;
67856 lo = (lo + bl) >>> 0;
67857 carry += lo < al ? 1 : 0;
67858 lo = (lo + cl) >>> 0;
67859 carry += lo < cl ? 1 : 0;
67860 lo = (lo + dl) >>> 0;
67861 carry += lo < dl ? 1 : 0;
67862 lo = (lo + el) >>> 0;
67863 carry += lo < el ? 1 : 0;
67864
67865 var hi = ah + bh + ch + dh + eh + carry;
67866 return hi >>> 0;
67867 };
67868 exports.sum64_5_hi = sum64_5_hi;
67869
67870 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67871 var lo = al + bl + cl + dl + el;
67872
67873 return lo >>> 0;
67874 };
67875 exports.sum64_5_lo = sum64_5_lo;
67876
67877 function rotr64_hi(ah, al, num) {
67878 var r = (al << (32 - num)) | (ah >>> num);
67879 return r >>> 0;
67880 };
67881 exports.rotr64_hi = rotr64_hi;
67882
67883 function rotr64_lo(ah, al, num) {
67884 var r = (ah << (32 - num)) | (al >>> num);
67885 return r >>> 0;
67886 };
67887 exports.rotr64_lo = rotr64_lo;
67888
67889 function shr64_hi(ah, al, num) {
67890 return ah >>> num;
67891 };
67892 exports.shr64_hi = shr64_hi;
67893
67894 function shr64_lo(ah, al, num) {
67895 var r = (ah << (32 - num)) | (al >>> num);
67896 return r >>> 0;
67897 };
67898 exports.shr64_lo = shr64_lo;
67899
67900 },{"inherits":95}],92:[function(require,module,exports){
67901 'use strict';
67902
67903 var hash = require('hash.js');
67904 var utils = require('minimalistic-crypto-utils');
67905 var assert = require('minimalistic-assert');
67906
67907 function HmacDRBG(options) {
67908 if (!(this instanceof HmacDRBG))
67909 return new HmacDRBG(options);
67910 this.hash = options.hash;
67911 this.predResist = !!options.predResist;
67912
67913 this.outLen = this.hash.outSize;
67914 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
67915
67916 this._reseed = null;
67917 this.reseedInterval = null;
67918 this.K = null;
67919 this.V = null;
67920
67921 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
67922 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
67923 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
67924 assert(entropy.length >= (this.minEntropy / 8),
67925 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67926 this._init(entropy, nonce, pers);
67927 }
67928 module.exports = HmacDRBG;
67929
67930 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
67931 var seed = entropy.concat(nonce).concat(pers);
67932
67933 this.K = new Array(this.outLen / 8);
67934 this.V = new Array(this.outLen / 8);
67935 for (var i = 0; i < this.V.length; i++) {
67936 this.K[i] = 0x00;
67937 this.V[i] = 0x01;
67938 }
67939
67940 this._update(seed);
67941 this._reseed = 1;
67942 this.reseedInterval = 0x1000000000000; // 2^48
67943 };
67944
67945 HmacDRBG.prototype._hmac = function hmac() {
67946 return new hash.hmac(this.hash, this.K);
67947 };
67948
67949 HmacDRBG.prototype._update = function update(seed) {
67950 var kmac = this._hmac()
67951 .update(this.V)
67952 .update([ 0x00 ]);
67953 if (seed)
67954 kmac = kmac.update(seed);
67955 this.K = kmac.digest();
67956 this.V = this._hmac().update(this.V).digest();
67957 if (!seed)
67958 return;
67959
67960 this.K = this._hmac()
67961 .update(this.V)
67962 .update([ 0x01 ])
67963 .update(seed)
67964 .digest();
67965 this.V = this._hmac().update(this.V).digest();
67966 };
67967
67968 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
67969 // Optional entropy enc
67970 if (typeof entropyEnc !== 'string') {
67971 addEnc = add;
67972 add = entropyEnc;
67973 entropyEnc = null;
67974 }
67975
67976 entropy = utils.toArray(entropy, entropyEnc);
67977 add = utils.toArray(add, addEnc);
67978
67979 assert(entropy.length >= (this.minEntropy / 8),
67980 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67981
67982 this._update(entropy.concat(add || []));
67983 this._reseed = 1;
67984 };
67985
67986 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
67987 if (this._reseed > this.reseedInterval)
67988 throw new Error('Reseed is required');
67989
67990 // Optional encoding
67991 if (typeof enc !== 'string') {
67992 addEnc = add;
67993 add = enc;
67994 enc = null;
67995 }
67996
67997 // Optional additional data
67998 if (add) {
67999 add = utils.toArray(add, addEnc || 'hex');
68000 this._update(add);
68001 }
68002
68003 var temp = [];
68004 while (temp.length < len) {
68005 this.V = this._hmac().update(this.V).digest();
68006 temp = temp.concat(this.V);
68007 }
68008
68009 var res = temp.slice(0, len);
68010 this._update(add);
68011 this._reseed++;
68012 return utils.encode(res, enc);
68013 };
68014
68015 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
68016 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
68017 var e, m
68018 var eLen = nBytes * 8 - mLen - 1
68019 var eMax = (1 << eLen) - 1
68020 var eBias = eMax >> 1
68021 var nBits = -7
68022 var i = isLE ? (nBytes - 1) : 0
68023 var d = isLE ? -1 : 1
68024 var s = buffer[offset + i]
68025
68026 i += d
68027
68028 e = s & ((1 << (-nBits)) - 1)
68029 s >>= (-nBits)
68030 nBits += eLen
68031 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68032
68033 m = e & ((1 << (-nBits)) - 1)
68034 e >>= (-nBits)
68035 nBits += mLen
68036 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68037
68038 if (e === 0) {
68039 e = 1 - eBias
68040 } else if (e === eMax) {
68041 return m ? NaN : ((s ? -1 : 1) * Infinity)
68042 } else {
68043 m = m + Math.pow(2, mLen)
68044 e = e - eBias
68045 }
68046 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
68047 }
68048
68049 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
68050 var e, m, c
68051 var eLen = nBytes * 8 - mLen - 1
68052 var eMax = (1 << eLen) - 1
68053 var eBias = eMax >> 1
68054 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
68055 var i = isLE ? 0 : (nBytes - 1)
68056 var d = isLE ? 1 : -1
68057 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
68058
68059 value = Math.abs(value)
68060
68061 if (isNaN(value) || value === Infinity) {
68062 m = isNaN(value) ? 1 : 0
68063 e = eMax
68064 } else {
68065 e = Math.floor(Math.log(value) / Math.LN2)
68066 if (value * (c = Math.pow(2, -e)) < 1) {
68067 e--
68068 c *= 2
68069 }
68070 if (e + eBias >= 1) {
68071 value += rt / c
68072 } else {
68073 value += rt * Math.pow(2, 1 - eBias)
68074 }
68075 if (value * c >= 2) {
68076 e++
68077 c /= 2
68078 }
68079
68080 if (e + eBias >= eMax) {
68081 m = 0
68082 e = eMax
68083 } else if (e + eBias >= 1) {
68084 m = (value * c - 1) * Math.pow(2, mLen)
68085 e = e + eBias
68086 } else {
68087 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
68088 e = 0
68089 }
68090 }
68091
68092 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
68093
68094 e = (e << mLen) | m
68095 eLen += mLen
68096 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
68097
68098 buffer[offset + i - d] |= s * 128
68099 }
68100
68101 },{}],94:[function(require,module,exports){
68102
68103 var indexOf = [].indexOf;
68104
68105 module.exports = function(arr, obj){
68106 if (indexOf) return arr.indexOf(obj);
68107 for (var i = 0; i < arr.length; ++i) {
68108 if (arr[i] === obj) return i;
68109 }
68110 return -1;
68111 };
68112 },{}],95:[function(require,module,exports){
68113 if (typeof Object.create === 'function') {
68114 // implementation from standard node.js 'util' module
68115 module.exports = function inherits(ctor, superCtor) {
68116 ctor.super_ = superCtor
68117 ctor.prototype = Object.create(superCtor.prototype, {
68118 constructor: {
68119 value: ctor,
68120 enumerable: false,
68121 writable: true,
68122 configurable: true
68123 }
68124 });
68125 };
68126 } else {
68127 // old school shim for old browsers
68128 module.exports = function inherits(ctor, superCtor) {
68129 ctor.super_ = superCtor
68130 var TempCtor = function () {}
68131 TempCtor.prototype = superCtor.prototype
68132 ctor.prototype = new TempCtor()
68133 ctor.prototype.constructor = ctor
68134 }
68135 }
68136
68137 },{}],96:[function(require,module,exports){
68138 /*!
68139 * Determine if an object is a Buffer
68140 *
68141 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
68142 * @license MIT
68143 */
68144
68145 // The _isBuffer check is for Safari 5-7 support, because it's missing
68146 // Object.prototype.constructor. Remove this eventually
68147 module.exports = function (obj) {
68148 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
68149 }
68150
68151 function isBuffer (obj) {
68152 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
68153 }
68154
68155 // For Node v0.10 support. Remove this eventually.
68156 function isSlowBuffer (obj) {
68157 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
68158 }
68159
68160 },{}],97:[function(require,module,exports){
68161 var toString = {}.toString;
68162
68163 module.exports = Array.isArray || function (arr) {
68164 return toString.call(arr) == '[object Array]';
68165 };
68166
68167 },{}],98:[function(require,module,exports){
68168 var bn = require('bn.js');
68169 var brorand = require('brorand');
68170
68171 function MillerRabin(rand) {
68172 this.rand = rand || new brorand.Rand();
68173 }
68174 module.exports = MillerRabin;
68175
68176 MillerRabin.create = function create(rand) {
68177 return new MillerRabin(rand);
68178 };
68179
68180 MillerRabin.prototype._rand = function _rand(n) {
68181 var len = n.bitLength();
68182 var buf = this.rand.generate(Math.ceil(len / 8));
68183
68184 // Set low bits
68185 buf[0] |= 3;
68186
68187 // Mask high bits
68188 var mask = len & 0x7;
68189 if (mask !== 0)
68190 buf[buf.length - 1] >>= 7 - mask;
68191
68192 return new bn(buf);
68193 }
68194
68195 MillerRabin.prototype.test = function test(n, k, cb) {
68196 var len = n.bitLength();
68197 var red = bn.mont(n);
68198 var rone = new bn(1).toRed(red);
68199
68200 if (!k)
68201 k = Math.max(1, (len / 48) | 0);
68202
68203 // Find d and s, (n - 1) = (2 ^ s) * d;
68204 var n1 = n.subn(1);
68205 var n2 = n1.subn(1);
68206 for (var s = 0; !n1.testn(s); s++) {}
68207 var d = n.shrn(s);
68208
68209 var rn1 = n1.toRed(red);
68210
68211 var prime = true;
68212 for (; k > 0; k--) {
68213 var a = this._rand(n2);
68214 if (cb)
68215 cb(a);
68216
68217 var x = a.toRed(red).redPow(d);
68218 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68219 continue;
68220
68221 for (var i = 1; i < s; i++) {
68222 x = x.redSqr();
68223
68224 if (x.cmp(rone) === 0)
68225 return false;
68226 if (x.cmp(rn1) === 0)
68227 break;
68228 }
68229
68230 if (i === s)
68231 return false;
68232 }
68233
68234 return prime;
68235 };
68236
68237 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
68238 var len = n.bitLength();
68239 var red = bn.mont(n);
68240 var rone = new bn(1).toRed(red);
68241
68242 if (!k)
68243 k = Math.max(1, (len / 48) | 0);
68244
68245 // Find d and s, (n - 1) = (2 ^ s) * d;
68246 var n1 = n.subn(1);
68247 var n2 = n1.subn(1);
68248 for (var s = 0; !n1.testn(s); s++) {}
68249 var d = n.shrn(s);
68250
68251 var rn1 = n1.toRed(red);
68252
68253 for (; k > 0; k--) {
68254 var a = this._rand(n2);
68255
68256 var g = n.gcd(a);
68257 if (g.cmpn(1) !== 0)
68258 return g;
68259
68260 var x = a.toRed(red).redPow(d);
68261 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68262 continue;
68263
68264 for (var i = 1; i < s; i++) {
68265 x = x.redSqr();
68266
68267 if (x.cmp(rone) === 0)
68268 return x.fromRed().subn(1).gcd(n);
68269 if (x.cmp(rn1) === 0)
68270 break;
68271 }
68272
68273 if (i === s) {
68274 x = x.redSqr();
68275 return x.fromRed().subn(1).gcd(n);
68276 }
68277 }
68278
68279 return false;
68280 };
68281
68282 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
68283 module.exports = assert;
68284
68285 function assert(val, msg) {
68286 if (!val)
68287 throw new Error(msg || 'Assertion failed');
68288 }
68289
68290 assert.equal = function assertEqual(l, r, msg) {
68291 if (l != r)
68292 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
68293 };
68294
68295 },{}],100:[function(require,module,exports){
68296 'use strict';
68297
68298 var utils = exports;
68299
68300 function toArray(msg, enc) {
68301 if (Array.isArray(msg))
68302 return msg.slice();
68303 if (!msg)
68304 return [];
68305 var res = [];
68306 if (typeof msg !== 'string') {
68307 for (var i = 0; i < msg.length; i++)
68308 res[i] = msg[i] | 0;
68309 return res;
68310 }
68311 if (enc === 'hex') {
68312 msg = msg.replace(/[^a-z0-9]+/ig, '');
68313 if (msg.length % 2 !== 0)
68314 msg = '0' + msg;
68315 for (var i = 0; i < msg.length; i += 2)
68316 res.push(parseInt(msg[i] + msg[i + 1], 16));
68317 } else {
68318 for (var i = 0; i < msg.length; i++) {
68319 var c = msg.charCodeAt(i);
68320 var hi = c >> 8;
68321 var lo = c & 0xff;
68322 if (hi)
68323 res.push(hi, lo);
68324 else
68325 res.push(lo);
68326 }
68327 }
68328 return res;
68329 }
68330 utils.toArray = toArray;
68331
68332 function zero2(word) {
68333 if (word.length === 1)
68334 return '0' + word;
68335 else
68336 return word;
68337 }
68338 utils.zero2 = zero2;
68339
68340 function toHex(msg) {
68341 var res = '';
68342 for (var i = 0; i < msg.length; i++)
68343 res += zero2(msg[i].toString(16));
68344 return res;
68345 }
68346 utils.toHex = toHex;
68347
68348 utils.encode = function encode(arr, enc) {
68349 if (enc === 'hex')
68350 return toHex(arr);
68351 else
68352 return arr;
68353 };
68354
68355 },{}],101:[function(require,module,exports){
68356 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
68357 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
68358 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
68359 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
68360 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
68361 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
68362 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
68363 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
68364 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
68365 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
68366 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
68367 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
68368 }
68369 },{}],102:[function(require,module,exports){
68370 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
68371 // Fedor, you are amazing.
68372 'use strict'
68373
68374 var asn1 = require('asn1.js')
68375
68376 exports.certificate = require('./certificate')
68377
68378 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
68379 this.seq().obj(
68380 this.key('version').int(),
68381 this.key('modulus').int(),
68382 this.key('publicExponent').int(),
68383 this.key('privateExponent').int(),
68384 this.key('prime1').int(),
68385 this.key('prime2').int(),
68386 this.key('exponent1').int(),
68387 this.key('exponent2').int(),
68388 this.key('coefficient').int()
68389 )
68390 })
68391 exports.RSAPrivateKey = RSAPrivateKey
68392
68393 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
68394 this.seq().obj(
68395 this.key('modulus').int(),
68396 this.key('publicExponent').int()
68397 )
68398 })
68399 exports.RSAPublicKey = RSAPublicKey
68400
68401 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
68402 this.seq().obj(
68403 this.key('algorithm').use(AlgorithmIdentifier),
68404 this.key('subjectPublicKey').bitstr()
68405 )
68406 })
68407 exports.PublicKey = PublicKey
68408
68409 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
68410 this.seq().obj(
68411 this.key('algorithm').objid(),
68412 this.key('none').null_().optional(),
68413 this.key('curve').objid().optional(),
68414 this.key('params').seq().obj(
68415 this.key('p').int(),
68416 this.key('q').int(),
68417 this.key('g').int()
68418 ).optional()
68419 )
68420 })
68421
68422 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
68423 this.seq().obj(
68424 this.key('version').int(),
68425 this.key('algorithm').use(AlgorithmIdentifier),
68426 this.key('subjectPrivateKey').octstr()
68427 )
68428 })
68429 exports.PrivateKey = PrivateKeyInfo
68430 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
68431 this.seq().obj(
68432 this.key('algorithm').seq().obj(
68433 this.key('id').objid(),
68434 this.key('decrypt').seq().obj(
68435 this.key('kde').seq().obj(
68436 this.key('id').objid(),
68437 this.key('kdeparams').seq().obj(
68438 this.key('salt').octstr(),
68439 this.key('iters').int()
68440 )
68441 ),
68442 this.key('cipher').seq().obj(
68443 this.key('algo').objid(),
68444 this.key('iv').octstr()
68445 )
68446 )
68447 ),
68448 this.key('subjectPrivateKey').octstr()
68449 )
68450 })
68451
68452 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
68453
68454 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
68455 this.seq().obj(
68456 this.key('version').int(),
68457 this.key('p').int(),
68458 this.key('q').int(),
68459 this.key('g').int(),
68460 this.key('pub_key').int(),
68461 this.key('priv_key').int()
68462 )
68463 })
68464 exports.DSAPrivateKey = DSAPrivateKey
68465
68466 exports.DSAparam = asn1.define('DSAparam', function () {
68467 this.int()
68468 })
68469
68470 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
68471 this.seq().obj(
68472 this.key('version').int(),
68473 this.key('privateKey').octstr(),
68474 this.key('parameters').optional().explicit(0).use(ECParameters),
68475 this.key('publicKey').optional().explicit(1).bitstr()
68476 )
68477 })
68478 exports.ECPrivateKey = ECPrivateKey
68479
68480 var ECParameters = asn1.define('ECParameters', function () {
68481 this.choice({
68482 namedCurve: this.objid()
68483 })
68484 })
68485
68486 exports.signature = asn1.define('signature', function () {
68487 this.seq().obj(
68488 this.key('r').int(),
68489 this.key('s').int()
68490 )
68491 })
68492
68493 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
68494 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
68495 // thanks to @Rantanen
68496
68497 'use strict'
68498
68499 var asn = require('asn1.js')
68500
68501 var Time = asn.define('Time', function () {
68502 this.choice({
68503 utcTime: this.utctime(),
68504 generalTime: this.gentime()
68505 })
68506 })
68507
68508 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
68509 this.seq().obj(
68510 this.key('type').objid(),
68511 this.key('value').any()
68512 )
68513 })
68514
68515 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
68516 this.seq().obj(
68517 this.key('algorithm').objid(),
68518 this.key('parameters').optional()
68519 )
68520 })
68521
68522 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
68523 this.seq().obj(
68524 this.key('algorithm').use(AlgorithmIdentifier),
68525 this.key('subjectPublicKey').bitstr()
68526 )
68527 })
68528
68529 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
68530 this.setof(AttributeTypeValue)
68531 })
68532
68533 var RDNSequence = asn.define('RDNSequence', function () {
68534 this.seqof(RelativeDistinguishedName)
68535 })
68536
68537 var Name = asn.define('Name', function () {
68538 this.choice({
68539 rdnSequence: this.use(RDNSequence)
68540 })
68541 })
68542
68543 var Validity = asn.define('Validity', function () {
68544 this.seq().obj(
68545 this.key('notBefore').use(Time),
68546 this.key('notAfter').use(Time)
68547 )
68548 })
68549
68550 var Extension = asn.define('Extension', function () {
68551 this.seq().obj(
68552 this.key('extnID').objid(),
68553 this.key('critical').bool().def(false),
68554 this.key('extnValue').octstr()
68555 )
68556 })
68557
68558 var TBSCertificate = asn.define('TBSCertificate', function () {
68559 this.seq().obj(
68560 this.key('version').explicit(0).int(),
68561 this.key('serialNumber').int(),
68562 this.key('signature').use(AlgorithmIdentifier),
68563 this.key('issuer').use(Name),
68564 this.key('validity').use(Validity),
68565 this.key('subject').use(Name),
68566 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
68567 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
68568 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
68569 this.key('extensions').explicit(3).seqof(Extension).optional()
68570 )
68571 })
68572
68573 var X509Certificate = asn.define('X509Certificate', function () {
68574 this.seq().obj(
68575 this.key('tbsCertificate').use(TBSCertificate),
68576 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
68577 this.key('signatureValue').bitstr()
68578 )
68579 })
68580
68581 module.exports = X509Certificate
68582
68583 },{"asn1.js":1}],104:[function(require,module,exports){
68584 (function (Buffer){
68585 // adapted from https://github.com/apatil/pemstrip
68586 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
68587 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
68588 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
68589 var evp = require('evp_bytestokey')
68590 var ciphers = require('browserify-aes')
68591 module.exports = function (okey, password) {
68592 var key = okey.toString()
68593 var match = key.match(findProc)
68594 var decrypted
68595 if (!match) {
68596 var match2 = key.match(fullRegex)
68597 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
68598 } else {
68599 var suite = 'aes' + match[1]
68600 var iv = new Buffer(match[2], 'hex')
68601 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
68602 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
68603 var out = []
68604 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
68605 out.push(cipher.update(cipherText))
68606 out.push(cipher.final())
68607 decrypted = Buffer.concat(out)
68608 }
68609 var tag = key.match(startRegex)[1]
68610 return {
68611 tag: tag,
68612 data: decrypted
68613 }
68614 }
68615
68616 }).call(this,require("buffer").Buffer)
68617 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
68618 (function (Buffer){
68619 var asn1 = require('./asn1')
68620 var aesid = require('./aesid.json')
68621 var fixProc = require('./fixProc')
68622 var ciphers = require('browserify-aes')
68623 var compat = require('pbkdf2')
68624 module.exports = parseKeys
68625
68626 function parseKeys (buffer) {
68627 var password
68628 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
68629 password = buffer.passphrase
68630 buffer = buffer.key
68631 }
68632 if (typeof buffer === 'string') {
68633 buffer = new Buffer(buffer)
68634 }
68635
68636 var stripped = fixProc(buffer, password)
68637
68638 var type = stripped.tag
68639 var data = stripped.data
68640 var subtype, ndata
68641 switch (type) {
68642 case 'CERTIFICATE':
68643 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
68644 // falls through
68645 case 'PUBLIC KEY':
68646 if (!ndata) {
68647 ndata = asn1.PublicKey.decode(data, 'der')
68648 }
68649 subtype = ndata.algorithm.algorithm.join('.')
68650 switch (subtype) {
68651 case '1.2.840.113549.1.1.1':
68652 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
68653 case '1.2.840.10045.2.1':
68654 ndata.subjectPrivateKey = ndata.subjectPublicKey
68655 return {
68656 type: 'ec',
68657 data: ndata
68658 }
68659 case '1.2.840.10040.4.1':
68660 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
68661 return {
68662 type: 'dsa',
68663 data: ndata.algorithm.params
68664 }
68665 default: throw new Error('unknown key id ' + subtype)
68666 }
68667 throw new Error('unknown key type ' + type)
68668 case 'ENCRYPTED PRIVATE KEY':
68669 data = asn1.EncryptedPrivateKey.decode(data, 'der')
68670 data = decrypt(data, password)
68671 // falls through
68672 case 'PRIVATE KEY':
68673 ndata = asn1.PrivateKey.decode(data, 'der')
68674 subtype = ndata.algorithm.algorithm.join('.')
68675 switch (subtype) {
68676 case '1.2.840.113549.1.1.1':
68677 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
68678 case '1.2.840.10045.2.1':
68679 return {
68680 curve: ndata.algorithm.curve,
68681 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
68682 }
68683 case '1.2.840.10040.4.1':
68684 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
68685 return {
68686 type: 'dsa',
68687 params: ndata.algorithm.params
68688 }
68689 default: throw new Error('unknown key id ' + subtype)
68690 }
68691 throw new Error('unknown key type ' + type)
68692 case 'RSA PUBLIC KEY':
68693 return asn1.RSAPublicKey.decode(data, 'der')
68694 case 'RSA PRIVATE KEY':
68695 return asn1.RSAPrivateKey.decode(data, 'der')
68696 case 'DSA PRIVATE KEY':
68697 return {
68698 type: 'dsa',
68699 params: asn1.DSAPrivateKey.decode(data, 'der')
68700 }
68701 case 'EC PRIVATE KEY':
68702 data = asn1.ECPrivateKey.decode(data, 'der')
68703 return {
68704 curve: data.parameters.value,
68705 privateKey: data.privateKey
68706 }
68707 default: throw new Error('unknown key type ' + type)
68708 }
68709 }
68710 parseKeys.signature = asn1.signature
68711 function decrypt (data, password) {
68712 var salt = data.algorithm.decrypt.kde.kdeparams.salt
68713 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
68714 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
68715 var iv = data.algorithm.decrypt.cipher.iv
68716 var cipherText = data.subjectPrivateKey
68717 var keylen = parseInt(algo.split('-')[1], 10) / 8
68718 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
68719 var cipher = ciphers.createDecipheriv(algo, key, iv)
68720 var out = []
68721 out.push(cipher.update(cipherText))
68722 out.push(cipher.final())
68723 return Buffer.concat(out)
68724 }
68725
68726 }).call(this,require("buffer").Buffer)
68727 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
68728
68729 exports.pbkdf2 = require('./lib/async')
68730
68731 exports.pbkdf2Sync = require('./lib/sync')
68732
68733 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
68734 (function (process,global){
68735 var checkParameters = require('./precondition')
68736 var defaultEncoding = require('./default-encoding')
68737 var sync = require('./sync')
68738 var Buffer = require('safe-buffer').Buffer
68739
68740 var ZERO_BUF
68741 var subtle = global.crypto && global.crypto.subtle
68742 var toBrowser = {
68743 'sha': 'SHA-1',
68744 'sha-1': 'SHA-1',
68745 'sha1': 'SHA-1',
68746 'sha256': 'SHA-256',
68747 'sha-256': 'SHA-256',
68748 'sha384': 'SHA-384',
68749 'sha-384': 'SHA-384',
68750 'sha-512': 'SHA-512',
68751 'sha512': 'SHA-512'
68752 }
68753 var checks = []
68754 function checkNative (algo) {
68755 if (global.process && !global.process.browser) {
68756 return Promise.resolve(false)
68757 }
68758 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
68759 return Promise.resolve(false)
68760 }
68761 if (checks[algo] !== undefined) {
68762 return checks[algo]
68763 }
68764 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
68765 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
68766 .then(function () {
68767 return true
68768 }).catch(function () {
68769 return false
68770 })
68771 checks[algo] = prom
68772 return prom
68773 }
68774 function browserPbkdf2 (password, salt, iterations, length, algo) {
68775 return subtle.importKey(
68776 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
68777 ).then(function (key) {
68778 return subtle.deriveBits({
68779 name: 'PBKDF2',
68780 salt: salt,
68781 iterations: iterations,
68782 hash: {
68783 name: algo
68784 }
68785 }, key, length << 3)
68786 }).then(function (res) {
68787 return Buffer.from(res)
68788 })
68789 }
68790 function resolvePromise (promise, callback) {
68791 promise.then(function (out) {
68792 process.nextTick(function () {
68793 callback(null, out)
68794 })
68795 }, function (e) {
68796 process.nextTick(function () {
68797 callback(e)
68798 })
68799 })
68800 }
68801 module.exports = function (password, salt, iterations, keylen, digest, callback) {
68802 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68803 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68804
68805 checkParameters(iterations, keylen)
68806 if (typeof digest === 'function') {
68807 callback = digest
68808 digest = undefined
68809 }
68810 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
68811
68812 digest = digest || 'sha1'
68813 var algo = toBrowser[digest.toLowerCase()]
68814 if (!algo || typeof global.Promise !== 'function') {
68815 return process.nextTick(function () {
68816 var out
68817 try {
68818 out = sync(password, salt, iterations, keylen, digest)
68819 } catch (e) {
68820 return callback(e)
68821 }
68822 callback(null, out)
68823 })
68824 }
68825 resolvePromise(checkNative(algo).then(function (resp) {
68826 if (resp) {
68827 return browserPbkdf2(password, salt, iterations, keylen, algo)
68828 } else {
68829 return sync(password, salt, iterations, keylen, digest)
68830 }
68831 }), callback)
68832 }
68833
68834 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
68835 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
68836 (function (process){
68837 var defaultEncoding
68838 /* istanbul ignore next */
68839 if (process.browser) {
68840 defaultEncoding = 'utf-8'
68841 } else {
68842 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
68843
68844 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
68845 }
68846 module.exports = defaultEncoding
68847
68848 }).call(this,require('_process'))
68849 },{"_process":112}],109:[function(require,module,exports){
68850 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
68851 module.exports = function (iterations, keylen) {
68852 if (typeof iterations !== 'number') {
68853 throw new TypeError('Iterations not a number')
68854 }
68855
68856 if (iterations < 0) {
68857 throw new TypeError('Bad iterations')
68858 }
68859
68860 if (typeof keylen !== 'number') {
68861 throw new TypeError('Key length not a number')
68862 }
68863
68864 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
68865 throw new TypeError('Bad key length')
68866 }
68867 }
68868
68869 },{}],110:[function(require,module,exports){
68870 var md5 = require('create-hash/md5')
68871 var rmd160 = require('ripemd160')
68872 var sha = require('sha.js')
68873
68874 var checkParameters = require('./precondition')
68875 var defaultEncoding = require('./default-encoding')
68876 var Buffer = require('safe-buffer').Buffer
68877 var ZEROS = Buffer.alloc(128)
68878 var sizes = {
68879 md5: 16,
68880 sha1: 20,
68881 sha224: 28,
68882 sha256: 32,
68883 sha384: 48,
68884 sha512: 64,
68885 rmd160: 20,
68886 ripemd160: 20
68887 }
68888 function Hmac (alg, key, saltLen) {
68889 var hash = getDigest(alg)
68890 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
68891
68892 if (key.length > blocksize) {
68893 key = hash(key)
68894 } else if (key.length < blocksize) {
68895 key = Buffer.concat([key, ZEROS], blocksize)
68896 }
68897
68898 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
68899 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
68900 for (var i = 0; i < blocksize; i++) {
68901 ipad[i] = key[i] ^ 0x36
68902 opad[i] = key[i] ^ 0x5C
68903 }
68904
68905 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
68906 ipad.copy(ipad1, 0, 0, blocksize)
68907 this.ipad1 = ipad1
68908 this.ipad2 = ipad
68909 this.opad = opad
68910 this.alg = alg
68911 this.blocksize = blocksize
68912 this.hash = hash
68913 this.size = sizes[alg]
68914 }
68915
68916 Hmac.prototype.run = function (data, ipad) {
68917 data.copy(ipad, this.blocksize)
68918 var h = this.hash(ipad)
68919 h.copy(this.opad, this.blocksize)
68920 return this.hash(this.opad)
68921 }
68922
68923 function getDigest (alg) {
68924 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
68925 if (alg === 'md5') return md5
68926 return shaFunc
68927
68928 function shaFunc (data) {
68929 return sha(alg).update(data).digest()
68930 }
68931 }
68932
68933 module.exports = function (password, salt, iterations, keylen, digest) {
68934 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68935 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68936
68937 checkParameters(iterations, keylen)
68938
68939 digest = digest || 'sha1'
68940
68941 var hmac = new Hmac(digest, password, salt.length)
68942
68943 var DK = Buffer.allocUnsafe(keylen)
68944 var block1 = Buffer.allocUnsafe(salt.length + 4)
68945 salt.copy(block1, 0, 0, salt.length)
68946
68947 var U, j, destPos, len
68948
68949 var hLen = hmac.size
68950 var T = Buffer.allocUnsafe(hLen)
68951 var l = Math.ceil(keylen / hLen)
68952 var r = keylen - (l - 1) * hLen
68953
68954 for (var i = 1; i <= l; i++) {
68955 block1.writeUInt32BE(i, salt.length)
68956 U = hmac.run(block1, hmac.ipad1)
68957
68958 U.copy(T, 0, 0, hLen)
68959
68960 for (j = 1; j < iterations; j++) {
68961 U = hmac.run(U, hmac.ipad2)
68962 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
68963 }
68964
68965 destPos = (i - 1) * hLen
68966 len = (i === l ? r : hLen)
68967 T.copy(DK, destPos, 0, len)
68968 }
68969
68970 return DK
68971 }
68972
68973 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
68974 (function (process){
68975 'use strict';
68976
68977 if (!process.version ||
68978 process.version.indexOf('v0.') === 0 ||
68979 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
68980 module.exports = nextTick;
68981 } else {
68982 module.exports = process.nextTick;
68983 }
68984
68985 function nextTick(fn, arg1, arg2, arg3) {
68986 if (typeof fn !== 'function') {
68987 throw new TypeError('"callback" argument must be a function');
68988 }
68989 var len = arguments.length;
68990 var args, i;
68991 switch (len) {
68992 case 0:
68993 case 1:
68994 return process.nextTick(fn);
68995 case 2:
68996 return process.nextTick(function afterTickOne() {
68997 fn.call(null, arg1);
68998 });
68999 case 3:
69000 return process.nextTick(function afterTickTwo() {
69001 fn.call(null, arg1, arg2);
69002 });
69003 case 4:
69004 return process.nextTick(function afterTickThree() {
69005 fn.call(null, arg1, arg2, arg3);
69006 });
69007 default:
69008 args = new Array(len - 1);
69009 i = 0;
69010 while (i < args.length) {
69011 args[i++] = arguments[i];
69012 }
69013 return process.nextTick(function afterTick() {
69014 fn.apply(null, args);
69015 });
69016 }
69017 }
69018
69019 }).call(this,require('_process'))
69020 },{"_process":112}],112:[function(require,module,exports){
69021 // shim for using process in browser
69022 var process = module.exports = {};
69023
69024 // cached from whatever global is present so that test runners that stub it
69025 // don't break things. But we need to wrap it in a try catch in case it is
69026 // wrapped in strict mode code which doesn't define any globals. It's inside a
69027 // function because try/catches deoptimize in certain engines.
69028
69029 var cachedSetTimeout;
69030 var cachedClearTimeout;
69031
69032 function defaultSetTimout() {
69033 throw new Error('setTimeout has not been defined');
69034 }
69035 function defaultClearTimeout () {
69036 throw new Error('clearTimeout has not been defined');
69037 }
69038 (function () {
69039 try {
69040 if (typeof setTimeout === 'function') {
69041 cachedSetTimeout = setTimeout;
69042 } else {
69043 cachedSetTimeout = defaultSetTimout;
69044 }
69045 } catch (e) {
69046 cachedSetTimeout = defaultSetTimout;
69047 }
69048 try {
69049 if (typeof clearTimeout === 'function') {
69050 cachedClearTimeout = clearTimeout;
69051 } else {
69052 cachedClearTimeout = defaultClearTimeout;
69053 }
69054 } catch (e) {
69055 cachedClearTimeout = defaultClearTimeout;
69056 }
69057 } ())
69058 function runTimeout(fun) {
69059 if (cachedSetTimeout === setTimeout) {
69060 //normal enviroments in sane situations
69061 return setTimeout(fun, 0);
69062 }
69063 // if setTimeout wasn't available but was latter defined
69064 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
69065 cachedSetTimeout = setTimeout;
69066 return setTimeout(fun, 0);
69067 }
69068 try {
69069 // when when somebody has screwed with setTimeout but no I.E. maddness
69070 return cachedSetTimeout(fun, 0);
69071 } catch(e){
69072 try {
69073 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69074 return cachedSetTimeout.call(null, fun, 0);
69075 } catch(e){
69076 // 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
69077 return cachedSetTimeout.call(this, fun, 0);
69078 }
69079 }
69080
69081
69082 }
69083 function runClearTimeout(marker) {
69084 if (cachedClearTimeout === clearTimeout) {
69085 //normal enviroments in sane situations
69086 return clearTimeout(marker);
69087 }
69088 // if clearTimeout wasn't available but was latter defined
69089 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
69090 cachedClearTimeout = clearTimeout;
69091 return clearTimeout(marker);
69092 }
69093 try {
69094 // when when somebody has screwed with setTimeout but no I.E. maddness
69095 return cachedClearTimeout(marker);
69096 } catch (e){
69097 try {
69098 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69099 return cachedClearTimeout.call(null, marker);
69100 } catch (e){
69101 // 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.
69102 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
69103 return cachedClearTimeout.call(this, marker);
69104 }
69105 }
69106
69107
69108
69109 }
69110 var queue = [];
69111 var draining = false;
69112 var currentQueue;
69113 var queueIndex = -1;
69114
69115 function cleanUpNextTick() {
69116 if (!draining || !currentQueue) {
69117 return;
69118 }
69119 draining = false;
69120 if (currentQueue.length) {
69121 queue = currentQueue.concat(queue);
69122 } else {
69123 queueIndex = -1;
69124 }
69125 if (queue.length) {
69126 drainQueue();
69127 }
69128 }
69129
69130 function drainQueue() {
69131 if (draining) {
69132 return;
69133 }
69134 var timeout = runTimeout(cleanUpNextTick);
69135 draining = true;
69136
69137 var len = queue.length;
69138 while(len) {
69139 currentQueue = queue;
69140 queue = [];
69141 while (++queueIndex < len) {
69142 if (currentQueue) {
69143 currentQueue[queueIndex].run();
69144 }
69145 }
69146 queueIndex = -1;
69147 len = queue.length;
69148 }
69149 currentQueue = null;
69150 draining = false;
69151 runClearTimeout(timeout);
69152 }
69153
69154 process.nextTick = function (fun) {
69155 var args = new Array(arguments.length - 1);
69156 if (arguments.length > 1) {
69157 for (var i = 1; i < arguments.length; i++) {
69158 args[i - 1] = arguments[i];
69159 }
69160 }
69161 queue.push(new Item(fun, args));
69162 if (queue.length === 1 && !draining) {
69163 runTimeout(drainQueue);
69164 }
69165 };
69166
69167 // v8 likes predictible objects
69168 function Item(fun, array) {
69169 this.fun = fun;
69170 this.array = array;
69171 }
69172 Item.prototype.run = function () {
69173 this.fun.apply(null, this.array);
69174 };
69175 process.title = 'browser';
69176 process.browser = true;
69177 process.env = {};
69178 process.argv = [];
69179 process.version = ''; // empty string to avoid regexp issues
69180 process.versions = {};
69181
69182 function noop() {}
69183
69184 process.on = noop;
69185 process.addListener = noop;
69186 process.once = noop;
69187 process.off = noop;
69188 process.removeListener = noop;
69189 process.removeAllListeners = noop;
69190 process.emit = noop;
69191 process.prependListener = noop;
69192 process.prependOnceListener = noop;
69193
69194 process.listeners = function (name) { return [] }
69195
69196 process.binding = function (name) {
69197 throw new Error('process.binding is not supported');
69198 };
69199
69200 process.cwd = function () { return '/' };
69201 process.chdir = function (dir) {
69202 throw new Error('process.chdir is not supported');
69203 };
69204 process.umask = function() { return 0; };
69205
69206 },{}],113:[function(require,module,exports){
69207 exports.publicEncrypt = require('./publicEncrypt');
69208 exports.privateDecrypt = require('./privateDecrypt');
69209
69210 exports.privateEncrypt = function privateEncrypt(key, buf) {
69211 return exports.publicEncrypt(key, buf, true);
69212 };
69213
69214 exports.publicDecrypt = function publicDecrypt(key, buf) {
69215 return exports.privateDecrypt(key, buf, true);
69216 };
69217 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
69218 (function (Buffer){
69219 var createHash = require('create-hash');
69220 module.exports = function (seed, len) {
69221 var t = new Buffer('');
69222 var i = 0, c;
69223 while (t.length < len) {
69224 c = i2ops(i++);
69225 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
69226 }
69227 return t.slice(0, len);
69228 };
69229
69230 function i2ops(c) {
69231 var out = new Buffer(4);
69232 out.writeUInt32BE(c,0);
69233 return out;
69234 }
69235 }).call(this,require("buffer").Buffer)
69236 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
69237 (function (Buffer){
69238 var parseKeys = require('parse-asn1');
69239 var mgf = require('./mgf');
69240 var xor = require('./xor');
69241 var bn = require('bn.js');
69242 var crt = require('browserify-rsa');
69243 var createHash = require('create-hash');
69244 var withPublic = require('./withPublic');
69245 module.exports = function privateDecrypt(private_key, enc, reverse) {
69246 var padding;
69247 if (private_key.padding) {
69248 padding = private_key.padding;
69249 } else if (reverse) {
69250 padding = 1;
69251 } else {
69252 padding = 4;
69253 }
69254
69255 var key = parseKeys(private_key);
69256 var k = key.modulus.byteLength();
69257 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
69258 throw new Error('decryption error');
69259 }
69260 var msg;
69261 if (reverse) {
69262 msg = withPublic(new bn(enc), key);
69263 } else {
69264 msg = crt(enc, key);
69265 }
69266 var zBuffer = new Buffer(k - msg.length);
69267 zBuffer.fill(0);
69268 msg = Buffer.concat([zBuffer, msg], k);
69269 if (padding === 4) {
69270 return oaep(key, msg);
69271 } else if (padding === 1) {
69272 return pkcs1(key, msg, reverse);
69273 } else if (padding === 3) {
69274 return msg;
69275 } else {
69276 throw new Error('unknown padding');
69277 }
69278 };
69279
69280 function oaep(key, msg){
69281 var n = key.modulus;
69282 var k = key.modulus.byteLength();
69283 var mLen = msg.length;
69284 var iHash = createHash('sha1').update(new Buffer('')).digest();
69285 var hLen = iHash.length;
69286 var hLen2 = 2 * hLen;
69287 if (msg[0] !== 0) {
69288 throw new Error('decryption error');
69289 }
69290 var maskedSeed = msg.slice(1, hLen + 1);
69291 var maskedDb = msg.slice(hLen + 1);
69292 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
69293 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
69294 if (compare(iHash, db.slice(0, hLen))) {
69295 throw new Error('decryption error');
69296 }
69297 var i = hLen;
69298 while (db[i] === 0) {
69299 i++;
69300 }
69301 if (db[i++] !== 1) {
69302 throw new Error('decryption error');
69303 }
69304 return db.slice(i);
69305 }
69306
69307 function pkcs1(key, msg, reverse){
69308 var p1 = msg.slice(0, 2);
69309 var i = 2;
69310 var status = 0;
69311 while (msg[i++] !== 0) {
69312 if (i >= msg.length) {
69313 status++;
69314 break;
69315 }
69316 }
69317 var ps = msg.slice(2, i - 1);
69318 var p2 = msg.slice(i - 1, i);
69319
69320 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
69321 status++;
69322 }
69323 if (ps.length < 8) {
69324 status++;
69325 }
69326 if (status) {
69327 throw new Error('decryption error');
69328 }
69329 return msg.slice(i);
69330 }
69331 function compare(a, b){
69332 a = new Buffer(a);
69333 b = new Buffer(b);
69334 var dif = 0;
69335 var len = a.length;
69336 if (a.length !== b.length) {
69337 dif++;
69338 len = Math.min(a.length, b.length);
69339 }
69340 var i = -1;
69341 while (++i < len) {
69342 dif += (a[i] ^ b[i]);
69343 }
69344 return dif;
69345 }
69346 }).call(this,require("buffer").Buffer)
69347 },{"./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){
69348 (function (Buffer){
69349 var parseKeys = require('parse-asn1');
69350 var randomBytes = require('randombytes');
69351 var createHash = require('create-hash');
69352 var mgf = require('./mgf');
69353 var xor = require('./xor');
69354 var bn = require('bn.js');
69355 var withPublic = require('./withPublic');
69356 var crt = require('browserify-rsa');
69357
69358 var constants = {
69359 RSA_PKCS1_OAEP_PADDING: 4,
69360 RSA_PKCS1_PADDIN: 1,
69361 RSA_NO_PADDING: 3
69362 };
69363
69364 module.exports = function publicEncrypt(public_key, msg, reverse) {
69365 var padding;
69366 if (public_key.padding) {
69367 padding = public_key.padding;
69368 } else if (reverse) {
69369 padding = 1;
69370 } else {
69371 padding = 4;
69372 }
69373 var key = parseKeys(public_key);
69374 var paddedMsg;
69375 if (padding === 4) {
69376 paddedMsg = oaep(key, msg);
69377 } else if (padding === 1) {
69378 paddedMsg = pkcs1(key, msg, reverse);
69379 } else if (padding === 3) {
69380 paddedMsg = new bn(msg);
69381 if (paddedMsg.cmp(key.modulus) >= 0) {
69382 throw new Error('data too long for modulus');
69383 }
69384 } else {
69385 throw new Error('unknown padding');
69386 }
69387 if (reverse) {
69388 return crt(paddedMsg, key);
69389 } else {
69390 return withPublic(paddedMsg, key);
69391 }
69392 };
69393
69394 function oaep(key, msg){
69395 var k = key.modulus.byteLength();
69396 var mLen = msg.length;
69397 var iHash = createHash('sha1').update(new Buffer('')).digest();
69398 var hLen = iHash.length;
69399 var hLen2 = 2 * hLen;
69400 if (mLen > k - hLen2 - 2) {
69401 throw new Error('message too long');
69402 }
69403 var ps = new Buffer(k - mLen - hLen2 - 2);
69404 ps.fill(0);
69405 var dblen = k - hLen - 1;
69406 var seed = randomBytes(hLen);
69407 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
69408 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
69409 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
69410 }
69411 function pkcs1(key, msg, reverse){
69412 var mLen = msg.length;
69413 var k = key.modulus.byteLength();
69414 if (mLen > k - 11) {
69415 throw new Error('message too long');
69416 }
69417 var ps;
69418 if (reverse) {
69419 ps = new Buffer(k - mLen - 3);
69420 ps.fill(0xff);
69421 } else {
69422 ps = nonZero(k - mLen - 3);
69423 }
69424 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
69425 }
69426 function nonZero(len, crypto) {
69427 var out = new Buffer(len);
69428 var i = 0;
69429 var cache = randomBytes(len*2);
69430 var cur = 0;
69431 var num;
69432 while (i < len) {
69433 if (cur === cache.length) {
69434 cache = randomBytes(len*2);
69435 cur = 0;
69436 }
69437 num = cache[cur++];
69438 if (num) {
69439 out[i++] = num;
69440 }
69441 }
69442 return out;
69443 }
69444 }).call(this,require("buffer").Buffer)
69445 },{"./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){
69446 (function (Buffer){
69447 var bn = require('bn.js');
69448 function withPublic(paddedMsg, key) {
69449 return new Buffer(paddedMsg
69450 .toRed(bn.mont(key.modulus))
69451 .redPow(new bn(key.publicExponent))
69452 .fromRed()
69453 .toArray());
69454 }
69455
69456 module.exports = withPublic;
69457 }).call(this,require("buffer").Buffer)
69458 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
69459 module.exports = function xor(a, b) {
69460 var len = a.length;
69461 var i = -1;
69462 while (++i < len) {
69463 a[i] ^= b[i];
69464 }
69465 return a
69466 };
69467 },{}],119:[function(require,module,exports){
69468 (function (process,global,Buffer){
69469 'use strict'
69470
69471 function oldBrowser () {
69472 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
69473 }
69474
69475 var crypto = global.crypto || global.msCrypto
69476
69477 if (crypto && crypto.getRandomValues) {
69478 module.exports = randomBytes
69479 } else {
69480 module.exports = oldBrowser
69481 }
69482
69483 function randomBytes (size, cb) {
69484 // phantomjs needs to throw
69485 if (size > 65536) throw new Error('requested too many random bytes')
69486 // in case browserify isn't using the Uint8Array version
69487 var rawBytes = new global.Uint8Array(size)
69488
69489 // This will not work in older browsers.
69490 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
69491 if (size > 0) { // getRandomValues fails on IE if size == 0
69492 crypto.getRandomValues(rawBytes)
69493 }
69494 // phantomjs doesn't like a buffer being passed here
69495 var bytes = new Buffer(rawBytes.buffer)
69496
69497 if (typeof cb === 'function') {
69498 return process.nextTick(function () {
69499 cb(null, bytes)
69500 })
69501 }
69502
69503 return bytes
69504 }
69505
69506 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
69507 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
69508 module.exports = require('./lib/_stream_duplex.js');
69509
69510 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
69511 // a duplex stream is just a stream that is both readable and writable.
69512 // Since JS doesn't have multiple prototypal inheritance, this class
69513 // prototypally inherits from Readable, and then parasitically from
69514 // Writable.
69515
69516 'use strict';
69517
69518 /*<replacement>*/
69519
69520 var objectKeys = Object.keys || function (obj) {
69521 var keys = [];
69522 for (var key in obj) {
69523 keys.push(key);
69524 }return keys;
69525 };
69526 /*</replacement>*/
69527
69528 module.exports = Duplex;
69529
69530 /*<replacement>*/
69531 var processNextTick = require('process-nextick-args');
69532 /*</replacement>*/
69533
69534 /*<replacement>*/
69535 var util = require('core-util-is');
69536 util.inherits = require('inherits');
69537 /*</replacement>*/
69538
69539 var Readable = require('./_stream_readable');
69540 var Writable = require('./_stream_writable');
69541
69542 util.inherits(Duplex, Readable);
69543
69544 var keys = objectKeys(Writable.prototype);
69545 for (var v = 0; v < keys.length; v++) {
69546 var method = keys[v];
69547 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
69548 }
69549
69550 function Duplex(options) {
69551 if (!(this instanceof Duplex)) return new Duplex(options);
69552
69553 Readable.call(this, options);
69554 Writable.call(this, options);
69555
69556 if (options && options.readable === false) this.readable = false;
69557
69558 if (options && options.writable === false) this.writable = false;
69559
69560 this.allowHalfOpen = true;
69561 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
69562
69563 this.once('end', onend);
69564 }
69565
69566 // the no-half-open enforcer
69567 function onend() {
69568 // if we allow half-open state, or if the writable side ended,
69569 // then we're ok.
69570 if (this.allowHalfOpen || this._writableState.ended) return;
69571
69572 // no more data can be written.
69573 // But allow more writes to happen in this tick.
69574 processNextTick(onEndNT, this);
69575 }
69576
69577 function onEndNT(self) {
69578 self.end();
69579 }
69580
69581 function forEach(xs, f) {
69582 for (var i = 0, l = xs.length; i < l; i++) {
69583 f(xs[i], i);
69584 }
69585 }
69586 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
69587 // a passthrough stream.
69588 // basically just the most minimal sort of Transform stream.
69589 // Every written chunk gets output as-is.
69590
69591 'use strict';
69592
69593 module.exports = PassThrough;
69594
69595 var Transform = require('./_stream_transform');
69596
69597 /*<replacement>*/
69598 var util = require('core-util-is');
69599 util.inherits = require('inherits');
69600 /*</replacement>*/
69601
69602 util.inherits(PassThrough, Transform);
69603
69604 function PassThrough(options) {
69605 if (!(this instanceof PassThrough)) return new PassThrough(options);
69606
69607 Transform.call(this, options);
69608 }
69609
69610 PassThrough.prototype._transform = function (chunk, encoding, cb) {
69611 cb(null, chunk);
69612 };
69613 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
69614 (function (process){
69615 'use strict';
69616
69617 module.exports = Readable;
69618
69619 /*<replacement>*/
69620 var processNextTick = require('process-nextick-args');
69621 /*</replacement>*/
69622
69623 /*<replacement>*/
69624 var isArray = require('isarray');
69625 /*</replacement>*/
69626
69627 /*<replacement>*/
69628 var Duplex;
69629 /*</replacement>*/
69630
69631 Readable.ReadableState = ReadableState;
69632
69633 /*<replacement>*/
69634 var EE = require('events').EventEmitter;
69635
69636 var EElistenerCount = function (emitter, type) {
69637 return emitter.listeners(type).length;
69638 };
69639 /*</replacement>*/
69640
69641 /*<replacement>*/
69642 var Stream = require('./internal/streams/stream');
69643 /*</replacement>*/
69644
69645 var Buffer = require('buffer').Buffer;
69646 /*<replacement>*/
69647 var bufferShim = require('buffer-shims');
69648 /*</replacement>*/
69649
69650 /*<replacement>*/
69651 var util = require('core-util-is');
69652 util.inherits = require('inherits');
69653 /*</replacement>*/
69654
69655 /*<replacement>*/
69656 var debugUtil = require('util');
69657 var debug = void 0;
69658 if (debugUtil && debugUtil.debuglog) {
69659 debug = debugUtil.debuglog('stream');
69660 } else {
69661 debug = function () {};
69662 }
69663 /*</replacement>*/
69664
69665 var BufferList = require('./internal/streams/BufferList');
69666 var StringDecoder;
69667
69668 util.inherits(Readable, Stream);
69669
69670 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
69671
69672 function prependListener(emitter, event, fn) {
69673 // Sadly this is not cacheable as some libraries bundle their own
69674 // event emitter implementation with them.
69675 if (typeof emitter.prependListener === 'function') {
69676 return emitter.prependListener(event, fn);
69677 } else {
69678 // This is a hack to make sure that our error handler is attached before any
69679 // userland ones. NEVER DO THIS. This is here only because this code needs
69680 // to continue to work with older versions of Node.js that do not include
69681 // the prependListener() method. The goal is to eventually remove this hack.
69682 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]];
69683 }
69684 }
69685
69686 function ReadableState(options, stream) {
69687 Duplex = Duplex || require('./_stream_duplex');
69688
69689 options = options || {};
69690
69691 // object stream flag. Used to make read(n) ignore n and to
69692 // make all the buffer merging and length checks go away
69693 this.objectMode = !!options.objectMode;
69694
69695 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
69696
69697 // the point at which it stops calling _read() to fill the buffer
69698 // Note: 0 is a valid value, means "don't call _read preemptively ever"
69699 var hwm = options.highWaterMark;
69700 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
69701 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
69702
69703 // cast to ints.
69704 this.highWaterMark = ~~this.highWaterMark;
69705
69706 // A linked list is used to store data chunks instead of an array because the
69707 // linked list can remove elements from the beginning faster than
69708 // array.shift()
69709 this.buffer = new BufferList();
69710 this.length = 0;
69711 this.pipes = null;
69712 this.pipesCount = 0;
69713 this.flowing = null;
69714 this.ended = false;
69715 this.endEmitted = false;
69716 this.reading = false;
69717
69718 // a flag to be able to tell if the onwrite cb is called immediately,
69719 // or on a later tick. We set this to true at first, because any
69720 // actions that shouldn't happen until "later" should generally also
69721 // not happen before the first write call.
69722 this.sync = true;
69723
69724 // whenever we return null, then we set a flag to say
69725 // that we're awaiting a 'readable' event emission.
69726 this.needReadable = false;
69727 this.emittedReadable = false;
69728 this.readableListening = false;
69729 this.resumeScheduled = false;
69730
69731 // Crypto is kind of old and crusty. Historically, its default string
69732 // encoding is 'binary' so we have to make this configurable.
69733 // Everything else in the universe uses 'utf8', though.
69734 this.defaultEncoding = options.defaultEncoding || 'utf8';
69735
69736 // when piping, we only care about 'readable' events that happen
69737 // after read()ing all the bytes and not getting any pushback.
69738 this.ranOut = false;
69739
69740 // the number of writers that are awaiting a drain event in .pipe()s
69741 this.awaitDrain = 0;
69742
69743 // if true, a maybeReadMore has been scheduled
69744 this.readingMore = false;
69745
69746 this.decoder = null;
69747 this.encoding = null;
69748 if (options.encoding) {
69749 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69750 this.decoder = new StringDecoder(options.encoding);
69751 this.encoding = options.encoding;
69752 }
69753 }
69754
69755 function Readable(options) {
69756 Duplex = Duplex || require('./_stream_duplex');
69757
69758 if (!(this instanceof Readable)) return new Readable(options);
69759
69760 this._readableState = new ReadableState(options, this);
69761
69762 // legacy
69763 this.readable = true;
69764
69765 if (options && typeof options.read === 'function') this._read = options.read;
69766
69767 Stream.call(this);
69768 }
69769
69770 // Manually shove something into the read() buffer.
69771 // This returns true if the highWaterMark has not been hit yet,
69772 // similar to how Writable.write() returns true if you should
69773 // write() some more.
69774 Readable.prototype.push = function (chunk, encoding) {
69775 var state = this._readableState;
69776
69777 if (!state.objectMode && typeof chunk === 'string') {
69778 encoding = encoding || state.defaultEncoding;
69779 if (encoding !== state.encoding) {
69780 chunk = bufferShim.from(chunk, encoding);
69781 encoding = '';
69782 }
69783 }
69784
69785 return readableAddChunk(this, state, chunk, encoding, false);
69786 };
69787
69788 // Unshift should *always* be something directly out of read()
69789 Readable.prototype.unshift = function (chunk) {
69790 var state = this._readableState;
69791 return readableAddChunk(this, state, chunk, '', true);
69792 };
69793
69794 Readable.prototype.isPaused = function () {
69795 return this._readableState.flowing === false;
69796 };
69797
69798 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
69799 var er = chunkInvalid(state, chunk);
69800 if (er) {
69801 stream.emit('error', er);
69802 } else if (chunk === null) {
69803 state.reading = false;
69804 onEofChunk(stream, state);
69805 } else if (state.objectMode || chunk && chunk.length > 0) {
69806 if (state.ended && !addToFront) {
69807 var e = new Error('stream.push() after EOF');
69808 stream.emit('error', e);
69809 } else if (state.endEmitted && addToFront) {
69810 var _e = new Error('stream.unshift() after end event');
69811 stream.emit('error', _e);
69812 } else {
69813 var skipAdd;
69814 if (state.decoder && !addToFront && !encoding) {
69815 chunk = state.decoder.write(chunk);
69816 skipAdd = !state.objectMode && chunk.length === 0;
69817 }
69818
69819 if (!addToFront) state.reading = false;
69820
69821 // Don't add to the buffer if we've decoded to an empty string chunk and
69822 // we're not in object mode
69823 if (!skipAdd) {
69824 // if we want the data now, just emit it.
69825 if (state.flowing && state.length === 0 && !state.sync) {
69826 stream.emit('data', chunk);
69827 stream.read(0);
69828 } else {
69829 // update the buffer info.
69830 state.length += state.objectMode ? 1 : chunk.length;
69831 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
69832
69833 if (state.needReadable) emitReadable(stream);
69834 }
69835 }
69836
69837 maybeReadMore(stream, state);
69838 }
69839 } else if (!addToFront) {
69840 state.reading = false;
69841 }
69842
69843 return needMoreData(state);
69844 }
69845
69846 // if it's past the high water mark, we can push in some more.
69847 // Also, if we have no data yet, we can stand some
69848 // more bytes. This is to work around cases where hwm=0,
69849 // such as the repl. Also, if the push() triggered a
69850 // readable event, and the user called read(largeNumber) such that
69851 // needReadable was set, then we ought to push more, so that another
69852 // 'readable' event will be triggered.
69853 function needMoreData(state) {
69854 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
69855 }
69856
69857 // backwards compatibility.
69858 Readable.prototype.setEncoding = function (enc) {
69859 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69860 this._readableState.decoder = new StringDecoder(enc);
69861 this._readableState.encoding = enc;
69862 return this;
69863 };
69864
69865 // Don't raise the hwm > 8MB
69866 var MAX_HWM = 0x800000;
69867 function computeNewHighWaterMark(n) {
69868 if (n >= MAX_HWM) {
69869 n = MAX_HWM;
69870 } else {
69871 // Get the next highest power of 2 to prevent increasing hwm excessively in
69872 // tiny amounts
69873 n--;
69874 n |= n >>> 1;
69875 n |= n >>> 2;
69876 n |= n >>> 4;
69877 n |= n >>> 8;
69878 n |= n >>> 16;
69879 n++;
69880 }
69881 return n;
69882 }
69883
69884 // This function is designed to be inlinable, so please take care when making
69885 // changes to the function body.
69886 function howMuchToRead(n, state) {
69887 if (n <= 0 || state.length === 0 && state.ended) return 0;
69888 if (state.objectMode) return 1;
69889 if (n !== n) {
69890 // Only flow one buffer at a time
69891 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
69892 }
69893 // If we're asking for more than the current hwm, then raise the hwm.
69894 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
69895 if (n <= state.length) return n;
69896 // Don't have enough
69897 if (!state.ended) {
69898 state.needReadable = true;
69899 return 0;
69900 }
69901 return state.length;
69902 }
69903
69904 // you can override either this method, or the async _read(n) below.
69905 Readable.prototype.read = function (n) {
69906 debug('read', n);
69907 n = parseInt(n, 10);
69908 var state = this._readableState;
69909 var nOrig = n;
69910
69911 if (n !== 0) state.emittedReadable = false;
69912
69913 // if we're doing read(0) to trigger a readable event, but we
69914 // already have a bunch of data in the buffer, then just trigger
69915 // the 'readable' event and move on.
69916 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
69917 debug('read: emitReadable', state.length, state.ended);
69918 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
69919 return null;
69920 }
69921
69922 n = howMuchToRead(n, state);
69923
69924 // if we've ended, and we're now clear, then finish it up.
69925 if (n === 0 && state.ended) {
69926 if (state.length === 0) endReadable(this);
69927 return null;
69928 }
69929
69930 // All the actual chunk generation logic needs to be
69931 // *below* the call to _read. The reason is that in certain
69932 // synthetic stream cases, such as passthrough streams, _read
69933 // may be a completely synchronous operation which may change
69934 // the state of the read buffer, providing enough data when
69935 // before there was *not* enough.
69936 //
69937 // So, the steps are:
69938 // 1. Figure out what the state of things will be after we do
69939 // a read from the buffer.
69940 //
69941 // 2. If that resulting state will trigger a _read, then call _read.
69942 // Note that this may be asynchronous, or synchronous. Yes, it is
69943 // deeply ugly to write APIs this way, but that still doesn't mean
69944 // that the Readable class should behave improperly, as streams are
69945 // designed to be sync/async agnostic.
69946 // Take note if the _read call is sync or async (ie, if the read call
69947 // has returned yet), so that we know whether or not it's safe to emit
69948 // 'readable' etc.
69949 //
69950 // 3. Actually pull the requested chunks out of the buffer and return.
69951
69952 // if we need a readable event, then we need to do some reading.
69953 var doRead = state.needReadable;
69954 debug('need readable', doRead);
69955
69956 // if we currently have less than the highWaterMark, then also read some
69957 if (state.length === 0 || state.length - n < state.highWaterMark) {
69958 doRead = true;
69959 debug('length less than watermark', doRead);
69960 }
69961
69962 // however, if we've ended, then there's no point, and if we're already
69963 // reading, then it's unnecessary.
69964 if (state.ended || state.reading) {
69965 doRead = false;
69966 debug('reading or ended', doRead);
69967 } else if (doRead) {
69968 debug('do read');
69969 state.reading = true;
69970 state.sync = true;
69971 // if the length is currently zero, then we *need* a readable event.
69972 if (state.length === 0) state.needReadable = true;
69973 // call internal read method
69974 this._read(state.highWaterMark);
69975 state.sync = false;
69976 // If _read pushed data synchronously, then `reading` will be false,
69977 // and we need to re-evaluate how much data we can return to the user.
69978 if (!state.reading) n = howMuchToRead(nOrig, state);
69979 }
69980
69981 var ret;
69982 if (n > 0) ret = fromList(n, state);else ret = null;
69983
69984 if (ret === null) {
69985 state.needReadable = true;
69986 n = 0;
69987 } else {
69988 state.length -= n;
69989 }
69990
69991 if (state.length === 0) {
69992 // If we have nothing in the buffer, then we want to know
69993 // as soon as we *do* get something into the buffer.
69994 if (!state.ended) state.needReadable = true;
69995
69996 // If we tried to read() past the EOF, then emit end on the next tick.
69997 if (nOrig !== n && state.ended) endReadable(this);
69998 }
69999
70000 if (ret !== null) this.emit('data', ret);
70001
70002 return ret;
70003 };
70004
70005 function chunkInvalid(state, chunk) {
70006 var er = null;
70007 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
70008 er = new TypeError('Invalid non-string/buffer chunk');
70009 }
70010 return er;
70011 }
70012
70013 function onEofChunk(stream, state) {
70014 if (state.ended) return;
70015 if (state.decoder) {
70016 var chunk = state.decoder.end();
70017 if (chunk && chunk.length) {
70018 state.buffer.push(chunk);
70019 state.length += state.objectMode ? 1 : chunk.length;
70020 }
70021 }
70022 state.ended = true;
70023
70024 // emit 'readable' now to make sure it gets picked up.
70025 emitReadable(stream);
70026 }
70027
70028 // Don't emit readable right away in sync mode, because this can trigger
70029 // another read() call => stack overflow. This way, it might trigger
70030 // a nextTick recursion warning, but that's not so bad.
70031 function emitReadable(stream) {
70032 var state = stream._readableState;
70033 state.needReadable = false;
70034 if (!state.emittedReadable) {
70035 debug('emitReadable', state.flowing);
70036 state.emittedReadable = true;
70037 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
70038 }
70039 }
70040
70041 function emitReadable_(stream) {
70042 debug('emit readable');
70043 stream.emit('readable');
70044 flow(stream);
70045 }
70046
70047 // at this point, the user has presumably seen the 'readable' event,
70048 // and called read() to consume some data. that may have triggered
70049 // in turn another _read(n) call, in which case reading = true if
70050 // it's in progress.
70051 // However, if we're not ended, or reading, and the length < hwm,
70052 // then go ahead and try to read some more preemptively.
70053 function maybeReadMore(stream, state) {
70054 if (!state.readingMore) {
70055 state.readingMore = true;
70056 processNextTick(maybeReadMore_, stream, state);
70057 }
70058 }
70059
70060 function maybeReadMore_(stream, state) {
70061 var len = state.length;
70062 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
70063 debug('maybeReadMore read 0');
70064 stream.read(0);
70065 if (len === state.length)
70066 // didn't get any data, stop spinning.
70067 break;else len = state.length;
70068 }
70069 state.readingMore = false;
70070 }
70071
70072 // abstract method. to be overridden in specific implementation classes.
70073 // call cb(er, data) where data is <= n in length.
70074 // for virtual (non-string, non-buffer) streams, "length" is somewhat
70075 // arbitrary, and perhaps not very meaningful.
70076 Readable.prototype._read = function (n) {
70077 this.emit('error', new Error('_read() is not implemented'));
70078 };
70079
70080 Readable.prototype.pipe = function (dest, pipeOpts) {
70081 var src = this;
70082 var state = this._readableState;
70083
70084 switch (state.pipesCount) {
70085 case 0:
70086 state.pipes = dest;
70087 break;
70088 case 1:
70089 state.pipes = [state.pipes, dest];
70090 break;
70091 default:
70092 state.pipes.push(dest);
70093 break;
70094 }
70095 state.pipesCount += 1;
70096 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
70097
70098 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
70099
70100 var endFn = doEnd ? onend : cleanup;
70101 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
70102
70103 dest.on('unpipe', onunpipe);
70104 function onunpipe(readable) {
70105 debug('onunpipe');
70106 if (readable === src) {
70107 cleanup();
70108 }
70109 }
70110
70111 function onend() {
70112 debug('onend');
70113 dest.end();
70114 }
70115
70116 // when the dest drains, it reduces the awaitDrain counter
70117 // on the source. This would be more elegant with a .once()
70118 // handler in flow(), but adding and removing repeatedly is
70119 // too slow.
70120 var ondrain = pipeOnDrain(src);
70121 dest.on('drain', ondrain);
70122
70123 var cleanedUp = false;
70124 function cleanup() {
70125 debug('cleanup');
70126 // cleanup event handlers once the pipe is broken
70127 dest.removeListener('close', onclose);
70128 dest.removeListener('finish', onfinish);
70129 dest.removeListener('drain', ondrain);
70130 dest.removeListener('error', onerror);
70131 dest.removeListener('unpipe', onunpipe);
70132 src.removeListener('end', onend);
70133 src.removeListener('end', cleanup);
70134 src.removeListener('data', ondata);
70135
70136 cleanedUp = true;
70137
70138 // if the reader is waiting for a drain event from this
70139 // specific writer, then it would cause it to never start
70140 // flowing again.
70141 // So, if this is awaiting a drain, then we just call it now.
70142 // If we don't know, then assume that we are waiting for one.
70143 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
70144 }
70145
70146 // If the user pushes more data while we're writing to dest then we'll end up
70147 // in ondata again. However, we only want to increase awaitDrain once because
70148 // dest will only emit one 'drain' event for the multiple writes.
70149 // => Introduce a guard on increasing awaitDrain.
70150 var increasedAwaitDrain = false;
70151 src.on('data', ondata);
70152 function ondata(chunk) {
70153 debug('ondata');
70154 increasedAwaitDrain = false;
70155 var ret = dest.write(chunk);
70156 if (false === ret && !increasedAwaitDrain) {
70157 // If the user unpiped during `dest.write()`, it is possible
70158 // to get stuck in a permanently paused state if that write
70159 // also returned false.
70160 // => Check whether `dest` is still a piping destination.
70161 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
70162 debug('false write response, pause', src._readableState.awaitDrain);
70163 src._readableState.awaitDrain++;
70164 increasedAwaitDrain = true;
70165 }
70166 src.pause();
70167 }
70168 }
70169
70170 // if the dest has an error, then stop piping into it.
70171 // however, don't suppress the throwing behavior for this.
70172 function onerror(er) {
70173 debug('onerror', er);
70174 unpipe();
70175 dest.removeListener('error', onerror);
70176 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
70177 }
70178
70179 // Make sure our error handler is attached before userland ones.
70180 prependListener(dest, 'error', onerror);
70181
70182 // Both close and finish should trigger unpipe, but only once.
70183 function onclose() {
70184 dest.removeListener('finish', onfinish);
70185 unpipe();
70186 }
70187 dest.once('close', onclose);
70188 function onfinish() {
70189 debug('onfinish');
70190 dest.removeListener('close', onclose);
70191 unpipe();
70192 }
70193 dest.once('finish', onfinish);
70194
70195 function unpipe() {
70196 debug('unpipe');
70197 src.unpipe(dest);
70198 }
70199
70200 // tell the dest that it's being piped to
70201 dest.emit('pipe', src);
70202
70203 // start the flow if it hasn't been started already.
70204 if (!state.flowing) {
70205 debug('pipe resume');
70206 src.resume();
70207 }
70208
70209 return dest;
70210 };
70211
70212 function pipeOnDrain(src) {
70213 return function () {
70214 var state = src._readableState;
70215 debug('pipeOnDrain', state.awaitDrain);
70216 if (state.awaitDrain) state.awaitDrain--;
70217 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
70218 state.flowing = true;
70219 flow(src);
70220 }
70221 };
70222 }
70223
70224 Readable.prototype.unpipe = function (dest) {
70225 var state = this._readableState;
70226
70227 // if we're not piping anywhere, then do nothing.
70228 if (state.pipesCount === 0) return this;
70229
70230 // just one destination. most common case.
70231 if (state.pipesCount === 1) {
70232 // passed in one, but it's not the right one.
70233 if (dest && dest !== state.pipes) return this;
70234
70235 if (!dest) dest = state.pipes;
70236
70237 // got a match.
70238 state.pipes = null;
70239 state.pipesCount = 0;
70240 state.flowing = false;
70241 if (dest) dest.emit('unpipe', this);
70242 return this;
70243 }
70244
70245 // slow case. multiple pipe destinations.
70246
70247 if (!dest) {
70248 // remove all.
70249 var dests = state.pipes;
70250 var len = state.pipesCount;
70251 state.pipes = null;
70252 state.pipesCount = 0;
70253 state.flowing = false;
70254
70255 for (var i = 0; i < len; i++) {
70256 dests[i].emit('unpipe', this);
70257 }return this;
70258 }
70259
70260 // try to find the right one.
70261 var index = indexOf(state.pipes, dest);
70262 if (index === -1) return this;
70263
70264 state.pipes.splice(index, 1);
70265 state.pipesCount -= 1;
70266 if (state.pipesCount === 1) state.pipes = state.pipes[0];
70267
70268 dest.emit('unpipe', this);
70269
70270 return this;
70271 };
70272
70273 // set up data events if they are asked for
70274 // Ensure readable listeners eventually get something
70275 Readable.prototype.on = function (ev, fn) {
70276 var res = Stream.prototype.on.call(this, ev, fn);
70277
70278 if (ev === 'data') {
70279 // Start flowing on next tick if stream isn't explicitly paused
70280 if (this._readableState.flowing !== false) this.resume();
70281 } else if (ev === 'readable') {
70282 var state = this._readableState;
70283 if (!state.endEmitted && !state.readableListening) {
70284 state.readableListening = state.needReadable = true;
70285 state.emittedReadable = false;
70286 if (!state.reading) {
70287 processNextTick(nReadingNextTick, this);
70288 } else if (state.length) {
70289 emitReadable(this, state);
70290 }
70291 }
70292 }
70293
70294 return res;
70295 };
70296 Readable.prototype.addListener = Readable.prototype.on;
70297
70298 function nReadingNextTick(self) {
70299 debug('readable nexttick read 0');
70300 self.read(0);
70301 }
70302
70303 // pause() and resume() are remnants of the legacy readable stream API
70304 // If the user uses them, then switch into old mode.
70305 Readable.prototype.resume = function () {
70306 var state = this._readableState;
70307 if (!state.flowing) {
70308 debug('resume');
70309 state.flowing = true;
70310 resume(this, state);
70311 }
70312 return this;
70313 };
70314
70315 function resume(stream, state) {
70316 if (!state.resumeScheduled) {
70317 state.resumeScheduled = true;
70318 processNextTick(resume_, stream, state);
70319 }
70320 }
70321
70322 function resume_(stream, state) {
70323 if (!state.reading) {
70324 debug('resume read 0');
70325 stream.read(0);
70326 }
70327
70328 state.resumeScheduled = false;
70329 state.awaitDrain = 0;
70330 stream.emit('resume');
70331 flow(stream);
70332 if (state.flowing && !state.reading) stream.read(0);
70333 }
70334
70335 Readable.prototype.pause = function () {
70336 debug('call pause flowing=%j', this._readableState.flowing);
70337 if (false !== this._readableState.flowing) {
70338 debug('pause');
70339 this._readableState.flowing = false;
70340 this.emit('pause');
70341 }
70342 return this;
70343 };
70344
70345 function flow(stream) {
70346 var state = stream._readableState;
70347 debug('flow', state.flowing);
70348 while (state.flowing && stream.read() !== null) {}
70349 }
70350
70351 // wrap an old-style stream as the async data source.
70352 // This is *not* part of the readable stream interface.
70353 // It is an ugly unfortunate mess of history.
70354 Readable.prototype.wrap = function (stream) {
70355 var state = this._readableState;
70356 var paused = false;
70357
70358 var self = this;
70359 stream.on('end', function () {
70360 debug('wrapped end');
70361 if (state.decoder && !state.ended) {
70362 var chunk = state.decoder.end();
70363 if (chunk && chunk.length) self.push(chunk);
70364 }
70365
70366 self.push(null);
70367 });
70368
70369 stream.on('data', function (chunk) {
70370 debug('wrapped data');
70371 if (state.decoder) chunk = state.decoder.write(chunk);
70372
70373 // don't skip over falsy values in objectMode
70374 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
70375
70376 var ret = self.push(chunk);
70377 if (!ret) {
70378 paused = true;
70379 stream.pause();
70380 }
70381 });
70382
70383 // proxy all the other methods.
70384 // important when wrapping filters and duplexes.
70385 for (var i in stream) {
70386 if (this[i] === undefined && typeof stream[i] === 'function') {
70387 this[i] = function (method) {
70388 return function () {
70389 return stream[method].apply(stream, arguments);
70390 };
70391 }(i);
70392 }
70393 }
70394
70395 // proxy certain important events.
70396 for (var n = 0; n < kProxyEvents.length; n++) {
70397 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
70398 }
70399
70400 // when we try to consume some more bytes, simply unpause the
70401 // underlying stream.
70402 self._read = function (n) {
70403 debug('wrapped _read', n);
70404 if (paused) {
70405 paused = false;
70406 stream.resume();
70407 }
70408 };
70409
70410 return self;
70411 };
70412
70413 // exposed for testing purposes only.
70414 Readable._fromList = fromList;
70415
70416 // Pluck off n bytes from an array of buffers.
70417 // Length is the combined lengths of all the buffers in the list.
70418 // This function is designed to be inlinable, so please take care when making
70419 // changes to the function body.
70420 function fromList(n, state) {
70421 // nothing buffered
70422 if (state.length === 0) return null;
70423
70424 var ret;
70425 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
70426 // read it all, truncate the list
70427 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);
70428 state.buffer.clear();
70429 } else {
70430 // read part of list
70431 ret = fromListPartial(n, state.buffer, state.decoder);
70432 }
70433
70434 return ret;
70435 }
70436
70437 // Extracts only enough buffered data to satisfy the amount requested.
70438 // This function is designed to be inlinable, so please take care when making
70439 // changes to the function body.
70440 function fromListPartial(n, list, hasStrings) {
70441 var ret;
70442 if (n < list.head.data.length) {
70443 // slice is the same for buffers and strings
70444 ret = list.head.data.slice(0, n);
70445 list.head.data = list.head.data.slice(n);
70446 } else if (n === list.head.data.length) {
70447 // first chunk is a perfect match
70448 ret = list.shift();
70449 } else {
70450 // result spans more than one buffer
70451 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
70452 }
70453 return ret;
70454 }
70455
70456 // Copies a specified amount of characters from the list of buffered data
70457 // chunks.
70458 // This function is designed to be inlinable, so please take care when making
70459 // changes to the function body.
70460 function copyFromBufferString(n, list) {
70461 var p = list.head;
70462 var c = 1;
70463 var ret = p.data;
70464 n -= ret.length;
70465 while (p = p.next) {
70466 var str = p.data;
70467 var nb = n > str.length ? str.length : n;
70468 if (nb === str.length) ret += str;else ret += str.slice(0, n);
70469 n -= nb;
70470 if (n === 0) {
70471 if (nb === str.length) {
70472 ++c;
70473 if (p.next) list.head = p.next;else list.head = list.tail = null;
70474 } else {
70475 list.head = p;
70476 p.data = str.slice(nb);
70477 }
70478 break;
70479 }
70480 ++c;
70481 }
70482 list.length -= c;
70483 return ret;
70484 }
70485
70486 // Copies a specified amount of bytes from the list of buffered data chunks.
70487 // This function is designed to be inlinable, so please take care when making
70488 // changes to the function body.
70489 function copyFromBuffer(n, list) {
70490 var ret = bufferShim.allocUnsafe(n);
70491 var p = list.head;
70492 var c = 1;
70493 p.data.copy(ret);
70494 n -= p.data.length;
70495 while (p = p.next) {
70496 var buf = p.data;
70497 var nb = n > buf.length ? buf.length : n;
70498 buf.copy(ret, ret.length - n, 0, nb);
70499 n -= nb;
70500 if (n === 0) {
70501 if (nb === buf.length) {
70502 ++c;
70503 if (p.next) list.head = p.next;else list.head = list.tail = null;
70504 } else {
70505 list.head = p;
70506 p.data = buf.slice(nb);
70507 }
70508 break;
70509 }
70510 ++c;
70511 }
70512 list.length -= c;
70513 return ret;
70514 }
70515
70516 function endReadable(stream) {
70517 var state = stream._readableState;
70518
70519 // If we get here before consuming all the bytes, then that is a
70520 // bug in node. Should never happen.
70521 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
70522
70523 if (!state.endEmitted) {
70524 state.ended = true;
70525 processNextTick(endReadableNT, state, stream);
70526 }
70527 }
70528
70529 function endReadableNT(state, stream) {
70530 // Check that we didn't get one last unshift.
70531 if (!state.endEmitted && state.length === 0) {
70532 state.endEmitted = true;
70533 stream.readable = false;
70534 stream.emit('end');
70535 }
70536 }
70537
70538 function forEach(xs, f) {
70539 for (var i = 0, l = xs.length; i < l; i++) {
70540 f(xs[i], i);
70541 }
70542 }
70543
70544 function indexOf(xs, x) {
70545 for (var i = 0, l = xs.length; i < l; i++) {
70546 if (xs[i] === x) return i;
70547 }
70548 return -1;
70549 }
70550 }).call(this,require('_process'))
70551 },{"./_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){
70552 // a transform stream is a readable/writable stream where you do
70553 // something with the data. Sometimes it's called a "filter",
70554 // but that's not a great name for it, since that implies a thing where
70555 // some bits pass through, and others are simply ignored. (That would
70556 // be a valid example of a transform, of course.)
70557 //
70558 // While the output is causally related to the input, it's not a
70559 // necessarily symmetric or synchronous transformation. For example,
70560 // a zlib stream might take multiple plain-text writes(), and then
70561 // emit a single compressed chunk some time in the future.
70562 //
70563 // Here's how this works:
70564 //
70565 // The Transform stream has all the aspects of the readable and writable
70566 // stream classes. When you write(chunk), that calls _write(chunk,cb)
70567 // internally, and returns false if there's a lot of pending writes
70568 // buffered up. When you call read(), that calls _read(n) until
70569 // there's enough pending readable data buffered up.
70570 //
70571 // In a transform stream, the written data is placed in a buffer. When
70572 // _read(n) is called, it transforms the queued up data, calling the
70573 // buffered _write cb's as it consumes chunks. If consuming a single
70574 // written chunk would result in multiple output chunks, then the first
70575 // outputted bit calls the readcb, and subsequent chunks just go into
70576 // the read buffer, and will cause it to emit 'readable' if necessary.
70577 //
70578 // This way, back-pressure is actually determined by the reading side,
70579 // since _read has to be called to start processing a new chunk. However,
70580 // a pathological inflate type of transform can cause excessive buffering
70581 // here. For example, imagine a stream where every byte of input is
70582 // interpreted as an integer from 0-255, and then results in that many
70583 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
70584 // 1kb of data being output. In this case, you could write a very small
70585 // amount of input, and end up with a very large amount of output. In
70586 // such a pathological inflating mechanism, there'd be no way to tell
70587 // the system to stop doing the transform. A single 4MB write could
70588 // cause the system to run out of memory.
70589 //
70590 // However, even in such a pathological case, only a single written chunk
70591 // would be consumed, and then the rest would wait (un-transformed) until
70592 // the results of the previous transformed chunk were consumed.
70593
70594 'use strict';
70595
70596 module.exports = Transform;
70597
70598 var Duplex = require('./_stream_duplex');
70599
70600 /*<replacement>*/
70601 var util = require('core-util-is');
70602 util.inherits = require('inherits');
70603 /*</replacement>*/
70604
70605 util.inherits(Transform, Duplex);
70606
70607 function TransformState(stream) {
70608 this.afterTransform = function (er, data) {
70609 return afterTransform(stream, er, data);
70610 };
70611
70612 this.needTransform = false;
70613 this.transforming = false;
70614 this.writecb = null;
70615 this.writechunk = null;
70616 this.writeencoding = null;
70617 }
70618
70619 function afterTransform(stream, er, data) {
70620 var ts = stream._transformState;
70621 ts.transforming = false;
70622
70623 var cb = ts.writecb;
70624
70625 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
70626
70627 ts.writechunk = null;
70628 ts.writecb = null;
70629
70630 if (data !== null && data !== undefined) stream.push(data);
70631
70632 cb(er);
70633
70634 var rs = stream._readableState;
70635 rs.reading = false;
70636 if (rs.needReadable || rs.length < rs.highWaterMark) {
70637 stream._read(rs.highWaterMark);
70638 }
70639 }
70640
70641 function Transform(options) {
70642 if (!(this instanceof Transform)) return new Transform(options);
70643
70644 Duplex.call(this, options);
70645
70646 this._transformState = new TransformState(this);
70647
70648 var stream = this;
70649
70650 // start out asking for a readable event once data is transformed.
70651 this._readableState.needReadable = true;
70652
70653 // we have implemented the _read method, and done the other things
70654 // that Readable wants before the first _read call, so unset the
70655 // sync guard flag.
70656 this._readableState.sync = false;
70657
70658 if (options) {
70659 if (typeof options.transform === 'function') this._transform = options.transform;
70660
70661 if (typeof options.flush === 'function') this._flush = options.flush;
70662 }
70663
70664 // When the writable side finishes, then flush out anything remaining.
70665 this.once('prefinish', function () {
70666 if (typeof this._flush === 'function') this._flush(function (er, data) {
70667 done(stream, er, data);
70668 });else done(stream);
70669 });
70670 }
70671
70672 Transform.prototype.push = function (chunk, encoding) {
70673 this._transformState.needTransform = false;
70674 return Duplex.prototype.push.call(this, chunk, encoding);
70675 };
70676
70677 // This is the part where you do stuff!
70678 // override this function in implementation classes.
70679 // 'chunk' is an input chunk.
70680 //
70681 // Call `push(newChunk)` to pass along transformed output
70682 // to the readable side. You may call 'push' zero or more times.
70683 //
70684 // Call `cb(err)` when you are done with this chunk. If you pass
70685 // an error, then that'll put the hurt on the whole operation. If you
70686 // never call cb(), then you'll never get another chunk.
70687 Transform.prototype._transform = function (chunk, encoding, cb) {
70688 throw new Error('_transform() is not implemented');
70689 };
70690
70691 Transform.prototype._write = function (chunk, encoding, cb) {
70692 var ts = this._transformState;
70693 ts.writecb = cb;
70694 ts.writechunk = chunk;
70695 ts.writeencoding = encoding;
70696 if (!ts.transforming) {
70697 var rs = this._readableState;
70698 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
70699 }
70700 };
70701
70702 // Doesn't matter what the args are here.
70703 // _transform does all the work.
70704 // That we got here means that the readable side wants more data.
70705 Transform.prototype._read = function (n) {
70706 var ts = this._transformState;
70707
70708 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
70709 ts.transforming = true;
70710 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
70711 } else {
70712 // mark that we need a transform, so that any data that comes in
70713 // will get processed, now that we've asked for it.
70714 ts.needTransform = true;
70715 }
70716 };
70717
70718 function done(stream, er, data) {
70719 if (er) return stream.emit('error', er);
70720
70721 if (data !== null && data !== undefined) stream.push(data);
70722
70723 // if there's nothing in the write buffer, then that means
70724 // that nothing more will ever be provided
70725 var ws = stream._writableState;
70726 var ts = stream._transformState;
70727
70728 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
70729
70730 if (ts.transforming) throw new Error('Calling transform done when still transforming');
70731
70732 return stream.push(null);
70733 }
70734 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
70735 (function (process){
70736 // A bit simpler than readable streams.
70737 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
70738 // the drain event emission and buffering.
70739
70740 'use strict';
70741
70742 module.exports = Writable;
70743
70744 /*<replacement>*/
70745 var processNextTick = require('process-nextick-args');
70746 /*</replacement>*/
70747
70748 /*<replacement>*/
70749 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
70750 /*</replacement>*/
70751
70752 /*<replacement>*/
70753 var Duplex;
70754 /*</replacement>*/
70755
70756 Writable.WritableState = WritableState;
70757
70758 /*<replacement>*/
70759 var util = require('core-util-is');
70760 util.inherits = require('inherits');
70761 /*</replacement>*/
70762
70763 /*<replacement>*/
70764 var internalUtil = {
70765 deprecate: require('util-deprecate')
70766 };
70767 /*</replacement>*/
70768
70769 /*<replacement>*/
70770 var Stream = require('./internal/streams/stream');
70771 /*</replacement>*/
70772
70773 var Buffer = require('buffer').Buffer;
70774 /*<replacement>*/
70775 var bufferShim = require('buffer-shims');
70776 /*</replacement>*/
70777
70778 util.inherits(Writable, Stream);
70779
70780 function nop() {}
70781
70782 function WriteReq(chunk, encoding, cb) {
70783 this.chunk = chunk;
70784 this.encoding = encoding;
70785 this.callback = cb;
70786 this.next = null;
70787 }
70788
70789 function WritableState(options, stream) {
70790 Duplex = Duplex || require('./_stream_duplex');
70791
70792 options = options || {};
70793
70794 // object stream flag to indicate whether or not this stream
70795 // contains buffers or objects.
70796 this.objectMode = !!options.objectMode;
70797
70798 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
70799
70800 // the point at which write() starts returning false
70801 // Note: 0 is a valid value, means that we always return false if
70802 // the entire buffer is not flushed immediately on write()
70803 var hwm = options.highWaterMark;
70804 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
70805 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
70806
70807 // cast to ints.
70808 this.highWaterMark = ~~this.highWaterMark;
70809
70810 // drain event flag.
70811 this.needDrain = false;
70812 // at the start of calling end()
70813 this.ending = false;
70814 // when end() has been called, and returned
70815 this.ended = false;
70816 // when 'finish' is emitted
70817 this.finished = false;
70818
70819 // should we decode strings into buffers before passing to _write?
70820 // this is here so that some node-core streams can optimize string
70821 // handling at a lower level.
70822 var noDecode = options.decodeStrings === false;
70823 this.decodeStrings = !noDecode;
70824
70825 // Crypto is kind of old and crusty. Historically, its default string
70826 // encoding is 'binary' so we have to make this configurable.
70827 // Everything else in the universe uses 'utf8', though.
70828 this.defaultEncoding = options.defaultEncoding || 'utf8';
70829
70830 // not an actual buffer we keep track of, but a measurement
70831 // of how much we're waiting to get pushed to some underlying
70832 // socket or file.
70833 this.length = 0;
70834
70835 // a flag to see when we're in the middle of a write.
70836 this.writing = false;
70837
70838 // when true all writes will be buffered until .uncork() call
70839 this.corked = 0;
70840
70841 // a flag to be able to tell if the onwrite cb is called immediately,
70842 // or on a later tick. We set this to true at first, because any
70843 // actions that shouldn't happen until "later" should generally also
70844 // not happen before the first write call.
70845 this.sync = true;
70846
70847 // a flag to know if we're processing previously buffered items, which
70848 // may call the _write() callback in the same tick, so that we don't
70849 // end up in an overlapped onwrite situation.
70850 this.bufferProcessing = false;
70851
70852 // the callback that's passed to _write(chunk,cb)
70853 this.onwrite = function (er) {
70854 onwrite(stream, er);
70855 };
70856
70857 // the callback that the user supplies to write(chunk,encoding,cb)
70858 this.writecb = null;
70859
70860 // the amount that is being written when _write is called.
70861 this.writelen = 0;
70862
70863 this.bufferedRequest = null;
70864 this.lastBufferedRequest = null;
70865
70866 // number of pending user-supplied write callbacks
70867 // this must be 0 before 'finish' can be emitted
70868 this.pendingcb = 0;
70869
70870 // emit prefinish if the only thing we're waiting for is _write cbs
70871 // This is relevant for synchronous Transform streams
70872 this.prefinished = false;
70873
70874 // True if the error was already emitted and should not be thrown again
70875 this.errorEmitted = false;
70876
70877 // count buffered requests
70878 this.bufferedRequestCount = 0;
70879
70880 // allocate the first CorkedRequest, there is always
70881 // one allocated and free to use, and we maintain at most two
70882 this.corkedRequestsFree = new CorkedRequest(this);
70883 }
70884
70885 WritableState.prototype.getBuffer = function getBuffer() {
70886 var current = this.bufferedRequest;
70887 var out = [];
70888 while (current) {
70889 out.push(current);
70890 current = current.next;
70891 }
70892 return out;
70893 };
70894
70895 (function () {
70896 try {
70897 Object.defineProperty(WritableState.prototype, 'buffer', {
70898 get: internalUtil.deprecate(function () {
70899 return this.getBuffer();
70900 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
70901 });
70902 } catch (_) {}
70903 })();
70904
70905 // Test _writableState for inheritance to account for Duplex streams,
70906 // whose prototype chain only points to Readable.
70907 var realHasInstance;
70908 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
70909 realHasInstance = Function.prototype[Symbol.hasInstance];
70910 Object.defineProperty(Writable, Symbol.hasInstance, {
70911 value: function (object) {
70912 if (realHasInstance.call(this, object)) return true;
70913
70914 return object && object._writableState instanceof WritableState;
70915 }
70916 });
70917 } else {
70918 realHasInstance = function (object) {
70919 return object instanceof this;
70920 };
70921 }
70922
70923 function Writable(options) {
70924 Duplex = Duplex || require('./_stream_duplex');
70925
70926 // Writable ctor is applied to Duplexes, too.
70927 // `realHasInstance` is necessary because using plain `instanceof`
70928 // would return false, as no `_writableState` property is attached.
70929
70930 // Trying to use the custom `instanceof` for Writable here will also break the
70931 // Node.js LazyTransform implementation, which has a non-trivial getter for
70932 // `_writableState` that would lead to infinite recursion.
70933 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
70934 return new Writable(options);
70935 }
70936
70937 this._writableState = new WritableState(options, this);
70938
70939 // legacy.
70940 this.writable = true;
70941
70942 if (options) {
70943 if (typeof options.write === 'function') this._write = options.write;
70944
70945 if (typeof options.writev === 'function') this._writev = options.writev;
70946 }
70947
70948 Stream.call(this);
70949 }
70950
70951 // Otherwise people can pipe Writable streams, which is just wrong.
70952 Writable.prototype.pipe = function () {
70953 this.emit('error', new Error('Cannot pipe, not readable'));
70954 };
70955
70956 function writeAfterEnd(stream, cb) {
70957 var er = new Error('write after end');
70958 // TODO: defer error events consistently everywhere, not just the cb
70959 stream.emit('error', er);
70960 processNextTick(cb, er);
70961 }
70962
70963 // Checks that a user-supplied chunk is valid, especially for the particular
70964 // mode the stream is in. Currently this means that `null` is never accepted
70965 // and undefined/non-string values are only allowed in object mode.
70966 function validChunk(stream, state, chunk, cb) {
70967 var valid = true;
70968 var er = false;
70969
70970 if (chunk === null) {
70971 er = new TypeError('May not write null values to stream');
70972 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
70973 er = new TypeError('Invalid non-string/buffer chunk');
70974 }
70975 if (er) {
70976 stream.emit('error', er);
70977 processNextTick(cb, er);
70978 valid = false;
70979 }
70980 return valid;
70981 }
70982
70983 Writable.prototype.write = function (chunk, encoding, cb) {
70984 var state = this._writableState;
70985 var ret = false;
70986 var isBuf = Buffer.isBuffer(chunk);
70987
70988 if (typeof encoding === 'function') {
70989 cb = encoding;
70990 encoding = null;
70991 }
70992
70993 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
70994
70995 if (typeof cb !== 'function') cb = nop;
70996
70997 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
70998 state.pendingcb++;
70999 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
71000 }
71001
71002 return ret;
71003 };
71004
71005 Writable.prototype.cork = function () {
71006 var state = this._writableState;
71007
71008 state.corked++;
71009 };
71010
71011 Writable.prototype.uncork = function () {
71012 var state = this._writableState;
71013
71014 if (state.corked) {
71015 state.corked--;
71016
71017 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
71018 }
71019 };
71020
71021 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
71022 // node::ParseEncoding() requires lower case.
71023 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
71024 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);
71025 this._writableState.defaultEncoding = encoding;
71026 return this;
71027 };
71028
71029 function decodeChunk(state, chunk, encoding) {
71030 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
71031 chunk = bufferShim.from(chunk, encoding);
71032 }
71033 return chunk;
71034 }
71035
71036 // if we're already writing something, then just put this
71037 // in the queue, and wait our turn. Otherwise, call _write
71038 // If we return false, then we need a drain event, so set that flag.
71039 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
71040 if (!isBuf) {
71041 chunk = decodeChunk(state, chunk, encoding);
71042 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
71043 }
71044 var len = state.objectMode ? 1 : chunk.length;
71045
71046 state.length += len;
71047
71048 var ret = state.length < state.highWaterMark;
71049 // we must ensure that previous needDrain will not be reset to false.
71050 if (!ret) state.needDrain = true;
71051
71052 if (state.writing || state.corked) {
71053 var last = state.lastBufferedRequest;
71054 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
71055 if (last) {
71056 last.next = state.lastBufferedRequest;
71057 } else {
71058 state.bufferedRequest = state.lastBufferedRequest;
71059 }
71060 state.bufferedRequestCount += 1;
71061 } else {
71062 doWrite(stream, state, false, len, chunk, encoding, cb);
71063 }
71064
71065 return ret;
71066 }
71067
71068 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
71069 state.writelen = len;
71070 state.writecb = cb;
71071 state.writing = true;
71072 state.sync = true;
71073 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
71074 state.sync = false;
71075 }
71076
71077 function onwriteError(stream, state, sync, er, cb) {
71078 --state.pendingcb;
71079 if (sync) processNextTick(cb, er);else cb(er);
71080
71081 stream._writableState.errorEmitted = true;
71082 stream.emit('error', er);
71083 }
71084
71085 function onwriteStateUpdate(state) {
71086 state.writing = false;
71087 state.writecb = null;
71088 state.length -= state.writelen;
71089 state.writelen = 0;
71090 }
71091
71092 function onwrite(stream, er) {
71093 var state = stream._writableState;
71094 var sync = state.sync;
71095 var cb = state.writecb;
71096
71097 onwriteStateUpdate(state);
71098
71099 if (er) onwriteError(stream, state, sync, er, cb);else {
71100 // Check if we're actually ready to finish, but don't emit yet
71101 var finished = needFinish(state);
71102
71103 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
71104 clearBuffer(stream, state);
71105 }
71106
71107 if (sync) {
71108 /*<replacement>*/
71109 asyncWrite(afterWrite, stream, state, finished, cb);
71110 /*</replacement>*/
71111 } else {
71112 afterWrite(stream, state, finished, cb);
71113 }
71114 }
71115 }
71116
71117 function afterWrite(stream, state, finished, cb) {
71118 if (!finished) onwriteDrain(stream, state);
71119 state.pendingcb--;
71120 cb();
71121 finishMaybe(stream, state);
71122 }
71123
71124 // Must force callback to be called on nextTick, so that we don't
71125 // emit 'drain' before the write() consumer gets the 'false' return
71126 // value, and has a chance to attach a 'drain' listener.
71127 function onwriteDrain(stream, state) {
71128 if (state.length === 0 && state.needDrain) {
71129 state.needDrain = false;
71130 stream.emit('drain');
71131 }
71132 }
71133
71134 // if there's something in the buffer waiting, then process it
71135 function clearBuffer(stream, state) {
71136 state.bufferProcessing = true;
71137 var entry = state.bufferedRequest;
71138
71139 if (stream._writev && entry && entry.next) {
71140 // Fast case, write everything using _writev()
71141 var l = state.bufferedRequestCount;
71142 var buffer = new Array(l);
71143 var holder = state.corkedRequestsFree;
71144 holder.entry = entry;
71145
71146 var count = 0;
71147 while (entry) {
71148 buffer[count] = entry;
71149 entry = entry.next;
71150 count += 1;
71151 }
71152
71153 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
71154
71155 // doWrite is almost always async, defer these to save a bit of time
71156 // as the hot path ends with doWrite
71157 state.pendingcb++;
71158 state.lastBufferedRequest = null;
71159 if (holder.next) {
71160 state.corkedRequestsFree = holder.next;
71161 holder.next = null;
71162 } else {
71163 state.corkedRequestsFree = new CorkedRequest(state);
71164 }
71165 } else {
71166 // Slow case, write chunks one-by-one
71167 while (entry) {
71168 var chunk = entry.chunk;
71169 var encoding = entry.encoding;
71170 var cb = entry.callback;
71171 var len = state.objectMode ? 1 : chunk.length;
71172
71173 doWrite(stream, state, false, len, chunk, encoding, cb);
71174 entry = entry.next;
71175 // if we didn't call the onwrite immediately, then
71176 // it means that we need to wait until it does.
71177 // also, that means that the chunk and cb are currently
71178 // being processed, so move the buffer counter past them.
71179 if (state.writing) {
71180 break;
71181 }
71182 }
71183
71184 if (entry === null) state.lastBufferedRequest = null;
71185 }
71186
71187 state.bufferedRequestCount = 0;
71188 state.bufferedRequest = entry;
71189 state.bufferProcessing = false;
71190 }
71191
71192 Writable.prototype._write = function (chunk, encoding, cb) {
71193 cb(new Error('_write() is not implemented'));
71194 };
71195
71196 Writable.prototype._writev = null;
71197
71198 Writable.prototype.end = function (chunk, encoding, cb) {
71199 var state = this._writableState;
71200
71201 if (typeof chunk === 'function') {
71202 cb = chunk;
71203 chunk = null;
71204 encoding = null;
71205 } else if (typeof encoding === 'function') {
71206 cb = encoding;
71207 encoding = null;
71208 }
71209
71210 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
71211
71212 // .end() fully uncorks
71213 if (state.corked) {
71214 state.corked = 1;
71215 this.uncork();
71216 }
71217
71218 // ignore unnecessary end() calls.
71219 if (!state.ending && !state.finished) endWritable(this, state, cb);
71220 };
71221
71222 function needFinish(state) {
71223 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
71224 }
71225
71226 function prefinish(stream, state) {
71227 if (!state.prefinished) {
71228 state.prefinished = true;
71229 stream.emit('prefinish');
71230 }
71231 }
71232
71233 function finishMaybe(stream, state) {
71234 var need = needFinish(state);
71235 if (need) {
71236 if (state.pendingcb === 0) {
71237 prefinish(stream, state);
71238 state.finished = true;
71239 stream.emit('finish');
71240 } else {
71241 prefinish(stream, state);
71242 }
71243 }
71244 return need;
71245 }
71246
71247 function endWritable(stream, state, cb) {
71248 state.ending = true;
71249 finishMaybe(stream, state);
71250 if (cb) {
71251 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
71252 }
71253 state.ended = true;
71254 stream.writable = false;
71255 }
71256
71257 // It seems a linked list but it is not
71258 // there will be only 2 of these for each stream
71259 function CorkedRequest(state) {
71260 var _this = this;
71261
71262 this.next = null;
71263 this.entry = null;
71264 this.finish = function (err) {
71265 var entry = _this.entry;
71266 _this.entry = null;
71267 while (entry) {
71268 var cb = entry.callback;
71269 state.pendingcb--;
71270 cb(err);
71271 entry = entry.next;
71272 }
71273 if (state.corkedRequestsFree) {
71274 state.corkedRequestsFree.next = _this;
71275 } else {
71276 state.corkedRequestsFree = _this;
71277 }
71278 };
71279 }
71280 }).call(this,require('_process'))
71281 },{"./_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){
71282 'use strict';
71283
71284 var Buffer = require('buffer').Buffer;
71285 /*<replacement>*/
71286 var bufferShim = require('buffer-shims');
71287 /*</replacement>*/
71288
71289 module.exports = BufferList;
71290
71291 function BufferList() {
71292 this.head = null;
71293 this.tail = null;
71294 this.length = 0;
71295 }
71296
71297 BufferList.prototype.push = function (v) {
71298 var entry = { data: v, next: null };
71299 if (this.length > 0) this.tail.next = entry;else this.head = entry;
71300 this.tail = entry;
71301 ++this.length;
71302 };
71303
71304 BufferList.prototype.unshift = function (v) {
71305 var entry = { data: v, next: this.head };
71306 if (this.length === 0) this.tail = entry;
71307 this.head = entry;
71308 ++this.length;
71309 };
71310
71311 BufferList.prototype.shift = function () {
71312 if (this.length === 0) return;
71313 var ret = this.head.data;
71314 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
71315 --this.length;
71316 return ret;
71317 };
71318
71319 BufferList.prototype.clear = function () {
71320 this.head = this.tail = null;
71321 this.length = 0;
71322 };
71323
71324 BufferList.prototype.join = function (s) {
71325 if (this.length === 0) return '';
71326 var p = this.head;
71327 var ret = '' + p.data;
71328 while (p = p.next) {
71329 ret += s + p.data;
71330 }return ret;
71331 };
71332
71333 BufferList.prototype.concat = function (n) {
71334 if (this.length === 0) return bufferShim.alloc(0);
71335 if (this.length === 1) return this.head.data;
71336 var ret = bufferShim.allocUnsafe(n >>> 0);
71337 var p = this.head;
71338 var i = 0;
71339 while (p) {
71340 p.data.copy(ret, i);
71341 i += p.data.length;
71342 p = p.next;
71343 }
71344 return ret;
71345 };
71346 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
71347 module.exports = require('events').EventEmitter;
71348
71349 },{"events":83}],128:[function(require,module,exports){
71350 'use strict';
71351
71352 var Buffer = require('safe-buffer').Buffer;
71353
71354 var isEncoding = Buffer.isEncoding || function (encoding) {
71355 encoding = '' + encoding;
71356 switch (encoding && encoding.toLowerCase()) {
71357 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':
71358 return true;
71359 default:
71360 return false;
71361 }
71362 };
71363
71364 function _normalizeEncoding(enc) {
71365 if (!enc) return 'utf8';
71366 var retried;
71367 while (true) {
71368 switch (enc) {
71369 case 'utf8':
71370 case 'utf-8':
71371 return 'utf8';
71372 case 'ucs2':
71373 case 'ucs-2':
71374 case 'utf16le':
71375 case 'utf-16le':
71376 return 'utf16le';
71377 case 'latin1':
71378 case 'binary':
71379 return 'latin1';
71380 case 'base64':
71381 case 'ascii':
71382 case 'hex':
71383 return enc;
71384 default:
71385 if (retried) return; // undefined
71386 enc = ('' + enc).toLowerCase();
71387 retried = true;
71388 }
71389 }
71390 };
71391
71392 // Do not cache `Buffer.isEncoding` when checking encoding names as some
71393 // modules monkey-patch it to support additional encodings
71394 function normalizeEncoding(enc) {
71395 var nenc = _normalizeEncoding(enc);
71396 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
71397 return nenc || enc;
71398 }
71399
71400 // StringDecoder provides an interface for efficiently splitting a series of
71401 // buffers into a series of JS strings without breaking apart multi-byte
71402 // characters.
71403 exports.StringDecoder = StringDecoder;
71404 function StringDecoder(encoding) {
71405 this.encoding = normalizeEncoding(encoding);
71406 var nb;
71407 switch (this.encoding) {
71408 case 'utf16le':
71409 this.text = utf16Text;
71410 this.end = utf16End;
71411 nb = 4;
71412 break;
71413 case 'utf8':
71414 this.fillLast = utf8FillLast;
71415 nb = 4;
71416 break;
71417 case 'base64':
71418 this.text = base64Text;
71419 this.end = base64End;
71420 nb = 3;
71421 break;
71422 default:
71423 this.write = simpleWrite;
71424 this.end = simpleEnd;
71425 return;
71426 }
71427 this.lastNeed = 0;
71428 this.lastTotal = 0;
71429 this.lastChar = Buffer.allocUnsafe(nb);
71430 }
71431
71432 StringDecoder.prototype.write = function (buf) {
71433 if (buf.length === 0) return '';
71434 var r;
71435 var i;
71436 if (this.lastNeed) {
71437 r = this.fillLast(buf);
71438 if (r === undefined) return '';
71439 i = this.lastNeed;
71440 this.lastNeed = 0;
71441 } else {
71442 i = 0;
71443 }
71444 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
71445 return r || '';
71446 };
71447
71448 StringDecoder.prototype.end = utf8End;
71449
71450 // Returns only complete characters in a Buffer
71451 StringDecoder.prototype.text = utf8Text;
71452
71453 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
71454 StringDecoder.prototype.fillLast = function (buf) {
71455 if (this.lastNeed <= buf.length) {
71456 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
71457 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71458 }
71459 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
71460 this.lastNeed -= buf.length;
71461 };
71462
71463 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
71464 // continuation byte.
71465 function utf8CheckByte(byte) {
71466 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;
71467 return -1;
71468 }
71469
71470 // Checks at most 3 bytes at the end of a Buffer in order to detect an
71471 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
71472 // needed to complete the UTF-8 character (if applicable) are returned.
71473 function utf8CheckIncomplete(self, buf, i) {
71474 var j = buf.length - 1;
71475 if (j < i) return 0;
71476 var nb = utf8CheckByte(buf[j]);
71477 if (nb >= 0) {
71478 if (nb > 0) self.lastNeed = nb - 1;
71479 return nb;
71480 }
71481 if (--j < i) return 0;
71482 nb = utf8CheckByte(buf[j]);
71483 if (nb >= 0) {
71484 if (nb > 0) self.lastNeed = nb - 2;
71485 return nb;
71486 }
71487 if (--j < i) return 0;
71488 nb = utf8CheckByte(buf[j]);
71489 if (nb >= 0) {
71490 if (nb > 0) {
71491 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
71492 }
71493 return nb;
71494 }
71495 return 0;
71496 }
71497
71498 // Validates as many continuation bytes for a multi-byte UTF-8 character as
71499 // needed or are available. If we see a non-continuation byte where we expect
71500 // one, we "replace" the validated continuation bytes we've seen so far with
71501 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
71502 // behavior. The continuation byte check is included three times in the case
71503 // where all of the continuation bytes for a character exist in the same buffer.
71504 // It is also done this way as a slight performance increase instead of using a
71505 // loop.
71506 function utf8CheckExtraBytes(self, buf, p) {
71507 if ((buf[0] & 0xC0) !== 0x80) {
71508 self.lastNeed = 0;
71509 return '\ufffd'.repeat(p);
71510 }
71511 if (self.lastNeed > 1 && buf.length > 1) {
71512 if ((buf[1] & 0xC0) !== 0x80) {
71513 self.lastNeed = 1;
71514 return '\ufffd'.repeat(p + 1);
71515 }
71516 if (self.lastNeed > 2 && buf.length > 2) {
71517 if ((buf[2] & 0xC0) !== 0x80) {
71518 self.lastNeed = 2;
71519 return '\ufffd'.repeat(p + 2);
71520 }
71521 }
71522 }
71523 }
71524
71525 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
71526 function utf8FillLast(buf) {
71527 var p = this.lastTotal - this.lastNeed;
71528 var r = utf8CheckExtraBytes(this, buf, p);
71529 if (r !== undefined) return r;
71530 if (this.lastNeed <= buf.length) {
71531 buf.copy(this.lastChar, p, 0, this.lastNeed);
71532 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71533 }
71534 buf.copy(this.lastChar, p, 0, buf.length);
71535 this.lastNeed -= buf.length;
71536 }
71537
71538 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
71539 // partial character, the character's bytes are buffered until the required
71540 // number of bytes are available.
71541 function utf8Text(buf, i) {
71542 var total = utf8CheckIncomplete(this, buf, i);
71543 if (!this.lastNeed) return buf.toString('utf8', i);
71544 this.lastTotal = total;
71545 var end = buf.length - (total - this.lastNeed);
71546 buf.copy(this.lastChar, 0, end);
71547 return buf.toString('utf8', i, end);
71548 }
71549
71550 // For UTF-8, a replacement character for each buffered byte of a (partial)
71551 // character needs to be added to the output.
71552 function utf8End(buf) {
71553 var r = buf && buf.length ? this.write(buf) : '';
71554 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
71555 return r;
71556 }
71557
71558 // UTF-16LE typically needs two bytes per character, but even if we have an even
71559 // number of bytes available, we need to check if we end on a leading/high
71560 // surrogate. In that case, we need to wait for the next two bytes in order to
71561 // decode the last character properly.
71562 function utf16Text(buf, i) {
71563 if ((buf.length - i) % 2 === 0) {
71564 var r = buf.toString('utf16le', i);
71565 if (r) {
71566 var c = r.charCodeAt(r.length - 1);
71567 if (c >= 0xD800 && c <= 0xDBFF) {
71568 this.lastNeed = 2;
71569 this.lastTotal = 4;
71570 this.lastChar[0] = buf[buf.length - 2];
71571 this.lastChar[1] = buf[buf.length - 1];
71572 return r.slice(0, -1);
71573 }
71574 }
71575 return r;
71576 }
71577 this.lastNeed = 1;
71578 this.lastTotal = 2;
71579 this.lastChar[0] = buf[buf.length - 1];
71580 return buf.toString('utf16le', i, buf.length - 1);
71581 }
71582
71583 // For UTF-16LE we do not explicitly append special replacement characters if we
71584 // end on a partial character, we simply let v8 handle that.
71585 function utf16End(buf) {
71586 var r = buf && buf.length ? this.write(buf) : '';
71587 if (this.lastNeed) {
71588 var end = this.lastTotal - this.lastNeed;
71589 return r + this.lastChar.toString('utf16le', 0, end);
71590 }
71591 return r;
71592 }
71593
71594 function base64Text(buf, i) {
71595 var n = (buf.length - i) % 3;
71596 if (n === 0) return buf.toString('base64', i);
71597 this.lastNeed = 3 - n;
71598 this.lastTotal = 3;
71599 if (n === 1) {
71600 this.lastChar[0] = buf[buf.length - 1];
71601 } else {
71602 this.lastChar[0] = buf[buf.length - 2];
71603 this.lastChar[1] = buf[buf.length - 1];
71604 }
71605 return buf.toString('base64', i, buf.length - n);
71606 }
71607
71608 function base64End(buf) {
71609 var r = buf && buf.length ? this.write(buf) : '';
71610 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
71611 return r;
71612 }
71613
71614 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
71615 function simpleWrite(buf) {
71616 return buf.toString(this.encoding);
71617 }
71618
71619 function simpleEnd(buf) {
71620 return buf && buf.length ? this.write(buf) : '';
71621 }
71622 },{"safe-buffer":134}],129:[function(require,module,exports){
71623 module.exports = require('./readable').PassThrough
71624
71625 },{"./readable":130}],130:[function(require,module,exports){
71626 exports = module.exports = require('./lib/_stream_readable.js');
71627 exports.Stream = exports;
71628 exports.Readable = exports;
71629 exports.Writable = require('./lib/_stream_writable.js');
71630 exports.Duplex = require('./lib/_stream_duplex.js');
71631 exports.Transform = require('./lib/_stream_transform.js');
71632 exports.PassThrough = require('./lib/_stream_passthrough.js');
71633
71634 },{"./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){
71635 module.exports = require('./readable').Transform
71636
71637 },{"./readable":130}],132:[function(require,module,exports){
71638 module.exports = require('./lib/_stream_writable.js');
71639
71640 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
71641 (function (Buffer){
71642 'use strict'
71643 var inherits = require('inherits')
71644 var HashBase = require('hash-base')
71645
71646 function RIPEMD160 () {
71647 HashBase.call(this, 64)
71648
71649 // state
71650 this._a = 0x67452301
71651 this._b = 0xefcdab89
71652 this._c = 0x98badcfe
71653 this._d = 0x10325476
71654 this._e = 0xc3d2e1f0
71655 }
71656
71657 inherits(RIPEMD160, HashBase)
71658
71659 RIPEMD160.prototype._update = function () {
71660 var m = new Array(16)
71661 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
71662
71663 var al = this._a
71664 var bl = this._b
71665 var cl = this._c
71666 var dl = this._d
71667 var el = this._e
71668
71669 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
71670 // K = 0x00000000
71671 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
71672 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
71673 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
71674 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
71675 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
71676 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
71677 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
71678 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
71679 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
71680 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
71681 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
71682 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
71683 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
71684 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
71685 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
71686 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
71687 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
71688
71689 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
71690 // K = 0x5a827999
71691 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
71692 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
71693 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
71694 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
71695 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
71696 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
71697 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
71698 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
71699 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
71700 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
71701 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
71702 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
71703 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
71704 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
71705 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
71706 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
71707 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
71708
71709 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
71710 // K = 0x6ed9eba1
71711 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
71712 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
71713 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
71714 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
71715 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
71716 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
71717 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
71718 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
71719 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
71720 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
71721 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
71722 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
71723 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
71724 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
71725 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
71726 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
71727 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
71728
71729 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
71730 // K = 0x8f1bbcdc
71731 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
71732 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
71733 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
71734 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
71735 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
71736 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
71737 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
71738 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
71739 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71740 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
71741 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
71742 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
71743 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
71744 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71745 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
71746 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
71747 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
71748
71749 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
71750 // K = 0xa953fd4e
71751 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
71752 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
71753 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
71754 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
71755 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
71756 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
71757 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
71758 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
71759 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
71760 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
71761 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
71762 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
71763 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
71764 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
71765 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
71766 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
71767 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
71768
71769 var ar = this._a
71770 var br = this._b
71771 var cr = this._c
71772 var dr = this._d
71773 var er = this._e
71774
71775 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
71776 // K' = 0x50a28be6
71777 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
71778 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
71779 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
71780 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
71781 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
71782 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
71783 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
71784 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
71785 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
71786 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
71787 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
71788 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
71789 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
71790 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
71791 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
71792 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
71793 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
71794
71795 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
71796 // K' = 0x5c4dd124
71797 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
71798 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
71799 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
71800 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
71801 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
71802 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
71803 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
71804 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
71805 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
71806 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
71807 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
71808 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
71809 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
71810 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
71811 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
71812 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
71813 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
71814
71815 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
71816 // K' = 0x6d703ef3
71817 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
71818 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
71819 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
71820 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
71821 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
71822 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
71823 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
71824 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
71825 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
71826 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
71827 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
71828 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
71829 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
71830 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
71831 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
71832 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
71833 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
71834
71835 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
71836 // K' = 0x7a6d76e9
71837 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
71838 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
71839 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
71840 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
71841 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
71842 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
71843 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
71844 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
71845 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
71846 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
71847 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
71848 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
71849 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
71850 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
71851 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
71852 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
71853 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
71854
71855 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
71856 // K' = 0x00000000
71857 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
71858 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
71859 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
71860 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
71861 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
71862 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
71863 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
71864 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
71865 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
71866 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
71867 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
71868 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
71869 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
71870 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
71871 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
71872 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
71873 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
71874
71875 // change state
71876 var t = (this._b + cl + dr) | 0
71877 this._b = (this._c + dl + er) | 0
71878 this._c = (this._d + el + ar) | 0
71879 this._d = (this._e + al + br) | 0
71880 this._e = (this._a + bl + cr) | 0
71881 this._a = t
71882 }
71883
71884 RIPEMD160.prototype._digest = function () {
71885 // create padding and handle blocks
71886 this._block[this._blockOffset++] = 0x80
71887 if (this._blockOffset > 56) {
71888 this._block.fill(0, this._blockOffset, 64)
71889 this._update()
71890 this._blockOffset = 0
71891 }
71892
71893 this._block.fill(0, this._blockOffset, 56)
71894 this._block.writeUInt32LE(this._length[0], 56)
71895 this._block.writeUInt32LE(this._length[1], 60)
71896 this._update()
71897
71898 // produce result
71899 var buffer = new Buffer(20)
71900 buffer.writeInt32LE(this._a, 0)
71901 buffer.writeInt32LE(this._b, 4)
71902 buffer.writeInt32LE(this._c, 8)
71903 buffer.writeInt32LE(this._d, 12)
71904 buffer.writeInt32LE(this._e, 16)
71905 return buffer
71906 }
71907
71908 function rotl (x, n) {
71909 return (x << n) | (x >>> (32 - n))
71910 }
71911
71912 function fn1 (a, b, c, d, e, m, k, s) {
71913 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
71914 }
71915
71916 function fn2 (a, b, c, d, e, m, k, s) {
71917 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
71918 }
71919
71920 function fn3 (a, b, c, d, e, m, k, s) {
71921 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
71922 }
71923
71924 function fn4 (a, b, c, d, e, m, k, s) {
71925 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
71926 }
71927
71928 function fn5 (a, b, c, d, e, m, k, s) {
71929 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
71930 }
71931
71932 module.exports = RIPEMD160
71933
71934 }).call(this,require("buffer").Buffer)
71935 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
71936 module.exports = require('buffer')
71937
71938 },{"buffer":47}],135:[function(require,module,exports){
71939 (function (Buffer){
71940 // prototype class for hash functions
71941 function Hash (blockSize, finalSize) {
71942 this._block = new Buffer(blockSize)
71943 this._finalSize = finalSize
71944 this._blockSize = blockSize
71945 this._len = 0
71946 this._s = 0
71947 }
71948
71949 Hash.prototype.update = function (data, enc) {
71950 if (typeof data === 'string') {
71951 enc = enc || 'utf8'
71952 data = new Buffer(data, enc)
71953 }
71954
71955 var l = this._len += data.length
71956 var s = this._s || 0
71957 var f = 0
71958 var buffer = this._block
71959
71960 while (s < l) {
71961 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
71962 var ch = (t - f)
71963
71964 for (var i = 0; i < ch; i++) {
71965 buffer[(s % this._blockSize) + i] = data[i + f]
71966 }
71967
71968 s += ch
71969 f += ch
71970
71971 if ((s % this._blockSize) === 0) {
71972 this._update(buffer)
71973 }
71974 }
71975 this._s = s
71976
71977 return this
71978 }
71979
71980 Hash.prototype.digest = function (enc) {
71981 // Suppose the length of the message M, in bits, is l
71982 var l = this._len * 8
71983
71984 // Append the bit 1 to the end of the message
71985 this._block[this._len % this._blockSize] = 0x80
71986
71987 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
71988 this._block.fill(0, this._len % this._blockSize + 1)
71989
71990 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
71991 this._update(this._block)
71992 this._block.fill(0)
71993 }
71994
71995 // to this append the block which is equal to the number l written in binary
71996 // TODO: handle case where l is > Math.pow(2, 29)
71997 this._block.writeInt32BE(l, this._blockSize - 4)
71998
71999 var hash = this._update(this._block) || this._hash()
72000
72001 return enc ? hash.toString(enc) : hash
72002 }
72003
72004 Hash.prototype._update = function () {
72005 throw new Error('_update must be implemented by subclass')
72006 }
72007
72008 module.exports = Hash
72009
72010 }).call(this,require("buffer").Buffer)
72011 },{"buffer":47}],136:[function(require,module,exports){
72012 var exports = module.exports = function SHA (algorithm) {
72013 algorithm = algorithm.toLowerCase()
72014
72015 var Algorithm = exports[algorithm]
72016 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
72017
72018 return new Algorithm()
72019 }
72020
72021 exports.sha = require('./sha')
72022 exports.sha1 = require('./sha1')
72023 exports.sha224 = require('./sha224')
72024 exports.sha256 = require('./sha256')
72025 exports.sha384 = require('./sha384')
72026 exports.sha512 = require('./sha512')
72027
72028 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
72029 (function (Buffer){
72030 /*
72031 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
72032 * in FIPS PUB 180-1
72033 * This source code is derived from sha1.js of the same repository.
72034 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
72035 * operation was added.
72036 */
72037
72038 var inherits = require('inherits')
72039 var Hash = require('./hash')
72040
72041 var K = [
72042 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72043 ]
72044
72045 var W = new Array(80)
72046
72047 function Sha () {
72048 this.init()
72049 this._w = W
72050
72051 Hash.call(this, 64, 56)
72052 }
72053
72054 inherits(Sha, Hash)
72055
72056 Sha.prototype.init = function () {
72057 this._a = 0x67452301
72058 this._b = 0xefcdab89
72059 this._c = 0x98badcfe
72060 this._d = 0x10325476
72061 this._e = 0xc3d2e1f0
72062
72063 return this
72064 }
72065
72066 function rotl5 (num) {
72067 return (num << 5) | (num >>> 27)
72068 }
72069
72070 function rotl30 (num) {
72071 return (num << 30) | (num >>> 2)
72072 }
72073
72074 function ft (s, b, c, d) {
72075 if (s === 0) return (b & c) | ((~b) & d)
72076 if (s === 2) return (b & c) | (b & d) | (c & d)
72077 return b ^ c ^ d
72078 }
72079
72080 Sha.prototype._update = function (M) {
72081 var W = this._w
72082
72083 var a = this._a | 0
72084 var b = this._b | 0
72085 var c = this._c | 0
72086 var d = this._d | 0
72087 var e = this._e | 0
72088
72089 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72090 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
72091
72092 for (var j = 0; j < 80; ++j) {
72093 var s = ~~(j / 20)
72094 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72095
72096 e = d
72097 d = c
72098 c = rotl30(b)
72099 b = a
72100 a = t
72101 }
72102
72103 this._a = (a + this._a) | 0
72104 this._b = (b + this._b) | 0
72105 this._c = (c + this._c) | 0
72106 this._d = (d + this._d) | 0
72107 this._e = (e + this._e) | 0
72108 }
72109
72110 Sha.prototype._hash = function () {
72111 var H = new Buffer(20)
72112
72113 H.writeInt32BE(this._a | 0, 0)
72114 H.writeInt32BE(this._b | 0, 4)
72115 H.writeInt32BE(this._c | 0, 8)
72116 H.writeInt32BE(this._d | 0, 12)
72117 H.writeInt32BE(this._e | 0, 16)
72118
72119 return H
72120 }
72121
72122 module.exports = Sha
72123
72124 }).call(this,require("buffer").Buffer)
72125 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
72126 (function (Buffer){
72127 /*
72128 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
72129 * in FIPS PUB 180-1
72130 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
72131 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72132 * Distributed under the BSD License
72133 * See http://pajhome.org.uk/crypt/md5 for details.
72134 */
72135
72136 var inherits = require('inherits')
72137 var Hash = require('./hash')
72138
72139 var K = [
72140 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72141 ]
72142
72143 var W = new Array(80)
72144
72145 function Sha1 () {
72146 this.init()
72147 this._w = W
72148
72149 Hash.call(this, 64, 56)
72150 }
72151
72152 inherits(Sha1, Hash)
72153
72154 Sha1.prototype.init = function () {
72155 this._a = 0x67452301
72156 this._b = 0xefcdab89
72157 this._c = 0x98badcfe
72158 this._d = 0x10325476
72159 this._e = 0xc3d2e1f0
72160
72161 return this
72162 }
72163
72164 function rotl1 (num) {
72165 return (num << 1) | (num >>> 31)
72166 }
72167
72168 function rotl5 (num) {
72169 return (num << 5) | (num >>> 27)
72170 }
72171
72172 function rotl30 (num) {
72173 return (num << 30) | (num >>> 2)
72174 }
72175
72176 function ft (s, b, c, d) {
72177 if (s === 0) return (b & c) | ((~b) & d)
72178 if (s === 2) return (b & c) | (b & d) | (c & d)
72179 return b ^ c ^ d
72180 }
72181
72182 Sha1.prototype._update = function (M) {
72183 var W = this._w
72184
72185 var a = this._a | 0
72186 var b = this._b | 0
72187 var c = this._c | 0
72188 var d = this._d | 0
72189 var e = this._e | 0
72190
72191 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72192 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
72193
72194 for (var j = 0; j < 80; ++j) {
72195 var s = ~~(j / 20)
72196 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72197
72198 e = d
72199 d = c
72200 c = rotl30(b)
72201 b = a
72202 a = t
72203 }
72204
72205 this._a = (a + this._a) | 0
72206 this._b = (b + this._b) | 0
72207 this._c = (c + this._c) | 0
72208 this._d = (d + this._d) | 0
72209 this._e = (e + this._e) | 0
72210 }
72211
72212 Sha1.prototype._hash = function () {
72213 var H = new Buffer(20)
72214
72215 H.writeInt32BE(this._a | 0, 0)
72216 H.writeInt32BE(this._b | 0, 4)
72217 H.writeInt32BE(this._c | 0, 8)
72218 H.writeInt32BE(this._d | 0, 12)
72219 H.writeInt32BE(this._e | 0, 16)
72220
72221 return H
72222 }
72223
72224 module.exports = Sha1
72225
72226 }).call(this,require("buffer").Buffer)
72227 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
72228 (function (Buffer){
72229 /**
72230 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72231 * in FIPS 180-2
72232 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72233 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72234 *
72235 */
72236
72237 var inherits = require('inherits')
72238 var Sha256 = require('./sha256')
72239 var Hash = require('./hash')
72240
72241 var W = new Array(64)
72242
72243 function Sha224 () {
72244 this.init()
72245
72246 this._w = W // new Array(64)
72247
72248 Hash.call(this, 64, 56)
72249 }
72250
72251 inherits(Sha224, Sha256)
72252
72253 Sha224.prototype.init = function () {
72254 this._a = 0xc1059ed8
72255 this._b = 0x367cd507
72256 this._c = 0x3070dd17
72257 this._d = 0xf70e5939
72258 this._e = 0xffc00b31
72259 this._f = 0x68581511
72260 this._g = 0x64f98fa7
72261 this._h = 0xbefa4fa4
72262
72263 return this
72264 }
72265
72266 Sha224.prototype._hash = function () {
72267 var H = new Buffer(28)
72268
72269 H.writeInt32BE(this._a, 0)
72270 H.writeInt32BE(this._b, 4)
72271 H.writeInt32BE(this._c, 8)
72272 H.writeInt32BE(this._d, 12)
72273 H.writeInt32BE(this._e, 16)
72274 H.writeInt32BE(this._f, 20)
72275 H.writeInt32BE(this._g, 24)
72276
72277 return H
72278 }
72279
72280 module.exports = Sha224
72281
72282 }).call(this,require("buffer").Buffer)
72283 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
72284 (function (Buffer){
72285 /**
72286 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72287 * in FIPS 180-2
72288 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72289 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72290 *
72291 */
72292
72293 var inherits = require('inherits')
72294 var Hash = require('./hash')
72295
72296 var K = [
72297 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
72298 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
72299 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
72300 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
72301 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
72302 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
72303 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
72304 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
72305 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
72306 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
72307 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
72308 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
72309 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
72310 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
72311 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
72312 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
72313 ]
72314
72315 var W = new Array(64)
72316
72317 function Sha256 () {
72318 this.init()
72319
72320 this._w = W // new Array(64)
72321
72322 Hash.call(this, 64, 56)
72323 }
72324
72325 inherits(Sha256, Hash)
72326
72327 Sha256.prototype.init = function () {
72328 this._a = 0x6a09e667
72329 this._b = 0xbb67ae85
72330 this._c = 0x3c6ef372
72331 this._d = 0xa54ff53a
72332 this._e = 0x510e527f
72333 this._f = 0x9b05688c
72334 this._g = 0x1f83d9ab
72335 this._h = 0x5be0cd19
72336
72337 return this
72338 }
72339
72340 function ch (x, y, z) {
72341 return z ^ (x & (y ^ z))
72342 }
72343
72344 function maj (x, y, z) {
72345 return (x & y) | (z & (x | y))
72346 }
72347
72348 function sigma0 (x) {
72349 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
72350 }
72351
72352 function sigma1 (x) {
72353 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
72354 }
72355
72356 function gamma0 (x) {
72357 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
72358 }
72359
72360 function gamma1 (x) {
72361 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
72362 }
72363
72364 Sha256.prototype._update = function (M) {
72365 var W = this._w
72366
72367 var a = this._a | 0
72368 var b = this._b | 0
72369 var c = this._c | 0
72370 var d = this._d | 0
72371 var e = this._e | 0
72372 var f = this._f | 0
72373 var g = this._g | 0
72374 var h = this._h | 0
72375
72376 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72377 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
72378
72379 for (var j = 0; j < 64; ++j) {
72380 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
72381 var T2 = (sigma0(a) + maj(a, b, c)) | 0
72382
72383 h = g
72384 g = f
72385 f = e
72386 e = (d + T1) | 0
72387 d = c
72388 c = b
72389 b = a
72390 a = (T1 + T2) | 0
72391 }
72392
72393 this._a = (a + this._a) | 0
72394 this._b = (b + this._b) | 0
72395 this._c = (c + this._c) | 0
72396 this._d = (d + this._d) | 0
72397 this._e = (e + this._e) | 0
72398 this._f = (f + this._f) | 0
72399 this._g = (g + this._g) | 0
72400 this._h = (h + this._h) | 0
72401 }
72402
72403 Sha256.prototype._hash = function () {
72404 var H = new Buffer(32)
72405
72406 H.writeInt32BE(this._a, 0)
72407 H.writeInt32BE(this._b, 4)
72408 H.writeInt32BE(this._c, 8)
72409 H.writeInt32BE(this._d, 12)
72410 H.writeInt32BE(this._e, 16)
72411 H.writeInt32BE(this._f, 20)
72412 H.writeInt32BE(this._g, 24)
72413 H.writeInt32BE(this._h, 28)
72414
72415 return H
72416 }
72417
72418 module.exports = Sha256
72419
72420 }).call(this,require("buffer").Buffer)
72421 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
72422 (function (Buffer){
72423 var inherits = require('inherits')
72424 var SHA512 = require('./sha512')
72425 var Hash = require('./hash')
72426
72427 var W = new Array(160)
72428
72429 function Sha384 () {
72430 this.init()
72431 this._w = W
72432
72433 Hash.call(this, 128, 112)
72434 }
72435
72436 inherits(Sha384, SHA512)
72437
72438 Sha384.prototype.init = function () {
72439 this._ah = 0xcbbb9d5d
72440 this._bh = 0x629a292a
72441 this._ch = 0x9159015a
72442 this._dh = 0x152fecd8
72443 this._eh = 0x67332667
72444 this._fh = 0x8eb44a87
72445 this._gh = 0xdb0c2e0d
72446 this._hh = 0x47b5481d
72447
72448 this._al = 0xc1059ed8
72449 this._bl = 0x367cd507
72450 this._cl = 0x3070dd17
72451 this._dl = 0xf70e5939
72452 this._el = 0xffc00b31
72453 this._fl = 0x68581511
72454 this._gl = 0x64f98fa7
72455 this._hl = 0xbefa4fa4
72456
72457 return this
72458 }
72459
72460 Sha384.prototype._hash = function () {
72461 var H = new Buffer(48)
72462
72463 function writeInt64BE (h, l, offset) {
72464 H.writeInt32BE(h, offset)
72465 H.writeInt32BE(l, offset + 4)
72466 }
72467
72468 writeInt64BE(this._ah, this._al, 0)
72469 writeInt64BE(this._bh, this._bl, 8)
72470 writeInt64BE(this._ch, this._cl, 16)
72471 writeInt64BE(this._dh, this._dl, 24)
72472 writeInt64BE(this._eh, this._el, 32)
72473 writeInt64BE(this._fh, this._fl, 40)
72474
72475 return H
72476 }
72477
72478 module.exports = Sha384
72479
72480 }).call(this,require("buffer").Buffer)
72481 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
72482 (function (Buffer){
72483 var inherits = require('inherits')
72484 var Hash = require('./hash')
72485
72486 var K = [
72487 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
72488 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
72489 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
72490 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
72491 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
72492 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
72493 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
72494 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
72495 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
72496 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
72497 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
72498 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
72499 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
72500 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
72501 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
72502 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
72503 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
72504 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
72505 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
72506 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
72507 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
72508 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
72509 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
72510 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
72511 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
72512 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
72513 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
72514 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
72515 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
72516 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
72517 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
72518 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
72519 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
72520 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
72521 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
72522 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
72523 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
72524 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
72525 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
72526 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
72527 ]
72528
72529 var W = new Array(160)
72530
72531 function Sha512 () {
72532 this.init()
72533 this._w = W
72534
72535 Hash.call(this, 128, 112)
72536 }
72537
72538 inherits(Sha512, Hash)
72539
72540 Sha512.prototype.init = function () {
72541 this._ah = 0x6a09e667
72542 this._bh = 0xbb67ae85
72543 this._ch = 0x3c6ef372
72544 this._dh = 0xa54ff53a
72545 this._eh = 0x510e527f
72546 this._fh = 0x9b05688c
72547 this._gh = 0x1f83d9ab
72548 this._hh = 0x5be0cd19
72549
72550 this._al = 0xf3bcc908
72551 this._bl = 0x84caa73b
72552 this._cl = 0xfe94f82b
72553 this._dl = 0x5f1d36f1
72554 this._el = 0xade682d1
72555 this._fl = 0x2b3e6c1f
72556 this._gl = 0xfb41bd6b
72557 this._hl = 0x137e2179
72558
72559 return this
72560 }
72561
72562 function Ch (x, y, z) {
72563 return z ^ (x & (y ^ z))
72564 }
72565
72566 function maj (x, y, z) {
72567 return (x & y) | (z & (x | y))
72568 }
72569
72570 function sigma0 (x, xl) {
72571 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
72572 }
72573
72574 function sigma1 (x, xl) {
72575 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
72576 }
72577
72578 function Gamma0 (x, xl) {
72579 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
72580 }
72581
72582 function Gamma0l (x, xl) {
72583 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
72584 }
72585
72586 function Gamma1 (x, xl) {
72587 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
72588 }
72589
72590 function Gamma1l (x, xl) {
72591 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
72592 }
72593
72594 function getCarry (a, b) {
72595 return (a >>> 0) < (b >>> 0) ? 1 : 0
72596 }
72597
72598 Sha512.prototype._update = function (M) {
72599 var W = this._w
72600
72601 var ah = this._ah | 0
72602 var bh = this._bh | 0
72603 var ch = this._ch | 0
72604 var dh = this._dh | 0
72605 var eh = this._eh | 0
72606 var fh = this._fh | 0
72607 var gh = this._gh | 0
72608 var hh = this._hh | 0
72609
72610 var al = this._al | 0
72611 var bl = this._bl | 0
72612 var cl = this._cl | 0
72613 var dl = this._dl | 0
72614 var el = this._el | 0
72615 var fl = this._fl | 0
72616 var gl = this._gl | 0
72617 var hl = this._hl | 0
72618
72619 for (var i = 0; i < 32; i += 2) {
72620 W[i] = M.readInt32BE(i * 4)
72621 W[i + 1] = M.readInt32BE(i * 4 + 4)
72622 }
72623 for (; i < 160; i += 2) {
72624 var xh = W[i - 15 * 2]
72625 var xl = W[i - 15 * 2 + 1]
72626 var gamma0 = Gamma0(xh, xl)
72627 var gamma0l = Gamma0l(xl, xh)
72628
72629 xh = W[i - 2 * 2]
72630 xl = W[i - 2 * 2 + 1]
72631 var gamma1 = Gamma1(xh, xl)
72632 var gamma1l = Gamma1l(xl, xh)
72633
72634 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
72635 var Wi7h = W[i - 7 * 2]
72636 var Wi7l = W[i - 7 * 2 + 1]
72637
72638 var Wi16h = W[i - 16 * 2]
72639 var Wi16l = W[i - 16 * 2 + 1]
72640
72641 var Wil = (gamma0l + Wi7l) | 0
72642 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
72643 Wil = (Wil + gamma1l) | 0
72644 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
72645 Wil = (Wil + Wi16l) | 0
72646 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
72647
72648 W[i] = Wih
72649 W[i + 1] = Wil
72650 }
72651
72652 for (var j = 0; j < 160; j += 2) {
72653 Wih = W[j]
72654 Wil = W[j + 1]
72655
72656 var majh = maj(ah, bh, ch)
72657 var majl = maj(al, bl, cl)
72658
72659 var sigma0h = sigma0(ah, al)
72660 var sigma0l = sigma0(al, ah)
72661 var sigma1h = sigma1(eh, el)
72662 var sigma1l = sigma1(el, eh)
72663
72664 // t1 = h + sigma1 + ch + K[j] + W[j]
72665 var Kih = K[j]
72666 var Kil = K[j + 1]
72667
72668 var chh = Ch(eh, fh, gh)
72669 var chl = Ch(el, fl, gl)
72670
72671 var t1l = (hl + sigma1l) | 0
72672 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
72673 t1l = (t1l + chl) | 0
72674 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
72675 t1l = (t1l + Kil) | 0
72676 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
72677 t1l = (t1l + Wil) | 0
72678 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
72679
72680 // t2 = sigma0 + maj
72681 var t2l = (sigma0l + majl) | 0
72682 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
72683
72684 hh = gh
72685 hl = gl
72686 gh = fh
72687 gl = fl
72688 fh = eh
72689 fl = el
72690 el = (dl + t1l) | 0
72691 eh = (dh + t1h + getCarry(el, dl)) | 0
72692 dh = ch
72693 dl = cl
72694 ch = bh
72695 cl = bl
72696 bh = ah
72697 bl = al
72698 al = (t1l + t2l) | 0
72699 ah = (t1h + t2h + getCarry(al, t1l)) | 0
72700 }
72701
72702 this._al = (this._al + al) | 0
72703 this._bl = (this._bl + bl) | 0
72704 this._cl = (this._cl + cl) | 0
72705 this._dl = (this._dl + dl) | 0
72706 this._el = (this._el + el) | 0
72707 this._fl = (this._fl + fl) | 0
72708 this._gl = (this._gl + gl) | 0
72709 this._hl = (this._hl + hl) | 0
72710
72711 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
72712 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
72713 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
72714 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
72715 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
72716 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
72717 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
72718 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
72719 }
72720
72721 Sha512.prototype._hash = function () {
72722 var H = new Buffer(64)
72723
72724 function writeInt64BE (h, l, offset) {
72725 H.writeInt32BE(h, offset)
72726 H.writeInt32BE(l, offset + 4)
72727 }
72728
72729 writeInt64BE(this._ah, this._al, 0)
72730 writeInt64BE(this._bh, this._bl, 8)
72731 writeInt64BE(this._ch, this._cl, 16)
72732 writeInt64BE(this._dh, this._dl, 24)
72733 writeInt64BE(this._eh, this._el, 32)
72734 writeInt64BE(this._fh, this._fl, 40)
72735 writeInt64BE(this._gh, this._gl, 48)
72736 writeInt64BE(this._hh, this._hl, 56)
72737
72738 return H
72739 }
72740
72741 module.exports = Sha512
72742
72743 }).call(this,require("buffer").Buffer)
72744 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
72745 // Copyright Joyent, Inc. and other Node contributors.
72746 //
72747 // Permission is hereby granted, free of charge, to any person obtaining a
72748 // copy of this software and associated documentation files (the
72749 // "Software"), to deal in the Software without restriction, including
72750 // without limitation the rights to use, copy, modify, merge, publish,
72751 // distribute, sublicense, and/or sell copies of the Software, and to permit
72752 // persons to whom the Software is furnished to do so, subject to the
72753 // following conditions:
72754 //
72755 // The above copyright notice and this permission notice shall be included
72756 // in all copies or substantial portions of the Software.
72757 //
72758 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72759 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72760 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72761 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72762 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72763 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72764 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72765
72766 module.exports = Stream;
72767
72768 var EE = require('events').EventEmitter;
72769 var inherits = require('inherits');
72770
72771 inherits(Stream, EE);
72772 Stream.Readable = require('readable-stream/readable.js');
72773 Stream.Writable = require('readable-stream/writable.js');
72774 Stream.Duplex = require('readable-stream/duplex.js');
72775 Stream.Transform = require('readable-stream/transform.js');
72776 Stream.PassThrough = require('readable-stream/passthrough.js');
72777
72778 // Backwards-compat with node 0.4.x
72779 Stream.Stream = Stream;
72780
72781
72782
72783 // old-style streams. Note that the pipe method (the only relevant
72784 // part of this class) is overridden in the Readable class.
72785
72786 function Stream() {
72787 EE.call(this);
72788 }
72789
72790 Stream.prototype.pipe = function(dest, options) {
72791 var source = this;
72792
72793 function ondata(chunk) {
72794 if (dest.writable) {
72795 if (false === dest.write(chunk) && source.pause) {
72796 source.pause();
72797 }
72798 }
72799 }
72800
72801 source.on('data', ondata);
72802
72803 function ondrain() {
72804 if (source.readable && source.resume) {
72805 source.resume();
72806 }
72807 }
72808
72809 dest.on('drain', ondrain);
72810
72811 // If the 'end' option is not supplied, dest.end() will be called when
72812 // source gets the 'end' or 'close' events. Only dest.end() once.
72813 if (!dest._isStdio && (!options || options.end !== false)) {
72814 source.on('end', onend);
72815 source.on('close', onclose);
72816 }
72817
72818 var didOnEnd = false;
72819 function onend() {
72820 if (didOnEnd) return;
72821 didOnEnd = true;
72822
72823 dest.end();
72824 }
72825
72826
72827 function onclose() {
72828 if (didOnEnd) return;
72829 didOnEnd = true;
72830
72831 if (typeof dest.destroy === 'function') dest.destroy();
72832 }
72833
72834 // don't leave dangling pipes when there are errors.
72835 function onerror(er) {
72836 cleanup();
72837 if (EE.listenerCount(this, 'error') === 0) {
72838 throw er; // Unhandled stream error in pipe.
72839 }
72840 }
72841
72842 source.on('error', onerror);
72843 dest.on('error', onerror);
72844
72845 // remove all the event listeners that were added.
72846 function cleanup() {
72847 source.removeListener('data', ondata);
72848 dest.removeListener('drain', ondrain);
72849
72850 source.removeListener('end', onend);
72851 source.removeListener('close', onclose);
72852
72853 source.removeListener('error', onerror);
72854 dest.removeListener('error', onerror);
72855
72856 source.removeListener('end', cleanup);
72857 source.removeListener('close', cleanup);
72858
72859 dest.removeListener('close', cleanup);
72860 }
72861
72862 source.on('end', cleanup);
72863 source.on('close', cleanup);
72864
72865 dest.on('close', cleanup);
72866
72867 dest.emit('pipe', source);
72868
72869 // Allow for unix-like usage: A.pipe(B).pipe(C)
72870 return dest;
72871 };
72872
72873 },{"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){
72874 // Copyright Joyent, Inc. and other Node contributors.
72875 //
72876 // Permission is hereby granted, free of charge, to any person obtaining a
72877 // copy of this software and associated documentation files (the
72878 // "Software"), to deal in the Software without restriction, including
72879 // without limitation the rights to use, copy, modify, merge, publish,
72880 // distribute, sublicense, and/or sell copies of the Software, and to permit
72881 // persons to whom the Software is furnished to do so, subject to the
72882 // following conditions:
72883 //
72884 // The above copyright notice and this permission notice shall be included
72885 // in all copies or substantial portions of the Software.
72886 //
72887 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72888 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72889 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72890 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72891 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72892 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72893 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72894
72895 var Buffer = require('buffer').Buffer;
72896
72897 var isBufferEncoding = Buffer.isEncoding
72898 || function(encoding) {
72899 switch (encoding && encoding.toLowerCase()) {
72900 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;
72901 default: return false;
72902 }
72903 }
72904
72905
72906 function assertEncoding(encoding) {
72907 if (encoding && !isBufferEncoding(encoding)) {
72908 throw new Error('Unknown encoding: ' + encoding);
72909 }
72910 }
72911
72912 // StringDecoder provides an interface for efficiently splitting a series of
72913 // buffers into a series of JS strings without breaking apart multi-byte
72914 // characters. CESU-8 is handled as part of the UTF-8 encoding.
72915 //
72916 // @TODO Handling all encodings inside a single object makes it very difficult
72917 // to reason about this code, so it should be split up in the future.
72918 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
72919 // points as used by CESU-8.
72920 var StringDecoder = exports.StringDecoder = function(encoding) {
72921 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
72922 assertEncoding(encoding);
72923 switch (this.encoding) {
72924 case 'utf8':
72925 // CESU-8 represents each of Surrogate Pair by 3-bytes
72926 this.surrogateSize = 3;
72927 break;
72928 case 'ucs2':
72929 case 'utf16le':
72930 // UTF-16 represents each of Surrogate Pair by 2-bytes
72931 this.surrogateSize = 2;
72932 this.detectIncompleteChar = utf16DetectIncompleteChar;
72933 break;
72934 case 'base64':
72935 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
72936 this.surrogateSize = 3;
72937 this.detectIncompleteChar = base64DetectIncompleteChar;
72938 break;
72939 default:
72940 this.write = passThroughWrite;
72941 return;
72942 }
72943
72944 // Enough space to store all bytes of a single character. UTF-8 needs 4
72945 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
72946 this.charBuffer = new Buffer(6);
72947 // Number of bytes received for the current incomplete multi-byte character.
72948 this.charReceived = 0;
72949 // Number of bytes expected for the current incomplete multi-byte character.
72950 this.charLength = 0;
72951 };
72952
72953
72954 // write decodes the given buffer and returns it as JS string that is
72955 // guaranteed to not contain any partial multi-byte characters. Any partial
72956 // character found at the end of the buffer is buffered up, and will be
72957 // returned when calling write again with the remaining bytes.
72958 //
72959 // Note: Converting a Buffer containing an orphan surrogate to a String
72960 // currently works, but converting a String to a Buffer (via `new Buffer`, or
72961 // Buffer#write) will replace incomplete surrogates with the unicode
72962 // replacement character. See https://codereview.chromium.org/121173009/ .
72963 StringDecoder.prototype.write = function(buffer) {
72964 var charStr = '';
72965 // if our last write ended with an incomplete multibyte character
72966 while (this.charLength) {
72967 // determine how many remaining bytes this buffer has to offer for this char
72968 var available = (buffer.length >= this.charLength - this.charReceived) ?
72969 this.charLength - this.charReceived :
72970 buffer.length;
72971
72972 // add the new bytes to the char buffer
72973 buffer.copy(this.charBuffer, this.charReceived, 0, available);
72974 this.charReceived += available;
72975
72976 if (this.charReceived < this.charLength) {
72977 // still not enough chars in this buffer? wait for more ...
72978 return '';
72979 }
72980
72981 // remove bytes belonging to the current character from the buffer
72982 buffer = buffer.slice(available, buffer.length);
72983
72984 // get the character that was split
72985 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
72986
72987 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
72988 var charCode = charStr.charCodeAt(charStr.length - 1);
72989 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
72990 this.charLength += this.surrogateSize;
72991 charStr = '';
72992 continue;
72993 }
72994 this.charReceived = this.charLength = 0;
72995
72996 // if there are no more bytes in this buffer, just emit our char
72997 if (buffer.length === 0) {
72998 return charStr;
72999 }
73000 break;
73001 }
73002
73003 // determine and set charLength / charReceived
73004 this.detectIncompleteChar(buffer);
73005
73006 var end = buffer.length;
73007 if (this.charLength) {
73008 // buffer the incomplete character bytes we got
73009 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
73010 end -= this.charReceived;
73011 }
73012
73013 charStr += buffer.toString(this.encoding, 0, end);
73014
73015 var end = charStr.length - 1;
73016 var charCode = charStr.charCodeAt(end);
73017 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
73018 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
73019 var size = this.surrogateSize;
73020 this.charLength += size;
73021 this.charReceived += size;
73022 this.charBuffer.copy(this.charBuffer, size, 0, size);
73023 buffer.copy(this.charBuffer, 0, 0, size);
73024 return charStr.substring(0, end);
73025 }
73026
73027 // or just emit the charStr
73028 return charStr;
73029 };
73030
73031 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
73032 // the end of the given buffer. If so, it sets this.charLength to the byte
73033 // length that character, and sets this.charReceived to the number of bytes
73034 // that are available for this character.
73035 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
73036 // determine how many bytes we have to check at the end of this buffer
73037 var i = (buffer.length >= 3) ? 3 : buffer.length;
73038
73039 // Figure out if one of the last i bytes of our buffer announces an
73040 // incomplete char.
73041 for (; i > 0; i--) {
73042 var c = buffer[buffer.length - i];
73043
73044 // See http://en.wikipedia.org/wiki/UTF-8#Description
73045
73046 // 110XXXXX
73047 if (i == 1 && c >> 5 == 0x06) {
73048 this.charLength = 2;
73049 break;
73050 }
73051
73052 // 1110XXXX
73053 if (i <= 2 && c >> 4 == 0x0E) {
73054 this.charLength = 3;
73055 break;
73056 }
73057
73058 // 11110XXX
73059 if (i <= 3 && c >> 3 == 0x1E) {
73060 this.charLength = 4;
73061 break;
73062 }
73063 }
73064 this.charReceived = i;
73065 };
73066
73067 StringDecoder.prototype.end = function(buffer) {
73068 var res = '';
73069 if (buffer && buffer.length)
73070 res = this.write(buffer);
73071
73072 if (this.charReceived) {
73073 var cr = this.charReceived;
73074 var buf = this.charBuffer;
73075 var enc = this.encoding;
73076 res += buf.slice(0, cr).toString(enc);
73077 }
73078
73079 return res;
73080 };
73081
73082 function passThroughWrite(buffer) {
73083 return buffer.toString(this.encoding);
73084 }
73085
73086 function utf16DetectIncompleteChar(buffer) {
73087 this.charReceived = buffer.length % 2;
73088 this.charLength = this.charReceived ? 2 : 0;
73089 }
73090
73091 function base64DetectIncompleteChar(buffer) {
73092 this.charReceived = buffer.length % 3;
73093 this.charLength = this.charReceived ? 3 : 0;
73094 }
73095
73096 },{"buffer":47}],145:[function(require,module,exports){
73097 (function (global){
73098
73099 /**
73100 * Module exports.
73101 */
73102
73103 module.exports = deprecate;
73104
73105 /**
73106 * Mark that a method should not be used.
73107 * Returns a modified function which warns once by default.
73108 *
73109 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
73110 *
73111 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
73112 * will throw an Error when invoked.
73113 *
73114 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
73115 * will invoke `console.trace()` instead of `console.error()`.
73116 *
73117 * @param {Function} fn - the function to deprecate
73118 * @param {String} msg - the string to print to the console when `fn` is invoked
73119 * @returns {Function} a new "deprecated" version of `fn`
73120 * @api public
73121 */
73122
73123 function deprecate (fn, msg) {
73124 if (config('noDeprecation')) {
73125 return fn;
73126 }
73127
73128 var warned = false;
73129 function deprecated() {
73130 if (!warned) {
73131 if (config('throwDeprecation')) {
73132 throw new Error(msg);
73133 } else if (config('traceDeprecation')) {
73134 console.trace(msg);
73135 } else {
73136 console.warn(msg);
73137 }
73138 warned = true;
73139 }
73140 return fn.apply(this, arguments);
73141 }
73142
73143 return deprecated;
73144 }
73145
73146 /**
73147 * Checks `localStorage` for boolean values for the given `name`.
73148 *
73149 * @param {String} name
73150 * @returns {Boolean}
73151 * @api private
73152 */
73153
73154 function config (name) {
73155 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
73156 try {
73157 if (!global.localStorage) return false;
73158 } catch (_) {
73159 return false;
73160 }
73161 var val = global.localStorage[name];
73162 if (null == val) return false;
73163 return String(val).toLowerCase() === 'true';
73164 }
73165
73166 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73167 },{}],146:[function(require,module,exports){
73168 arguments[4][95][0].apply(exports,arguments)
73169 },{"dup":95}],147:[function(require,module,exports){
73170 module.exports = function isBuffer(arg) {
73171 return arg && typeof arg === 'object'
73172 && typeof arg.copy === 'function'
73173 && typeof arg.fill === 'function'
73174 && typeof arg.readUInt8 === 'function';
73175 }
73176 },{}],148:[function(require,module,exports){
73177 (function (process,global){
73178 // Copyright Joyent, Inc. and other Node contributors.
73179 //
73180 // Permission is hereby granted, free of charge, to any person obtaining a
73181 // copy of this software and associated documentation files (the
73182 // "Software"), to deal in the Software without restriction, including
73183 // without limitation the rights to use, copy, modify, merge, publish,
73184 // distribute, sublicense, and/or sell copies of the Software, and to permit
73185 // persons to whom the Software is furnished to do so, subject to the
73186 // following conditions:
73187 //
73188 // The above copyright notice and this permission notice shall be included
73189 // in all copies or substantial portions of the Software.
73190 //
73191 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73192 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73193 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73194 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73195 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73196 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73197 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73198
73199 var formatRegExp = /%[sdj%]/g;
73200 exports.format = function(f) {
73201 if (!isString(f)) {
73202 var objects = [];
73203 for (var i = 0; i < arguments.length; i++) {
73204 objects.push(inspect(arguments[i]));
73205 }
73206 return objects.join(' ');
73207 }
73208
73209 var i = 1;
73210 var args = arguments;
73211 var len = args.length;
73212 var str = String(f).replace(formatRegExp, function(x) {
73213 if (x === '%%') return '%';
73214 if (i >= len) return x;
73215 switch (x) {
73216 case '%s': return String(args[i++]);
73217 case '%d': return Number(args[i++]);
73218 case '%j':
73219 try {
73220 return JSON.stringify(args[i++]);
73221 } catch (_) {
73222 return '[Circular]';
73223 }
73224 default:
73225 return x;
73226 }
73227 });
73228 for (var x = args[i]; i < len; x = args[++i]) {
73229 if (isNull(x) || !isObject(x)) {
73230 str += ' ' + x;
73231 } else {
73232 str += ' ' + inspect(x);
73233 }
73234 }
73235 return str;
73236 };
73237
73238
73239 // Mark that a method should not be used.
73240 // Returns a modified function which warns once by default.
73241 // If --no-deprecation is set, then it is a no-op.
73242 exports.deprecate = function(fn, msg) {
73243 // Allow for deprecating things in the process of starting up.
73244 if (isUndefined(global.process)) {
73245 return function() {
73246 return exports.deprecate(fn, msg).apply(this, arguments);
73247 };
73248 }
73249
73250 if (process.noDeprecation === true) {
73251 return fn;
73252 }
73253
73254 var warned = false;
73255 function deprecated() {
73256 if (!warned) {
73257 if (process.throwDeprecation) {
73258 throw new Error(msg);
73259 } else if (process.traceDeprecation) {
73260 console.trace(msg);
73261 } else {
73262 console.error(msg);
73263 }
73264 warned = true;
73265 }
73266 return fn.apply(this, arguments);
73267 }
73268
73269 return deprecated;
73270 };
73271
73272
73273 var debugs = {};
73274 var debugEnviron;
73275 exports.debuglog = function(set) {
73276 if (isUndefined(debugEnviron))
73277 debugEnviron = process.env.NODE_DEBUG || '';
73278 set = set.toUpperCase();
73279 if (!debugs[set]) {
73280 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
73281 var pid = process.pid;
73282 debugs[set] = function() {
73283 var msg = exports.format.apply(exports, arguments);
73284 console.error('%s %d: %s', set, pid, msg);
73285 };
73286 } else {
73287 debugs[set] = function() {};
73288 }
73289 }
73290 return debugs[set];
73291 };
73292
73293
73294 /**
73295 * Echos the value of a value. Trys to print the value out
73296 * in the best way possible given the different types.
73297 *
73298 * @param {Object} obj The object to print out.
73299 * @param {Object} opts Optional options object that alters the output.
73300 */
73301 /* legacy: obj, showHidden, depth, colors*/
73302 function inspect(obj, opts) {
73303 // default options
73304 var ctx = {
73305 seen: [],
73306 stylize: stylizeNoColor
73307 };
73308 // legacy...
73309 if (arguments.length >= 3) ctx.depth = arguments[2];
73310 if (arguments.length >= 4) ctx.colors = arguments[3];
73311 if (isBoolean(opts)) {
73312 // legacy...
73313 ctx.showHidden = opts;
73314 } else if (opts) {
73315 // got an "options" object
73316 exports._extend(ctx, opts);
73317 }
73318 // set default options
73319 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
73320 if (isUndefined(ctx.depth)) ctx.depth = 2;
73321 if (isUndefined(ctx.colors)) ctx.colors = false;
73322 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
73323 if (ctx.colors) ctx.stylize = stylizeWithColor;
73324 return formatValue(ctx, obj, ctx.depth);
73325 }
73326 exports.inspect = inspect;
73327
73328
73329 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
73330 inspect.colors = {
73331 'bold' : [1, 22],
73332 'italic' : [3, 23],
73333 'underline' : [4, 24],
73334 'inverse' : [7, 27],
73335 'white' : [37, 39],
73336 'grey' : [90, 39],
73337 'black' : [30, 39],
73338 'blue' : [34, 39],
73339 'cyan' : [36, 39],
73340 'green' : [32, 39],
73341 'magenta' : [35, 39],
73342 'red' : [31, 39],
73343 'yellow' : [33, 39]
73344 };
73345
73346 // Don't use 'blue' not visible on cmd.exe
73347 inspect.styles = {
73348 'special': 'cyan',
73349 'number': 'yellow',
73350 'boolean': 'yellow',
73351 'undefined': 'grey',
73352 'null': 'bold',
73353 'string': 'green',
73354 'date': 'magenta',
73355 // "name": intentionally not styling
73356 'regexp': 'red'
73357 };
73358
73359
73360 function stylizeWithColor(str, styleType) {
73361 var style = inspect.styles[styleType];
73362
73363 if (style) {
73364 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
73365 '\u001b[' + inspect.colors[style][1] + 'm';
73366 } else {
73367 return str;
73368 }
73369 }
73370
73371
73372 function stylizeNoColor(str, styleType) {
73373 return str;
73374 }
73375
73376
73377 function arrayToHash(array) {
73378 var hash = {};
73379
73380 array.forEach(function(val, idx) {
73381 hash[val] = true;
73382 });
73383
73384 return hash;
73385 }
73386
73387
73388 function formatValue(ctx, value, recurseTimes) {
73389 // Provide a hook for user-specified inspect functions.
73390 // Check that value is an object with an inspect function on it
73391 if (ctx.customInspect &&
73392 value &&
73393 isFunction(value.inspect) &&
73394 // Filter out the util module, it's inspect function is special
73395 value.inspect !== exports.inspect &&
73396 // Also filter out any prototype objects using the circular check.
73397 !(value.constructor && value.constructor.prototype === value)) {
73398 var ret = value.inspect(recurseTimes, ctx);
73399 if (!isString(ret)) {
73400 ret = formatValue(ctx, ret, recurseTimes);
73401 }
73402 return ret;
73403 }
73404
73405 // Primitive types cannot have properties
73406 var primitive = formatPrimitive(ctx, value);
73407 if (primitive) {
73408 return primitive;
73409 }
73410
73411 // Look up the keys of the object.
73412 var keys = Object.keys(value);
73413 var visibleKeys = arrayToHash(keys);
73414
73415 if (ctx.showHidden) {
73416 keys = Object.getOwnPropertyNames(value);
73417 }
73418
73419 // IE doesn't make error fields non-enumerable
73420 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
73421 if (isError(value)
73422 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
73423 return formatError(value);
73424 }
73425
73426 // Some type of object without properties can be shortcutted.
73427 if (keys.length === 0) {
73428 if (isFunction(value)) {
73429 var name = value.name ? ': ' + value.name : '';
73430 return ctx.stylize('[Function' + name + ']', 'special');
73431 }
73432 if (isRegExp(value)) {
73433 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73434 }
73435 if (isDate(value)) {
73436 return ctx.stylize(Date.prototype.toString.call(value), 'date');
73437 }
73438 if (isError(value)) {
73439 return formatError(value);
73440 }
73441 }
73442
73443 var base = '', array = false, braces = ['{', '}'];
73444
73445 // Make Array say that they are Array
73446 if (isArray(value)) {
73447 array = true;
73448 braces = ['[', ']'];
73449 }
73450
73451 // Make functions say that they are functions
73452 if (isFunction(value)) {
73453 var n = value.name ? ': ' + value.name : '';
73454 base = ' [Function' + n + ']';
73455 }
73456
73457 // Make RegExps say that they are RegExps
73458 if (isRegExp(value)) {
73459 base = ' ' + RegExp.prototype.toString.call(value);
73460 }
73461
73462 // Make dates with properties first say the date
73463 if (isDate(value)) {
73464 base = ' ' + Date.prototype.toUTCString.call(value);
73465 }
73466
73467 // Make error with message first say the error
73468 if (isError(value)) {
73469 base = ' ' + formatError(value);
73470 }
73471
73472 if (keys.length === 0 && (!array || value.length == 0)) {
73473 return braces[0] + base + braces[1];
73474 }
73475
73476 if (recurseTimes < 0) {
73477 if (isRegExp(value)) {
73478 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73479 } else {
73480 return ctx.stylize('[Object]', 'special');
73481 }
73482 }
73483
73484 ctx.seen.push(value);
73485
73486 var output;
73487 if (array) {
73488 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
73489 } else {
73490 output = keys.map(function(key) {
73491 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
73492 });
73493 }
73494
73495 ctx.seen.pop();
73496
73497 return reduceToSingleString(output, base, braces);
73498 }
73499
73500
73501 function formatPrimitive(ctx, value) {
73502 if (isUndefined(value))
73503 return ctx.stylize('undefined', 'undefined');
73504 if (isString(value)) {
73505 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
73506 .replace(/'/g, "\\'")
73507 .replace(/\\"/g, '"') + '\'';
73508 return ctx.stylize(simple, 'string');
73509 }
73510 if (isNumber(value))
73511 return ctx.stylize('' + value, 'number');
73512 if (isBoolean(value))
73513 return ctx.stylize('' + value, 'boolean');
73514 // For some reason typeof null is "object", so special case here.
73515 if (isNull(value))
73516 return ctx.stylize('null', 'null');
73517 }
73518
73519
73520 function formatError(value) {
73521 return '[' + Error.prototype.toString.call(value) + ']';
73522 }
73523
73524
73525 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
73526 var output = [];
73527 for (var i = 0, l = value.length; i < l; ++i) {
73528 if (hasOwnProperty(value, String(i))) {
73529 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73530 String(i), true));
73531 } else {
73532 output.push('');
73533 }
73534 }
73535 keys.forEach(function(key) {
73536 if (!key.match(/^\d+$/)) {
73537 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73538 key, true));
73539 }
73540 });
73541 return output;
73542 }
73543
73544
73545 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
73546 var name, str, desc;
73547 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
73548 if (desc.get) {
73549 if (desc.set) {
73550 str = ctx.stylize('[Getter/Setter]', 'special');
73551 } else {
73552 str = ctx.stylize('[Getter]', 'special');
73553 }
73554 } else {
73555 if (desc.set) {
73556 str = ctx.stylize('[Setter]', 'special');
73557 }
73558 }
73559 if (!hasOwnProperty(visibleKeys, key)) {
73560 name = '[' + key + ']';
73561 }
73562 if (!str) {
73563 if (ctx.seen.indexOf(desc.value) < 0) {
73564 if (isNull(recurseTimes)) {
73565 str = formatValue(ctx, desc.value, null);
73566 } else {
73567 str = formatValue(ctx, desc.value, recurseTimes - 1);
73568 }
73569 if (str.indexOf('\n') > -1) {
73570 if (array) {
73571 str = str.split('\n').map(function(line) {
73572 return ' ' + line;
73573 }).join('\n').substr(2);
73574 } else {
73575 str = '\n' + str.split('\n').map(function(line) {
73576 return ' ' + line;
73577 }).join('\n');
73578 }
73579 }
73580 } else {
73581 str = ctx.stylize('[Circular]', 'special');
73582 }
73583 }
73584 if (isUndefined(name)) {
73585 if (array && key.match(/^\d+$/)) {
73586 return str;
73587 }
73588 name = JSON.stringify('' + key);
73589 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
73590 name = name.substr(1, name.length - 2);
73591 name = ctx.stylize(name, 'name');
73592 } else {
73593 name = name.replace(/'/g, "\\'")
73594 .replace(/\\"/g, '"')
73595 .replace(/(^"|"$)/g, "'");
73596 name = ctx.stylize(name, 'string');
73597 }
73598 }
73599
73600 return name + ': ' + str;
73601 }
73602
73603
73604 function reduceToSingleString(output, base, braces) {
73605 var numLinesEst = 0;
73606 var length = output.reduce(function(prev, cur) {
73607 numLinesEst++;
73608 if (cur.indexOf('\n') >= 0) numLinesEst++;
73609 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
73610 }, 0);
73611
73612 if (length > 60) {
73613 return braces[0] +
73614 (base === '' ? '' : base + '\n ') +
73615 ' ' +
73616 output.join(',\n ') +
73617 ' ' +
73618 braces[1];
73619 }
73620
73621 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
73622 }
73623
73624
73625 // NOTE: These type checking functions intentionally don't use `instanceof`
73626 // because it is fragile and can be easily faked with `Object.create()`.
73627 function isArray(ar) {
73628 return Array.isArray(ar);
73629 }
73630 exports.isArray = isArray;
73631
73632 function isBoolean(arg) {
73633 return typeof arg === 'boolean';
73634 }
73635 exports.isBoolean = isBoolean;
73636
73637 function isNull(arg) {
73638 return arg === null;
73639 }
73640 exports.isNull = isNull;
73641
73642 function isNullOrUndefined(arg) {
73643 return arg == null;
73644 }
73645 exports.isNullOrUndefined = isNullOrUndefined;
73646
73647 function isNumber(arg) {
73648 return typeof arg === 'number';
73649 }
73650 exports.isNumber = isNumber;
73651
73652 function isString(arg) {
73653 return typeof arg === 'string';
73654 }
73655 exports.isString = isString;
73656
73657 function isSymbol(arg) {
73658 return typeof arg === 'symbol';
73659 }
73660 exports.isSymbol = isSymbol;
73661
73662 function isUndefined(arg) {
73663 return arg === void 0;
73664 }
73665 exports.isUndefined = isUndefined;
73666
73667 function isRegExp(re) {
73668 return isObject(re) && objectToString(re) === '[object RegExp]';
73669 }
73670 exports.isRegExp = isRegExp;
73671
73672 function isObject(arg) {
73673 return typeof arg === 'object' && arg !== null;
73674 }
73675 exports.isObject = isObject;
73676
73677 function isDate(d) {
73678 return isObject(d) && objectToString(d) === '[object Date]';
73679 }
73680 exports.isDate = isDate;
73681
73682 function isError(e) {
73683 return isObject(e) &&
73684 (objectToString(e) === '[object Error]' || e instanceof Error);
73685 }
73686 exports.isError = isError;
73687
73688 function isFunction(arg) {
73689 return typeof arg === 'function';
73690 }
73691 exports.isFunction = isFunction;
73692
73693 function isPrimitive(arg) {
73694 return arg === null ||
73695 typeof arg === 'boolean' ||
73696 typeof arg === 'number' ||
73697 typeof arg === 'string' ||
73698 typeof arg === 'symbol' || // ES6 symbol
73699 typeof arg === 'undefined';
73700 }
73701 exports.isPrimitive = isPrimitive;
73702
73703 exports.isBuffer = require('./support/isBuffer');
73704
73705 function objectToString(o) {
73706 return Object.prototype.toString.call(o);
73707 }
73708
73709
73710 function pad(n) {
73711 return n < 10 ? '0' + n.toString(10) : n.toString(10);
73712 }
73713
73714
73715 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
73716 'Oct', 'Nov', 'Dec'];
73717
73718 // 26 Feb 16:19:34
73719 function timestamp() {
73720 var d = new Date();
73721 var time = [pad(d.getHours()),
73722 pad(d.getMinutes()),
73723 pad(d.getSeconds())].join(':');
73724 return [d.getDate(), months[d.getMonth()], time].join(' ');
73725 }
73726
73727
73728 // log is just a thin wrapper to console.log that prepends a timestamp
73729 exports.log = function() {
73730 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
73731 };
73732
73733
73734 /**
73735 * Inherit the prototype methods from one constructor into another.
73736 *
73737 * The Function.prototype.inherits from lang.js rewritten as a standalone
73738 * function (not on Function.prototype). NOTE: If this file is to be loaded
73739 * during bootstrapping this function needs to be rewritten using some native
73740 * functions as prototype setup using normal JavaScript does not work as
73741 * expected during bootstrapping (see mirror.js in r114903).
73742 *
73743 * @param {function} ctor Constructor function which needs to inherit the
73744 * prototype.
73745 * @param {function} superCtor Constructor function to inherit prototype from.
73746 */
73747 exports.inherits = require('inherits');
73748
73749 exports._extend = function(origin, add) {
73750 // Don't do anything if add isn't an object
73751 if (!add || !isObject(add)) return origin;
73752
73753 var keys = Object.keys(add);
73754 var i = keys.length;
73755 while (i--) {
73756 origin[keys[i]] = add[keys[i]];
73757 }
73758 return origin;
73759 };
73760
73761 function hasOwnProperty(obj, prop) {
73762 return Object.prototype.hasOwnProperty.call(obj, prop);
73763 }
73764
73765 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73766 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
73767 var indexOf = require('indexof');
73768
73769 var Object_keys = function (obj) {
73770 if (Object.keys) return Object.keys(obj)
73771 else {
73772 var res = [];
73773 for (var key in obj) res.push(key)
73774 return res;
73775 }
73776 };
73777
73778 var forEach = function (xs, fn) {
73779 if (xs.forEach) return xs.forEach(fn)
73780 else for (var i = 0; i < xs.length; i++) {
73781 fn(xs[i], i, xs);
73782 }
73783 };
73784
73785 var defineProp = (function() {
73786 try {
73787 Object.defineProperty({}, '_', {});
73788 return function(obj, name, value) {
73789 Object.defineProperty(obj, name, {
73790 writable: true,
73791 enumerable: false,
73792 configurable: true,
73793 value: value
73794 })
73795 };
73796 } catch(e) {
73797 return function(obj, name, value) {
73798 obj[name] = value;
73799 };
73800 }
73801 }());
73802
73803 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
73804 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
73805 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
73806 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
73807 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
73808
73809 function Context() {}
73810 Context.prototype = {};
73811
73812 var Script = exports.Script = function NodeScript (code) {
73813 if (!(this instanceof Script)) return new Script(code);
73814 this.code = code;
73815 };
73816
73817 Script.prototype.runInContext = function (context) {
73818 if (!(context instanceof Context)) {
73819 throw new TypeError("needs a 'context' argument.");
73820 }
73821
73822 var iframe = document.createElement('iframe');
73823 if (!iframe.style) iframe.style = {};
73824 iframe.style.display = 'none';
73825
73826 document.body.appendChild(iframe);
73827
73828 var win = iframe.contentWindow;
73829 var wEval = win.eval, wExecScript = win.execScript;
73830
73831 if (!wEval && wExecScript) {
73832 // win.eval() magically appears when this is called in IE:
73833 wExecScript.call(win, 'null');
73834 wEval = win.eval;
73835 }
73836
73837 forEach(Object_keys(context), function (key) {
73838 win[key] = context[key];
73839 });
73840 forEach(globals, function (key) {
73841 if (context[key]) {
73842 win[key] = context[key];
73843 }
73844 });
73845
73846 var winKeys = Object_keys(win);
73847
73848 var res = wEval.call(win, this.code);
73849
73850 forEach(Object_keys(win), function (key) {
73851 // Avoid copying circular objects like `top` and `window` by only
73852 // updating existing context properties or new properties in the `win`
73853 // that was only introduced after the eval.
73854 if (key in context || indexOf(winKeys, key) === -1) {
73855 context[key] = win[key];
73856 }
73857 });
73858
73859 forEach(globals, function (key) {
73860 if (!(key in context)) {
73861 defineProp(context, key, win[key]);
73862 }
73863 });
73864
73865 document.body.removeChild(iframe);
73866
73867 return res;
73868 };
73869
73870 Script.prototype.runInThisContext = function () {
73871 return eval(this.code); // maybe...
73872 };
73873
73874 Script.prototype.runInNewContext = function (context) {
73875 var ctx = Script.createContext(context);
73876 var res = this.runInContext(ctx);
73877
73878 forEach(Object_keys(ctx), function (key) {
73879 context[key] = ctx[key];
73880 });
73881
73882 return res;
73883 };
73884
73885 forEach(Object_keys(Script.prototype), function (name) {
73886 exports[name] = Script[name] = function (code) {
73887 var s = Script(code);
73888 return s[name].apply(s, [].slice.call(arguments, 1));
73889 };
73890 });
73891
73892 exports.createScript = function (code) {
73893 return exports.Script(code);
73894 };
73895
73896 exports.createContext = Script.createContext = function (context) {
73897 var copy = new Context();
73898 if(typeof context === 'object') {
73899 forEach(Object_keys(context), function (key) {
73900 copy[key] = context[key];
73901 });
73902 }
73903 return copy;
73904 };
73905
73906 },{"indexof":94}],150:[function(require,module,exports){
73907 var aes = require('browserify-aes')
73908 var assert = require('assert')
73909 var Buffer = require('safe-buffer').Buffer
73910 var bs58check = require('bs58check')
73911 var createHash = require('create-hash')
73912 var scrypt = require('scryptsy')
73913 var xor = require('buffer-xor/inplace')
73914
73915 var ecurve = require('ecurve')
73916 var curve = ecurve.getCurveByName('secp256k1')
73917
73918 var BigInteger = require('bigi')
73919
73920 // constants
73921 var SCRYPT_PARAMS = {
73922 N: 16384, // specified by BIP38
73923 r: 8,
73924 p: 8
73925 }
73926 var NULL = Buffer.alloc(0)
73927
73928 function hash160 (buffer) {
73929 return createHash('rmd160').update(
73930 createHash('sha256').update(buffer).digest()
73931 ).digest()
73932 }
73933
73934 function hash256 (buffer) {
73935 return createHash('sha256').update(
73936 createHash('sha256').update(buffer).digest()
73937 ).digest()
73938 }
73939
73940 function getAddress (d, compressed) {
73941 var Q = curve.G.multiply(d).getEncoded(compressed)
73942 var hash = hash160(Q)
73943 var payload = Buffer.allocUnsafe(21)
73944 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
73945 hash.copy(payload, 1)
73946
73947 return bs58check.encode(payload)
73948 }
73949
73950 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
73951 if (buffer.length !== 32) throw new Error('Invalid private key length')
73952 scryptParams = scryptParams || SCRYPT_PARAMS
73953
73954 var d = BigInteger.fromBuffer(buffer)
73955 var address = getAddress(d, compressed)
73956 var secret = Buffer.from(passphrase, 'utf8')
73957 var salt = hash256(address).slice(0, 4)
73958
73959 var N = scryptParams.N
73960 var r = scryptParams.r
73961 var p = scryptParams.p
73962
73963 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
73964 var derivedHalf1 = scryptBuf.slice(0, 32)
73965 var derivedHalf2 = scryptBuf.slice(32, 64)
73966
73967 var xorBuf = xor(derivedHalf1, buffer)
73968 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
73969 cipher.setAutoPadding(false)
73970 cipher.end(xorBuf)
73971
73972 var cipherText = cipher.read()
73973
73974 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
73975 var result = Buffer.allocUnsafe(7 + 32)
73976 result.writeUInt8(0x01, 0)
73977 result.writeUInt8(0x42, 1)
73978 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
73979 salt.copy(result, 3)
73980 cipherText.copy(result, 7)
73981
73982 return result
73983 }
73984
73985 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
73986 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
73987 }
73988
73989 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
73990 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
73991 // 39 bytes: 2 bytes prefix, 37 bytes payload
73992 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
73993 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
73994 scryptParams = scryptParams || SCRYPT_PARAMS
73995
73996 // check if BIP38 EC multiply
73997 var type = buffer.readUInt8(1)
73998 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
73999 if (type !== 0x42) throw new Error('Invalid BIP38 type')
74000
74001 passphrase = Buffer.from(passphrase, 'utf8')
74002
74003 var flagByte = buffer.readUInt8(2)
74004 var compressed = flagByte === 0xe0
74005 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
74006
74007 var N = scryptParams.N
74008 var r = scryptParams.r
74009 var p = scryptParams.p
74010
74011 var salt = buffer.slice(3, 7)
74012 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
74013 var derivedHalf1 = scryptBuf.slice(0, 32)
74014 var derivedHalf2 = scryptBuf.slice(32, 64)
74015
74016 var privKeyBuf = buffer.slice(7, 7 + 32)
74017 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
74018 decipher.setAutoPadding(false)
74019 decipher.end(privKeyBuf)
74020
74021 var plainText = decipher.read()
74022 var privateKey = xor(derivedHalf1, plainText)
74023
74024 // verify salt matches address
74025 var d = BigInteger.fromBuffer(privateKey)
74026 var address = getAddress(d, compressed)
74027 var checksum = hash256(address).slice(0, 4)
74028 assert.deepEqual(salt, checksum)
74029
74030 return {
74031 privateKey: privateKey,
74032 compressed: compressed
74033 }
74034 }
74035
74036 function decrypt (string, passphrase, progressCallback, scryptParams) {
74037 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
74038 }
74039
74040 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
74041 passphrase = Buffer.from(passphrase, 'utf8')
74042 buffer = buffer.slice(1) // FIXME: we can avoid this
74043 scryptParams = scryptParams || SCRYPT_PARAMS
74044
74045 var flag = buffer.readUInt8(1)
74046 var compressed = (flag & 0x20) !== 0
74047 var hasLotSeq = (flag & 0x04) !== 0
74048
74049 assert.equal((flag & 0x24), flag, 'Invalid private key.')
74050
74051 var addressHash = buffer.slice(2, 6)
74052 var ownerEntropy = buffer.slice(6, 14)
74053 var ownerSalt
74054
74055 // 4 bytes ownerSalt if 4 bytes lot/sequence
74056 if (hasLotSeq) {
74057 ownerSalt = ownerEntropy.slice(0, 4)
74058
74059 // else, 8 bytes ownerSalt
74060 } else {
74061 ownerSalt = ownerEntropy
74062 }
74063
74064 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
74065 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
74066
74067 var N = scryptParams.N
74068 var r = scryptParams.r
74069 var p = scryptParams.p
74070 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
74071
74072 var passFactor
74073 if (hasLotSeq) {
74074 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
74075 passFactor = hash256(hashTarget)
74076 } else {
74077 passFactor = preFactor
74078 }
74079
74080 var passInt = BigInteger.fromBuffer(passFactor)
74081 var passPoint = curve.G.multiply(passInt).getEncoded(true)
74082
74083 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
74084 var derivedHalf1 = seedBPass.slice(0, 32)
74085 var derivedHalf2 = seedBPass.slice(32, 64)
74086
74087 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74088 decipher.setAutoPadding(false)
74089 decipher.end(encryptedPart2)
74090
74091 var decryptedPart2 = decipher.read()
74092 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
74093 var seedBPart2 = tmp.slice(8, 16)
74094
74095 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74096 decipher2.setAutoPadding(false)
74097 decipher2.write(encryptedPart1) // first 8 bytes
74098 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
74099
74100 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
74101 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
74102 var factorB = BigInteger.fromBuffer(hash256(seedB))
74103
74104 // d = passFactor * factorB (mod n)
74105 var d = passInt.multiply(factorB).mod(curve.n)
74106
74107 return {
74108 privateKey: d.toBuffer(32),
74109 compressed: compressed
74110 }
74111 }
74112
74113 function verify (string) {
74114 var decoded = bs58check.decodeUnsafe(string)
74115 if (!decoded) return false
74116
74117 if (decoded.length !== 39) return false
74118 if (decoded.readUInt8(0) !== 0x01) return false
74119
74120 var type = decoded.readUInt8(1)
74121 var flag = decoded.readUInt8(2)
74122
74123 // encrypted WIF
74124 if (type === 0x42) {
74125 if (flag !== 0xc0 && flag !== 0xe0) return false
74126
74127 // EC mult
74128 } else if (type === 0x43) {
74129 if ((flag & ~0x24)) return false
74130 } else {
74131 return false
74132 }
74133
74134 return true
74135 }
74136
74137 module.exports = {
74138 decrypt: decrypt,
74139 decryptECMult: decryptECMult,
74140 decryptRaw: decryptRaw,
74141 encrypt: encrypt,
74142 encryptRaw: encryptRaw,
74143 verify: verify
74144 }
74145
74146 },{"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){
74147 // base-x encoding
74148 // Forked from https://github.com/cryptocoinjs/bs58
74149 // Originally written by Mike Hearn for BitcoinJ
74150 // Copyright (c) 2011 Google Inc
74151 // Ported to JavaScript by Stefan Thomas
74152 // Merged Buffer refactorings from base58-native by Stephen Pair
74153 // Copyright (c) 2013 BitPay Inc
74154
74155 var Buffer = require('safe-buffer').Buffer
74156
74157 module.exports = function base (ALPHABET) {
74158 var ALPHABET_MAP = {}
74159 var BASE = ALPHABET.length
74160 var LEADER = ALPHABET.charAt(0)
74161
74162 // pre-compute lookup table
74163 for (var z = 0; z < ALPHABET.length; z++) {
74164 var x = ALPHABET.charAt(z)
74165
74166 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
74167 ALPHABET_MAP[x] = z
74168 }
74169
74170 function encode (source) {
74171 if (source.length === 0) return ''
74172
74173 var digits = [0]
74174 for (var i = 0; i < source.length; ++i) {
74175 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
74176 carry += digits[j] << 8
74177 digits[j] = carry % BASE
74178 carry = (carry / BASE) | 0
74179 }
74180
74181 while (carry > 0) {
74182 digits.push(carry % BASE)
74183 carry = (carry / BASE) | 0
74184 }
74185 }
74186
74187 var string = ''
74188
74189 // deal with leading zeros
74190 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
74191 // convert digits to a string
74192 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
74193
74194 return string
74195 }
74196
74197 function decodeUnsafe (string) {
74198 if (typeof string !== 'string') throw new TypeError('Expected String')
74199 if (string.length === 0) return Buffer.allocUnsafe(0)
74200
74201 var bytes = [0]
74202 for (var i = 0; i < string.length; i++) {
74203 var value = ALPHABET_MAP[string[i]]
74204 if (value === undefined) return
74205
74206 for (var j = 0, carry = value; j < bytes.length; ++j) {
74207 carry += bytes[j] * BASE
74208 bytes[j] = carry & 0xff
74209 carry >>= 8
74210 }
74211
74212 while (carry > 0) {
74213 bytes.push(carry & 0xff)
74214 carry >>= 8
74215 }
74216 }
74217
74218 // deal with leading zeros
74219 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
74220 bytes.push(0)
74221 }
74222
74223 return Buffer.from(bytes.reverse())
74224 }
74225
74226 function decode (string) {
74227 var buffer = decodeUnsafe(string)
74228 if (buffer) return buffer
74229
74230 throw new Error('Non-base' + BASE + ' character')
74231 }
74232
74233 return {
74234 encode: encode,
74235 decodeUnsafe: decodeUnsafe,
74236 decode: decode
74237 }
74238 }
74239
74240 },{"safe-buffer":193}],152:[function(require,module,exports){
74241 // (public) Constructor
74242 function BigInteger(a, b, c) {
74243 if (!(this instanceof BigInteger))
74244 return new BigInteger(a, b, c)
74245
74246 if (a != null) {
74247 if ("number" == typeof a) this.fromNumber(a, b, c)
74248 else if (b == null && "string" != typeof a) this.fromString(a, 256)
74249 else this.fromString(a, b)
74250 }
74251 }
74252
74253 var proto = BigInteger.prototype
74254
74255 // duck-typed isBigInteger
74256 proto.__bigi = require('../package.json').version
74257 BigInteger.isBigInteger = function (obj, check_ver) {
74258 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
74259 }
74260
74261 // Bits per digit
74262 var dbits
74263
74264 // am: Compute w_j += (x*this_i), propagate carries,
74265 // c is initial carry, returns final carry.
74266 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
74267 // We need to select the fastest one that works in this environment.
74268
74269 // am1: use a single mult and divide to get the high bits,
74270 // max digit bits should be 26 because
74271 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
74272 function am1(i, x, w, j, c, n) {
74273 while (--n >= 0) {
74274 var v = x * this[i++] + w[j] + c
74275 c = Math.floor(v / 0x4000000)
74276 w[j++] = v & 0x3ffffff
74277 }
74278 return c
74279 }
74280 // am2 avoids a big mult-and-extract completely.
74281 // Max digit bits should be <= 30 because we do bitwise ops
74282 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
74283 function am2(i, x, w, j, c, n) {
74284 var xl = x & 0x7fff,
74285 xh = x >> 15
74286 while (--n >= 0) {
74287 var l = this[i] & 0x7fff
74288 var h = this[i++] >> 15
74289 var m = xh * l + h * xl
74290 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
74291 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
74292 w[j++] = l & 0x3fffffff
74293 }
74294 return c
74295 }
74296 // Alternately, set max digit bits to 28 since some
74297 // browsers slow down when dealing with 32-bit numbers.
74298 function am3(i, x, w, j, c, n) {
74299 var xl = x & 0x3fff,
74300 xh = x >> 14
74301 while (--n >= 0) {
74302 var l = this[i] & 0x3fff
74303 var h = this[i++] >> 14
74304 var m = xh * l + h * xl
74305 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
74306 c = (l >> 28) + (m >> 14) + xh * h
74307 w[j++] = l & 0xfffffff
74308 }
74309 return c
74310 }
74311
74312 // wtf?
74313 BigInteger.prototype.am = am1
74314 dbits = 26
74315
74316 BigInteger.prototype.DB = dbits
74317 BigInteger.prototype.DM = ((1 << dbits) - 1)
74318 var DV = BigInteger.prototype.DV = (1 << dbits)
74319
74320 var BI_FP = 52
74321 BigInteger.prototype.FV = Math.pow(2, BI_FP)
74322 BigInteger.prototype.F1 = BI_FP - dbits
74323 BigInteger.prototype.F2 = 2 * dbits - BI_FP
74324
74325 // Digit conversions
74326 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
74327 var BI_RC = new Array()
74328 var rr, vv
74329 rr = "0".charCodeAt(0)
74330 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
74331 rr = "a".charCodeAt(0)
74332 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74333 rr = "A".charCodeAt(0)
74334 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74335
74336 function int2char(n) {
74337 return BI_RM.charAt(n)
74338 }
74339
74340 function intAt(s, i) {
74341 var c = BI_RC[s.charCodeAt(i)]
74342 return (c == null) ? -1 : c
74343 }
74344
74345 // (protected) copy this to r
74346 function bnpCopyTo(r) {
74347 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
74348 r.t = this.t
74349 r.s = this.s
74350 }
74351
74352 // (protected) set from integer value x, -DV <= x < DV
74353 function bnpFromInt(x) {
74354 this.t = 1
74355 this.s = (x < 0) ? -1 : 0
74356 if (x > 0) this[0] = x
74357 else if (x < -1) this[0] = x + DV
74358 else this.t = 0
74359 }
74360
74361 // return bigint initialized to value
74362 function nbv(i) {
74363 var r = new BigInteger()
74364 r.fromInt(i)
74365 return r
74366 }
74367
74368 // (protected) set from string and radix
74369 function bnpFromString(s, b) {
74370 var self = this
74371
74372 var k
74373 if (b == 16) k = 4
74374 else if (b == 8) k = 3
74375 else if (b == 256) k = 8; // byte array
74376 else if (b == 2) k = 1
74377 else if (b == 32) k = 5
74378 else if (b == 4) k = 2
74379 else {
74380 self.fromRadix(s, b)
74381 return
74382 }
74383 self.t = 0
74384 self.s = 0
74385 var i = s.length,
74386 mi = false,
74387 sh = 0
74388 while (--i >= 0) {
74389 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
74390 if (x < 0) {
74391 if (s.charAt(i) == "-") mi = true
74392 continue
74393 }
74394 mi = false
74395 if (sh == 0)
74396 self[self.t++] = x
74397 else if (sh + k > self.DB) {
74398 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
74399 self[self.t++] = (x >> (self.DB - sh))
74400 } else
74401 self[self.t - 1] |= x << sh
74402 sh += k
74403 if (sh >= self.DB) sh -= self.DB
74404 }
74405 if (k == 8 && (s[0] & 0x80) != 0) {
74406 self.s = -1
74407 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
74408 }
74409 self.clamp()
74410 if (mi) BigInteger.ZERO.subTo(self, self)
74411 }
74412
74413 // (protected) clamp off excess high words
74414 function bnpClamp() {
74415 var c = this.s & this.DM
74416 while (this.t > 0 && this[this.t - 1] == c)--this.t
74417 }
74418
74419 // (public) return string representation in given radix
74420 function bnToString(b) {
74421 var self = this
74422 if (self.s < 0) return "-" + self.negate()
74423 .toString(b)
74424 var k
74425 if (b == 16) k = 4
74426 else if (b == 8) k = 3
74427 else if (b == 2) k = 1
74428 else if (b == 32) k = 5
74429 else if (b == 4) k = 2
74430 else return self.toRadix(b)
74431 var km = (1 << k) - 1,
74432 d, m = false,
74433 r = "",
74434 i = self.t
74435 var p = self.DB - (i * self.DB) % k
74436 if (i-- > 0) {
74437 if (p < self.DB && (d = self[i] >> p) > 0) {
74438 m = true
74439 r = int2char(d)
74440 }
74441 while (i >= 0) {
74442 if (p < k) {
74443 d = (self[i] & ((1 << p) - 1)) << (k - p)
74444 d |= self[--i] >> (p += self.DB - k)
74445 } else {
74446 d = (self[i] >> (p -= k)) & km
74447 if (p <= 0) {
74448 p += self.DB
74449 --i
74450 }
74451 }
74452 if (d > 0) m = true
74453 if (m) r += int2char(d)
74454 }
74455 }
74456 return m ? r : "0"
74457 }
74458
74459 // (public) -this
74460 function bnNegate() {
74461 var r = new BigInteger()
74462 BigInteger.ZERO.subTo(this, r)
74463 return r
74464 }
74465
74466 // (public) |this|
74467 function bnAbs() {
74468 return (this.s < 0) ? this.negate() : this
74469 }
74470
74471 // (public) return + if this > a, - if this < a, 0 if equal
74472 function bnCompareTo(a) {
74473 var r = this.s - a.s
74474 if (r != 0) return r
74475 var i = this.t
74476 r = i - a.t
74477 if (r != 0) return (this.s < 0) ? -r : r
74478 while (--i >= 0)
74479 if ((r = this[i] - a[i]) != 0) return r
74480 return 0
74481 }
74482
74483 // returns bit length of the integer x
74484 function nbits(x) {
74485 var r = 1,
74486 t
74487 if ((t = x >>> 16) != 0) {
74488 x = t
74489 r += 16
74490 }
74491 if ((t = x >> 8) != 0) {
74492 x = t
74493 r += 8
74494 }
74495 if ((t = x >> 4) != 0) {
74496 x = t
74497 r += 4
74498 }
74499 if ((t = x >> 2) != 0) {
74500 x = t
74501 r += 2
74502 }
74503 if ((t = x >> 1) != 0) {
74504 x = t
74505 r += 1
74506 }
74507 return r
74508 }
74509
74510 // (public) return the number of bits in "this"
74511 function bnBitLength() {
74512 if (this.t <= 0) return 0
74513 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
74514 }
74515
74516 // (public) return the number of bytes in "this"
74517 function bnByteLength() {
74518 return this.bitLength() >> 3
74519 }
74520
74521 // (protected) r = this << n*DB
74522 function bnpDLShiftTo(n, r) {
74523 var i
74524 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
74525 for (i = n - 1; i >= 0; --i) r[i] = 0
74526 r.t = this.t + n
74527 r.s = this.s
74528 }
74529
74530 // (protected) r = this >> n*DB
74531 function bnpDRShiftTo(n, r) {
74532 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
74533 r.t = Math.max(this.t - n, 0)
74534 r.s = this.s
74535 }
74536
74537 // (protected) r = this << n
74538 function bnpLShiftTo(n, r) {
74539 var self = this
74540 var bs = n % self.DB
74541 var cbs = self.DB - bs
74542 var bm = (1 << cbs) - 1
74543 var ds = Math.floor(n / self.DB),
74544 c = (self.s << bs) & self.DM,
74545 i
74546 for (i = self.t - 1; i >= 0; --i) {
74547 r[i + ds + 1] = (self[i] >> cbs) | c
74548 c = (self[i] & bm) << bs
74549 }
74550 for (i = ds - 1; i >= 0; --i) r[i] = 0
74551 r[ds] = c
74552 r.t = self.t + ds + 1
74553 r.s = self.s
74554 r.clamp()
74555 }
74556
74557 // (protected) r = this >> n
74558 function bnpRShiftTo(n, r) {
74559 var self = this
74560 r.s = self.s
74561 var ds = Math.floor(n / self.DB)
74562 if (ds >= self.t) {
74563 r.t = 0
74564 return
74565 }
74566 var bs = n % self.DB
74567 var cbs = self.DB - bs
74568 var bm = (1 << bs) - 1
74569 r[0] = self[ds] >> bs
74570 for (var i = ds + 1; i < self.t; ++i) {
74571 r[i - ds - 1] |= (self[i] & bm) << cbs
74572 r[i - ds] = self[i] >> bs
74573 }
74574 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
74575 r.t = self.t - ds
74576 r.clamp()
74577 }
74578
74579 // (protected) r = this - a
74580 function bnpSubTo(a, r) {
74581 var self = this
74582 var i = 0,
74583 c = 0,
74584 m = Math.min(a.t, self.t)
74585 while (i < m) {
74586 c += self[i] - a[i]
74587 r[i++] = c & self.DM
74588 c >>= self.DB
74589 }
74590 if (a.t < self.t) {
74591 c -= a.s
74592 while (i < self.t) {
74593 c += self[i]
74594 r[i++] = c & self.DM
74595 c >>= self.DB
74596 }
74597 c += self.s
74598 } else {
74599 c += self.s
74600 while (i < a.t) {
74601 c -= a[i]
74602 r[i++] = c & self.DM
74603 c >>= self.DB
74604 }
74605 c -= a.s
74606 }
74607 r.s = (c < 0) ? -1 : 0
74608 if (c < -1) r[i++] = self.DV + c
74609 else if (c > 0) r[i++] = c
74610 r.t = i
74611 r.clamp()
74612 }
74613
74614 // (protected) r = this * a, r != this,a (HAC 14.12)
74615 // "this" should be the larger one if appropriate.
74616 function bnpMultiplyTo(a, r) {
74617 var x = this.abs(),
74618 y = a.abs()
74619 var i = x.t
74620 r.t = i + y.t
74621 while (--i >= 0) r[i] = 0
74622 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
74623 r.s = 0
74624 r.clamp()
74625 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
74626 }
74627
74628 // (protected) r = this^2, r != this (HAC 14.16)
74629 function bnpSquareTo(r) {
74630 var x = this.abs()
74631 var i = r.t = 2 * x.t
74632 while (--i >= 0) r[i] = 0
74633 for (i = 0; i < x.t - 1; ++i) {
74634 var c = x.am(i, x[i], r, 2 * i, 0, 1)
74635 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
74636 r[i + x.t] -= x.DV
74637 r[i + x.t + 1] = 1
74638 }
74639 }
74640 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
74641 r.s = 0
74642 r.clamp()
74643 }
74644
74645 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
74646 // r != q, this != m. q or r may be null.
74647 function bnpDivRemTo(m, q, r) {
74648 var self = this
74649 var pm = m.abs()
74650 if (pm.t <= 0) return
74651 var pt = self.abs()
74652 if (pt.t < pm.t) {
74653 if (q != null) q.fromInt(0)
74654 if (r != null) self.copyTo(r)
74655 return
74656 }
74657 if (r == null) r = new BigInteger()
74658 var y = new BigInteger(),
74659 ts = self.s,
74660 ms = m.s
74661 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
74662 if (nsh > 0) {
74663 pm.lShiftTo(nsh, y)
74664 pt.lShiftTo(nsh, r)
74665 } else {
74666 pm.copyTo(y)
74667 pt.copyTo(r)
74668 }
74669 var ys = y.t
74670 var y0 = y[ys - 1]
74671 if (y0 == 0) return
74672 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
74673 var d1 = self.FV / yt,
74674 d2 = (1 << self.F1) / yt,
74675 e = 1 << self.F2
74676 var i = r.t,
74677 j = i - ys,
74678 t = (q == null) ? new BigInteger() : q
74679 y.dlShiftTo(j, t)
74680 if (r.compareTo(t) >= 0) {
74681 r[r.t++] = 1
74682 r.subTo(t, r)
74683 }
74684 BigInteger.ONE.dlShiftTo(ys, t)
74685 t.subTo(y, y); // "negative" y so we can replace sub with am later
74686 while (y.t < ys) y[y.t++] = 0
74687 while (--j >= 0) {
74688 // Estimate quotient digit
74689 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
74690 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
74691 y.dlShiftTo(j, t)
74692 r.subTo(t, r)
74693 while (r[i] < --qd) r.subTo(t, r)
74694 }
74695 }
74696 if (q != null) {
74697 r.drShiftTo(ys, q)
74698 if (ts != ms) BigInteger.ZERO.subTo(q, q)
74699 }
74700 r.t = ys
74701 r.clamp()
74702 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
74703 if (ts < 0) BigInteger.ZERO.subTo(r, r)
74704 }
74705
74706 // (public) this mod a
74707 function bnMod(a) {
74708 var r = new BigInteger()
74709 this.abs()
74710 .divRemTo(a, null, r)
74711 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
74712 return r
74713 }
74714
74715 // Modular reduction using "classic" algorithm
74716 function Classic(m) {
74717 this.m = m
74718 }
74719
74720 function cConvert(x) {
74721 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
74722 else return x
74723 }
74724
74725 function cRevert(x) {
74726 return x
74727 }
74728
74729 function cReduce(x) {
74730 x.divRemTo(this.m, null, x)
74731 }
74732
74733 function cMulTo(x, y, r) {
74734 x.multiplyTo(y, r)
74735 this.reduce(r)
74736 }
74737
74738 function cSqrTo(x, r) {
74739 x.squareTo(r)
74740 this.reduce(r)
74741 }
74742
74743 Classic.prototype.convert = cConvert
74744 Classic.prototype.revert = cRevert
74745 Classic.prototype.reduce = cReduce
74746 Classic.prototype.mulTo = cMulTo
74747 Classic.prototype.sqrTo = cSqrTo
74748
74749 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
74750 // justification:
74751 // xy == 1 (mod m)
74752 // xy = 1+km
74753 // xy(2-xy) = (1+km)(1-km)
74754 // x[y(2-xy)] = 1-k^2m^2
74755 // x[y(2-xy)] == 1 (mod m^2)
74756 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
74757 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
74758 // JS multiply "overflows" differently from C/C++, so care is needed here.
74759 function bnpInvDigit() {
74760 if (this.t < 1) return 0
74761 var x = this[0]
74762 if ((x & 1) == 0) return 0
74763 var y = x & 3; // y == 1/x mod 2^2
74764 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
74765 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
74766 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
74767 // last step - calculate inverse mod DV directly
74768 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
74769 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
74770 // we really want the negative inverse, and -DV < y < DV
74771 return (y > 0) ? this.DV - y : -y
74772 }
74773
74774 // Montgomery reduction
74775 function Montgomery(m) {
74776 this.m = m
74777 this.mp = m.invDigit()
74778 this.mpl = this.mp & 0x7fff
74779 this.mph = this.mp >> 15
74780 this.um = (1 << (m.DB - 15)) - 1
74781 this.mt2 = 2 * m.t
74782 }
74783
74784 // xR mod m
74785 function montConvert(x) {
74786 var r = new BigInteger()
74787 x.abs()
74788 .dlShiftTo(this.m.t, r)
74789 r.divRemTo(this.m, null, r)
74790 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
74791 return r
74792 }
74793
74794 // x/R mod m
74795 function montRevert(x) {
74796 var r = new BigInteger()
74797 x.copyTo(r)
74798 this.reduce(r)
74799 return r
74800 }
74801
74802 // x = x/R mod m (HAC 14.32)
74803 function montReduce(x) {
74804 while (x.t <= this.mt2) // pad x so am has enough room later
74805 x[x.t++] = 0
74806 for (var i = 0; i < this.m.t; ++i) {
74807 // faster way of calculating u0 = x[i]*mp mod DV
74808 var j = x[i] & 0x7fff
74809 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
74810 // use am to combine the multiply-shift-add into one call
74811 j = i + this.m.t
74812 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
74813 // propagate carry
74814 while (x[j] >= x.DV) {
74815 x[j] -= x.DV
74816 x[++j]++
74817 }
74818 }
74819 x.clamp()
74820 x.drShiftTo(this.m.t, x)
74821 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
74822 }
74823
74824 // r = "x^2/R mod m"; x != r
74825 function montSqrTo(x, r) {
74826 x.squareTo(r)
74827 this.reduce(r)
74828 }
74829
74830 // r = "xy/R mod m"; x,y != r
74831 function montMulTo(x, y, r) {
74832 x.multiplyTo(y, r)
74833 this.reduce(r)
74834 }
74835
74836 Montgomery.prototype.convert = montConvert
74837 Montgomery.prototype.revert = montRevert
74838 Montgomery.prototype.reduce = montReduce
74839 Montgomery.prototype.mulTo = montMulTo
74840 Montgomery.prototype.sqrTo = montSqrTo
74841
74842 // (protected) true iff this is even
74843 function bnpIsEven() {
74844 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
74845 }
74846
74847 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
74848 function bnpExp(e, z) {
74849 if (e > 0xffffffff || e < 1) return BigInteger.ONE
74850 var r = new BigInteger(),
74851 r2 = new BigInteger(),
74852 g = z.convert(this),
74853 i = nbits(e) - 1
74854 g.copyTo(r)
74855 while (--i >= 0) {
74856 z.sqrTo(r, r2)
74857 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
74858 else {
74859 var t = r
74860 r = r2
74861 r2 = t
74862 }
74863 }
74864 return z.revert(r)
74865 }
74866
74867 // (public) this^e % m, 0 <= e < 2^32
74868 function bnModPowInt(e, m) {
74869 var z
74870 if (e < 256 || m.isEven()) z = new Classic(m)
74871 else z = new Montgomery(m)
74872 return this.exp(e, z)
74873 }
74874
74875 // protected
74876 proto.copyTo = bnpCopyTo
74877 proto.fromInt = bnpFromInt
74878 proto.fromString = bnpFromString
74879 proto.clamp = bnpClamp
74880 proto.dlShiftTo = bnpDLShiftTo
74881 proto.drShiftTo = bnpDRShiftTo
74882 proto.lShiftTo = bnpLShiftTo
74883 proto.rShiftTo = bnpRShiftTo
74884 proto.subTo = bnpSubTo
74885 proto.multiplyTo = bnpMultiplyTo
74886 proto.squareTo = bnpSquareTo
74887 proto.divRemTo = bnpDivRemTo
74888 proto.invDigit = bnpInvDigit
74889 proto.isEven = bnpIsEven
74890 proto.exp = bnpExp
74891
74892 // public
74893 proto.toString = bnToString
74894 proto.negate = bnNegate
74895 proto.abs = bnAbs
74896 proto.compareTo = bnCompareTo
74897 proto.bitLength = bnBitLength
74898 proto.byteLength = bnByteLength
74899 proto.mod = bnMod
74900 proto.modPowInt = bnModPowInt
74901
74902 // (public)
74903 function bnClone() {
74904 var r = new BigInteger()
74905 this.copyTo(r)
74906 return r
74907 }
74908
74909 // (public) return value as integer
74910 function bnIntValue() {
74911 if (this.s < 0) {
74912 if (this.t == 1) return this[0] - this.DV
74913 else if (this.t == 0) return -1
74914 } else if (this.t == 1) return this[0]
74915 else if (this.t == 0) return 0
74916 // assumes 16 < DB < 32
74917 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
74918 }
74919
74920 // (public) return value as byte
74921 function bnByteValue() {
74922 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
74923 }
74924
74925 // (public) return value as short (assumes DB>=16)
74926 function bnShortValue() {
74927 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
74928 }
74929
74930 // (protected) return x s.t. r^x < DV
74931 function bnpChunkSize(r) {
74932 return Math.floor(Math.LN2 * this.DB / Math.log(r))
74933 }
74934
74935 // (public) 0 if this == 0, 1 if this > 0
74936 function bnSigNum() {
74937 if (this.s < 0) return -1
74938 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
74939 else return 1
74940 }
74941
74942 // (protected) convert to radix string
74943 function bnpToRadix(b) {
74944 if (b == null) b = 10
74945 if (this.signum() == 0 || b < 2 || b > 36) return "0"
74946 var cs = this.chunkSize(b)
74947 var a = Math.pow(b, cs)
74948 var d = nbv(a),
74949 y = new BigInteger(),
74950 z = new BigInteger(),
74951 r = ""
74952 this.divRemTo(d, y, z)
74953 while (y.signum() > 0) {
74954 r = (a + z.intValue())
74955 .toString(b)
74956 .substr(1) + r
74957 y.divRemTo(d, y, z)
74958 }
74959 return z.intValue()
74960 .toString(b) + r
74961 }
74962
74963 // (protected) convert from radix string
74964 function bnpFromRadix(s, b) {
74965 var self = this
74966 self.fromInt(0)
74967 if (b == null) b = 10
74968 var cs = self.chunkSize(b)
74969 var d = Math.pow(b, cs),
74970 mi = false,
74971 j = 0,
74972 w = 0
74973 for (var i = 0; i < s.length; ++i) {
74974 var x = intAt(s, i)
74975 if (x < 0) {
74976 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
74977 continue
74978 }
74979 w = b * w + x
74980 if (++j >= cs) {
74981 self.dMultiply(d)
74982 self.dAddOffset(w, 0)
74983 j = 0
74984 w = 0
74985 }
74986 }
74987 if (j > 0) {
74988 self.dMultiply(Math.pow(b, j))
74989 self.dAddOffset(w, 0)
74990 }
74991 if (mi) BigInteger.ZERO.subTo(self, self)
74992 }
74993
74994 // (protected) alternate constructor
74995 function bnpFromNumber(a, b, c) {
74996 var self = this
74997 if ("number" == typeof b) {
74998 // new BigInteger(int,int,RNG)
74999 if (a < 2) self.fromInt(1)
75000 else {
75001 self.fromNumber(a, c)
75002 if (!self.testBit(a - 1)) // force MSB set
75003 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
75004 if (self.isEven()) self.dAddOffset(1, 0); // force odd
75005 while (!self.isProbablePrime(b)) {
75006 self.dAddOffset(2, 0)
75007 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
75008 }
75009 }
75010 } else {
75011 // new BigInteger(int,RNG)
75012 var x = new Array(),
75013 t = a & 7
75014 x.length = (a >> 3) + 1
75015 b.nextBytes(x)
75016 if (t > 0) x[0] &= ((1 << t) - 1)
75017 else x[0] = 0
75018 self.fromString(x, 256)
75019 }
75020 }
75021
75022 // (public) convert to bigendian byte array
75023 function bnToByteArray() {
75024 var self = this
75025 var i = self.t,
75026 r = new Array()
75027 r[0] = self.s
75028 var p = self.DB - (i * self.DB) % 8,
75029 d, k = 0
75030 if (i-- > 0) {
75031 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
75032 r[k++] = d | (self.s << (self.DB - p))
75033 while (i >= 0) {
75034 if (p < 8) {
75035 d = (self[i] & ((1 << p) - 1)) << (8 - p)
75036 d |= self[--i] >> (p += self.DB - 8)
75037 } else {
75038 d = (self[i] >> (p -= 8)) & 0xff
75039 if (p <= 0) {
75040 p += self.DB
75041 --i
75042 }
75043 }
75044 if ((d & 0x80) != 0) d |= -256
75045 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
75046 if (k > 0 || d != self.s) r[k++] = d
75047 }
75048 }
75049 return r
75050 }
75051
75052 function bnEquals(a) {
75053 return (this.compareTo(a) == 0)
75054 }
75055
75056 function bnMin(a) {
75057 return (this.compareTo(a) < 0) ? this : a
75058 }
75059
75060 function bnMax(a) {
75061 return (this.compareTo(a) > 0) ? this : a
75062 }
75063
75064 // (protected) r = this op a (bitwise)
75065 function bnpBitwiseTo(a, op, r) {
75066 var self = this
75067 var i, f, m = Math.min(a.t, self.t)
75068 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
75069 if (a.t < self.t) {
75070 f = a.s & self.DM
75071 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
75072 r.t = self.t
75073 } else {
75074 f = self.s & self.DM
75075 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
75076 r.t = a.t
75077 }
75078 r.s = op(self.s, a.s)
75079 r.clamp()
75080 }
75081
75082 // (public) this & a
75083 function op_and(x, y) {
75084 return x & y
75085 }
75086
75087 function bnAnd(a) {
75088 var r = new BigInteger()
75089 this.bitwiseTo(a, op_and, r)
75090 return r
75091 }
75092
75093 // (public) this | a
75094 function op_or(x, y) {
75095 return x | y
75096 }
75097
75098 function bnOr(a) {
75099 var r = new BigInteger()
75100 this.bitwiseTo(a, op_or, r)
75101 return r
75102 }
75103
75104 // (public) this ^ a
75105 function op_xor(x, y) {
75106 return x ^ y
75107 }
75108
75109 function bnXor(a) {
75110 var r = new BigInteger()
75111 this.bitwiseTo(a, op_xor, r)
75112 return r
75113 }
75114
75115 // (public) this & ~a
75116 function op_andnot(x, y) {
75117 return x & ~y
75118 }
75119
75120 function bnAndNot(a) {
75121 var r = new BigInteger()
75122 this.bitwiseTo(a, op_andnot, r)
75123 return r
75124 }
75125
75126 // (public) ~this
75127 function bnNot() {
75128 var r = new BigInteger()
75129 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
75130 r.t = this.t
75131 r.s = ~this.s
75132 return r
75133 }
75134
75135 // (public) this << n
75136 function bnShiftLeft(n) {
75137 var r = new BigInteger()
75138 if (n < 0) this.rShiftTo(-n, r)
75139 else this.lShiftTo(n, r)
75140 return r
75141 }
75142
75143 // (public) this >> n
75144 function bnShiftRight(n) {
75145 var r = new BigInteger()
75146 if (n < 0) this.lShiftTo(-n, r)
75147 else this.rShiftTo(n, r)
75148 return r
75149 }
75150
75151 // return index of lowest 1-bit in x, x < 2^31
75152 function lbit(x) {
75153 if (x == 0) return -1
75154 var r = 0
75155 if ((x & 0xffff) == 0) {
75156 x >>= 16
75157 r += 16
75158 }
75159 if ((x & 0xff) == 0) {
75160 x >>= 8
75161 r += 8
75162 }
75163 if ((x & 0xf) == 0) {
75164 x >>= 4
75165 r += 4
75166 }
75167 if ((x & 3) == 0) {
75168 x >>= 2
75169 r += 2
75170 }
75171 if ((x & 1) == 0)++r
75172 return r
75173 }
75174
75175 // (public) returns index of lowest 1-bit (or -1 if none)
75176 function bnGetLowestSetBit() {
75177 for (var i = 0; i < this.t; ++i)
75178 if (this[i] != 0) return i * this.DB + lbit(this[i])
75179 if (this.s < 0) return this.t * this.DB
75180 return -1
75181 }
75182
75183 // return number of 1 bits in x
75184 function cbit(x) {
75185 var r = 0
75186 while (x != 0) {
75187 x &= x - 1
75188 ++r
75189 }
75190 return r
75191 }
75192
75193 // (public) return number of set bits
75194 function bnBitCount() {
75195 var r = 0,
75196 x = this.s & this.DM
75197 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
75198 return r
75199 }
75200
75201 // (public) true iff nth bit is set
75202 function bnTestBit(n) {
75203 var j = Math.floor(n / this.DB)
75204 if (j >= this.t) return (this.s != 0)
75205 return ((this[j] & (1 << (n % this.DB))) != 0)
75206 }
75207
75208 // (protected) this op (1<<n)
75209 function bnpChangeBit(n, op) {
75210 var r = BigInteger.ONE.shiftLeft(n)
75211 this.bitwiseTo(r, op, r)
75212 return r
75213 }
75214
75215 // (public) this | (1<<n)
75216 function bnSetBit(n) {
75217 return this.changeBit(n, op_or)
75218 }
75219
75220 // (public) this & ~(1<<n)
75221 function bnClearBit(n) {
75222 return this.changeBit(n, op_andnot)
75223 }
75224
75225 // (public) this ^ (1<<n)
75226 function bnFlipBit(n) {
75227 return this.changeBit(n, op_xor)
75228 }
75229
75230 // (protected) r = this + a
75231 function bnpAddTo(a, r) {
75232 var self = this
75233
75234 var i = 0,
75235 c = 0,
75236 m = Math.min(a.t, self.t)
75237 while (i < m) {
75238 c += self[i] + a[i]
75239 r[i++] = c & self.DM
75240 c >>= self.DB
75241 }
75242 if (a.t < self.t) {
75243 c += a.s
75244 while (i < self.t) {
75245 c += self[i]
75246 r[i++] = c & self.DM
75247 c >>= self.DB
75248 }
75249 c += self.s
75250 } else {
75251 c += self.s
75252 while (i < a.t) {
75253 c += a[i]
75254 r[i++] = c & self.DM
75255 c >>= self.DB
75256 }
75257 c += a.s
75258 }
75259 r.s = (c < 0) ? -1 : 0
75260 if (c > 0) r[i++] = c
75261 else if (c < -1) r[i++] = self.DV + c
75262 r.t = i
75263 r.clamp()
75264 }
75265
75266 // (public) this + a
75267 function bnAdd(a) {
75268 var r = new BigInteger()
75269 this.addTo(a, r)
75270 return r
75271 }
75272
75273 // (public) this - a
75274 function bnSubtract(a) {
75275 var r = new BigInteger()
75276 this.subTo(a, r)
75277 return r
75278 }
75279
75280 // (public) this * a
75281 function bnMultiply(a) {
75282 var r = new BigInteger()
75283 this.multiplyTo(a, r)
75284 return r
75285 }
75286
75287 // (public) this^2
75288 function bnSquare() {
75289 var r = new BigInteger()
75290 this.squareTo(r)
75291 return r
75292 }
75293
75294 // (public) this / a
75295 function bnDivide(a) {
75296 var r = new BigInteger()
75297 this.divRemTo(a, r, null)
75298 return r
75299 }
75300
75301 // (public) this % a
75302 function bnRemainder(a) {
75303 var r = new BigInteger()
75304 this.divRemTo(a, null, r)
75305 return r
75306 }
75307
75308 // (public) [this/a,this%a]
75309 function bnDivideAndRemainder(a) {
75310 var q = new BigInteger(),
75311 r = new BigInteger()
75312 this.divRemTo(a, q, r)
75313 return new Array(q, r)
75314 }
75315
75316 // (protected) this *= n, this >= 0, 1 < n < DV
75317 function bnpDMultiply(n) {
75318 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
75319 ++this.t
75320 this.clamp()
75321 }
75322
75323 // (protected) this += n << w words, this >= 0
75324 function bnpDAddOffset(n, w) {
75325 if (n == 0) return
75326 while (this.t <= w) this[this.t++] = 0
75327 this[w] += n
75328 while (this[w] >= this.DV) {
75329 this[w] -= this.DV
75330 if (++w >= this.t) this[this.t++] = 0
75331 ++this[w]
75332 }
75333 }
75334
75335 // A "null" reducer
75336 function NullExp() {}
75337
75338 function nNop(x) {
75339 return x
75340 }
75341
75342 function nMulTo(x, y, r) {
75343 x.multiplyTo(y, r)
75344 }
75345
75346 function nSqrTo(x, r) {
75347 x.squareTo(r)
75348 }
75349
75350 NullExp.prototype.convert = nNop
75351 NullExp.prototype.revert = nNop
75352 NullExp.prototype.mulTo = nMulTo
75353 NullExp.prototype.sqrTo = nSqrTo
75354
75355 // (public) this^e
75356 function bnPow(e) {
75357 return this.exp(e, new NullExp())
75358 }
75359
75360 // (protected) r = lower n words of "this * a", a.t <= n
75361 // "this" should be the larger one if appropriate.
75362 function bnpMultiplyLowerTo(a, n, r) {
75363 var i = Math.min(this.t + a.t, n)
75364 r.s = 0; // assumes a,this >= 0
75365 r.t = i
75366 while (i > 0) r[--i] = 0
75367 var j
75368 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
75369 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
75370 r.clamp()
75371 }
75372
75373 // (protected) r = "this * a" without lower n words, n > 0
75374 // "this" should be the larger one if appropriate.
75375 function bnpMultiplyUpperTo(a, n, r) {
75376 --n
75377 var i = r.t = this.t + a.t - n
75378 r.s = 0; // assumes a,this >= 0
75379 while (--i >= 0) r[i] = 0
75380 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
75381 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
75382 r.clamp()
75383 r.drShiftTo(1, r)
75384 }
75385
75386 // Barrett modular reduction
75387 function Barrett(m) {
75388 // setup Barrett
75389 this.r2 = new BigInteger()
75390 this.q3 = new BigInteger()
75391 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
75392 this.mu = this.r2.divide(m)
75393 this.m = m
75394 }
75395
75396 function barrettConvert(x) {
75397 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
75398 else if (x.compareTo(this.m) < 0) return x
75399 else {
75400 var r = new BigInteger()
75401 x.copyTo(r)
75402 this.reduce(r)
75403 return r
75404 }
75405 }
75406
75407 function barrettRevert(x) {
75408 return x
75409 }
75410
75411 // x = x mod m (HAC 14.42)
75412 function barrettReduce(x) {
75413 var self = this
75414 x.drShiftTo(self.m.t - 1, self.r2)
75415 if (x.t > self.m.t + 1) {
75416 x.t = self.m.t + 1
75417 x.clamp()
75418 }
75419 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
75420 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
75421 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
75422 x.subTo(self.r2, x)
75423 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
75424 }
75425
75426 // r = x^2 mod m; x != r
75427 function barrettSqrTo(x, r) {
75428 x.squareTo(r)
75429 this.reduce(r)
75430 }
75431
75432 // r = x*y mod m; x,y != r
75433 function barrettMulTo(x, y, r) {
75434 x.multiplyTo(y, r)
75435 this.reduce(r)
75436 }
75437
75438 Barrett.prototype.convert = barrettConvert
75439 Barrett.prototype.revert = barrettRevert
75440 Barrett.prototype.reduce = barrettReduce
75441 Barrett.prototype.mulTo = barrettMulTo
75442 Barrett.prototype.sqrTo = barrettSqrTo
75443
75444 // (public) this^e % m (HAC 14.85)
75445 function bnModPow(e, m) {
75446 var i = e.bitLength(),
75447 k, r = nbv(1),
75448 z
75449 if (i <= 0) return r
75450 else if (i < 18) k = 1
75451 else if (i < 48) k = 3
75452 else if (i < 144) k = 4
75453 else if (i < 768) k = 5
75454 else k = 6
75455 if (i < 8)
75456 z = new Classic(m)
75457 else if (m.isEven())
75458 z = new Barrett(m)
75459 else
75460 z = new Montgomery(m)
75461
75462 // precomputation
75463 var g = new Array(),
75464 n = 3,
75465 k1 = k - 1,
75466 km = (1 << k) - 1
75467 g[1] = z.convert(this)
75468 if (k > 1) {
75469 var g2 = new BigInteger()
75470 z.sqrTo(g[1], g2)
75471 while (n <= km) {
75472 g[n] = new BigInteger()
75473 z.mulTo(g2, g[n - 2], g[n])
75474 n += 2
75475 }
75476 }
75477
75478 var j = e.t - 1,
75479 w, is1 = true,
75480 r2 = new BigInteger(),
75481 t
75482 i = nbits(e[j]) - 1
75483 while (j >= 0) {
75484 if (i >= k1) w = (e[j] >> (i - k1)) & km
75485 else {
75486 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
75487 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
75488 }
75489
75490 n = k
75491 while ((w & 1) == 0) {
75492 w >>= 1
75493 --n
75494 }
75495 if ((i -= n) < 0) {
75496 i += this.DB
75497 --j
75498 }
75499 if (is1) { // ret == 1, don't bother squaring or multiplying it
75500 g[w].copyTo(r)
75501 is1 = false
75502 } else {
75503 while (n > 1) {
75504 z.sqrTo(r, r2)
75505 z.sqrTo(r2, r)
75506 n -= 2
75507 }
75508 if (n > 0) z.sqrTo(r, r2)
75509 else {
75510 t = r
75511 r = r2
75512 r2 = t
75513 }
75514 z.mulTo(r2, g[w], r)
75515 }
75516
75517 while (j >= 0 && (e[j] & (1 << i)) == 0) {
75518 z.sqrTo(r, r2)
75519 t = r
75520 r = r2
75521 r2 = t
75522 if (--i < 0) {
75523 i = this.DB - 1
75524 --j
75525 }
75526 }
75527 }
75528 return z.revert(r)
75529 }
75530
75531 // (public) gcd(this,a) (HAC 14.54)
75532 function bnGCD(a) {
75533 var x = (this.s < 0) ? this.negate() : this.clone()
75534 var y = (a.s < 0) ? a.negate() : a.clone()
75535 if (x.compareTo(y) < 0) {
75536 var t = x
75537 x = y
75538 y = t
75539 }
75540 var i = x.getLowestSetBit(),
75541 g = y.getLowestSetBit()
75542 if (g < 0) return x
75543 if (i < g) g = i
75544 if (g > 0) {
75545 x.rShiftTo(g, x)
75546 y.rShiftTo(g, y)
75547 }
75548 while (x.signum() > 0) {
75549 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
75550 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
75551 if (x.compareTo(y) >= 0) {
75552 x.subTo(y, x)
75553 x.rShiftTo(1, x)
75554 } else {
75555 y.subTo(x, y)
75556 y.rShiftTo(1, y)
75557 }
75558 }
75559 if (g > 0) y.lShiftTo(g, y)
75560 return y
75561 }
75562
75563 // (protected) this % n, n < 2^26
75564 function bnpModInt(n) {
75565 if (n <= 0) return 0
75566 var d = this.DV % n,
75567 r = (this.s < 0) ? n - 1 : 0
75568 if (this.t > 0)
75569 if (d == 0) r = this[0] % n
75570 else
75571 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
75572 return r
75573 }
75574
75575 // (public) 1/this % m (HAC 14.61)
75576 function bnModInverse(m) {
75577 var ac = m.isEven()
75578 if (this.signum() === 0) throw new Error('division by zero')
75579 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
75580 var u = m.clone(),
75581 v = this.clone()
75582 var a = nbv(1),
75583 b = nbv(0),
75584 c = nbv(0),
75585 d = nbv(1)
75586 while (u.signum() != 0) {
75587 while (u.isEven()) {
75588 u.rShiftTo(1, u)
75589 if (ac) {
75590 if (!a.isEven() || !b.isEven()) {
75591 a.addTo(this, a)
75592 b.subTo(m, b)
75593 }
75594 a.rShiftTo(1, a)
75595 } else if (!b.isEven()) b.subTo(m, b)
75596 b.rShiftTo(1, b)
75597 }
75598 while (v.isEven()) {
75599 v.rShiftTo(1, v)
75600 if (ac) {
75601 if (!c.isEven() || !d.isEven()) {
75602 c.addTo(this, c)
75603 d.subTo(m, d)
75604 }
75605 c.rShiftTo(1, c)
75606 } else if (!d.isEven()) d.subTo(m, d)
75607 d.rShiftTo(1, d)
75608 }
75609 if (u.compareTo(v) >= 0) {
75610 u.subTo(v, u)
75611 if (ac) a.subTo(c, a)
75612 b.subTo(d, b)
75613 } else {
75614 v.subTo(u, v)
75615 if (ac) c.subTo(a, c)
75616 d.subTo(b, d)
75617 }
75618 }
75619 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
75620 while (d.compareTo(m) >= 0) d.subTo(m, d)
75621 while (d.signum() < 0) d.addTo(m, d)
75622 return d
75623 }
75624
75625 var lowprimes = [
75626 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
75627 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
75628 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
75629 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
75630 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
75631 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
75632 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
75633 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
75634 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
75635 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
75636 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
75637 ]
75638
75639 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
75640
75641 // (public) test primality with certainty >= 1-.5^t
75642 function bnIsProbablePrime(t) {
75643 var i, x = this.abs()
75644 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
75645 for (i = 0; i < lowprimes.length; ++i)
75646 if (x[0] == lowprimes[i]) return true
75647 return false
75648 }
75649 if (x.isEven()) return false
75650 i = 1
75651 while (i < lowprimes.length) {
75652 var m = lowprimes[i],
75653 j = i + 1
75654 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
75655 m = x.modInt(m)
75656 while (i < j) if (m % lowprimes[i++] == 0) return false
75657 }
75658 return x.millerRabin(t)
75659 }
75660
75661 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
75662 function bnpMillerRabin(t) {
75663 var n1 = this.subtract(BigInteger.ONE)
75664 var k = n1.getLowestSetBit()
75665 if (k <= 0) return false
75666 var r = n1.shiftRight(k)
75667 t = (t + 1) >> 1
75668 if (t > lowprimes.length) t = lowprimes.length
75669 var a = new BigInteger(null)
75670 var j, bases = []
75671 for (var i = 0; i < t; ++i) {
75672 for (;;) {
75673 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
75674 if (bases.indexOf(j) == -1) break
75675 }
75676 bases.push(j)
75677 a.fromInt(j)
75678 var y = a.modPow(r, this)
75679 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
75680 var j = 1
75681 while (j++ < k && y.compareTo(n1) != 0) {
75682 y = y.modPowInt(2, this)
75683 if (y.compareTo(BigInteger.ONE) == 0) return false
75684 }
75685 if (y.compareTo(n1) != 0) return false
75686 }
75687 }
75688 return true
75689 }
75690
75691 // protected
75692 proto.chunkSize = bnpChunkSize
75693 proto.toRadix = bnpToRadix
75694 proto.fromRadix = bnpFromRadix
75695 proto.fromNumber = bnpFromNumber
75696 proto.bitwiseTo = bnpBitwiseTo
75697 proto.changeBit = bnpChangeBit
75698 proto.addTo = bnpAddTo
75699 proto.dMultiply = bnpDMultiply
75700 proto.dAddOffset = bnpDAddOffset
75701 proto.multiplyLowerTo = bnpMultiplyLowerTo
75702 proto.multiplyUpperTo = bnpMultiplyUpperTo
75703 proto.modInt = bnpModInt
75704 proto.millerRabin = bnpMillerRabin
75705
75706 // public
75707 proto.clone = bnClone
75708 proto.intValue = bnIntValue
75709 proto.byteValue = bnByteValue
75710 proto.shortValue = bnShortValue
75711 proto.signum = bnSigNum
75712 proto.toByteArray = bnToByteArray
75713 proto.equals = bnEquals
75714 proto.min = bnMin
75715 proto.max = bnMax
75716 proto.and = bnAnd
75717 proto.or = bnOr
75718 proto.xor = bnXor
75719 proto.andNot = bnAndNot
75720 proto.not = bnNot
75721 proto.shiftLeft = bnShiftLeft
75722 proto.shiftRight = bnShiftRight
75723 proto.getLowestSetBit = bnGetLowestSetBit
75724 proto.bitCount = bnBitCount
75725 proto.testBit = bnTestBit
75726 proto.setBit = bnSetBit
75727 proto.clearBit = bnClearBit
75728 proto.flipBit = bnFlipBit
75729 proto.add = bnAdd
75730 proto.subtract = bnSubtract
75731 proto.multiply = bnMultiply
75732 proto.divide = bnDivide
75733 proto.remainder = bnRemainder
75734 proto.divideAndRemainder = bnDivideAndRemainder
75735 proto.modPow = bnModPow
75736 proto.modInverse = bnModInverse
75737 proto.pow = bnPow
75738 proto.gcd = bnGCD
75739 proto.isProbablePrime = bnIsProbablePrime
75740
75741 // JSBN-specific extension
75742 proto.square = bnSquare
75743
75744 // constants
75745 BigInteger.ZERO = nbv(0)
75746 BigInteger.ONE = nbv(1)
75747 BigInteger.valueOf = nbv
75748
75749 module.exports = BigInteger
75750
75751 },{"../package.json":155}],153:[function(require,module,exports){
75752 (function (Buffer){
75753 // FIXME: Kind of a weird way to throw exceptions, consider removing
75754 var assert = require('assert')
75755 var BigInteger = require('./bigi')
75756
75757 /**
75758 * Turns a byte array into a big integer.
75759 *
75760 * This function will interpret a byte array as a big integer in big
75761 * endian notation.
75762 */
75763 BigInteger.fromByteArrayUnsigned = function(byteArray) {
75764 // BigInteger expects a DER integer conformant byte array
75765 if (byteArray[0] & 0x80) {
75766 return new BigInteger([0].concat(byteArray))
75767 }
75768
75769 return new BigInteger(byteArray)
75770 }
75771
75772 /**
75773 * Returns a byte array representation of the big integer.
75774 *
75775 * This returns the absolute of the contained value in big endian
75776 * form. A value of zero results in an empty array.
75777 */
75778 BigInteger.prototype.toByteArrayUnsigned = function() {
75779 var byteArray = this.toByteArray()
75780 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
75781 }
75782
75783 BigInteger.fromDERInteger = function(byteArray) {
75784 return new BigInteger(byteArray)
75785 }
75786
75787 /*
75788 * Converts BigInteger to a DER integer representation.
75789 *
75790 * The format for this value uses the most significant bit as a sign
75791 * bit. If the most significant bit is already set and the integer is
75792 * positive, a 0x00 is prepended.
75793 *
75794 * Examples:
75795 *
75796 * 0 => 0x00
75797 * 1 => 0x01
75798 * -1 => 0xff
75799 * 127 => 0x7f
75800 * -127 => 0x81
75801 * 128 => 0x0080
75802 * -128 => 0x80
75803 * 255 => 0x00ff
75804 * -255 => 0xff01
75805 * 16300 => 0x3fac
75806 * -16300 => 0xc054
75807 * 62300 => 0x00f35c
75808 * -62300 => 0xff0ca4
75809 */
75810 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
75811
75812 BigInteger.fromBuffer = function(buffer) {
75813 // BigInteger expects a DER integer conformant byte array
75814 if (buffer[0] & 0x80) {
75815 var byteArray = Array.prototype.slice.call(buffer)
75816
75817 return new BigInteger([0].concat(byteArray))
75818 }
75819
75820 return new BigInteger(buffer)
75821 }
75822
75823 BigInteger.fromHex = function(hex) {
75824 if (hex === '') return BigInteger.ZERO
75825
75826 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
75827 assert.equal(hex.length % 2, 0, 'Incomplete hex')
75828 return new BigInteger(hex, 16)
75829 }
75830
75831 BigInteger.prototype.toBuffer = function(size) {
75832 var byteArray = this.toByteArrayUnsigned()
75833 var zeros = []
75834
75835 var padding = size - byteArray.length
75836 while (zeros.length < padding) zeros.push(0)
75837
75838 return new Buffer(zeros.concat(byteArray))
75839 }
75840
75841 BigInteger.prototype.toHex = function(size) {
75842 return this.toBuffer(size).toString('hex')
75843 }
75844
75845 }).call(this,require("buffer").Buffer)
75846 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
75847 var BigInteger = require('./bigi')
75848
75849 //addons
75850 require('./convert')
75851
75852 module.exports = BigInteger
75853 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
75854 module.exports={
75855 "_args": [
75856 [
75857 "bigi@^1.2.0",
75858 "/home/ian/git/bitcoin/bitcoinjs-bip38"
75859 ]
75860 ],
75861 "_from": "bigi@>=1.2.0 <2.0.0",
75862 "_id": "bigi@1.4.2",
75863 "_inCache": true,
75864 "_installable": true,
75865 "_location": "/bigi",
75866 "_nodeVersion": "6.1.0",
75867 "_npmOperationalInternal": {
75868 "host": "packages-12-west.internal.npmjs.com",
75869 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
75870 },
75871 "_npmUser": {
75872 "email": "jprichardson@gmail.com",
75873 "name": "jprichardson"
75874 },
75875 "_npmVersion": "3.8.6",
75876 "_phantomChildren": {},
75877 "_requested": {
75878 "name": "bigi",
75879 "raw": "bigi@^1.2.0",
75880 "rawSpec": "^1.2.0",
75881 "scope": null,
75882 "spec": ">=1.2.0 <2.0.0",
75883 "type": "range"
75884 },
75885 "_requiredBy": [
75886 "/",
75887 "/ecurve"
75888 ],
75889 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
75890 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75891 "_shrinkwrap": null,
75892 "_spec": "bigi@^1.2.0",
75893 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
75894 "bugs": {
75895 "url": "https://github.com/cryptocoinjs/bigi/issues"
75896 },
75897 "dependencies": {},
75898 "description": "Big integers.",
75899 "devDependencies": {
75900 "coveralls": "^2.11.2",
75901 "istanbul": "^0.3.5",
75902 "jshint": "^2.5.1",
75903 "mocha": "^2.1.0",
75904 "mochify": "^2.1.0"
75905 },
75906 "directories": {},
75907 "dist": {
75908 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75909 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
75910 },
75911 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
75912 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
75913 "keywords": [
75914 "cryptography",
75915 "math",
75916 "bitcoin",
75917 "arbitrary",
75918 "precision",
75919 "arithmetic",
75920 "big",
75921 "integer",
75922 "int",
75923 "number",
75924 "biginteger",
75925 "bigint",
75926 "bignumber",
75927 "decimal",
75928 "float"
75929 ],
75930 "main": "./lib/index.js",
75931 "maintainers": [
75932 {
75933 "email": "boydb@midnightdesign.ws",
75934 "name": "midnightlightning"
75935 },
75936 {
75937 "email": "sidazhang89@gmail.com",
75938 "name": "sidazhang"
75939 },
75940 {
75941 "email": "npm@shesek.info",
75942 "name": "nadav"
75943 },
75944 {
75945 "email": "jprichardson@gmail.com",
75946 "name": "jprichardson"
75947 }
75948 ],
75949 "name": "bigi",
75950 "optionalDependencies": {},
75951 "readme": "ERROR: No README data found!",
75952 "repository": {
75953 "type": "git",
75954 "url": "git+https://github.com/cryptocoinjs/bigi.git"
75955 },
75956 "scripts": {
75957 "browser-test": "mochify --wd -R spec",
75958 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
75959 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
75960 "jshint": "jshint --config jshint.json lib/*.js ; true",
75961 "test": "_mocha -- test/*.js",
75962 "unit": "mocha"
75963 },
75964 "testling": {
75965 "browsers": [
75966 "ie/9..latest",
75967 "firefox/latest",
75968 "chrome/latest",
75969 "safari/6.0..latest",
75970 "iphone/6.0..latest",
75971 "android-browser/4.2..latest"
75972 ],
75973 "files": "test/*.js",
75974 "harness": "mocha"
75975 },
75976 "version": "1.4.2"
75977 }
75978
75979 },{}],156:[function(require,module,exports){
75980 // based on the aes implimentation in triple sec
75981 // https://github.com/keybase/triplesec
75982 // which is in turn based on the one from crypto-js
75983 // https://code.google.com/p/crypto-js/
75984
75985 var Buffer = require('safe-buffer').Buffer
75986
75987 function asUInt32Array (buf) {
75988 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
75989
75990 var len = (buf.length / 4) | 0
75991 var out = new Array(len)
75992
75993 for (var i = 0; i < len; i++) {
75994 out[i] = buf.readUInt32BE(i * 4)
75995 }
75996
75997 return out
75998 }
75999
76000 function scrubVec (v) {
76001 for (var i = 0; i < v.length; v++) {
76002 v[i] = 0
76003 }
76004 }
76005
76006 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
76007 var SUB_MIX0 = SUB_MIX[0]
76008 var SUB_MIX1 = SUB_MIX[1]
76009 var SUB_MIX2 = SUB_MIX[2]
76010 var SUB_MIX3 = SUB_MIX[3]
76011
76012 var s0 = M[0] ^ keySchedule[0]
76013 var s1 = M[1] ^ keySchedule[1]
76014 var s2 = M[2] ^ keySchedule[2]
76015 var s3 = M[3] ^ keySchedule[3]
76016 var t0, t1, t2, t3
76017 var ksRow = 4
76018
76019 for (var round = 1; round < nRounds; round++) {
76020 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
76021 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
76022 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
76023 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
76024 s0 = t0
76025 s1 = t1
76026 s2 = t2
76027 s3 = t3
76028 }
76029
76030 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
76031 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
76032 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
76033 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
76034 t0 = t0 >>> 0
76035 t1 = t1 >>> 0
76036 t2 = t2 >>> 0
76037 t3 = t3 >>> 0
76038
76039 return [t0, t1, t2, t3]
76040 }
76041
76042 // AES constants
76043 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
76044 var G = (function () {
76045 // Compute double table
76046 var d = new Array(256)
76047 for (var j = 0; j < 256; j++) {
76048 if (j < 128) {
76049 d[j] = j << 1
76050 } else {
76051 d[j] = (j << 1) ^ 0x11b
76052 }
76053 }
76054
76055 var SBOX = []
76056 var INV_SBOX = []
76057 var SUB_MIX = [[], [], [], []]
76058 var INV_SUB_MIX = [[], [], [], []]
76059
76060 // Walk GF(2^8)
76061 var x = 0
76062 var xi = 0
76063 for (var i = 0; i < 256; ++i) {
76064 // Compute sbox
76065 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
76066 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
76067 SBOX[x] = sx
76068 INV_SBOX[sx] = x
76069
76070 // Compute multiplication
76071 var x2 = d[x]
76072 var x4 = d[x2]
76073 var x8 = d[x4]
76074
76075 // Compute sub bytes, mix columns tables
76076 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
76077 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
76078 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
76079 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
76080 SUB_MIX[3][x] = t
76081
76082 // Compute inv sub bytes, inv mix columns tables
76083 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
76084 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
76085 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
76086 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
76087 INV_SUB_MIX[3][sx] = t
76088
76089 if (x === 0) {
76090 x = xi = 1
76091 } else {
76092 x = x2 ^ d[d[d[x8 ^ x2]]]
76093 xi ^= d[d[xi]]
76094 }
76095 }
76096
76097 return {
76098 SBOX: SBOX,
76099 INV_SBOX: INV_SBOX,
76100 SUB_MIX: SUB_MIX,
76101 INV_SUB_MIX: INV_SUB_MIX
76102 }
76103 })()
76104
76105 function AES (key) {
76106 this._key = asUInt32Array(key)
76107 this._reset()
76108 }
76109
76110 AES.blockSize = 4 * 4
76111 AES.keySize = 256 / 8
76112 AES.prototype.blockSize = AES.blockSize
76113 AES.prototype.keySize = AES.keySize
76114 AES.prototype._reset = function () {
76115 var keyWords = this._key
76116 var keySize = keyWords.length
76117 var nRounds = keySize + 6
76118 var ksRows = (nRounds + 1) * 4
76119
76120 var keySchedule = []
76121 for (var k = 0; k < keySize; k++) {
76122 keySchedule[k] = keyWords[k]
76123 }
76124
76125 for (k = keySize; k < ksRows; k++) {
76126 var t = keySchedule[k - 1]
76127
76128 if (k % keySize === 0) {
76129 t = (t << 8) | (t >>> 24)
76130 t =
76131 (G.SBOX[t >>> 24] << 24) |
76132 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76133 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76134 (G.SBOX[t & 0xff])
76135
76136 t ^= RCON[(k / keySize) | 0] << 24
76137 } else if (keySize > 6 && k % keySize === 4) {
76138 t =
76139 (G.SBOX[t >>> 24] << 24) |
76140 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76141 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76142 (G.SBOX[t & 0xff])
76143 }
76144
76145 keySchedule[k] = keySchedule[k - keySize] ^ t
76146 }
76147
76148 var invKeySchedule = []
76149 for (var ik = 0; ik < ksRows; ik++) {
76150 var ksR = ksRows - ik
76151 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
76152
76153 if (ik < 4 || ksR <= 4) {
76154 invKeySchedule[ik] = tt
76155 } else {
76156 invKeySchedule[ik] =
76157 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
76158 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
76159 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
76160 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
76161 }
76162 }
76163
76164 this._nRounds = nRounds
76165 this._keySchedule = keySchedule
76166 this._invKeySchedule = invKeySchedule
76167 }
76168
76169 AES.prototype.encryptBlockRaw = function (M) {
76170 M = asUInt32Array(M)
76171 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
76172 }
76173
76174 AES.prototype.encryptBlock = function (M) {
76175 var out = this.encryptBlockRaw(M)
76176 var buf = Buffer.allocUnsafe(16)
76177 buf.writeUInt32BE(out[0], 0)
76178 buf.writeUInt32BE(out[1], 4)
76179 buf.writeUInt32BE(out[2], 8)
76180 buf.writeUInt32BE(out[3], 12)
76181 return buf
76182 }
76183
76184 AES.prototype.decryptBlock = function (M) {
76185 M = asUInt32Array(M)
76186
76187 // swap
76188 var m1 = M[1]
76189 M[1] = M[3]
76190 M[3] = m1
76191
76192 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
76193 var buf = Buffer.allocUnsafe(16)
76194 buf.writeUInt32BE(out[0], 0)
76195 buf.writeUInt32BE(out[3], 4)
76196 buf.writeUInt32BE(out[2], 8)
76197 buf.writeUInt32BE(out[1], 12)
76198 return buf
76199 }
76200
76201 AES.prototype.scrub = function () {
76202 scrubVec(this._keySchedule)
76203 scrubVec(this._invKeySchedule)
76204 scrubVec(this._key)
76205 }
76206
76207 module.exports.AES = AES
76208
76209 },{"safe-buffer":193}],157:[function(require,module,exports){
76210 var aes = require('./aes')
76211 var Buffer = require('safe-buffer').Buffer
76212 var Transform = require('cipher-base')
76213 var inherits = require('inherits')
76214 var GHASH = require('./ghash')
76215 var xor = require('buffer-xor')
76216 var incr32 = require('./incr32')
76217
76218 function xorTest (a, b) {
76219 var out = 0
76220 if (a.length !== b.length) out++
76221
76222 var len = Math.min(a.length, b.length)
76223 for (var i = 0; i < len; ++i) {
76224 out += (a[i] ^ b[i])
76225 }
76226
76227 return out
76228 }
76229
76230 function calcIv (self, iv, ck) {
76231 if (iv.length === 12) {
76232 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
76233 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
76234 }
76235 var ghash = new GHASH(ck)
76236 var len = iv.length
76237 var toPad = len % 16
76238 ghash.update(iv)
76239 if (toPad) {
76240 toPad = 16 - toPad
76241 ghash.update(Buffer.alloc(toPad, 0))
76242 }
76243 ghash.update(Buffer.alloc(8, 0))
76244 var ivBits = len * 8
76245 var tail = Buffer.alloc(8)
76246 tail.writeUIntBE(ivBits, 0, 8)
76247 ghash.update(tail)
76248 self._finID = ghash.state
76249 var out = Buffer.from(self._finID)
76250 incr32(out)
76251 return out
76252 }
76253 function StreamCipher (mode, key, iv, decrypt) {
76254 Transform.call(this)
76255
76256 var h = Buffer.alloc(4, 0)
76257
76258 this._cipher = new aes.AES(key)
76259 var ck = this._cipher.encryptBlock(h)
76260 this._ghash = new GHASH(ck)
76261 iv = calcIv(this, iv, ck)
76262
76263 this._prev = Buffer.from(iv)
76264 this._cache = Buffer.allocUnsafe(0)
76265 this._secCache = Buffer.allocUnsafe(0)
76266 this._decrypt = decrypt
76267 this._alen = 0
76268 this._len = 0
76269 this._mode = mode
76270
76271 this._authTag = null
76272 this._called = false
76273 }
76274
76275 inherits(StreamCipher, Transform)
76276
76277 StreamCipher.prototype._update = function (chunk) {
76278 if (!this._called && this._alen) {
76279 var rump = 16 - (this._alen % 16)
76280 if (rump < 16) {
76281 rump = Buffer.alloc(rump, 0)
76282 this._ghash.update(rump)
76283 }
76284 }
76285
76286 this._called = true
76287 var out = this._mode.encrypt(this, chunk)
76288 if (this._decrypt) {
76289 this._ghash.update(chunk)
76290 } else {
76291 this._ghash.update(out)
76292 }
76293 this._len += chunk.length
76294 return out
76295 }
76296
76297 StreamCipher.prototype._final = function () {
76298 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
76299
76300 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
76301 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
76302
76303 this._authTag = tag
76304 this._cipher.scrub()
76305 }
76306
76307 StreamCipher.prototype.getAuthTag = function getAuthTag () {
76308 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
76309
76310 return this._authTag
76311 }
76312
76313 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
76314 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
76315
76316 this._authTag = tag
76317 }
76318
76319 StreamCipher.prototype.setAAD = function setAAD (buf) {
76320 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
76321
76322 this._ghash.update(buf)
76323 this._alen += buf.length
76324 }
76325
76326 module.exports = StreamCipher
76327
76328 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
76329 var ciphers = require('./encrypter')
76330 var deciphers = require('./decrypter')
76331 var modes = require('./modes/list.json')
76332
76333 function getCiphers () {
76334 return Object.keys(modes)
76335 }
76336
76337 exports.createCipher = exports.Cipher = ciphers.createCipher
76338 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
76339 exports.createDecipher = exports.Decipher = deciphers.createDecipher
76340 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
76341 exports.listCiphers = exports.getCiphers = getCiphers
76342
76343 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
76344 var AuthCipher = require('./authCipher')
76345 var Buffer = require('safe-buffer').Buffer
76346 var MODES = require('./modes')
76347 var StreamCipher = require('./streamCipher')
76348 var Transform = require('cipher-base')
76349 var aes = require('./aes')
76350 var ebtk = require('evp_bytestokey')
76351 var inherits = require('inherits')
76352
76353 function Decipher (mode, key, iv) {
76354 Transform.call(this)
76355
76356 this._cache = new Splitter()
76357 this._last = void 0
76358 this._cipher = new aes.AES(key)
76359 this._prev = Buffer.from(iv)
76360 this._mode = mode
76361 this._autopadding = true
76362 }
76363
76364 inherits(Decipher, Transform)
76365
76366 Decipher.prototype._update = function (data) {
76367 this._cache.add(data)
76368 var chunk
76369 var thing
76370 var out = []
76371 while ((chunk = this._cache.get(this._autopadding))) {
76372 thing = this._mode.decrypt(this, chunk)
76373 out.push(thing)
76374 }
76375 return Buffer.concat(out)
76376 }
76377
76378 Decipher.prototype._final = function () {
76379 var chunk = this._cache.flush()
76380 if (this._autopadding) {
76381 return unpad(this._mode.decrypt(this, chunk))
76382 } else if (chunk) {
76383 throw new Error('data not multiple of block length')
76384 }
76385 }
76386
76387 Decipher.prototype.setAutoPadding = function (setTo) {
76388 this._autopadding = !!setTo
76389 return this
76390 }
76391
76392 function Splitter () {
76393 this.cache = Buffer.allocUnsafe(0)
76394 }
76395
76396 Splitter.prototype.add = function (data) {
76397 this.cache = Buffer.concat([this.cache, data])
76398 }
76399
76400 Splitter.prototype.get = function (autoPadding) {
76401 var out
76402 if (autoPadding) {
76403 if (this.cache.length > 16) {
76404 out = this.cache.slice(0, 16)
76405 this.cache = this.cache.slice(16)
76406 return out
76407 }
76408 } else {
76409 if (this.cache.length >= 16) {
76410 out = this.cache.slice(0, 16)
76411 this.cache = this.cache.slice(16)
76412 return out
76413 }
76414 }
76415
76416 return null
76417 }
76418
76419 Splitter.prototype.flush = function () {
76420 if (this.cache.length) return this.cache
76421 }
76422
76423 function unpad (last) {
76424 var padded = last[15]
76425 var i = -1
76426 while (++i < padded) {
76427 if (last[(i + (16 - padded))] !== padded) {
76428 throw new Error('unable to decrypt data')
76429 }
76430 }
76431 if (padded === 16) return
76432
76433 return last.slice(0, 16 - padded)
76434 }
76435
76436 function createDecipheriv (suite, password, iv) {
76437 var config = MODES[suite.toLowerCase()]
76438 if (!config) throw new TypeError('invalid suite type')
76439
76440 if (typeof iv === 'string') iv = Buffer.from(iv)
76441 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76442
76443 if (typeof password === 'string') password = Buffer.from(password)
76444 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76445
76446 if (config.type === 'stream') {
76447 return new StreamCipher(config.module, password, iv, true)
76448 } else if (config.type === 'auth') {
76449 return new AuthCipher(config.module, password, iv, true)
76450 }
76451
76452 return new Decipher(config.module, password, iv)
76453 }
76454
76455 function createDecipher (suite, password) {
76456 var config = MODES[suite.toLowerCase()]
76457 if (!config) throw new TypeError('invalid suite type')
76458
76459 var keys = ebtk(password, false, config.key, config.iv)
76460 return createDecipheriv(suite, keys.key, keys.iv)
76461 }
76462
76463 exports.createDecipher = createDecipher
76464 exports.createDecipheriv = createDecipheriv
76465
76466 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
76467 var MODES = require('./modes')
76468 var AuthCipher = require('./authCipher')
76469 var Buffer = require('safe-buffer').Buffer
76470 var StreamCipher = require('./streamCipher')
76471 var Transform = require('cipher-base')
76472 var aes = require('./aes')
76473 var ebtk = require('evp_bytestokey')
76474 var inherits = require('inherits')
76475
76476 function Cipher (mode, key, iv) {
76477 Transform.call(this)
76478
76479 this._cache = new Splitter()
76480 this._cipher = new aes.AES(key)
76481 this._prev = Buffer.from(iv)
76482 this._mode = mode
76483 this._autopadding = true
76484 }
76485
76486 inherits(Cipher, Transform)
76487
76488 Cipher.prototype._update = function (data) {
76489 this._cache.add(data)
76490 var chunk
76491 var thing
76492 var out = []
76493
76494 while ((chunk = this._cache.get())) {
76495 thing = this._mode.encrypt(this, chunk)
76496 out.push(thing)
76497 }
76498
76499 return Buffer.concat(out)
76500 }
76501
76502 var PADDING = Buffer.alloc(16, 0x10)
76503
76504 Cipher.prototype._final = function () {
76505 var chunk = this._cache.flush()
76506 if (this._autopadding) {
76507 chunk = this._mode.encrypt(this, chunk)
76508 this._cipher.scrub()
76509 return chunk
76510 }
76511
76512 if (!chunk.equals(PADDING)) {
76513 this._cipher.scrub()
76514 throw new Error('data not multiple of block length')
76515 }
76516 }
76517
76518 Cipher.prototype.setAutoPadding = function (setTo) {
76519 this._autopadding = !!setTo
76520 return this
76521 }
76522
76523 function Splitter () {
76524 this.cache = Buffer.allocUnsafe(0)
76525 }
76526
76527 Splitter.prototype.add = function (data) {
76528 this.cache = Buffer.concat([this.cache, data])
76529 }
76530
76531 Splitter.prototype.get = function () {
76532 if (this.cache.length > 15) {
76533 var out = this.cache.slice(0, 16)
76534 this.cache = this.cache.slice(16)
76535 return out
76536 }
76537 return null
76538 }
76539
76540 Splitter.prototype.flush = function () {
76541 var len = 16 - this.cache.length
76542 var padBuff = Buffer.allocUnsafe(len)
76543
76544 var i = -1
76545 while (++i < len) {
76546 padBuff.writeUInt8(len, i)
76547 }
76548
76549 return Buffer.concat([this.cache, padBuff])
76550 }
76551
76552 function createCipheriv (suite, password, iv) {
76553 var config = MODES[suite.toLowerCase()]
76554 if (!config) throw new TypeError('invalid suite type')
76555
76556 if (typeof password === 'string') password = Buffer.from(password)
76557 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76558
76559 if (typeof iv === 'string') iv = Buffer.from(iv)
76560 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76561
76562 if (config.type === 'stream') {
76563 return new StreamCipher(config.module, password, iv)
76564 } else if (config.type === 'auth') {
76565 return new AuthCipher(config.module, password, iv)
76566 }
76567
76568 return new Cipher(config.module, password, iv)
76569 }
76570
76571 function createCipher (suite, password) {
76572 var config = MODES[suite.toLowerCase()]
76573 if (!config) throw new TypeError('invalid suite type')
76574
76575 var keys = ebtk(password, false, config.key, config.iv)
76576 return createCipheriv(suite, keys.key, keys.iv)
76577 }
76578
76579 exports.createCipheriv = createCipheriv
76580 exports.createCipher = createCipher
76581
76582 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
76583 var Buffer = require('safe-buffer').Buffer
76584 var ZEROES = Buffer.alloc(16, 0)
76585
76586 function toArray (buf) {
76587 return [
76588 buf.readUInt32BE(0),
76589 buf.readUInt32BE(4),
76590 buf.readUInt32BE(8),
76591 buf.readUInt32BE(12)
76592 ]
76593 }
76594
76595 function fromArray (out) {
76596 var buf = Buffer.allocUnsafe(16)
76597 buf.writeUInt32BE(out[0] >>> 0, 0)
76598 buf.writeUInt32BE(out[1] >>> 0, 4)
76599 buf.writeUInt32BE(out[2] >>> 0, 8)
76600 buf.writeUInt32BE(out[3] >>> 0, 12)
76601 return buf
76602 }
76603
76604 function GHASH (key) {
76605 this.h = key
76606 this.state = Buffer.alloc(16, 0)
76607 this.cache = Buffer.allocUnsafe(0)
76608 }
76609
76610 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
76611 // by Juho Vähä-Herttua
76612 GHASH.prototype.ghash = function (block) {
76613 var i = -1
76614 while (++i < block.length) {
76615 this.state[i] ^= block[i]
76616 }
76617 this._multiply()
76618 }
76619
76620 GHASH.prototype._multiply = function () {
76621 var Vi = toArray(this.h)
76622 var Zi = [0, 0, 0, 0]
76623 var j, xi, lsbVi
76624 var i = -1
76625 while (++i < 128) {
76626 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
76627 if (xi) {
76628 // Z_i+1 = Z_i ^ V_i
76629 Zi[0] ^= Vi[0]
76630 Zi[1] ^= Vi[1]
76631 Zi[2] ^= Vi[2]
76632 Zi[3] ^= Vi[3]
76633 }
76634
76635 // Store the value of LSB(V_i)
76636 lsbVi = (Vi[3] & 1) !== 0
76637
76638 // V_i+1 = V_i >> 1
76639 for (j = 3; j > 0; j--) {
76640 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
76641 }
76642 Vi[0] = Vi[0] >>> 1
76643
76644 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
76645 if (lsbVi) {
76646 Vi[0] = Vi[0] ^ (0xe1 << 24)
76647 }
76648 }
76649 this.state = fromArray(Zi)
76650 }
76651
76652 GHASH.prototype.update = function (buf) {
76653 this.cache = Buffer.concat([this.cache, buf])
76654 var chunk
76655 while (this.cache.length >= 16) {
76656 chunk = this.cache.slice(0, 16)
76657 this.cache = this.cache.slice(16)
76658 this.ghash(chunk)
76659 }
76660 }
76661
76662 GHASH.prototype.final = function (abl, bl) {
76663 if (this.cache.length) {
76664 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
76665 }
76666
76667 this.ghash(fromArray([0, abl, 0, bl]))
76668 return this.state
76669 }
76670
76671 module.exports = GHASH
76672
76673 },{"safe-buffer":193}],162:[function(require,module,exports){
76674 function incr32 (iv) {
76675 var len = iv.length
76676 var item
76677 while (len--) {
76678 item = iv.readUInt8(len)
76679 if (item === 255) {
76680 iv.writeUInt8(0, len)
76681 } else {
76682 item++
76683 iv.writeUInt8(item, len)
76684 break
76685 }
76686 }
76687 }
76688 module.exports = incr32
76689
76690 },{}],163:[function(require,module,exports){
76691 arguments[4][27][0].apply(exports,arguments)
76692 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
76693 var Buffer = require('safe-buffer').Buffer
76694 var xor = require('buffer-xor')
76695
76696 function encryptStart (self, data, decrypt) {
76697 var len = data.length
76698 var out = xor(data, self._cache)
76699 self._cache = self._cache.slice(len)
76700 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
76701 return out
76702 }
76703
76704 exports.encrypt = function (self, data, decrypt) {
76705 var out = Buffer.allocUnsafe(0)
76706 var len
76707
76708 while (data.length) {
76709 if (self._cache.length === 0) {
76710 self._cache = self._cipher.encryptBlock(self._prev)
76711 self._prev = Buffer.allocUnsafe(0)
76712 }
76713
76714 if (self._cache.length <= data.length) {
76715 len = self._cache.length
76716 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
76717 data = data.slice(len)
76718 } else {
76719 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
76720 break
76721 }
76722 }
76723
76724 return out
76725 }
76726
76727 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
76728 var Buffer = require('safe-buffer').Buffer
76729
76730 function encryptByte (self, byteParam, decrypt) {
76731 var pad
76732 var i = -1
76733 var len = 8
76734 var out = 0
76735 var bit, value
76736 while (++i < len) {
76737 pad = self._cipher.encryptBlock(self._prev)
76738 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
76739 value = pad[0] ^ bit
76740 out += ((value & 0x80) >> (i % 8))
76741 self._prev = shiftIn(self._prev, decrypt ? bit : value)
76742 }
76743 return out
76744 }
76745
76746 function shiftIn (buffer, value) {
76747 var len = buffer.length
76748 var i = -1
76749 var out = Buffer.allocUnsafe(buffer.length)
76750 buffer = Buffer.concat([buffer, Buffer.from([value])])
76751
76752 while (++i < len) {
76753 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
76754 }
76755
76756 return out
76757 }
76758
76759 exports.encrypt = function (self, chunk, decrypt) {
76760 var len = chunk.length
76761 var out = Buffer.allocUnsafe(len)
76762 var i = -1
76763
76764 while (++i < len) {
76765 out[i] = encryptByte(self, chunk[i], decrypt)
76766 }
76767
76768 return out
76769 }
76770
76771 },{"safe-buffer":193}],166:[function(require,module,exports){
76772 var Buffer = require('safe-buffer').Buffer
76773
76774 function encryptByte (self, byteParam, decrypt) {
76775 var pad = self._cipher.encryptBlock(self._prev)
76776 var out = pad[0] ^ byteParam
76777
76778 self._prev = Buffer.concat([
76779 self._prev.slice(1),
76780 Buffer.from([decrypt ? byteParam : out])
76781 ])
76782
76783 return out
76784 }
76785
76786 exports.encrypt = function (self, chunk, decrypt) {
76787 var len = chunk.length
76788 var out = Buffer.allocUnsafe(len)
76789 var i = -1
76790
76791 while (++i < len) {
76792 out[i] = encryptByte(self, chunk[i], decrypt)
76793 }
76794
76795 return out
76796 }
76797
76798 },{"safe-buffer":193}],167:[function(require,module,exports){
76799 var xor = require('buffer-xor')
76800 var Buffer = require('safe-buffer').Buffer
76801 var incr32 = require('../incr32')
76802
76803 function getBlock (self) {
76804 var out = self._cipher.encryptBlockRaw(self._prev)
76805 incr32(self._prev)
76806 return out
76807 }
76808
76809 var blockSize = 16
76810 exports.encrypt = function (self, chunk) {
76811 var chunkNum = Math.ceil(chunk.length / blockSize)
76812 var start = self._cache.length
76813 self._cache = Buffer.concat([
76814 self._cache,
76815 Buffer.allocUnsafe(chunkNum * blockSize)
76816 ])
76817 for (var i = 0; i < chunkNum; i++) {
76818 var out = getBlock(self)
76819 var offset = start + i * blockSize
76820 self._cache.writeUInt32BE(out[0], offset + 0)
76821 self._cache.writeUInt32BE(out[1], offset + 4)
76822 self._cache.writeUInt32BE(out[2], offset + 8)
76823 self._cache.writeUInt32BE(out[3], offset + 12)
76824 }
76825 var pad = self._cache.slice(0, chunk.length)
76826 self._cache = self._cache.slice(chunk.length)
76827 return xor(chunk, pad)
76828 }
76829
76830 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
76831 exports.encrypt = function (self, block) {
76832 return self._cipher.encryptBlock(block)
76833 }
76834
76835 exports.decrypt = function (self, block) {
76836 return self._cipher.decryptBlock(block)
76837 }
76838
76839 },{}],169:[function(require,module,exports){
76840 var modeModules = {
76841 ECB: require('./ecb'),
76842 CBC: require('./cbc'),
76843 CFB: require('./cfb'),
76844 CFB8: require('./cfb8'),
76845 CFB1: require('./cfb1'),
76846 OFB: require('./ofb'),
76847 CTR: require('./ctr'),
76848 GCM: require('./ctr')
76849 }
76850
76851 var modes = require('./list.json')
76852
76853 for (var key in modes) {
76854 modes[key].module = modeModules[modes[key].mode]
76855 }
76856
76857 module.exports = modes
76858
76859 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
76860 module.exports={
76861 "aes-128-ecb": {
76862 "cipher": "AES",
76863 "key": 128,
76864 "iv": 0,
76865 "mode": "ECB",
76866 "type": "block"
76867 },
76868 "aes-192-ecb": {
76869 "cipher": "AES",
76870 "key": 192,
76871 "iv": 0,
76872 "mode": "ECB",
76873 "type": "block"
76874 },
76875 "aes-256-ecb": {
76876 "cipher": "AES",
76877 "key": 256,
76878 "iv": 0,
76879 "mode": "ECB",
76880 "type": "block"
76881 },
76882 "aes-128-cbc": {
76883 "cipher": "AES",
76884 "key": 128,
76885 "iv": 16,
76886 "mode": "CBC",
76887 "type": "block"
76888 },
76889 "aes-192-cbc": {
76890 "cipher": "AES",
76891 "key": 192,
76892 "iv": 16,
76893 "mode": "CBC",
76894 "type": "block"
76895 },
76896 "aes-256-cbc": {
76897 "cipher": "AES",
76898 "key": 256,
76899 "iv": 16,
76900 "mode": "CBC",
76901 "type": "block"
76902 },
76903 "aes128": {
76904 "cipher": "AES",
76905 "key": 128,
76906 "iv": 16,
76907 "mode": "CBC",
76908 "type": "block"
76909 },
76910 "aes192": {
76911 "cipher": "AES",
76912 "key": 192,
76913 "iv": 16,
76914 "mode": "CBC",
76915 "type": "block"
76916 },
76917 "aes256": {
76918 "cipher": "AES",
76919 "key": 256,
76920 "iv": 16,
76921 "mode": "CBC",
76922 "type": "block"
76923 },
76924 "aes-128-cfb": {
76925 "cipher": "AES",
76926 "key": 128,
76927 "iv": 16,
76928 "mode": "CFB",
76929 "type": "stream"
76930 },
76931 "aes-192-cfb": {
76932 "cipher": "AES",
76933 "key": 192,
76934 "iv": 16,
76935 "mode": "CFB",
76936 "type": "stream"
76937 },
76938 "aes-256-cfb": {
76939 "cipher": "AES",
76940 "key": 256,
76941 "iv": 16,
76942 "mode": "CFB",
76943 "type": "stream"
76944 },
76945 "aes-128-cfb8": {
76946 "cipher": "AES",
76947 "key": 128,
76948 "iv": 16,
76949 "mode": "CFB8",
76950 "type": "stream"
76951 },
76952 "aes-192-cfb8": {
76953 "cipher": "AES",
76954 "key": 192,
76955 "iv": 16,
76956 "mode": "CFB8",
76957 "type": "stream"
76958 },
76959 "aes-256-cfb8": {
76960 "cipher": "AES",
76961 "key": 256,
76962 "iv": 16,
76963 "mode": "CFB8",
76964 "type": "stream"
76965 },
76966 "aes-128-cfb1": {
76967 "cipher": "AES",
76968 "key": 128,
76969 "iv": 16,
76970 "mode": "CFB1",
76971 "type": "stream"
76972 },
76973 "aes-192-cfb1": {
76974 "cipher": "AES",
76975 "key": 192,
76976 "iv": 16,
76977 "mode": "CFB1",
76978 "type": "stream"
76979 },
76980 "aes-256-cfb1": {
76981 "cipher": "AES",
76982 "key": 256,
76983 "iv": 16,
76984 "mode": "CFB1",
76985 "type": "stream"
76986 },
76987 "aes-128-ofb": {
76988 "cipher": "AES",
76989 "key": 128,
76990 "iv": 16,
76991 "mode": "OFB",
76992 "type": "stream"
76993 },
76994 "aes-192-ofb": {
76995 "cipher": "AES",
76996 "key": 192,
76997 "iv": 16,
76998 "mode": "OFB",
76999 "type": "stream"
77000 },
77001 "aes-256-ofb": {
77002 "cipher": "AES",
77003 "key": 256,
77004 "iv": 16,
77005 "mode": "OFB",
77006 "type": "stream"
77007 },
77008 "aes-128-ctr": {
77009 "cipher": "AES",
77010 "key": 128,
77011 "iv": 16,
77012 "mode": "CTR",
77013 "type": "stream"
77014 },
77015 "aes-192-ctr": {
77016 "cipher": "AES",
77017 "key": 192,
77018 "iv": 16,
77019 "mode": "CTR",
77020 "type": "stream"
77021 },
77022 "aes-256-ctr": {
77023 "cipher": "AES",
77024 "key": 256,
77025 "iv": 16,
77026 "mode": "CTR",
77027 "type": "stream"
77028 },
77029 "aes-128-gcm": {
77030 "cipher": "AES",
77031 "key": 128,
77032 "iv": 12,
77033 "mode": "GCM",
77034 "type": "auth"
77035 },
77036 "aes-192-gcm": {
77037 "cipher": "AES",
77038 "key": 192,
77039 "iv": 12,
77040 "mode": "GCM",
77041 "type": "auth"
77042 },
77043 "aes-256-gcm": {
77044 "cipher": "AES",
77045 "key": 256,
77046 "iv": 12,
77047 "mode": "GCM",
77048 "type": "auth"
77049 }
77050 }
77051
77052 },{}],171:[function(require,module,exports){
77053 arguments[4][33][0].apply(exports,arguments)
77054 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
77055 var aes = require('./aes')
77056 var Buffer = require('safe-buffer').Buffer
77057 var Transform = require('cipher-base')
77058 var inherits = require('inherits')
77059
77060 function StreamCipher (mode, key, iv, decrypt) {
77061 Transform.call(this)
77062
77063 this._cipher = new aes.AES(key)
77064 this._prev = Buffer.from(iv)
77065 this._cache = Buffer.allocUnsafe(0)
77066 this._secCache = Buffer.allocUnsafe(0)
77067 this._decrypt = decrypt
77068 this._mode = mode
77069 }
77070
77071 inherits(StreamCipher, Transform)
77072
77073 StreamCipher.prototype._update = function (chunk) {
77074 return this._mode.encrypt(this, chunk, this._decrypt)
77075 }
77076
77077 StreamCipher.prototype._final = function () {
77078 this._cipher.scrub()
77079 }
77080
77081 module.exports = StreamCipher
77082
77083 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
77084 var basex = require('base-x')
77085 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
77086
77087 module.exports = basex(ALPHABET)
77088
77089 },{"base-x":151}],174:[function(require,module,exports){
77090 'use strict'
77091
77092 var base58 = require('bs58')
77093 var Buffer = require('safe-buffer').Buffer
77094
77095 module.exports = function (checksumFn) {
77096 // Encode a buffer as a base58-check encoded string
77097 function encode (payload) {
77098 var checksum = checksumFn(payload)
77099
77100 return base58.encode(Buffer.concat([
77101 payload,
77102 checksum
77103 ], payload.length + 4))
77104 }
77105
77106 function decodeRaw (buffer) {
77107 var payload = buffer.slice(0, -4)
77108 var checksum = buffer.slice(-4)
77109 var newChecksum = checksumFn(payload)
77110
77111 if (checksum[0] ^ newChecksum[0] |
77112 checksum[1] ^ newChecksum[1] |
77113 checksum[2] ^ newChecksum[2] |
77114 checksum[3] ^ newChecksum[3]) return
77115
77116 return payload
77117 }
77118
77119 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
77120 function decodeUnsafe (string) {
77121 var buffer = base58.decodeUnsafe(string)
77122 if (!buffer) return
77123
77124 return decodeRaw(buffer)
77125 }
77126
77127 function decode (string) {
77128 var buffer = base58.decode(string)
77129 var payload = decodeRaw(buffer, checksumFn)
77130 if (!payload) throw new Error('Invalid checksum')
77131 return payload
77132 }
77133
77134 return {
77135 encode: encode,
77136 decode: decode,
77137 decodeUnsafe: decodeUnsafe
77138 }
77139 }
77140
77141 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
77142 'use strict'
77143
77144 var createHash = require('create-hash')
77145 var bs58checkBase = require('./base')
77146
77147 // SHA256(SHA256(buffer))
77148 function sha256x2 (buffer) {
77149 var tmp = createHash('sha256').update(buffer).digest()
77150 return createHash('sha256').update(tmp).digest()
77151 }
77152
77153 module.exports = bs58checkBase(sha256x2)
77154
77155 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
77156 arguments[4][46][0].apply(exports,arguments)
77157 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
77158 module.exports = function xorInplace (a, b) {
77159 var length = Math.min(a.length, b.length)
77160
77161 for (var i = 0; i < length; ++i) {
77162 a[i] = a[i] ^ b[i]
77163 }
77164
77165 return a.slice(0, length)
77166 }
77167
77168 },{}],178:[function(require,module,exports){
77169 var Buffer = require('safe-buffer').Buffer
77170 var Transform = require('stream').Transform
77171 var StringDecoder = require('string_decoder').StringDecoder
77172 var inherits = require('inherits')
77173
77174 function CipherBase (hashMode) {
77175 Transform.call(this)
77176 this.hashMode = typeof hashMode === 'string'
77177 if (this.hashMode) {
77178 this[hashMode] = this._finalOrDigest
77179 } else {
77180 this.final = this._finalOrDigest
77181 }
77182 if (this._final) {
77183 this.__final = this._final
77184 this._final = null
77185 }
77186 this._decoder = null
77187 this._encoding = null
77188 }
77189 inherits(CipherBase, Transform)
77190
77191 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
77192 if (typeof data === 'string') {
77193 data = Buffer.from(data, inputEnc)
77194 }
77195
77196 var outData = this._update(data)
77197 if (this.hashMode) return this
77198
77199 if (outputEnc) {
77200 outData = this._toString(outData, outputEnc)
77201 }
77202
77203 return outData
77204 }
77205
77206 CipherBase.prototype.setAutoPadding = function () {}
77207 CipherBase.prototype.getAuthTag = function () {
77208 throw new Error('trying to get auth tag in unsupported state')
77209 }
77210
77211 CipherBase.prototype.setAuthTag = function () {
77212 throw new Error('trying to set auth tag in unsupported state')
77213 }
77214
77215 CipherBase.prototype.setAAD = function () {
77216 throw new Error('trying to set aad in unsupported state')
77217 }
77218
77219 CipherBase.prototype._transform = function (data, _, next) {
77220 var err
77221 try {
77222 if (this.hashMode) {
77223 this._update(data)
77224 } else {
77225 this.push(this._update(data))
77226 }
77227 } catch (e) {
77228 err = e
77229 } finally {
77230 next(err)
77231 }
77232 }
77233 CipherBase.prototype._flush = function (done) {
77234 var err
77235 try {
77236 this.push(this.__final())
77237 } catch (e) {
77238 err = e
77239 }
77240
77241 done(err)
77242 }
77243 CipherBase.prototype._finalOrDigest = function (outputEnc) {
77244 var outData = this.__final() || Buffer.alloc(0)
77245 if (outputEnc) {
77246 outData = this._toString(outData, outputEnc, true)
77247 }
77248 return outData
77249 }
77250
77251 CipherBase.prototype._toString = function (value, enc, fin) {
77252 if (!this._decoder) {
77253 this._decoder = new StringDecoder(enc)
77254 this._encoding = enc
77255 }
77256
77257 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
77258
77259 var out = this._decoder.write(value)
77260 if (fin) {
77261 out += this._decoder.end()
77262 }
77263
77264 return out
77265 }
77266
77267 module.exports = CipherBase
77268
77269 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
77270 arguments[4][51][0].apply(exports,arguments)
77271 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
77272 arguments[4][52][0].apply(exports,arguments)
77273 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
77274 arguments[4][53][0].apply(exports,arguments)
77275 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
77276 var assert = require('assert')
77277 var BigInteger = require('bigi')
77278
77279 var Point = require('./point')
77280
77281 function Curve (p, a, b, Gx, Gy, n, h) {
77282 this.p = p
77283 this.a = a
77284 this.b = b
77285 this.G = Point.fromAffine(this, Gx, Gy)
77286 this.n = n
77287 this.h = h
77288
77289 this.infinity = new Point(this, null, null, BigInteger.ZERO)
77290
77291 // result caching
77292 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
77293
77294 // determine size of p in bytes
77295 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
77296 }
77297
77298 Curve.prototype.pointFromX = function (isOdd, x) {
77299 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
77300 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
77301
77302 var y = beta
77303 if (beta.isEven() ^ !isOdd) {
77304 y = this.p.subtract(y) // -y % p
77305 }
77306
77307 return Point.fromAffine(this, x, y)
77308 }
77309
77310 Curve.prototype.isInfinity = function (Q) {
77311 if (Q === this.infinity) return true
77312
77313 return Q.z.signum() === 0 && Q.y.signum() !== 0
77314 }
77315
77316 Curve.prototype.isOnCurve = function (Q) {
77317 if (this.isInfinity(Q)) return true
77318
77319 var x = Q.affineX
77320 var y = Q.affineY
77321 var a = this.a
77322 var b = this.b
77323 var p = this.p
77324
77325 // Check that xQ and yQ are integers in the interval [0, p - 1]
77326 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
77327 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
77328
77329 // and check that y^2 = x^3 + ax + b (mod p)
77330 var lhs = y.square().mod(p)
77331 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
77332 return lhs.equals(rhs)
77333 }
77334
77335 /**
77336 * Validate an elliptic curve point.
77337 *
77338 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
77339 */
77340 Curve.prototype.validate = function (Q) {
77341 // Check Q != O
77342 assert(!this.isInfinity(Q), 'Point is at infinity')
77343 assert(this.isOnCurve(Q), 'Point is not on the curve')
77344
77345 // Check nQ = O (where Q is a scalar multiple of G)
77346 var nQ = Q.multiply(this.n)
77347 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
77348
77349 return true
77350 }
77351
77352 module.exports = Curve
77353
77354 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
77355 module.exports={
77356 "secp128r1": {
77357 "p": "fffffffdffffffffffffffffffffffff",
77358 "a": "fffffffdfffffffffffffffffffffffc",
77359 "b": "e87579c11079f43dd824993c2cee5ed3",
77360 "n": "fffffffe0000000075a30d1b9038a115",
77361 "h": "01",
77362 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
77363 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
77364 },
77365 "secp160k1": {
77366 "p": "fffffffffffffffffffffffffffffffeffffac73",
77367 "a": "00",
77368 "b": "07",
77369 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
77370 "h": "01",
77371 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
77372 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
77373 },
77374 "secp160r1": {
77375 "p": "ffffffffffffffffffffffffffffffff7fffffff",
77376 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
77377 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
77378 "n": "0100000000000000000001f4c8f927aed3ca752257",
77379 "h": "01",
77380 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
77381 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
77382 },
77383 "secp192k1": {
77384 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
77385 "a": "00",
77386 "b": "03",
77387 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
77388 "h": "01",
77389 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
77390 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
77391 },
77392 "secp192r1": {
77393 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
77394 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
77395 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
77396 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
77397 "h": "01",
77398 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
77399 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
77400 },
77401 "secp256k1": {
77402 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
77403 "a": "00",
77404 "b": "07",
77405 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
77406 "h": "01",
77407 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
77408 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
77409 },
77410 "secp256r1": {
77411 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
77412 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
77413 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
77414 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
77415 "h": "01",
77416 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
77417 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
77418 }
77419 }
77420
77421 },{}],184:[function(require,module,exports){
77422 var Point = require('./point')
77423 var Curve = require('./curve')
77424
77425 var getCurveByName = require('./names')
77426
77427 module.exports = {
77428 Curve: Curve,
77429 Point: Point,
77430 getCurveByName: getCurveByName
77431 }
77432
77433 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
77434 var BigInteger = require('bigi')
77435
77436 var curves = require('./curves.json')
77437 var Curve = require('./curve')
77438
77439 function getCurveByName (name) {
77440 var curve = curves[name]
77441 if (!curve) return null
77442
77443 var p = new BigInteger(curve.p, 16)
77444 var a = new BigInteger(curve.a, 16)
77445 var b = new BigInteger(curve.b, 16)
77446 var n = new BigInteger(curve.n, 16)
77447 var h = new BigInteger(curve.h, 16)
77448 var Gx = new BigInteger(curve.Gx, 16)
77449 var Gy = new BigInteger(curve.Gy, 16)
77450
77451 return new Curve(p, a, b, Gx, Gy, n, h)
77452 }
77453
77454 module.exports = getCurveByName
77455
77456 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
77457 var assert = require('assert')
77458 var Buffer = require('safe-buffer').Buffer
77459 var BigInteger = require('bigi')
77460
77461 var THREE = BigInteger.valueOf(3)
77462
77463 function Point (curve, x, y, z) {
77464 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
77465
77466 this.curve = curve
77467 this.x = x
77468 this.y = y
77469 this.z = z
77470 this._zInv = null
77471
77472 this.compressed = true
77473 }
77474
77475 Object.defineProperty(Point.prototype, 'zInv', {
77476 get: function () {
77477 if (this._zInv === null) {
77478 this._zInv = this.z.modInverse(this.curve.p)
77479 }
77480
77481 return this._zInv
77482 }
77483 })
77484
77485 Object.defineProperty(Point.prototype, 'affineX', {
77486 get: function () {
77487 return this.x.multiply(this.zInv).mod(this.curve.p)
77488 }
77489 })
77490
77491 Object.defineProperty(Point.prototype, 'affineY', {
77492 get: function () {
77493 return this.y.multiply(this.zInv).mod(this.curve.p)
77494 }
77495 })
77496
77497 Point.fromAffine = function (curve, x, y) {
77498 return new Point(curve, x, y, BigInteger.ONE)
77499 }
77500
77501 Point.prototype.equals = function (other) {
77502 if (other === this) return true
77503 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
77504 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
77505
77506 // u = Y2 * Z1 - Y1 * Z2
77507 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
77508
77509 if (u.signum() !== 0) return false
77510
77511 // v = X2 * Z1 - X1 * Z2
77512 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
77513
77514 return v.signum() === 0
77515 }
77516
77517 Point.prototype.negate = function () {
77518 var y = this.curve.p.subtract(this.y)
77519
77520 return new Point(this.curve, this.x, y, this.z)
77521 }
77522
77523 Point.prototype.add = function (b) {
77524 if (this.curve.isInfinity(this)) return b
77525 if (this.curve.isInfinity(b)) return this
77526
77527 var x1 = this.x
77528 var y1 = this.y
77529 var x2 = b.x
77530 var y2 = b.y
77531
77532 // u = Y2 * Z1 - Y1 * Z2
77533 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
77534 // v = X2 * Z1 - X1 * Z2
77535 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
77536
77537 if (v.signum() === 0) {
77538 if (u.signum() === 0) {
77539 return this.twice() // this == b, so double
77540 }
77541
77542 return this.curve.infinity // this = -b, so infinity
77543 }
77544
77545 var v2 = v.square()
77546 var v3 = v2.multiply(v)
77547 var x1v2 = x1.multiply(v2)
77548 var zu2 = u.square().multiply(this.z)
77549
77550 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
77551 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
77552 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
77553 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)
77554 // z3 = v^3 * z1 * z2
77555 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
77556
77557 return new Point(this.curve, x3, y3, z3)
77558 }
77559
77560 Point.prototype.twice = function () {
77561 if (this.curve.isInfinity(this)) return this
77562 if (this.y.signum() === 0) return this.curve.infinity
77563
77564 var x1 = this.x
77565 var y1 = this.y
77566
77567 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
77568 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
77569 var a = this.curve.a
77570
77571 // w = 3 * x1^2 + a * z1^2
77572 var w = x1.square().multiply(THREE)
77573
77574 if (a.signum() !== 0) {
77575 w = w.add(this.z.square().multiply(a))
77576 }
77577
77578 w = w.mod(this.curve.p)
77579 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
77580 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
77581 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
77582 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
77583 // z3 = 8 * (y1 * z1)^3
77584 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
77585
77586 return new Point(this.curve, x3, y3, z3)
77587 }
77588
77589 // Simple NAF (Non-Adjacent Form) multiplication algorithm
77590 // TODO: modularize the multiplication algorithm
77591 Point.prototype.multiply = function (k) {
77592 if (this.curve.isInfinity(this)) return this
77593 if (k.signum() === 0) return this.curve.infinity
77594
77595 var e = k
77596 var h = e.multiply(THREE)
77597
77598 var neg = this.negate()
77599 var R = this
77600
77601 for (var i = h.bitLength() - 2; i > 0; --i) {
77602 var hBit = h.testBit(i)
77603 var eBit = e.testBit(i)
77604
77605 R = R.twice()
77606
77607 if (hBit !== eBit) {
77608 R = R.add(hBit ? this : neg)
77609 }
77610 }
77611
77612 return R
77613 }
77614
77615 // Compute this*j + x*k (simultaneous multiplication)
77616 Point.prototype.multiplyTwo = function (j, x, k) {
77617 var i = Math.max(j.bitLength(), k.bitLength()) - 1
77618 var R = this.curve.infinity
77619 var both = this.add(x)
77620
77621 while (i >= 0) {
77622 var jBit = j.testBit(i)
77623 var kBit = k.testBit(i)
77624
77625 R = R.twice()
77626
77627 if (jBit) {
77628 if (kBit) {
77629 R = R.add(both)
77630 } else {
77631 R = R.add(this)
77632 }
77633 } else if (kBit) {
77634 R = R.add(x)
77635 }
77636 --i
77637 }
77638
77639 return R
77640 }
77641
77642 Point.prototype.getEncoded = function (compressed) {
77643 if (compressed == null) compressed = this.compressed
77644 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
77645
77646 var x = this.affineX
77647 var y = this.affineY
77648 var byteLength = this.curve.pLength
77649 var buffer
77650
77651 // 0x02/0x03 | X
77652 if (compressed) {
77653 buffer = Buffer.allocUnsafe(1 + byteLength)
77654 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
77655
77656 // 0x04 | X | Y
77657 } else {
77658 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
77659 buffer.writeUInt8(0x04, 0)
77660
77661 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
77662 }
77663
77664 x.toBuffer(byteLength).copy(buffer, 1)
77665
77666 return buffer
77667 }
77668
77669 Point.decodeFrom = function (curve, buffer) {
77670 var type = buffer.readUInt8(0)
77671 var compressed = (type !== 4)
77672
77673 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
77674 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
77675
77676 var Q
77677 if (compressed) {
77678 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
77679 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
77680
77681 var isOdd = (type === 0x03)
77682 Q = curve.pointFromX(isOdd, x)
77683 } else {
77684 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
77685
77686 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
77687 Q = Point.fromAffine(curve, x, y)
77688 }
77689
77690 Q.compressed = compressed
77691 return Q
77692 }
77693
77694 Point.prototype.toString = function () {
77695 if (this.curve.isInfinity(this)) return '(INFINITY)'
77696
77697 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
77698 }
77699
77700 module.exports = Point
77701
77702 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
77703 var Buffer = require('safe-buffer').Buffer
77704 var MD5 = require('md5.js')
77705
77706 /* eslint-disable camelcase */
77707 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
77708 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
77709 if (salt) {
77710 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
77711 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
77712 }
77713
77714 var keyLen = keyBits / 8
77715 var key = Buffer.alloc(keyLen)
77716 var iv = Buffer.alloc(ivLen || 0)
77717 var tmp = Buffer.alloc(0)
77718
77719 while (keyLen > 0 || ivLen > 0) {
77720 var hash = new MD5()
77721 hash.update(tmp)
77722 hash.update(password)
77723 if (salt) hash.update(salt)
77724 tmp = hash.digest()
77725
77726 var used = 0
77727
77728 if (keyLen > 0) {
77729 var keyStart = key.length - keyLen
77730 used = Math.min(keyLen, tmp.length)
77731 tmp.copy(key, keyStart, 0, used)
77732 keyLen -= used
77733 }
77734
77735 if (used < tmp.length && ivLen > 0) {
77736 var ivStart = iv.length - ivLen
77737 var length = Math.min(ivLen, tmp.length - used)
77738 tmp.copy(iv, ivStart, used, used + length)
77739 ivLen -= length
77740 }
77741 }
77742
77743 tmp.fill(0)
77744 return { key: key, iv: iv }
77745 }
77746
77747 module.exports = EVP_BytesToKey
77748
77749 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
77750 arguments[4][85][0].apply(exports,arguments)
77751 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
77752 arguments[4][95][0].apply(exports,arguments)
77753 },{"dup":95}],190:[function(require,module,exports){
77754 (function (Buffer){
77755 'use strict'
77756 var inherits = require('inherits')
77757 var HashBase = require('hash-base')
77758
77759 var ARRAY16 = new Array(16)
77760
77761 function MD5 () {
77762 HashBase.call(this, 64)
77763
77764 // state
77765 this._a = 0x67452301
77766 this._b = 0xefcdab89
77767 this._c = 0x98badcfe
77768 this._d = 0x10325476
77769 }
77770
77771 inherits(MD5, HashBase)
77772
77773 MD5.prototype._update = function () {
77774 var M = ARRAY16
77775 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
77776
77777 var a = this._a
77778 var b = this._b
77779 var c = this._c
77780 var d = this._d
77781
77782 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
77783 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
77784 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
77785 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
77786 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
77787 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
77788 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
77789 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
77790 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
77791 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
77792 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
77793 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
77794 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
77795 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
77796 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
77797 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
77798
77799 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
77800 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
77801 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
77802 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
77803 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
77804 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
77805 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
77806 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
77807 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
77808 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
77809 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
77810 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
77811 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
77812 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
77813 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
77814 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
77815
77816 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
77817 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
77818 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
77819 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
77820 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
77821 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
77822 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
77823 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
77824 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
77825 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
77826 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
77827 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
77828 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
77829 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
77830 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
77831 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
77832
77833 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
77834 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
77835 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
77836 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
77837 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
77838 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
77839 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
77840 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
77841 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
77842 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
77843 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
77844 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
77845 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
77846 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
77847 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
77848 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
77849
77850 this._a = (this._a + a) | 0
77851 this._b = (this._b + b) | 0
77852 this._c = (this._c + c) | 0
77853 this._d = (this._d + d) | 0
77854 }
77855
77856 MD5.prototype._digest = function () {
77857 // create padding and handle blocks
77858 this._block[this._blockOffset++] = 0x80
77859 if (this._blockOffset > 56) {
77860 this._block.fill(0, this._blockOffset, 64)
77861 this._update()
77862 this._blockOffset = 0
77863 }
77864
77865 this._block.fill(0, this._blockOffset, 56)
77866 this._block.writeUInt32LE(this._length[0], 56)
77867 this._block.writeUInt32LE(this._length[1], 60)
77868 this._update()
77869
77870 // produce result
77871 var buffer = new Buffer(16)
77872 buffer.writeInt32LE(this._a, 0)
77873 buffer.writeInt32LE(this._b, 4)
77874 buffer.writeInt32LE(this._c, 8)
77875 buffer.writeInt32LE(this._d, 12)
77876 return buffer
77877 }
77878
77879 function rotl (x, n) {
77880 return (x << n) | (x >>> (32 - n))
77881 }
77882
77883 function fnF (a, b, c, d, m, k, s) {
77884 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
77885 }
77886
77887 function fnG (a, b, c, d, m, k, s) {
77888 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
77889 }
77890
77891 function fnH (a, b, c, d, m, k, s) {
77892 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
77893 }
77894
77895 function fnI (a, b, c, d, m, k, s) {
77896 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
77897 }
77898
77899 module.exports = MD5
77900
77901 }).call(this,require("buffer").Buffer)
77902 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
77903 'use strict'
77904 var Buffer = require('safe-buffer').Buffer
77905 var Transform = require('stream').Transform
77906 var inherits = require('inherits')
77907
77908 function throwIfNotStringOrBuffer (val, prefix) {
77909 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
77910 throw new TypeError(prefix + ' must be a string or a buffer')
77911 }
77912 }
77913
77914 function HashBase (blockSize) {
77915 Transform.call(this)
77916
77917 this._block = Buffer.allocUnsafe(blockSize)
77918 this._blockSize = blockSize
77919 this._blockOffset = 0
77920 this._length = [0, 0, 0, 0]
77921
77922 this._finalized = false
77923 }
77924
77925 inherits(HashBase, Transform)
77926
77927 HashBase.prototype._transform = function (chunk, encoding, callback) {
77928 var error = null
77929 try {
77930 this.update(chunk, encoding)
77931 } catch (err) {
77932 error = err
77933 }
77934
77935 callback(error)
77936 }
77937
77938 HashBase.prototype._flush = function (callback) {
77939 var error = null
77940 try {
77941 this.push(this.digest())
77942 } catch (err) {
77943 error = err
77944 }
77945
77946 callback(error)
77947 }
77948
77949 HashBase.prototype.update = function (data, encoding) {
77950 throwIfNotStringOrBuffer(data, 'Data')
77951 if (this._finalized) throw new Error('Digest already called')
77952 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
77953
77954 // consume data
77955 var block = this._block
77956 var offset = 0
77957 while (this._blockOffset + data.length - offset >= this._blockSize) {
77958 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
77959 this._update()
77960 this._blockOffset = 0
77961 }
77962 while (offset < data.length) block[this._blockOffset++] = data[offset++]
77963
77964 // update length
77965 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
77966 this._length[j] += carry
77967 carry = (this._length[j] / 0x0100000000) | 0
77968 if (carry > 0) this._length[j] -= 0x0100000000 * carry
77969 }
77970
77971 return this
77972 }
77973
77974 HashBase.prototype._update = function () {
77975 throw new Error('_update is not implemented')
77976 }
77977
77978 HashBase.prototype.digest = function (encoding) {
77979 if (this._finalized) throw new Error('Digest already called')
77980 this._finalized = true
77981
77982 var digest = this._digest()
77983 if (encoding !== undefined) digest = digest.toString(encoding)
77984
77985 // reset state
77986 this._block.fill(0)
77987 this._blockOffset = 0
77988 for (var i = 0; i < 4; ++i) this._length[i] = 0
77989
77990 return digest
77991 }
77992
77993 HashBase.prototype._digest = function () {
77994 throw new Error('_digest is not implemented')
77995 }
77996
77997 module.exports = HashBase
77998
77999 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
78000 arguments[4][133][0].apply(exports,arguments)
78001 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
78002 /* eslint-disable node/no-deprecated-api */
78003 var buffer = require('buffer')
78004 var Buffer = buffer.Buffer
78005
78006 // alternative to using Object.keys for old browsers
78007 function copyProps (src, dst) {
78008 for (var key in src) {
78009 dst[key] = src[key]
78010 }
78011 }
78012 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
78013 module.exports = buffer
78014 } else {
78015 // Copy properties from require('buffer')
78016 copyProps(buffer, exports)
78017 exports.Buffer = SafeBuffer
78018 }
78019
78020 function SafeBuffer (arg, encodingOrOffset, length) {
78021 return Buffer(arg, encodingOrOffset, length)
78022 }
78023
78024 // Copy static methods from Buffer
78025 copyProps(Buffer, SafeBuffer)
78026
78027 SafeBuffer.from = function (arg, encodingOrOffset, length) {
78028 if (typeof arg === 'number') {
78029 throw new TypeError('Argument must not be a number')
78030 }
78031 return Buffer(arg, encodingOrOffset, length)
78032 }
78033
78034 SafeBuffer.alloc = function (size, fill, encoding) {
78035 if (typeof size !== 'number') {
78036 throw new TypeError('Argument must be a number')
78037 }
78038 var buf = Buffer(size)
78039 if (fill !== undefined) {
78040 if (typeof encoding === 'string') {
78041 buf.fill(fill, encoding)
78042 } else {
78043 buf.fill(fill)
78044 }
78045 } else {
78046 buf.fill(0)
78047 }
78048 return buf
78049 }
78050
78051 SafeBuffer.allocUnsafe = function (size) {
78052 if (typeof size !== 'number') {
78053 throw new TypeError('Argument must be a number')
78054 }
78055 return Buffer(size)
78056 }
78057
78058 SafeBuffer.allocUnsafeSlow = function (size) {
78059 if (typeof size !== 'number') {
78060 throw new TypeError('Argument must be a number')
78061 }
78062 return buffer.SlowBuffer(size)
78063 }
78064
78065 },{"buffer":47}],194:[function(require,module,exports){
78066 (function (Buffer){
78067 var crypto = require('crypto')
78068 /* eslint-disable camelcase */
78069
78070 var MAX_VALUE = 0x7fffffff
78071
78072 // N = Cpu cost, r = Memory cost, p = parallelization cost
78073 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
78074 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
78075
78076 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
78077 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
78078
78079 var XY = new Buffer(256 * r)
78080 var V = new Buffer(128 * r * N)
78081
78082 // pseudo global
78083 var B32 = new Int32Array(16) // salsa20_8
78084 var x = new Int32Array(16) // salsa20_8
78085 var _X = new Buffer(64) // blockmix_salsa8
78086
78087 // pseudo global
78088 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
78089
78090 var tickCallback
78091 if (progressCallback) {
78092 var totalOps = p * N * 2
78093 var currentOp = 0
78094
78095 tickCallback = function () {
78096 ++currentOp
78097
78098 // send progress notifications once every 1,000 ops
78099 if (currentOp % 1000 === 0) {
78100 progressCallback({
78101 current: currentOp,
78102 total: totalOps,
78103 percent: (currentOp / totalOps) * 100.0
78104 })
78105 }
78106 }
78107 }
78108
78109 for (var i = 0; i < p; i++) {
78110 smix(B, i * 128 * r, r, N, V, XY)
78111 }
78112
78113 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
78114
78115 // all of these functions are actually moved to the top
78116 // due to function hoisting
78117
78118 function smix (B, Bi, r, N, V, XY) {
78119 var Xi = 0
78120 var Yi = 128 * r
78121 var i
78122
78123 B.copy(XY, Xi, Bi, Bi + Yi)
78124
78125 for (i = 0; i < N; i++) {
78126 XY.copy(V, i * Yi, Xi, Xi + Yi)
78127 blockmix_salsa8(XY, Xi, Yi, r)
78128
78129 if (tickCallback) tickCallback()
78130 }
78131
78132 for (i = 0; i < N; i++) {
78133 var offset = Xi + (2 * r - 1) * 64
78134 var j = XY.readUInt32LE(offset) & (N - 1)
78135 blockxor(V, j * Yi, XY, Xi, Yi)
78136 blockmix_salsa8(XY, Xi, Yi, r)
78137
78138 if (tickCallback) tickCallback()
78139 }
78140
78141 XY.copy(B, Bi, Xi, Xi + Yi)
78142 }
78143
78144 function blockmix_salsa8 (BY, Bi, Yi, r) {
78145 var i
78146
78147 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
78148
78149 for (i = 0; i < 2 * r; i++) {
78150 blockxor(BY, i * 64, _X, 0, 64)
78151 salsa20_8(_X)
78152 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
78153 }
78154
78155 for (i = 0; i < r; i++) {
78156 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
78157 }
78158
78159 for (i = 0; i < r; i++) {
78160 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
78161 }
78162 }
78163
78164 function R (a, b) {
78165 return (a << b) | (a >>> (32 - b))
78166 }
78167
78168 function salsa20_8 (B) {
78169 var i
78170
78171 for (i = 0; i < 16; i++) {
78172 B32[i] = (B[i * 4 + 0] & 0xff) << 0
78173 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
78174 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
78175 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
78176 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
78177 }
78178
78179 arraycopy(B32, 0, x, 0, 16)
78180
78181 for (i = 8; i > 0; i -= 2) {
78182 x[4] ^= R(x[0] + x[12], 7)
78183 x[8] ^= R(x[4] + x[0], 9)
78184 x[12] ^= R(x[8] + x[4], 13)
78185 x[0] ^= R(x[12] + x[8], 18)
78186 x[9] ^= R(x[5] + x[1], 7)
78187 x[13] ^= R(x[9] + x[5], 9)
78188 x[1] ^= R(x[13] + x[9], 13)
78189 x[5] ^= R(x[1] + x[13], 18)
78190 x[14] ^= R(x[10] + x[6], 7)
78191 x[2] ^= R(x[14] + x[10], 9)
78192 x[6] ^= R(x[2] + x[14], 13)
78193 x[10] ^= R(x[6] + x[2], 18)
78194 x[3] ^= R(x[15] + x[11], 7)
78195 x[7] ^= R(x[3] + x[15], 9)
78196 x[11] ^= R(x[7] + x[3], 13)
78197 x[15] ^= R(x[11] + x[7], 18)
78198 x[1] ^= R(x[0] + x[3], 7)
78199 x[2] ^= R(x[1] + x[0], 9)
78200 x[3] ^= R(x[2] + x[1], 13)
78201 x[0] ^= R(x[3] + x[2], 18)
78202 x[6] ^= R(x[5] + x[4], 7)
78203 x[7] ^= R(x[6] + x[5], 9)
78204 x[4] ^= R(x[7] + x[6], 13)
78205 x[5] ^= R(x[4] + x[7], 18)
78206 x[11] ^= R(x[10] + x[9], 7)
78207 x[8] ^= R(x[11] + x[10], 9)
78208 x[9] ^= R(x[8] + x[11], 13)
78209 x[10] ^= R(x[9] + x[8], 18)
78210 x[12] ^= R(x[15] + x[14], 7)
78211 x[13] ^= R(x[12] + x[15], 9)
78212 x[14] ^= R(x[13] + x[12], 13)
78213 x[15] ^= R(x[14] + x[13], 18)
78214 }
78215
78216 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
78217
78218 for (i = 0; i < 16; i++) {
78219 var bi = i * 4
78220 B[bi + 0] = (B32[i] >> 0 & 0xff)
78221 B[bi + 1] = (B32[i] >> 8 & 0xff)
78222 B[bi + 2] = (B32[i] >> 16 & 0xff)
78223 B[bi + 3] = (B32[i] >> 24 & 0xff)
78224 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
78225 }
78226 }
78227
78228 // naive approach... going back to loop unrolling may yield additional performance
78229 function blockxor (S, Si, D, Di, len) {
78230 for (var i = 0; i < len; i++) {
78231 D[Di + i] ^= S[Si + i]
78232 }
78233 }
78234 }
78235
78236 function arraycopy (src, srcPos, dest, destPos, length) {
78237 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
78238 src.copy(dest, destPos, srcPos, srcPos + length)
78239 } else {
78240 while (length--) {
78241 dest[destPos++] = src[srcPos++]
78242 }
78243 }
78244 }
78245
78246 module.exports = scrypt
78247
78248 }).call(this,require("buffer").Buffer)
78249 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
78250 var Buffer = require('safe-buffer').Buffer
78251
78252 // prototype class for hash functions
78253 function Hash (blockSize, finalSize) {
78254 this._block = Buffer.alloc(blockSize)
78255 this._finalSize = finalSize
78256 this._blockSize = blockSize
78257 this._len = 0
78258 }
78259
78260 Hash.prototype.update = function (data, enc) {
78261 if (typeof data === 'string') {
78262 enc = enc || 'utf8'
78263 data = Buffer.from(data, enc)
78264 }
78265
78266 var block = this._block
78267 var blockSize = this._blockSize
78268 var length = data.length
78269 var accum = this._len
78270
78271 for (var offset = 0; offset < length;) {
78272 var assigned = accum % blockSize
78273 var remainder = Math.min(length - offset, blockSize - assigned)
78274
78275 for (var i = 0; i < remainder; i++) {
78276 block[assigned + i] = data[offset + i]
78277 }
78278
78279 accum += remainder
78280 offset += remainder
78281
78282 if ((accum % blockSize) === 0) {
78283 this._update(block)
78284 }
78285 }
78286
78287 this._len += length
78288 return this
78289 }
78290
78291 Hash.prototype.digest = function (enc) {
78292 var rem = this._len % this._blockSize
78293
78294 this._block[rem] = 0x80
78295
78296 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
78297 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
78298 this._block.fill(0, rem + 1)
78299
78300 if (rem >= this._finalSize) {
78301 this._update(this._block)
78302 this._block.fill(0)
78303 }
78304
78305 var bits = this._len * 8
78306
78307 // uint32
78308 if (bits <= 0xffffffff) {
78309 this._block.writeUInt32BE(bits, this._blockSize - 4)
78310
78311 // uint64
78312 } else {
78313 var lowBits = (bits & 0xffffffff) >>> 0
78314 var highBits = (bits - lowBits) / 0x100000000
78315
78316 this._block.writeUInt32BE(highBits, this._blockSize - 8)
78317 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
78318 }
78319
78320 this._update(this._block)
78321 var hash = this._hash()
78322
78323 return enc ? hash.toString(enc) : hash
78324 }
78325
78326 Hash.prototype._update = function () {
78327 throw new Error('_update must be implemented by subclass')
78328 }
78329
78330 module.exports = Hash
78331
78332 },{"safe-buffer":193}],196:[function(require,module,exports){
78333 arguments[4][136][0].apply(exports,arguments)
78334 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
78335 /*
78336 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
78337 * in FIPS PUB 180-1
78338 * This source code is derived from sha1.js of the same repository.
78339 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
78340 * operation was added.
78341 */
78342
78343 var inherits = require('inherits')
78344 var Hash = require('./hash')
78345 var Buffer = require('safe-buffer').Buffer
78346
78347 var K = [
78348 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78349 ]
78350
78351 var W = new Array(80)
78352
78353 function Sha () {
78354 this.init()
78355 this._w = W
78356
78357 Hash.call(this, 64, 56)
78358 }
78359
78360 inherits(Sha, Hash)
78361
78362 Sha.prototype.init = function () {
78363 this._a = 0x67452301
78364 this._b = 0xefcdab89
78365 this._c = 0x98badcfe
78366 this._d = 0x10325476
78367 this._e = 0xc3d2e1f0
78368
78369 return this
78370 }
78371
78372 function rotl5 (num) {
78373 return (num << 5) | (num >>> 27)
78374 }
78375
78376 function rotl30 (num) {
78377 return (num << 30) | (num >>> 2)
78378 }
78379
78380 function ft (s, b, c, d) {
78381 if (s === 0) return (b & c) | ((~b) & d)
78382 if (s === 2) return (b & c) | (b & d) | (c & d)
78383 return b ^ c ^ d
78384 }
78385
78386 Sha.prototype._update = function (M) {
78387 var W = this._w
78388
78389 var a = this._a | 0
78390 var b = this._b | 0
78391 var c = this._c | 0
78392 var d = this._d | 0
78393 var e = this._e | 0
78394
78395 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78396 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
78397
78398 for (var j = 0; j < 80; ++j) {
78399 var s = ~~(j / 20)
78400 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78401
78402 e = d
78403 d = c
78404 c = rotl30(b)
78405 b = a
78406 a = t
78407 }
78408
78409 this._a = (a + this._a) | 0
78410 this._b = (b + this._b) | 0
78411 this._c = (c + this._c) | 0
78412 this._d = (d + this._d) | 0
78413 this._e = (e + this._e) | 0
78414 }
78415
78416 Sha.prototype._hash = function () {
78417 var H = Buffer.allocUnsafe(20)
78418
78419 H.writeInt32BE(this._a | 0, 0)
78420 H.writeInt32BE(this._b | 0, 4)
78421 H.writeInt32BE(this._c | 0, 8)
78422 H.writeInt32BE(this._d | 0, 12)
78423 H.writeInt32BE(this._e | 0, 16)
78424
78425 return H
78426 }
78427
78428 module.exports = Sha
78429
78430 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
78431 /*
78432 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
78433 * in FIPS PUB 180-1
78434 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
78435 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78436 * Distributed under the BSD License
78437 * See http://pajhome.org.uk/crypt/md5 for details.
78438 */
78439
78440 var inherits = require('inherits')
78441 var Hash = require('./hash')
78442 var Buffer = require('safe-buffer').Buffer
78443
78444 var K = [
78445 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78446 ]
78447
78448 var W = new Array(80)
78449
78450 function Sha1 () {
78451 this.init()
78452 this._w = W
78453
78454 Hash.call(this, 64, 56)
78455 }
78456
78457 inherits(Sha1, Hash)
78458
78459 Sha1.prototype.init = function () {
78460 this._a = 0x67452301
78461 this._b = 0xefcdab89
78462 this._c = 0x98badcfe
78463 this._d = 0x10325476
78464 this._e = 0xc3d2e1f0
78465
78466 return this
78467 }
78468
78469 function rotl1 (num) {
78470 return (num << 1) | (num >>> 31)
78471 }
78472
78473 function rotl5 (num) {
78474 return (num << 5) | (num >>> 27)
78475 }
78476
78477 function rotl30 (num) {
78478 return (num << 30) | (num >>> 2)
78479 }
78480
78481 function ft (s, b, c, d) {
78482 if (s === 0) return (b & c) | ((~b) & d)
78483 if (s === 2) return (b & c) | (b & d) | (c & d)
78484 return b ^ c ^ d
78485 }
78486
78487 Sha1.prototype._update = function (M) {
78488 var W = this._w
78489
78490 var a = this._a | 0
78491 var b = this._b | 0
78492 var c = this._c | 0
78493 var d = this._d | 0
78494 var e = this._e | 0
78495
78496 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78497 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
78498
78499 for (var j = 0; j < 80; ++j) {
78500 var s = ~~(j / 20)
78501 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78502
78503 e = d
78504 d = c
78505 c = rotl30(b)
78506 b = a
78507 a = t
78508 }
78509
78510 this._a = (a + this._a) | 0
78511 this._b = (b + this._b) | 0
78512 this._c = (c + this._c) | 0
78513 this._d = (d + this._d) | 0
78514 this._e = (e + this._e) | 0
78515 }
78516
78517 Sha1.prototype._hash = function () {
78518 var H = Buffer.allocUnsafe(20)
78519
78520 H.writeInt32BE(this._a | 0, 0)
78521 H.writeInt32BE(this._b | 0, 4)
78522 H.writeInt32BE(this._c | 0, 8)
78523 H.writeInt32BE(this._d | 0, 12)
78524 H.writeInt32BE(this._e | 0, 16)
78525
78526 return H
78527 }
78528
78529 module.exports = Sha1
78530
78531 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
78532 /**
78533 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78534 * in FIPS 180-2
78535 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78536 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78537 *
78538 */
78539
78540 var inherits = require('inherits')
78541 var Sha256 = require('./sha256')
78542 var Hash = require('./hash')
78543 var Buffer = require('safe-buffer').Buffer
78544
78545 var W = new Array(64)
78546
78547 function Sha224 () {
78548 this.init()
78549
78550 this._w = W // new Array(64)
78551
78552 Hash.call(this, 64, 56)
78553 }
78554
78555 inherits(Sha224, Sha256)
78556
78557 Sha224.prototype.init = function () {
78558 this._a = 0xc1059ed8
78559 this._b = 0x367cd507
78560 this._c = 0x3070dd17
78561 this._d = 0xf70e5939
78562 this._e = 0xffc00b31
78563 this._f = 0x68581511
78564 this._g = 0x64f98fa7
78565 this._h = 0xbefa4fa4
78566
78567 return this
78568 }
78569
78570 Sha224.prototype._hash = function () {
78571 var H = Buffer.allocUnsafe(28)
78572
78573 H.writeInt32BE(this._a, 0)
78574 H.writeInt32BE(this._b, 4)
78575 H.writeInt32BE(this._c, 8)
78576 H.writeInt32BE(this._d, 12)
78577 H.writeInt32BE(this._e, 16)
78578 H.writeInt32BE(this._f, 20)
78579 H.writeInt32BE(this._g, 24)
78580
78581 return H
78582 }
78583
78584 module.exports = Sha224
78585
78586 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
78587 /**
78588 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78589 * in FIPS 180-2
78590 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78591 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78592 *
78593 */
78594
78595 var inherits = require('inherits')
78596 var Hash = require('./hash')
78597 var Buffer = require('safe-buffer').Buffer
78598
78599 var K = [
78600 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
78601 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
78602 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
78603 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
78604 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
78605 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
78606 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
78607 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
78608 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
78609 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
78610 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
78611 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
78612 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
78613 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
78614 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
78615 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
78616 ]
78617
78618 var W = new Array(64)
78619
78620 function Sha256 () {
78621 this.init()
78622
78623 this._w = W // new Array(64)
78624
78625 Hash.call(this, 64, 56)
78626 }
78627
78628 inherits(Sha256, Hash)
78629
78630 Sha256.prototype.init = function () {
78631 this._a = 0x6a09e667
78632 this._b = 0xbb67ae85
78633 this._c = 0x3c6ef372
78634 this._d = 0xa54ff53a
78635 this._e = 0x510e527f
78636 this._f = 0x9b05688c
78637 this._g = 0x1f83d9ab
78638 this._h = 0x5be0cd19
78639
78640 return this
78641 }
78642
78643 function ch (x, y, z) {
78644 return z ^ (x & (y ^ z))
78645 }
78646
78647 function maj (x, y, z) {
78648 return (x & y) | (z & (x | y))
78649 }
78650
78651 function sigma0 (x) {
78652 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
78653 }
78654
78655 function sigma1 (x) {
78656 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
78657 }
78658
78659 function gamma0 (x) {
78660 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
78661 }
78662
78663 function gamma1 (x) {
78664 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
78665 }
78666
78667 Sha256.prototype._update = function (M) {
78668 var W = this._w
78669
78670 var a = this._a | 0
78671 var b = this._b | 0
78672 var c = this._c | 0
78673 var d = this._d | 0
78674 var e = this._e | 0
78675 var f = this._f | 0
78676 var g = this._g | 0
78677 var h = this._h | 0
78678
78679 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78680 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
78681
78682 for (var j = 0; j < 64; ++j) {
78683 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
78684 var T2 = (sigma0(a) + maj(a, b, c)) | 0
78685
78686 h = g
78687 g = f
78688 f = e
78689 e = (d + T1) | 0
78690 d = c
78691 c = b
78692 b = a
78693 a = (T1 + T2) | 0
78694 }
78695
78696 this._a = (a + this._a) | 0
78697 this._b = (b + this._b) | 0
78698 this._c = (c + this._c) | 0
78699 this._d = (d + this._d) | 0
78700 this._e = (e + this._e) | 0
78701 this._f = (f + this._f) | 0
78702 this._g = (g + this._g) | 0
78703 this._h = (h + this._h) | 0
78704 }
78705
78706 Sha256.prototype._hash = function () {
78707 var H = Buffer.allocUnsafe(32)
78708
78709 H.writeInt32BE(this._a, 0)
78710 H.writeInt32BE(this._b, 4)
78711 H.writeInt32BE(this._c, 8)
78712 H.writeInt32BE(this._d, 12)
78713 H.writeInt32BE(this._e, 16)
78714 H.writeInt32BE(this._f, 20)
78715 H.writeInt32BE(this._g, 24)
78716 H.writeInt32BE(this._h, 28)
78717
78718 return H
78719 }
78720
78721 module.exports = Sha256
78722
78723 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
78724 var inherits = require('inherits')
78725 var SHA512 = require('./sha512')
78726 var Hash = require('./hash')
78727 var Buffer = require('safe-buffer').Buffer
78728
78729 var W = new Array(160)
78730
78731 function Sha384 () {
78732 this.init()
78733 this._w = W
78734
78735 Hash.call(this, 128, 112)
78736 }
78737
78738 inherits(Sha384, SHA512)
78739
78740 Sha384.prototype.init = function () {
78741 this._ah = 0xcbbb9d5d
78742 this._bh = 0x629a292a
78743 this._ch = 0x9159015a
78744 this._dh = 0x152fecd8
78745 this._eh = 0x67332667
78746 this._fh = 0x8eb44a87
78747 this._gh = 0xdb0c2e0d
78748 this._hh = 0x47b5481d
78749
78750 this._al = 0xc1059ed8
78751 this._bl = 0x367cd507
78752 this._cl = 0x3070dd17
78753 this._dl = 0xf70e5939
78754 this._el = 0xffc00b31
78755 this._fl = 0x68581511
78756 this._gl = 0x64f98fa7
78757 this._hl = 0xbefa4fa4
78758
78759 return this
78760 }
78761
78762 Sha384.prototype._hash = function () {
78763 var H = Buffer.allocUnsafe(48)
78764
78765 function writeInt64BE (h, l, offset) {
78766 H.writeInt32BE(h, offset)
78767 H.writeInt32BE(l, offset + 4)
78768 }
78769
78770 writeInt64BE(this._ah, this._al, 0)
78771 writeInt64BE(this._bh, this._bl, 8)
78772 writeInt64BE(this._ch, this._cl, 16)
78773 writeInt64BE(this._dh, this._dl, 24)
78774 writeInt64BE(this._eh, this._el, 32)
78775 writeInt64BE(this._fh, this._fl, 40)
78776
78777 return H
78778 }
78779
78780 module.exports = Sha384
78781
78782 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
78783 var inherits = require('inherits')
78784 var Hash = require('./hash')
78785 var Buffer = require('safe-buffer').Buffer
78786
78787 var K = [
78788 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
78789 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
78790 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
78791 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
78792 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
78793 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
78794 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
78795 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
78796 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
78797 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
78798 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
78799 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
78800 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
78801 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
78802 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
78803 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
78804 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
78805 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
78806 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
78807 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
78808 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
78809 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
78810 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
78811 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
78812 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
78813 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
78814 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
78815 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
78816 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
78817 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
78818 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
78819 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
78820 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
78821 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
78822 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
78823 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
78824 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
78825 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
78826 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
78827 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
78828 ]
78829
78830 var W = new Array(160)
78831
78832 function Sha512 () {
78833 this.init()
78834 this._w = W
78835
78836 Hash.call(this, 128, 112)
78837 }
78838
78839 inherits(Sha512, Hash)
78840
78841 Sha512.prototype.init = function () {
78842 this._ah = 0x6a09e667
78843 this._bh = 0xbb67ae85
78844 this._ch = 0x3c6ef372
78845 this._dh = 0xa54ff53a
78846 this._eh = 0x510e527f
78847 this._fh = 0x9b05688c
78848 this._gh = 0x1f83d9ab
78849 this._hh = 0x5be0cd19
78850
78851 this._al = 0xf3bcc908
78852 this._bl = 0x84caa73b
78853 this._cl = 0xfe94f82b
78854 this._dl = 0x5f1d36f1
78855 this._el = 0xade682d1
78856 this._fl = 0x2b3e6c1f
78857 this._gl = 0xfb41bd6b
78858 this._hl = 0x137e2179
78859
78860 return this
78861 }
78862
78863 function Ch (x, y, z) {
78864 return z ^ (x & (y ^ z))
78865 }
78866
78867 function maj (x, y, z) {
78868 return (x & y) | (z & (x | y))
78869 }
78870
78871 function sigma0 (x, xl) {
78872 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
78873 }
78874
78875 function sigma1 (x, xl) {
78876 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
78877 }
78878
78879 function Gamma0 (x, xl) {
78880 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
78881 }
78882
78883 function Gamma0l (x, xl) {
78884 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
78885 }
78886
78887 function Gamma1 (x, xl) {
78888 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
78889 }
78890
78891 function Gamma1l (x, xl) {
78892 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
78893 }
78894
78895 function getCarry (a, b) {
78896 return (a >>> 0) < (b >>> 0) ? 1 : 0
78897 }
78898
78899 Sha512.prototype._update = function (M) {
78900 var W = this._w
78901
78902 var ah = this._ah | 0
78903 var bh = this._bh | 0
78904 var ch = this._ch | 0
78905 var dh = this._dh | 0
78906 var eh = this._eh | 0
78907 var fh = this._fh | 0
78908 var gh = this._gh | 0
78909 var hh = this._hh | 0
78910
78911 var al = this._al | 0
78912 var bl = this._bl | 0
78913 var cl = this._cl | 0
78914 var dl = this._dl | 0
78915 var el = this._el | 0
78916 var fl = this._fl | 0
78917 var gl = this._gl | 0
78918 var hl = this._hl | 0
78919
78920 for (var i = 0; i < 32; i += 2) {
78921 W[i] = M.readInt32BE(i * 4)
78922 W[i + 1] = M.readInt32BE(i * 4 + 4)
78923 }
78924 for (; i < 160; i += 2) {
78925 var xh = W[i - 15 * 2]
78926 var xl = W[i - 15 * 2 + 1]
78927 var gamma0 = Gamma0(xh, xl)
78928 var gamma0l = Gamma0l(xl, xh)
78929
78930 xh = W[i - 2 * 2]
78931 xl = W[i - 2 * 2 + 1]
78932 var gamma1 = Gamma1(xh, xl)
78933 var gamma1l = Gamma1l(xl, xh)
78934
78935 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
78936 var Wi7h = W[i - 7 * 2]
78937 var Wi7l = W[i - 7 * 2 + 1]
78938
78939 var Wi16h = W[i - 16 * 2]
78940 var Wi16l = W[i - 16 * 2 + 1]
78941
78942 var Wil = (gamma0l + Wi7l) | 0
78943 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
78944 Wil = (Wil + gamma1l) | 0
78945 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
78946 Wil = (Wil + Wi16l) | 0
78947 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
78948
78949 W[i] = Wih
78950 W[i + 1] = Wil
78951 }
78952
78953 for (var j = 0; j < 160; j += 2) {
78954 Wih = W[j]
78955 Wil = W[j + 1]
78956
78957 var majh = maj(ah, bh, ch)
78958 var majl = maj(al, bl, cl)
78959
78960 var sigma0h = sigma0(ah, al)
78961 var sigma0l = sigma0(al, ah)
78962 var sigma1h = sigma1(eh, el)
78963 var sigma1l = sigma1(el, eh)
78964
78965 // t1 = h + sigma1 + ch + K[j] + W[j]
78966 var Kih = K[j]
78967 var Kil = K[j + 1]
78968
78969 var chh = Ch(eh, fh, gh)
78970 var chl = Ch(el, fl, gl)
78971
78972 var t1l = (hl + sigma1l) | 0
78973 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
78974 t1l = (t1l + chl) | 0
78975 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
78976 t1l = (t1l + Kil) | 0
78977 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
78978 t1l = (t1l + Wil) | 0
78979 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
78980
78981 // t2 = sigma0 + maj
78982 var t2l = (sigma0l + majl) | 0
78983 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
78984
78985 hh = gh
78986 hl = gl
78987 gh = fh
78988 gl = fl
78989 fh = eh
78990 fl = el
78991 el = (dl + t1l) | 0
78992 eh = (dh + t1h + getCarry(el, dl)) | 0
78993 dh = ch
78994 dl = cl
78995 ch = bh
78996 cl = bl
78997 bh = ah
78998 bl = al
78999 al = (t1l + t2l) | 0
79000 ah = (t1h + t2h + getCarry(al, t1l)) | 0
79001 }
79002
79003 this._al = (this._al + al) | 0
79004 this._bl = (this._bl + bl) | 0
79005 this._cl = (this._cl + cl) | 0
79006 this._dl = (this._dl + dl) | 0
79007 this._el = (this._el + el) | 0
79008 this._fl = (this._fl + fl) | 0
79009 this._gl = (this._gl + gl) | 0
79010 this._hl = (this._hl + hl) | 0
79011
79012 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
79013 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
79014 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
79015 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
79016 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
79017 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
79018 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
79019 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
79020 }
79021
79022 Sha512.prototype._hash = function () {
79023 var H = Buffer.allocUnsafe(64)
79024
79025 function writeInt64BE (h, l, offset) {
79026 H.writeInt32BE(h, offset)
79027 H.writeInt32BE(l, offset + 4)
79028 }
79029
79030 writeInt64BE(this._ah, this._al, 0)
79031 writeInt64BE(this._bh, this._bl, 8)
79032 writeInt64BE(this._ch, this._cl, 16)
79033 writeInt64BE(this._dh, this._dl, 24)
79034 writeInt64BE(this._eh, this._el, 32)
79035 writeInt64BE(this._fh, this._fl, 40)
79036 writeInt64BE(this._gh, this._gl, 48)
79037 writeInt64BE(this._hh, this._hl, 56)
79038
79039 return H
79040 }
79041
79042 module.exports = Sha512
79043
79044 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
79045 });</script>
79046 <script>(function() {
79047
79048 // p2wpkh
79049
79050 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
79051 baseNetwork: "bitcoin",
79052 messagePrefix: '\x18Bitcoin Signed Message:\n',
79053 bech32: 'bc',
79054 bip32: {
79055 public: 0x04b24746,
79056 private: 0x04b2430c
79057 },
79058 pubKeyHash: 0x00,
79059 scriptHash: 0x05,
79060 wif: 0x80
79061 };
79062
79063 // p2wpkh in p2sh
79064
79065 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
79066 baseNetwork: "bitcoin",
79067 messagePrefix: '\x18Bitcoin Signed Message:\n',
79068 bech32: 'bc',
79069 bip32: {
79070 public: 0x049d7cb2,
79071 private: 0x049d7878
79072 },
79073 pubKeyHash: 0x00,
79074 scriptHash: 0x05,
79075 wif: 0x80
79076 };
79077
79078 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
79079 baseNetwork: "testnet",
79080 messagePrefix: '\x18Bitcoin Signed Message:\n',
79081 bech32: 'tb',
79082 bip32: {
79083 public: 0x044a5262,
79084 private: 0x044a4e28
79085 },
79086 pubKeyHash: 0x6f,
79087 scriptHash: 0xc4,
79088 wif: 0xef
79089 };
79090
79091 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
79092 baseNetwork: "litecoin",
79093 messagePrefix: '\x19Litecoin Signed Message:\n',
79094 bip32: {
79095 public: 0x01b26ef6,
79096 private: 0x01b26792
79097 },
79098 pubKeyHash: 0x30,
79099 scriptHash: 0x32,
79100 wif: 0xb0
79101 };
79102
79103 })();
79104 </script>
79105 <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){
79106 (function (global){
79107 'use strict';
79108
79109 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
79110 // original notice:
79111
79112 /*!
79113 * The buffer module from node.js, for the browser.
79114 *
79115 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79116 * @license MIT
79117 */
79118 function compare(a, b) {
79119 if (a === b) {
79120 return 0;
79121 }
79122
79123 var x = a.length;
79124 var y = b.length;
79125
79126 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
79127 if (a[i] !== b[i]) {
79128 x = a[i];
79129 y = b[i];
79130 break;
79131 }
79132 }
79133
79134 if (x < y) {
79135 return -1;
79136 }
79137 if (y < x) {
79138 return 1;
79139 }
79140 return 0;
79141 }
79142 function isBuffer(b) {
79143 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
79144 return global.Buffer.isBuffer(b);
79145 }
79146 return !!(b != null && b._isBuffer);
79147 }
79148
79149 // based on node assert, original notice:
79150
79151 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
79152 //
79153 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
79154 //
79155 // Originally from narwhal.js (http://narwhaljs.org)
79156 // Copyright (c) 2009 Thomas Robinson <280north.com>
79157 //
79158 // Permission is hereby granted, free of charge, to any person obtaining a copy
79159 // of this software and associated documentation files (the 'Software'), to
79160 // deal in the Software without restriction, including without limitation the
79161 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
79162 // sell copies of the Software, and to permit persons to whom the Software is
79163 // furnished to do so, subject to the following conditions:
79164 //
79165 // The above copyright notice and this permission notice shall be included in
79166 // all copies or substantial portions of the Software.
79167 //
79168 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
79169 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
79170 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
79171 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
79172 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
79173 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
79174
79175 var util = require('util/');
79176 var hasOwn = Object.prototype.hasOwnProperty;
79177 var pSlice = Array.prototype.slice;
79178 var functionsHaveNames = (function () {
79179 return function foo() {}.name === 'foo';
79180 }());
79181 function pToString (obj) {
79182 return Object.prototype.toString.call(obj);
79183 }
79184 function isView(arrbuf) {
79185 if (isBuffer(arrbuf)) {
79186 return false;
79187 }
79188 if (typeof global.ArrayBuffer !== 'function') {
79189 return false;
79190 }
79191 if (typeof ArrayBuffer.isView === 'function') {
79192 return ArrayBuffer.isView(arrbuf);
79193 }
79194 if (!arrbuf) {
79195 return false;
79196 }
79197 if (arrbuf instanceof DataView) {
79198 return true;
79199 }
79200 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
79201 return true;
79202 }
79203 return false;
79204 }
79205 // 1. The assert module provides functions that throw
79206 // AssertionError's when particular conditions are not met. The
79207 // assert module must conform to the following interface.
79208
79209 var assert = module.exports = ok;
79210
79211 // 2. The AssertionError is defined in assert.
79212 // new assert.AssertionError({ message: message,
79213 // actual: actual,
79214 // expected: expected })
79215
79216 var regex = /\s*function\s+([^\(\s]*)\s*/;
79217 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
79218 function getName(func) {
79219 if (!util.isFunction(func)) {
79220 return;
79221 }
79222 if (functionsHaveNames) {
79223 return func.name;
79224 }
79225 var str = func.toString();
79226 var match = str.match(regex);
79227 return match && match[1];
79228 }
79229 assert.AssertionError = function AssertionError(options) {
79230 this.name = 'AssertionError';
79231 this.actual = options.actual;
79232 this.expected = options.expected;
79233 this.operator = options.operator;
79234 if (options.message) {
79235 this.message = options.message;
79236 this.generatedMessage = false;
79237 } else {
79238 this.message = getMessage(this);
79239 this.generatedMessage = true;
79240 }
79241 var stackStartFunction = options.stackStartFunction || fail;
79242 if (Error.captureStackTrace) {
79243 Error.captureStackTrace(this, stackStartFunction);
79244 } else {
79245 // non v8 browsers so we can have a stacktrace
79246 var err = new Error();
79247 if (err.stack) {
79248 var out = err.stack;
79249
79250 // try to strip useless frames
79251 var fn_name = getName(stackStartFunction);
79252 var idx = out.indexOf('\n' + fn_name);
79253 if (idx >= 0) {
79254 // once we have located the function frame
79255 // we need to strip out everything before it (and its line)
79256 var next_line = out.indexOf('\n', idx + 1);
79257 out = out.substring(next_line + 1);
79258 }
79259
79260 this.stack = out;
79261 }
79262 }
79263 };
79264
79265 // assert.AssertionError instanceof Error
79266 util.inherits(assert.AssertionError, Error);
79267
79268 function truncate(s, n) {
79269 if (typeof s === 'string') {
79270 return s.length < n ? s : s.slice(0, n);
79271 } else {
79272 return s;
79273 }
79274 }
79275 function inspect(something) {
79276 if (functionsHaveNames || !util.isFunction(something)) {
79277 return util.inspect(something);
79278 }
79279 var rawname = getName(something);
79280 var name = rawname ? ': ' + rawname : '';
79281 return '[Function' + name + ']';
79282 }
79283 function getMessage(self) {
79284 return truncate(inspect(self.actual), 128) + ' ' +
79285 self.operator + ' ' +
79286 truncate(inspect(self.expected), 128);
79287 }
79288
79289 // At present only the three keys mentioned above are used and
79290 // understood by the spec. Implementations or sub modules can pass
79291 // other keys to the AssertionError's constructor - they will be
79292 // ignored.
79293
79294 // 3. All of the following functions must throw an AssertionError
79295 // when a corresponding condition is not met, with a message that
79296 // may be undefined if not provided. All assertion methods provide
79297 // both the actual and expected values to the assertion error for
79298 // display purposes.
79299
79300 function fail(actual, expected, message, operator, stackStartFunction) {
79301 throw new assert.AssertionError({
79302 message: message,
79303 actual: actual,
79304 expected: expected,
79305 operator: operator,
79306 stackStartFunction: stackStartFunction
79307 });
79308 }
79309
79310 // EXTENSION! allows for well behaved errors defined elsewhere.
79311 assert.fail = fail;
79312
79313 // 4. Pure assertion tests whether a value is truthy, as determined
79314 // by !!guard.
79315 // assert.ok(guard, message_opt);
79316 // This statement is equivalent to assert.equal(true, !!guard,
79317 // message_opt);. To test strictly for the value true, use
79318 // assert.strictEqual(true, guard, message_opt);.
79319
79320 function ok(value, message) {
79321 if (!value) fail(value, true, message, '==', assert.ok);
79322 }
79323 assert.ok = ok;
79324
79325 // 5. The equality assertion tests shallow, coercive equality with
79326 // ==.
79327 // assert.equal(actual, expected, message_opt);
79328
79329 assert.equal = function equal(actual, expected, message) {
79330 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
79331 };
79332
79333 // 6. The non-equality assertion tests for whether two objects are not equal
79334 // with != assert.notEqual(actual, expected, message_opt);
79335
79336 assert.notEqual = function notEqual(actual, expected, message) {
79337 if (actual == expected) {
79338 fail(actual, expected, message, '!=', assert.notEqual);
79339 }
79340 };
79341
79342 // 7. The equivalence assertion tests a deep equality relation.
79343 // assert.deepEqual(actual, expected, message_opt);
79344
79345 assert.deepEqual = function deepEqual(actual, expected, message) {
79346 if (!_deepEqual(actual, expected, false)) {
79347 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
79348 }
79349 };
79350
79351 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
79352 if (!_deepEqual(actual, expected, true)) {
79353 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
79354 }
79355 };
79356
79357 function _deepEqual(actual, expected, strict, memos) {
79358 // 7.1. All identical values are equivalent, as determined by ===.
79359 if (actual === expected) {
79360 return true;
79361 } else if (isBuffer(actual) && isBuffer(expected)) {
79362 return compare(actual, expected) === 0;
79363
79364 // 7.2. If the expected value is a Date object, the actual value is
79365 // equivalent if it is also a Date object that refers to the same time.
79366 } else if (util.isDate(actual) && util.isDate(expected)) {
79367 return actual.getTime() === expected.getTime();
79368
79369 // 7.3 If the expected value is a RegExp object, the actual value is
79370 // equivalent if it is also a RegExp object with the same source and
79371 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
79372 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
79373 return actual.source === expected.source &&
79374 actual.global === expected.global &&
79375 actual.multiline === expected.multiline &&
79376 actual.lastIndex === expected.lastIndex &&
79377 actual.ignoreCase === expected.ignoreCase;
79378
79379 // 7.4. Other pairs that do not both pass typeof value == 'object',
79380 // equivalence is determined by ==.
79381 } else if ((actual === null || typeof actual !== 'object') &&
79382 (expected === null || typeof expected !== 'object')) {
79383 return strict ? actual === expected : actual == expected;
79384
79385 // If both values are instances of typed arrays, wrap their underlying
79386 // ArrayBuffers in a Buffer each to increase performance
79387 // This optimization requires the arrays to have the same type as checked by
79388 // Object.prototype.toString (aka pToString). Never perform binary
79389 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
79390 // bit patterns are not identical.
79391 } else if (isView(actual) && isView(expected) &&
79392 pToString(actual) === pToString(expected) &&
79393 !(actual instanceof Float32Array ||
79394 actual instanceof Float64Array)) {
79395 return compare(new Uint8Array(actual.buffer),
79396 new Uint8Array(expected.buffer)) === 0;
79397
79398 // 7.5 For all other Object pairs, including Array objects, equivalence is
79399 // determined by having the same number of owned properties (as verified
79400 // with Object.prototype.hasOwnProperty.call), the same set of keys
79401 // (although not necessarily the same order), equivalent values for every
79402 // corresponding key, and an identical 'prototype' property. Note: this
79403 // accounts for both named and indexed properties on Arrays.
79404 } else if (isBuffer(actual) !== isBuffer(expected)) {
79405 return false;
79406 } else {
79407 memos = memos || {actual: [], expected: []};
79408
79409 var actualIndex = memos.actual.indexOf(actual);
79410 if (actualIndex !== -1) {
79411 if (actualIndex === memos.expected.indexOf(expected)) {
79412 return true;
79413 }
79414 }
79415
79416 memos.actual.push(actual);
79417 memos.expected.push(expected);
79418
79419 return objEquiv(actual, expected, strict, memos);
79420 }
79421 }
79422
79423 function isArguments(object) {
79424 return Object.prototype.toString.call(object) == '[object Arguments]';
79425 }
79426
79427 function objEquiv(a, b, strict, actualVisitedObjects) {
79428 if (a === null || a === undefined || b === null || b === undefined)
79429 return false;
79430 // if one is a primitive, the other must be same
79431 if (util.isPrimitive(a) || util.isPrimitive(b))
79432 return a === b;
79433 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
79434 return false;
79435 var aIsArgs = isArguments(a);
79436 var bIsArgs = isArguments(b);
79437 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
79438 return false;
79439 if (aIsArgs) {
79440 a = pSlice.call(a);
79441 b = pSlice.call(b);
79442 return _deepEqual(a, b, strict);
79443 }
79444 var ka = objectKeys(a);
79445 var kb = objectKeys(b);
79446 var key, i;
79447 // having the same number of owned properties (keys incorporates
79448 // hasOwnProperty)
79449 if (ka.length !== kb.length)
79450 return false;
79451 //the same set of keys (although not necessarily the same order),
79452 ka.sort();
79453 kb.sort();
79454 //~~~cheap key test
79455 for (i = ka.length - 1; i >= 0; i--) {
79456 if (ka[i] !== kb[i])
79457 return false;
79458 }
79459 //equivalent values for every corresponding key, and
79460 //~~~possibly expensive deep test
79461 for (i = ka.length - 1; i >= 0; i--) {
79462 key = ka[i];
79463 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
79464 return false;
79465 }
79466 return true;
79467 }
79468
79469 // 8. The non-equivalence assertion tests for any deep inequality.
79470 // assert.notDeepEqual(actual, expected, message_opt);
79471
79472 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
79473 if (_deepEqual(actual, expected, false)) {
79474 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
79475 }
79476 };
79477
79478 assert.notDeepStrictEqual = notDeepStrictEqual;
79479 function notDeepStrictEqual(actual, expected, message) {
79480 if (_deepEqual(actual, expected, true)) {
79481 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
79482 }
79483 }
79484
79485
79486 // 9. The strict equality assertion tests strict equality, as determined by ===.
79487 // assert.strictEqual(actual, expected, message_opt);
79488
79489 assert.strictEqual = function strictEqual(actual, expected, message) {
79490 if (actual !== expected) {
79491 fail(actual, expected, message, '===', assert.strictEqual);
79492 }
79493 };
79494
79495 // 10. The strict non-equality assertion tests for strict inequality, as
79496 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
79497
79498 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
79499 if (actual === expected) {
79500 fail(actual, expected, message, '!==', assert.notStrictEqual);
79501 }
79502 };
79503
79504 function expectedException(actual, expected) {
79505 if (!actual || !expected) {
79506 return false;
79507 }
79508
79509 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
79510 return expected.test(actual);
79511 }
79512
79513 try {
79514 if (actual instanceof expected) {
79515 return true;
79516 }
79517 } catch (e) {
79518 // Ignore. The instanceof check doesn't work for arrow functions.
79519 }
79520
79521 if (Error.isPrototypeOf(expected)) {
79522 return false;
79523 }
79524
79525 return expected.call({}, actual) === true;
79526 }
79527
79528 function _tryBlock(block) {
79529 var error;
79530 try {
79531 block();
79532 } catch (e) {
79533 error = e;
79534 }
79535 return error;
79536 }
79537
79538 function _throws(shouldThrow, block, expected, message) {
79539 var actual;
79540
79541 if (typeof block !== 'function') {
79542 throw new TypeError('"block" argument must be a function');
79543 }
79544
79545 if (typeof expected === 'string') {
79546 message = expected;
79547 expected = null;
79548 }
79549
79550 actual = _tryBlock(block);
79551
79552 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
79553 (message ? ' ' + message : '.');
79554
79555 if (shouldThrow && !actual) {
79556 fail(actual, expected, 'Missing expected exception' + message);
79557 }
79558
79559 var userProvidedMessage = typeof message === 'string';
79560 var isUnwantedException = !shouldThrow && util.isError(actual);
79561 var isUnexpectedException = !shouldThrow && actual && !expected;
79562
79563 if ((isUnwantedException &&
79564 userProvidedMessage &&
79565 expectedException(actual, expected)) ||
79566 isUnexpectedException) {
79567 fail(actual, expected, 'Got unwanted exception' + message);
79568 }
79569
79570 if ((shouldThrow && actual && expected &&
79571 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
79572 throw actual;
79573 }
79574 }
79575
79576 // 11. Expected to throw an error:
79577 // assert.throws(block, Error_opt, message_opt);
79578
79579 assert.throws = function(block, /*optional*/error, /*optional*/message) {
79580 _throws(true, block, error, message);
79581 };
79582
79583 // EXTENSION! This is annoying to write outside this module.
79584 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
79585 _throws(false, block, error, message);
79586 };
79587
79588 assert.ifError = function(err) { if (err) throw err; };
79589
79590 var objectKeys = Object.keys || function (obj) {
79591 var keys = [];
79592 for (var key in obj) {
79593 if (hasOwn.call(obj, key)) keys.push(key);
79594 }
79595 return keys;
79596 };
79597
79598 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79599 },{"util/":30}],2:[function(require,module,exports){
79600 'use strict'
79601
79602 exports.byteLength = byteLength
79603 exports.toByteArray = toByteArray
79604 exports.fromByteArray = fromByteArray
79605
79606 var lookup = []
79607 var revLookup = []
79608 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
79609
79610 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
79611 for (var i = 0, len = code.length; i < len; ++i) {
79612 lookup[i] = code[i]
79613 revLookup[code.charCodeAt(i)] = i
79614 }
79615
79616 revLookup['-'.charCodeAt(0)] = 62
79617 revLookup['_'.charCodeAt(0)] = 63
79618
79619 function placeHoldersCount (b64) {
79620 var len = b64.length
79621 if (len % 4 > 0) {
79622 throw new Error('Invalid string. Length must be a multiple of 4')
79623 }
79624
79625 // the number of equal signs (place holders)
79626 // if there are two placeholders, than the two characters before it
79627 // represent one byte
79628 // if there is only one, then the three characters before it represent 2 bytes
79629 // this is just a cheap hack to not do indexOf twice
79630 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
79631 }
79632
79633 function byteLength (b64) {
79634 // base64 is 4/3 + up to two characters of the original data
79635 return b64.length * 3 / 4 - placeHoldersCount(b64)
79636 }
79637
79638 function toByteArray (b64) {
79639 var i, j, l, tmp, placeHolders, arr
79640 var len = b64.length
79641 placeHolders = placeHoldersCount(b64)
79642
79643 arr = new Arr(len * 3 / 4 - placeHolders)
79644
79645 // if there are placeholders, only get up to the last complete 4 chars
79646 l = placeHolders > 0 ? len - 4 : len
79647
79648 var L = 0
79649
79650 for (i = 0, j = 0; i < l; i += 4, j += 3) {
79651 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
79652 arr[L++] = (tmp >> 16) & 0xFF
79653 arr[L++] = (tmp >> 8) & 0xFF
79654 arr[L++] = tmp & 0xFF
79655 }
79656
79657 if (placeHolders === 2) {
79658 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
79659 arr[L++] = tmp & 0xFF
79660 } else if (placeHolders === 1) {
79661 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
79662 arr[L++] = (tmp >> 8) & 0xFF
79663 arr[L++] = tmp & 0xFF
79664 }
79665
79666 return arr
79667 }
79668
79669 function tripletToBase64 (num) {
79670 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
79671 }
79672
79673 function encodeChunk (uint8, start, end) {
79674 var tmp
79675 var output = []
79676 for (var i = start; i < end; i += 3) {
79677 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
79678 output.push(tripletToBase64(tmp))
79679 }
79680 return output.join('')
79681 }
79682
79683 function fromByteArray (uint8) {
79684 var tmp
79685 var len = uint8.length
79686 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
79687 var output = ''
79688 var parts = []
79689 var maxChunkLength = 16383 // must be multiple of 3
79690
79691 // go through the array every three bytes, we'll deal with trailing stuff later
79692 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
79693 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
79694 }
79695
79696 // pad the end with zeros, but make sure to not forget the extra bytes
79697 if (extraBytes === 1) {
79698 tmp = uint8[len - 1]
79699 output += lookup[tmp >> 2]
79700 output += lookup[(tmp << 4) & 0x3F]
79701 output += '=='
79702 } else if (extraBytes === 2) {
79703 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
79704 output += lookup[tmp >> 10]
79705 output += lookup[(tmp >> 4) & 0x3F]
79706 output += lookup[(tmp << 2) & 0x3F]
79707 output += '='
79708 }
79709
79710 parts.push(output)
79711
79712 return parts.join('')
79713 }
79714
79715 },{}],3:[function(require,module,exports){
79716
79717 },{}],4:[function(require,module,exports){
79718 (function (global){
79719 'use strict';
79720
79721 var buffer = require('buffer');
79722 var Buffer = buffer.Buffer;
79723 var SlowBuffer = buffer.SlowBuffer;
79724 var MAX_LEN = buffer.kMaxLength || 2147483647;
79725 exports.alloc = function alloc(size, fill, encoding) {
79726 if (typeof Buffer.alloc === 'function') {
79727 return Buffer.alloc(size, fill, encoding);
79728 }
79729 if (typeof encoding === 'number') {
79730 throw new TypeError('encoding must not be number');
79731 }
79732 if (typeof size !== 'number') {
79733 throw new TypeError('size must be a number');
79734 }
79735 if (size > MAX_LEN) {
79736 throw new RangeError('size is too large');
79737 }
79738 var enc = encoding;
79739 var _fill = fill;
79740 if (_fill === undefined) {
79741 enc = undefined;
79742 _fill = 0;
79743 }
79744 var buf = new Buffer(size);
79745 if (typeof _fill === 'string') {
79746 var fillBuf = new Buffer(_fill, enc);
79747 var flen = fillBuf.length;
79748 var i = -1;
79749 while (++i < size) {
79750 buf[i] = fillBuf[i % flen];
79751 }
79752 } else {
79753 buf.fill(_fill);
79754 }
79755 return buf;
79756 }
79757 exports.allocUnsafe = function allocUnsafe(size) {
79758 if (typeof Buffer.allocUnsafe === 'function') {
79759 return Buffer.allocUnsafe(size);
79760 }
79761 if (typeof size !== 'number') {
79762 throw new TypeError('size must be a number');
79763 }
79764 if (size > MAX_LEN) {
79765 throw new RangeError('size is too large');
79766 }
79767 return new Buffer(size);
79768 }
79769 exports.from = function from(value, encodingOrOffset, length) {
79770 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
79771 return Buffer.from(value, encodingOrOffset, length);
79772 }
79773 if (typeof value === 'number') {
79774 throw new TypeError('"value" argument must not be a number');
79775 }
79776 if (typeof value === 'string') {
79777 return new Buffer(value, encodingOrOffset);
79778 }
79779 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
79780 var offset = encodingOrOffset;
79781 if (arguments.length === 1) {
79782 return new Buffer(value);
79783 }
79784 if (typeof offset === 'undefined') {
79785 offset = 0;
79786 }
79787 var len = length;
79788 if (typeof len === 'undefined') {
79789 len = value.byteLength - offset;
79790 }
79791 if (offset >= value.byteLength) {
79792 throw new RangeError('\'offset\' is out of bounds');
79793 }
79794 if (len > value.byteLength - offset) {
79795 throw new RangeError('\'length\' is out of bounds');
79796 }
79797 return new Buffer(value.slice(offset, offset + len));
79798 }
79799 if (Buffer.isBuffer(value)) {
79800 var out = new Buffer(value.length);
79801 value.copy(out, 0, 0, value.length);
79802 return out;
79803 }
79804 if (value) {
79805 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
79806 return new Buffer(value);
79807 }
79808 if (value.type === 'Buffer' && Array.isArray(value.data)) {
79809 return new Buffer(value.data);
79810 }
79811 }
79812
79813 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
79814 }
79815 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
79816 if (typeof Buffer.allocUnsafeSlow === 'function') {
79817 return Buffer.allocUnsafeSlow(size);
79818 }
79819 if (typeof size !== 'number') {
79820 throw new TypeError('size must be a number');
79821 }
79822 if (size >= MAX_LEN) {
79823 throw new RangeError('size is too large');
79824 }
79825 return new SlowBuffer(size);
79826 }
79827
79828 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79829 },{"buffer":5}],5:[function(require,module,exports){
79830 /*!
79831 * The buffer module from node.js, for the browser.
79832 *
79833 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79834 * @license MIT
79835 */
79836 /* eslint-disable no-proto */
79837
79838 'use strict'
79839
79840 var base64 = require('base64-js')
79841 var ieee754 = require('ieee754')
79842
79843 exports.Buffer = Buffer
79844 exports.SlowBuffer = SlowBuffer
79845 exports.INSPECT_MAX_BYTES = 50
79846
79847 var K_MAX_LENGTH = 0x7fffffff
79848 exports.kMaxLength = K_MAX_LENGTH
79849
79850 /**
79851 * If `Buffer.TYPED_ARRAY_SUPPORT`:
79852 * === true Use Uint8Array implementation (fastest)
79853 * === false Print warning and recommend using `buffer` v4.x which has an Object
79854 * implementation (most compatible, even IE6)
79855 *
79856 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
79857 * Opera 11.6+, iOS 4.2+.
79858 *
79859 * We report that the browser does not support typed arrays if the are not subclassable
79860 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
79861 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
79862 * for __proto__ and has a buggy typed array implementation.
79863 */
79864 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
79865
79866 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
79867 typeof console.error === 'function') {
79868 console.error(
79869 'This browser lacks typed array (Uint8Array) support which is required by ' +
79870 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
79871 )
79872 }
79873
79874 function typedArraySupport () {
79875 // Can typed array instances can be augmented?
79876 try {
79877 var arr = new Uint8Array(1)
79878 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
79879 return arr.foo() === 42
79880 } catch (e) {
79881 return false
79882 }
79883 }
79884
79885 function createBuffer (length) {
79886 if (length > K_MAX_LENGTH) {
79887 throw new RangeError('Invalid typed array length')
79888 }
79889 // Return an augmented `Uint8Array` instance
79890 var buf = new Uint8Array(length)
79891 buf.__proto__ = Buffer.prototype
79892 return buf
79893 }
79894
79895 /**
79896 * The Buffer constructor returns instances of `Uint8Array` that have their
79897 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
79898 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
79899 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
79900 * returns a single octet.
79901 *
79902 * The `Uint8Array` prototype remains unmodified.
79903 */
79904
79905 function Buffer (arg, encodingOrOffset, length) {
79906 // Common case.
79907 if (typeof arg === 'number') {
79908 if (typeof encodingOrOffset === 'string') {
79909 throw new Error(
79910 'If encoding is specified then the first argument must be a string'
79911 )
79912 }
79913 return allocUnsafe(arg)
79914 }
79915 return from(arg, encodingOrOffset, length)
79916 }
79917
79918 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
79919 if (typeof Symbol !== 'undefined' && Symbol.species &&
79920 Buffer[Symbol.species] === Buffer) {
79921 Object.defineProperty(Buffer, Symbol.species, {
79922 value: null,
79923 configurable: true,
79924 enumerable: false,
79925 writable: false
79926 })
79927 }
79928
79929 Buffer.poolSize = 8192 // not used by this implementation
79930
79931 function from (value, encodingOrOffset, length) {
79932 if (typeof value === 'number') {
79933 throw new TypeError('"value" argument must not be a number')
79934 }
79935
79936 if (value instanceof ArrayBuffer) {
79937 return fromArrayBuffer(value, encodingOrOffset, length)
79938 }
79939
79940 if (typeof value === 'string') {
79941 return fromString(value, encodingOrOffset)
79942 }
79943
79944 return fromObject(value)
79945 }
79946
79947 /**
79948 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
79949 * if value is a number.
79950 * Buffer.from(str[, encoding])
79951 * Buffer.from(array)
79952 * Buffer.from(buffer)
79953 * Buffer.from(arrayBuffer[, byteOffset[, length]])
79954 **/
79955 Buffer.from = function (value, encodingOrOffset, length) {
79956 return from(value, encodingOrOffset, length)
79957 }
79958
79959 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
79960 // https://github.com/feross/buffer/pull/148
79961 Buffer.prototype.__proto__ = Uint8Array.prototype
79962 Buffer.__proto__ = Uint8Array
79963
79964 function assertSize (size) {
79965 if (typeof size !== 'number') {
79966 throw new TypeError('"size" argument must be a number')
79967 } else if (size < 0) {
79968 throw new RangeError('"size" argument must not be negative')
79969 }
79970 }
79971
79972 function alloc (size, fill, encoding) {
79973 assertSize(size)
79974 if (size <= 0) {
79975 return createBuffer(size)
79976 }
79977 if (fill !== undefined) {
79978 // Only pay attention to encoding if it's a string. This
79979 // prevents accidentally sending in a number that would
79980 // be interpretted as a start offset.
79981 return typeof encoding === 'string'
79982 ? createBuffer(size).fill(fill, encoding)
79983 : createBuffer(size).fill(fill)
79984 }
79985 return createBuffer(size)
79986 }
79987
79988 /**
79989 * Creates a new filled Buffer instance.
79990 * alloc(size[, fill[, encoding]])
79991 **/
79992 Buffer.alloc = function (size, fill, encoding) {
79993 return alloc(size, fill, encoding)
79994 }
79995
79996 function allocUnsafe (size) {
79997 assertSize(size)
79998 return createBuffer(size < 0 ? 0 : checked(size) | 0)
79999 }
80000
80001 /**
80002 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
80003 * */
80004 Buffer.allocUnsafe = function (size) {
80005 return allocUnsafe(size)
80006 }
80007 /**
80008 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
80009 */
80010 Buffer.allocUnsafeSlow = function (size) {
80011 return allocUnsafe(size)
80012 }
80013
80014 function fromString (string, encoding) {
80015 if (typeof encoding !== 'string' || encoding === '') {
80016 encoding = 'utf8'
80017 }
80018
80019 if (!Buffer.isEncoding(encoding)) {
80020 throw new TypeError('"encoding" must be a valid string encoding')
80021 }
80022
80023 var length = byteLength(string, encoding) | 0
80024 var buf = createBuffer(length)
80025
80026 var actual = buf.write(string, encoding)
80027
80028 if (actual !== length) {
80029 // Writing a hex string, for example, that contains invalid characters will
80030 // cause everything after the first invalid character to be ignored. (e.g.
80031 // 'abxxcd' will be treated as 'ab')
80032 buf = buf.slice(0, actual)
80033 }
80034
80035 return buf
80036 }
80037
80038 function fromArrayLike (array) {
80039 var length = array.length < 0 ? 0 : checked(array.length) | 0
80040 var buf = createBuffer(length)
80041 for (var i = 0; i < length; i += 1) {
80042 buf[i] = array[i] & 255
80043 }
80044 return buf
80045 }
80046
80047 function fromArrayBuffer (array, byteOffset, length) {
80048 if (byteOffset < 0 || array.byteLength < byteOffset) {
80049 throw new RangeError('\'offset\' is out of bounds')
80050 }
80051
80052 if (array.byteLength < byteOffset + (length || 0)) {
80053 throw new RangeError('\'length\' is out of bounds')
80054 }
80055
80056 var buf
80057 if (byteOffset === undefined && length === undefined) {
80058 buf = new Uint8Array(array)
80059 } else if (length === undefined) {
80060 buf = new Uint8Array(array, byteOffset)
80061 } else {
80062 buf = new Uint8Array(array, byteOffset, length)
80063 }
80064
80065 // Return an augmented `Uint8Array` instance
80066 buf.__proto__ = Buffer.prototype
80067 return buf
80068 }
80069
80070 function fromObject (obj) {
80071 if (Buffer.isBuffer(obj)) {
80072 var len = checked(obj.length) | 0
80073 var buf = createBuffer(len)
80074
80075 if (buf.length === 0) {
80076 return buf
80077 }
80078
80079 obj.copy(buf, 0, 0, len)
80080 return buf
80081 }
80082
80083 if (obj) {
80084 if (ArrayBuffer.isView(obj) || 'length' in obj) {
80085 if (typeof obj.length !== 'number' || isnan(obj.length)) {
80086 return createBuffer(0)
80087 }
80088 return fromArrayLike(obj)
80089 }
80090
80091 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
80092 return fromArrayLike(obj.data)
80093 }
80094 }
80095
80096 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
80097 }
80098
80099 function checked (length) {
80100 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
80101 // length is NaN (which is otherwise coerced to zero.)
80102 if (length >= K_MAX_LENGTH) {
80103 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
80104 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
80105 }
80106 return length | 0
80107 }
80108
80109 function SlowBuffer (length) {
80110 if (+length != length) { // eslint-disable-line eqeqeq
80111 length = 0
80112 }
80113 return Buffer.alloc(+length)
80114 }
80115
80116 Buffer.isBuffer = function isBuffer (b) {
80117 return b != null && b._isBuffer === true
80118 }
80119
80120 Buffer.compare = function compare (a, b) {
80121 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
80122 throw new TypeError('Arguments must be Buffers')
80123 }
80124
80125 if (a === b) return 0
80126
80127 var x = a.length
80128 var y = b.length
80129
80130 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
80131 if (a[i] !== b[i]) {
80132 x = a[i]
80133 y = b[i]
80134 break
80135 }
80136 }
80137
80138 if (x < y) return -1
80139 if (y < x) return 1
80140 return 0
80141 }
80142
80143 Buffer.isEncoding = function isEncoding (encoding) {
80144 switch (String(encoding).toLowerCase()) {
80145 case 'hex':
80146 case 'utf8':
80147 case 'utf-8':
80148 case 'ascii':
80149 case 'latin1':
80150 case 'binary':
80151 case 'base64':
80152 case 'ucs2':
80153 case 'ucs-2':
80154 case 'utf16le':
80155 case 'utf-16le':
80156 return true
80157 default:
80158 return false
80159 }
80160 }
80161
80162 Buffer.concat = function concat (list, length) {
80163 if (!Array.isArray(list)) {
80164 throw new TypeError('"list" argument must be an Array of Buffers')
80165 }
80166
80167 if (list.length === 0) {
80168 return Buffer.alloc(0)
80169 }
80170
80171 var i
80172 if (length === undefined) {
80173 length = 0
80174 for (i = 0; i < list.length; ++i) {
80175 length += list[i].length
80176 }
80177 }
80178
80179 var buffer = Buffer.allocUnsafe(length)
80180 var pos = 0
80181 for (i = 0; i < list.length; ++i) {
80182 var buf = list[i]
80183 if (!Buffer.isBuffer(buf)) {
80184 throw new TypeError('"list" argument must be an Array of Buffers')
80185 }
80186 buf.copy(buffer, pos)
80187 pos += buf.length
80188 }
80189 return buffer
80190 }
80191
80192 function byteLength (string, encoding) {
80193 if (Buffer.isBuffer(string)) {
80194 return string.length
80195 }
80196 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
80197 return string.byteLength
80198 }
80199 if (typeof string !== 'string') {
80200 string = '' + string
80201 }
80202
80203 var len = string.length
80204 if (len === 0) return 0
80205
80206 // Use a for loop to avoid recursion
80207 var loweredCase = false
80208 for (;;) {
80209 switch (encoding) {
80210 case 'ascii':
80211 case 'latin1':
80212 case 'binary':
80213 return len
80214 case 'utf8':
80215 case 'utf-8':
80216 case undefined:
80217 return utf8ToBytes(string).length
80218 case 'ucs2':
80219 case 'ucs-2':
80220 case 'utf16le':
80221 case 'utf-16le':
80222 return len * 2
80223 case 'hex':
80224 return len >>> 1
80225 case 'base64':
80226 return base64ToBytes(string).length
80227 default:
80228 if (loweredCase) return utf8ToBytes(string).length // assume utf8
80229 encoding = ('' + encoding).toLowerCase()
80230 loweredCase = true
80231 }
80232 }
80233 }
80234 Buffer.byteLength = byteLength
80235
80236 function slowToString (encoding, start, end) {
80237 var loweredCase = false
80238
80239 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
80240 // property of a typed array.
80241
80242 // This behaves neither like String nor Uint8Array in that we set start/end
80243 // to their upper/lower bounds if the value passed is out of range.
80244 // undefined is handled specially as per ECMA-262 6th Edition,
80245 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
80246 if (start === undefined || start < 0) {
80247 start = 0
80248 }
80249 // Return early if start > this.length. Done here to prevent potential uint32
80250 // coercion fail below.
80251 if (start > this.length) {
80252 return ''
80253 }
80254
80255 if (end === undefined || end > this.length) {
80256 end = this.length
80257 }
80258
80259 if (end <= 0) {
80260 return ''
80261 }
80262
80263 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
80264 end >>>= 0
80265 start >>>= 0
80266
80267 if (end <= start) {
80268 return ''
80269 }
80270
80271 if (!encoding) encoding = 'utf8'
80272
80273 while (true) {
80274 switch (encoding) {
80275 case 'hex':
80276 return hexSlice(this, start, end)
80277
80278 case 'utf8':
80279 case 'utf-8':
80280 return utf8Slice(this, start, end)
80281
80282 case 'ascii':
80283 return asciiSlice(this, start, end)
80284
80285 case 'latin1':
80286 case 'binary':
80287 return latin1Slice(this, start, end)
80288
80289 case 'base64':
80290 return base64Slice(this, start, end)
80291
80292 case 'ucs2':
80293 case 'ucs-2':
80294 case 'utf16le':
80295 case 'utf-16le':
80296 return utf16leSlice(this, start, end)
80297
80298 default:
80299 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80300 encoding = (encoding + '').toLowerCase()
80301 loweredCase = true
80302 }
80303 }
80304 }
80305
80306 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
80307 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
80308 // reliably in a browserify context because there could be multiple different
80309 // copies of the 'buffer' package in use. This method works even for Buffer
80310 // instances that were created from another copy of the `buffer` package.
80311 // See: https://github.com/feross/buffer/issues/154
80312 Buffer.prototype._isBuffer = true
80313
80314 function swap (b, n, m) {
80315 var i = b[n]
80316 b[n] = b[m]
80317 b[m] = i
80318 }
80319
80320 Buffer.prototype.swap16 = function swap16 () {
80321 var len = this.length
80322 if (len % 2 !== 0) {
80323 throw new RangeError('Buffer size must be a multiple of 16-bits')
80324 }
80325 for (var i = 0; i < len; i += 2) {
80326 swap(this, i, i + 1)
80327 }
80328 return this
80329 }
80330
80331 Buffer.prototype.swap32 = function swap32 () {
80332 var len = this.length
80333 if (len % 4 !== 0) {
80334 throw new RangeError('Buffer size must be a multiple of 32-bits')
80335 }
80336 for (var i = 0; i < len; i += 4) {
80337 swap(this, i, i + 3)
80338 swap(this, i + 1, i + 2)
80339 }
80340 return this
80341 }
80342
80343 Buffer.prototype.swap64 = function swap64 () {
80344 var len = this.length
80345 if (len % 8 !== 0) {
80346 throw new RangeError('Buffer size must be a multiple of 64-bits')
80347 }
80348 for (var i = 0; i < len; i += 8) {
80349 swap(this, i, i + 7)
80350 swap(this, i + 1, i + 6)
80351 swap(this, i + 2, i + 5)
80352 swap(this, i + 3, i + 4)
80353 }
80354 return this
80355 }
80356
80357 Buffer.prototype.toString = function toString () {
80358 var length = this.length
80359 if (length === 0) return ''
80360 if (arguments.length === 0) return utf8Slice(this, 0, length)
80361 return slowToString.apply(this, arguments)
80362 }
80363
80364 Buffer.prototype.equals = function equals (b) {
80365 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
80366 if (this === b) return true
80367 return Buffer.compare(this, b) === 0
80368 }
80369
80370 Buffer.prototype.inspect = function inspect () {
80371 var str = ''
80372 var max = exports.INSPECT_MAX_BYTES
80373 if (this.length > 0) {
80374 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
80375 if (this.length > max) str += ' ... '
80376 }
80377 return '<Buffer ' + str + '>'
80378 }
80379
80380 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
80381 if (!Buffer.isBuffer(target)) {
80382 throw new TypeError('Argument must be a Buffer')
80383 }
80384
80385 if (start === undefined) {
80386 start = 0
80387 }
80388 if (end === undefined) {
80389 end = target ? target.length : 0
80390 }
80391 if (thisStart === undefined) {
80392 thisStart = 0
80393 }
80394 if (thisEnd === undefined) {
80395 thisEnd = this.length
80396 }
80397
80398 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
80399 throw new RangeError('out of range index')
80400 }
80401
80402 if (thisStart >= thisEnd && start >= end) {
80403 return 0
80404 }
80405 if (thisStart >= thisEnd) {
80406 return -1
80407 }
80408 if (start >= end) {
80409 return 1
80410 }
80411
80412 start >>>= 0
80413 end >>>= 0
80414 thisStart >>>= 0
80415 thisEnd >>>= 0
80416
80417 if (this === target) return 0
80418
80419 var x = thisEnd - thisStart
80420 var y = end - start
80421 var len = Math.min(x, y)
80422
80423 var thisCopy = this.slice(thisStart, thisEnd)
80424 var targetCopy = target.slice(start, end)
80425
80426 for (var i = 0; i < len; ++i) {
80427 if (thisCopy[i] !== targetCopy[i]) {
80428 x = thisCopy[i]
80429 y = targetCopy[i]
80430 break
80431 }
80432 }
80433
80434 if (x < y) return -1
80435 if (y < x) return 1
80436 return 0
80437 }
80438
80439 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
80440 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
80441 //
80442 // Arguments:
80443 // - buffer - a Buffer to search
80444 // - val - a string, Buffer, or number
80445 // - byteOffset - an index into `buffer`; will be clamped to an int32
80446 // - encoding - an optional encoding, relevant is val is a string
80447 // - dir - true for indexOf, false for lastIndexOf
80448 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
80449 // Empty buffer means no match
80450 if (buffer.length === 0) return -1
80451
80452 // Normalize byteOffset
80453 if (typeof byteOffset === 'string') {
80454 encoding = byteOffset
80455 byteOffset = 0
80456 } else if (byteOffset > 0x7fffffff) {
80457 byteOffset = 0x7fffffff
80458 } else if (byteOffset < -0x80000000) {
80459 byteOffset = -0x80000000
80460 }
80461 byteOffset = +byteOffset // Coerce to Number.
80462 if (isNaN(byteOffset)) {
80463 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
80464 byteOffset = dir ? 0 : (buffer.length - 1)
80465 }
80466
80467 // Normalize byteOffset: negative offsets start from the end of the buffer
80468 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
80469 if (byteOffset >= buffer.length) {
80470 if (dir) return -1
80471 else byteOffset = buffer.length - 1
80472 } else if (byteOffset < 0) {
80473 if (dir) byteOffset = 0
80474 else return -1
80475 }
80476
80477 // Normalize val
80478 if (typeof val === 'string') {
80479 val = Buffer.from(val, encoding)
80480 }
80481
80482 // Finally, search either indexOf (if dir is true) or lastIndexOf
80483 if (Buffer.isBuffer(val)) {
80484 // Special case: looking for empty string/buffer always fails
80485 if (val.length === 0) {
80486 return -1
80487 }
80488 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
80489 } else if (typeof val === 'number') {
80490 val = val & 0xFF // Search for a byte value [0-255]
80491 if (typeof Uint8Array.prototype.indexOf === 'function') {
80492 if (dir) {
80493 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
80494 } else {
80495 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
80496 }
80497 }
80498 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
80499 }
80500
80501 throw new TypeError('val must be string, number or Buffer')
80502 }
80503
80504 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
80505 var indexSize = 1
80506 var arrLength = arr.length
80507 var valLength = val.length
80508
80509 if (encoding !== undefined) {
80510 encoding = String(encoding).toLowerCase()
80511 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
80512 encoding === 'utf16le' || encoding === 'utf-16le') {
80513 if (arr.length < 2 || val.length < 2) {
80514 return -1
80515 }
80516 indexSize = 2
80517 arrLength /= 2
80518 valLength /= 2
80519 byteOffset /= 2
80520 }
80521 }
80522
80523 function read (buf, i) {
80524 if (indexSize === 1) {
80525 return buf[i]
80526 } else {
80527 return buf.readUInt16BE(i * indexSize)
80528 }
80529 }
80530
80531 var i
80532 if (dir) {
80533 var foundIndex = -1
80534 for (i = byteOffset; i < arrLength; i++) {
80535 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
80536 if (foundIndex === -1) foundIndex = i
80537 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
80538 } else {
80539 if (foundIndex !== -1) i -= i - foundIndex
80540 foundIndex = -1
80541 }
80542 }
80543 } else {
80544 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
80545 for (i = byteOffset; i >= 0; i--) {
80546 var found = true
80547 for (var j = 0; j < valLength; j++) {
80548 if (read(arr, i + j) !== read(val, j)) {
80549 found = false
80550 break
80551 }
80552 }
80553 if (found) return i
80554 }
80555 }
80556
80557 return -1
80558 }
80559
80560 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
80561 return this.indexOf(val, byteOffset, encoding) !== -1
80562 }
80563
80564 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
80565 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
80566 }
80567
80568 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
80569 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
80570 }
80571
80572 function hexWrite (buf, string, offset, length) {
80573 offset = Number(offset) || 0
80574 var remaining = buf.length - offset
80575 if (!length) {
80576 length = remaining
80577 } else {
80578 length = Number(length)
80579 if (length > remaining) {
80580 length = remaining
80581 }
80582 }
80583
80584 // must be an even number of digits
80585 var strLen = string.length
80586 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
80587
80588 if (length > strLen / 2) {
80589 length = strLen / 2
80590 }
80591 for (var i = 0; i < length; ++i) {
80592 var parsed = parseInt(string.substr(i * 2, 2), 16)
80593 if (isNaN(parsed)) return i
80594 buf[offset + i] = parsed
80595 }
80596 return i
80597 }
80598
80599 function utf8Write (buf, string, offset, length) {
80600 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
80601 }
80602
80603 function asciiWrite (buf, string, offset, length) {
80604 return blitBuffer(asciiToBytes(string), buf, offset, length)
80605 }
80606
80607 function latin1Write (buf, string, offset, length) {
80608 return asciiWrite(buf, string, offset, length)
80609 }
80610
80611 function base64Write (buf, string, offset, length) {
80612 return blitBuffer(base64ToBytes(string), buf, offset, length)
80613 }
80614
80615 function ucs2Write (buf, string, offset, length) {
80616 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
80617 }
80618
80619 Buffer.prototype.write = function write (string, offset, length, encoding) {
80620 // Buffer#write(string)
80621 if (offset === undefined) {
80622 encoding = 'utf8'
80623 length = this.length
80624 offset = 0
80625 // Buffer#write(string, encoding)
80626 } else if (length === undefined && typeof offset === 'string') {
80627 encoding = offset
80628 length = this.length
80629 offset = 0
80630 // Buffer#write(string, offset[, length][, encoding])
80631 } else if (isFinite(offset)) {
80632 offset = offset >>> 0
80633 if (isFinite(length)) {
80634 length = length >>> 0
80635 if (encoding === undefined) encoding = 'utf8'
80636 } else {
80637 encoding = length
80638 length = undefined
80639 }
80640 } else {
80641 throw new Error(
80642 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
80643 )
80644 }
80645
80646 var remaining = this.length - offset
80647 if (length === undefined || length > remaining) length = remaining
80648
80649 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
80650 throw new RangeError('Attempt to write outside buffer bounds')
80651 }
80652
80653 if (!encoding) encoding = 'utf8'
80654
80655 var loweredCase = false
80656 for (;;) {
80657 switch (encoding) {
80658 case 'hex':
80659 return hexWrite(this, string, offset, length)
80660
80661 case 'utf8':
80662 case 'utf-8':
80663 return utf8Write(this, string, offset, length)
80664
80665 case 'ascii':
80666 return asciiWrite(this, string, offset, length)
80667
80668 case 'latin1':
80669 case 'binary':
80670 return latin1Write(this, string, offset, length)
80671
80672 case 'base64':
80673 // Warning: maxLength not taken into account in base64Write
80674 return base64Write(this, string, offset, length)
80675
80676 case 'ucs2':
80677 case 'ucs-2':
80678 case 'utf16le':
80679 case 'utf-16le':
80680 return ucs2Write(this, string, offset, length)
80681
80682 default:
80683 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80684 encoding = ('' + encoding).toLowerCase()
80685 loweredCase = true
80686 }
80687 }
80688 }
80689
80690 Buffer.prototype.toJSON = function toJSON () {
80691 return {
80692 type: 'Buffer',
80693 data: Array.prototype.slice.call(this._arr || this, 0)
80694 }
80695 }
80696
80697 function base64Slice (buf, start, end) {
80698 if (start === 0 && end === buf.length) {
80699 return base64.fromByteArray(buf)
80700 } else {
80701 return base64.fromByteArray(buf.slice(start, end))
80702 }
80703 }
80704
80705 function utf8Slice (buf, start, end) {
80706 end = Math.min(buf.length, end)
80707 var res = []
80708
80709 var i = start
80710 while (i < end) {
80711 var firstByte = buf[i]
80712 var codePoint = null
80713 var bytesPerSequence = (firstByte > 0xEF) ? 4
80714 : (firstByte > 0xDF) ? 3
80715 : (firstByte > 0xBF) ? 2
80716 : 1
80717
80718 if (i + bytesPerSequence <= end) {
80719 var secondByte, thirdByte, fourthByte, tempCodePoint
80720
80721 switch (bytesPerSequence) {
80722 case 1:
80723 if (firstByte < 0x80) {
80724 codePoint = firstByte
80725 }
80726 break
80727 case 2:
80728 secondByte = buf[i + 1]
80729 if ((secondByte & 0xC0) === 0x80) {
80730 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
80731 if (tempCodePoint > 0x7F) {
80732 codePoint = tempCodePoint
80733 }
80734 }
80735 break
80736 case 3:
80737 secondByte = buf[i + 1]
80738 thirdByte = buf[i + 2]
80739 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
80740 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
80741 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
80742 codePoint = tempCodePoint
80743 }
80744 }
80745 break
80746 case 4:
80747 secondByte = buf[i + 1]
80748 thirdByte = buf[i + 2]
80749 fourthByte = buf[i + 3]
80750 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
80751 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
80752 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
80753 codePoint = tempCodePoint
80754 }
80755 }
80756 }
80757 }
80758
80759 if (codePoint === null) {
80760 // we did not generate a valid codePoint so insert a
80761 // replacement char (U+FFFD) and advance only 1 byte
80762 codePoint = 0xFFFD
80763 bytesPerSequence = 1
80764 } else if (codePoint > 0xFFFF) {
80765 // encode to utf16 (surrogate pair dance)
80766 codePoint -= 0x10000
80767 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
80768 codePoint = 0xDC00 | codePoint & 0x3FF
80769 }
80770
80771 res.push(codePoint)
80772 i += bytesPerSequence
80773 }
80774
80775 return decodeCodePointsArray(res)
80776 }
80777
80778 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
80779 // the lowest limit is Chrome, with 0x10000 args.
80780 // We go 1 magnitude less, for safety
80781 var MAX_ARGUMENTS_LENGTH = 0x1000
80782
80783 function decodeCodePointsArray (codePoints) {
80784 var len = codePoints.length
80785 if (len <= MAX_ARGUMENTS_LENGTH) {
80786 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
80787 }
80788
80789 // Decode in chunks to avoid "call stack size exceeded".
80790 var res = ''
80791 var i = 0
80792 while (i < len) {
80793 res += String.fromCharCode.apply(
80794 String,
80795 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
80796 )
80797 }
80798 return res
80799 }
80800
80801 function asciiSlice (buf, start, end) {
80802 var ret = ''
80803 end = Math.min(buf.length, end)
80804
80805 for (var i = start; i < end; ++i) {
80806 ret += String.fromCharCode(buf[i] & 0x7F)
80807 }
80808 return ret
80809 }
80810
80811 function latin1Slice (buf, start, end) {
80812 var ret = ''
80813 end = Math.min(buf.length, end)
80814
80815 for (var i = start; i < end; ++i) {
80816 ret += String.fromCharCode(buf[i])
80817 }
80818 return ret
80819 }
80820
80821 function hexSlice (buf, start, end) {
80822 var len = buf.length
80823
80824 if (!start || start < 0) start = 0
80825 if (!end || end < 0 || end > len) end = len
80826
80827 var out = ''
80828 for (var i = start; i < end; ++i) {
80829 out += toHex(buf[i])
80830 }
80831 return out
80832 }
80833
80834 function utf16leSlice (buf, start, end) {
80835 var bytes = buf.slice(start, end)
80836 var res = ''
80837 for (var i = 0; i < bytes.length; i += 2) {
80838 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
80839 }
80840 return res
80841 }
80842
80843 Buffer.prototype.slice = function slice (start, end) {
80844 var len = this.length
80845 start = ~~start
80846 end = end === undefined ? len : ~~end
80847
80848 if (start < 0) {
80849 start += len
80850 if (start < 0) start = 0
80851 } else if (start > len) {
80852 start = len
80853 }
80854
80855 if (end < 0) {
80856 end += len
80857 if (end < 0) end = 0
80858 } else if (end > len) {
80859 end = len
80860 }
80861
80862 if (end < start) end = start
80863
80864 var newBuf = this.subarray(start, end)
80865 // Return an augmented `Uint8Array` instance
80866 newBuf.__proto__ = Buffer.prototype
80867 return newBuf
80868 }
80869
80870 /*
80871 * Need to make sure that buffer isn't trying to write out of bounds.
80872 */
80873 function checkOffset (offset, ext, length) {
80874 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
80875 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
80876 }
80877
80878 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
80879 offset = offset >>> 0
80880 byteLength = byteLength >>> 0
80881 if (!noAssert) checkOffset(offset, byteLength, this.length)
80882
80883 var val = this[offset]
80884 var mul = 1
80885 var i = 0
80886 while (++i < byteLength && (mul *= 0x100)) {
80887 val += this[offset + i] * mul
80888 }
80889
80890 return val
80891 }
80892
80893 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
80894 offset = offset >>> 0
80895 byteLength = byteLength >>> 0
80896 if (!noAssert) {
80897 checkOffset(offset, byteLength, this.length)
80898 }
80899
80900 var val = this[offset + --byteLength]
80901 var mul = 1
80902 while (byteLength > 0 && (mul *= 0x100)) {
80903 val += this[offset + --byteLength] * mul
80904 }
80905
80906 return val
80907 }
80908
80909 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
80910 offset = offset >>> 0
80911 if (!noAssert) checkOffset(offset, 1, this.length)
80912 return this[offset]
80913 }
80914
80915 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
80916 offset = offset >>> 0
80917 if (!noAssert) checkOffset(offset, 2, this.length)
80918 return this[offset] | (this[offset + 1] << 8)
80919 }
80920
80921 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
80922 offset = offset >>> 0
80923 if (!noAssert) checkOffset(offset, 2, this.length)
80924 return (this[offset] << 8) | this[offset + 1]
80925 }
80926
80927 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
80928 offset = offset >>> 0
80929 if (!noAssert) checkOffset(offset, 4, this.length)
80930
80931 return ((this[offset]) |
80932 (this[offset + 1] << 8) |
80933 (this[offset + 2] << 16)) +
80934 (this[offset + 3] * 0x1000000)
80935 }
80936
80937 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
80938 offset = offset >>> 0
80939 if (!noAssert) checkOffset(offset, 4, this.length)
80940
80941 return (this[offset] * 0x1000000) +
80942 ((this[offset + 1] << 16) |
80943 (this[offset + 2] << 8) |
80944 this[offset + 3])
80945 }
80946
80947 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
80948 offset = offset >>> 0
80949 byteLength = byteLength >>> 0
80950 if (!noAssert) checkOffset(offset, byteLength, this.length)
80951
80952 var val = this[offset]
80953 var mul = 1
80954 var i = 0
80955 while (++i < byteLength && (mul *= 0x100)) {
80956 val += this[offset + i] * mul
80957 }
80958 mul *= 0x80
80959
80960 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80961
80962 return val
80963 }
80964
80965 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
80966 offset = offset >>> 0
80967 byteLength = byteLength >>> 0
80968 if (!noAssert) checkOffset(offset, byteLength, this.length)
80969
80970 var i = byteLength
80971 var mul = 1
80972 var val = this[offset + --i]
80973 while (i > 0 && (mul *= 0x100)) {
80974 val += this[offset + --i] * mul
80975 }
80976 mul *= 0x80
80977
80978 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80979
80980 return val
80981 }
80982
80983 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
80984 offset = offset >>> 0
80985 if (!noAssert) checkOffset(offset, 1, this.length)
80986 if (!(this[offset] & 0x80)) return (this[offset])
80987 return ((0xff - this[offset] + 1) * -1)
80988 }
80989
80990 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
80991 offset = offset >>> 0
80992 if (!noAssert) checkOffset(offset, 2, this.length)
80993 var val = this[offset] | (this[offset + 1] << 8)
80994 return (val & 0x8000) ? val | 0xFFFF0000 : val
80995 }
80996
80997 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
80998 offset = offset >>> 0
80999 if (!noAssert) checkOffset(offset, 2, this.length)
81000 var val = this[offset + 1] | (this[offset] << 8)
81001 return (val & 0x8000) ? val | 0xFFFF0000 : val
81002 }
81003
81004 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
81005 offset = offset >>> 0
81006 if (!noAssert) checkOffset(offset, 4, this.length)
81007
81008 return (this[offset]) |
81009 (this[offset + 1] << 8) |
81010 (this[offset + 2] << 16) |
81011 (this[offset + 3] << 24)
81012 }
81013
81014 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
81015 offset = offset >>> 0
81016 if (!noAssert) checkOffset(offset, 4, this.length)
81017
81018 return (this[offset] << 24) |
81019 (this[offset + 1] << 16) |
81020 (this[offset + 2] << 8) |
81021 (this[offset + 3])
81022 }
81023
81024 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
81025 offset = offset >>> 0
81026 if (!noAssert) checkOffset(offset, 4, this.length)
81027 return ieee754.read(this, offset, true, 23, 4)
81028 }
81029
81030 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
81031 offset = offset >>> 0
81032 if (!noAssert) checkOffset(offset, 4, this.length)
81033 return ieee754.read(this, offset, false, 23, 4)
81034 }
81035
81036 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
81037 offset = offset >>> 0
81038 if (!noAssert) checkOffset(offset, 8, this.length)
81039 return ieee754.read(this, offset, true, 52, 8)
81040 }
81041
81042 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
81043 offset = offset >>> 0
81044 if (!noAssert) checkOffset(offset, 8, this.length)
81045 return ieee754.read(this, offset, false, 52, 8)
81046 }
81047
81048 function checkInt (buf, value, offset, ext, max, min) {
81049 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
81050 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
81051 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81052 }
81053
81054 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
81055 value = +value
81056 offset = offset >>> 0
81057 byteLength = byteLength >>> 0
81058 if (!noAssert) {
81059 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81060 checkInt(this, value, offset, byteLength, maxBytes, 0)
81061 }
81062
81063 var mul = 1
81064 var i = 0
81065 this[offset] = value & 0xFF
81066 while (++i < byteLength && (mul *= 0x100)) {
81067 this[offset + i] = (value / mul) & 0xFF
81068 }
81069
81070 return offset + byteLength
81071 }
81072
81073 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
81074 value = +value
81075 offset = offset >>> 0
81076 byteLength = byteLength >>> 0
81077 if (!noAssert) {
81078 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81079 checkInt(this, value, offset, byteLength, maxBytes, 0)
81080 }
81081
81082 var i = byteLength - 1
81083 var mul = 1
81084 this[offset + i] = value & 0xFF
81085 while (--i >= 0 && (mul *= 0x100)) {
81086 this[offset + i] = (value / mul) & 0xFF
81087 }
81088
81089 return offset + byteLength
81090 }
81091
81092 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
81093 value = +value
81094 offset = offset >>> 0
81095 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
81096 this[offset] = (value & 0xff)
81097 return offset + 1
81098 }
81099
81100 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
81101 value = +value
81102 offset = offset >>> 0
81103 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81104 this[offset] = (value & 0xff)
81105 this[offset + 1] = (value >>> 8)
81106 return offset + 2
81107 }
81108
81109 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
81110 value = +value
81111 offset = offset >>> 0
81112 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81113 this[offset] = (value >>> 8)
81114 this[offset + 1] = (value & 0xff)
81115 return offset + 2
81116 }
81117
81118 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
81119 value = +value
81120 offset = offset >>> 0
81121 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81122 this[offset + 3] = (value >>> 24)
81123 this[offset + 2] = (value >>> 16)
81124 this[offset + 1] = (value >>> 8)
81125 this[offset] = (value & 0xff)
81126 return offset + 4
81127 }
81128
81129 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
81130 value = +value
81131 offset = offset >>> 0
81132 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81133 this[offset] = (value >>> 24)
81134 this[offset + 1] = (value >>> 16)
81135 this[offset + 2] = (value >>> 8)
81136 this[offset + 3] = (value & 0xff)
81137 return offset + 4
81138 }
81139
81140 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
81141 value = +value
81142 offset = offset >>> 0
81143 if (!noAssert) {
81144 var limit = Math.pow(2, (8 * byteLength) - 1)
81145
81146 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81147 }
81148
81149 var i = 0
81150 var mul = 1
81151 var sub = 0
81152 this[offset] = value & 0xFF
81153 while (++i < byteLength && (mul *= 0x100)) {
81154 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
81155 sub = 1
81156 }
81157 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81158 }
81159
81160 return offset + byteLength
81161 }
81162
81163 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
81164 value = +value
81165 offset = offset >>> 0
81166 if (!noAssert) {
81167 var limit = Math.pow(2, (8 * byteLength) - 1)
81168
81169 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81170 }
81171
81172 var i = byteLength - 1
81173 var mul = 1
81174 var sub = 0
81175 this[offset + i] = value & 0xFF
81176 while (--i >= 0 && (mul *= 0x100)) {
81177 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
81178 sub = 1
81179 }
81180 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81181 }
81182
81183 return offset + byteLength
81184 }
81185
81186 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
81187 value = +value
81188 offset = offset >>> 0
81189 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
81190 if (value < 0) value = 0xff + value + 1
81191 this[offset] = (value & 0xff)
81192 return offset + 1
81193 }
81194
81195 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
81196 value = +value
81197 offset = offset >>> 0
81198 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81199 this[offset] = (value & 0xff)
81200 this[offset + 1] = (value >>> 8)
81201 return offset + 2
81202 }
81203
81204 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
81205 value = +value
81206 offset = offset >>> 0
81207 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81208 this[offset] = (value >>> 8)
81209 this[offset + 1] = (value & 0xff)
81210 return offset + 2
81211 }
81212
81213 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
81214 value = +value
81215 offset = offset >>> 0
81216 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81217 this[offset] = (value & 0xff)
81218 this[offset + 1] = (value >>> 8)
81219 this[offset + 2] = (value >>> 16)
81220 this[offset + 3] = (value >>> 24)
81221 return offset + 4
81222 }
81223
81224 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
81225 value = +value
81226 offset = offset >>> 0
81227 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81228 if (value < 0) value = 0xffffffff + value + 1
81229 this[offset] = (value >>> 24)
81230 this[offset + 1] = (value >>> 16)
81231 this[offset + 2] = (value >>> 8)
81232 this[offset + 3] = (value & 0xff)
81233 return offset + 4
81234 }
81235
81236 function checkIEEE754 (buf, value, offset, ext, max, min) {
81237 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81238 if (offset < 0) throw new RangeError('Index out of range')
81239 }
81240
81241 function writeFloat (buf, value, offset, littleEndian, noAssert) {
81242 value = +value
81243 offset = offset >>> 0
81244 if (!noAssert) {
81245 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
81246 }
81247 ieee754.write(buf, value, offset, littleEndian, 23, 4)
81248 return offset + 4
81249 }
81250
81251 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
81252 return writeFloat(this, value, offset, true, noAssert)
81253 }
81254
81255 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
81256 return writeFloat(this, value, offset, false, noAssert)
81257 }
81258
81259 function writeDouble (buf, value, offset, littleEndian, noAssert) {
81260 value = +value
81261 offset = offset >>> 0
81262 if (!noAssert) {
81263 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
81264 }
81265 ieee754.write(buf, value, offset, littleEndian, 52, 8)
81266 return offset + 8
81267 }
81268
81269 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
81270 return writeDouble(this, value, offset, true, noAssert)
81271 }
81272
81273 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
81274 return writeDouble(this, value, offset, false, noAssert)
81275 }
81276
81277 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
81278 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
81279 if (!start) start = 0
81280 if (!end && end !== 0) end = this.length
81281 if (targetStart >= target.length) targetStart = target.length
81282 if (!targetStart) targetStart = 0
81283 if (end > 0 && end < start) end = start
81284
81285 // Copy 0 bytes; we're done
81286 if (end === start) return 0
81287 if (target.length === 0 || this.length === 0) return 0
81288
81289 // Fatal error conditions
81290 if (targetStart < 0) {
81291 throw new RangeError('targetStart out of bounds')
81292 }
81293 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
81294 if (end < 0) throw new RangeError('sourceEnd out of bounds')
81295
81296 // Are we oob?
81297 if (end > this.length) end = this.length
81298 if (target.length - targetStart < end - start) {
81299 end = target.length - targetStart + start
81300 }
81301
81302 var len = end - start
81303 var i
81304
81305 if (this === target && start < targetStart && targetStart < end) {
81306 // descending copy from end
81307 for (i = len - 1; i >= 0; --i) {
81308 target[i + targetStart] = this[i + start]
81309 }
81310 } else if (len < 1000) {
81311 // ascending copy from start
81312 for (i = 0; i < len; ++i) {
81313 target[i + targetStart] = this[i + start]
81314 }
81315 } else {
81316 Uint8Array.prototype.set.call(
81317 target,
81318 this.subarray(start, start + len),
81319 targetStart
81320 )
81321 }
81322
81323 return len
81324 }
81325
81326 // Usage:
81327 // buffer.fill(number[, offset[, end]])
81328 // buffer.fill(buffer[, offset[, end]])
81329 // buffer.fill(string[, offset[, end]][, encoding])
81330 Buffer.prototype.fill = function fill (val, start, end, encoding) {
81331 // Handle string cases:
81332 if (typeof val === 'string') {
81333 if (typeof start === 'string') {
81334 encoding = start
81335 start = 0
81336 end = this.length
81337 } else if (typeof end === 'string') {
81338 encoding = end
81339 end = this.length
81340 }
81341 if (val.length === 1) {
81342 var code = val.charCodeAt(0)
81343 if (code < 256) {
81344 val = code
81345 }
81346 }
81347 if (encoding !== undefined && typeof encoding !== 'string') {
81348 throw new TypeError('encoding must be a string')
81349 }
81350 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
81351 throw new TypeError('Unknown encoding: ' + encoding)
81352 }
81353 } else if (typeof val === 'number') {
81354 val = val & 255
81355 }
81356
81357 // Invalid ranges are not set to a default, so can range check early.
81358 if (start < 0 || this.length < start || this.length < end) {
81359 throw new RangeError('Out of range index')
81360 }
81361
81362 if (end <= start) {
81363 return this
81364 }
81365
81366 start = start >>> 0
81367 end = end === undefined ? this.length : end >>> 0
81368
81369 if (!val) val = 0
81370
81371 var i
81372 if (typeof val === 'number') {
81373 for (i = start; i < end; ++i) {
81374 this[i] = val
81375 }
81376 } else {
81377 var bytes = Buffer.isBuffer(val)
81378 ? val
81379 : new Buffer(val, encoding)
81380 var len = bytes.length
81381 for (i = 0; i < end - start; ++i) {
81382 this[i + start] = bytes[i % len]
81383 }
81384 }
81385
81386 return this
81387 }
81388
81389 // HELPER FUNCTIONS
81390 // ================
81391
81392 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
81393
81394 function base64clean (str) {
81395 // Node strips out invalid characters like \n and \t from the string, base64-js does not
81396 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
81397 // Node converts strings with length < 2 to ''
81398 if (str.length < 2) return ''
81399 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
81400 while (str.length % 4 !== 0) {
81401 str = str + '='
81402 }
81403 return str
81404 }
81405
81406 function stringtrim (str) {
81407 if (str.trim) return str.trim()
81408 return str.replace(/^\s+|\s+$/g, '')
81409 }
81410
81411 function toHex (n) {
81412 if (n < 16) return '0' + n.toString(16)
81413 return n.toString(16)
81414 }
81415
81416 function utf8ToBytes (string, units) {
81417 units = units || Infinity
81418 var codePoint
81419 var length = string.length
81420 var leadSurrogate = null
81421 var bytes = []
81422
81423 for (var i = 0; i < length; ++i) {
81424 codePoint = string.charCodeAt(i)
81425
81426 // is surrogate component
81427 if (codePoint > 0xD7FF && codePoint < 0xE000) {
81428 // last char was a lead
81429 if (!leadSurrogate) {
81430 // no lead yet
81431 if (codePoint > 0xDBFF) {
81432 // unexpected trail
81433 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81434 continue
81435 } else if (i + 1 === length) {
81436 // unpaired lead
81437 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81438 continue
81439 }
81440
81441 // valid lead
81442 leadSurrogate = codePoint
81443
81444 continue
81445 }
81446
81447 // 2 leads in a row
81448 if (codePoint < 0xDC00) {
81449 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81450 leadSurrogate = codePoint
81451 continue
81452 }
81453
81454 // valid surrogate pair
81455 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
81456 } else if (leadSurrogate) {
81457 // valid bmp char, but last char was a lead
81458 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81459 }
81460
81461 leadSurrogate = null
81462
81463 // encode utf8
81464 if (codePoint < 0x80) {
81465 if ((units -= 1) < 0) break
81466 bytes.push(codePoint)
81467 } else if (codePoint < 0x800) {
81468 if ((units -= 2) < 0) break
81469 bytes.push(
81470 codePoint >> 0x6 | 0xC0,
81471 codePoint & 0x3F | 0x80
81472 )
81473 } else if (codePoint < 0x10000) {
81474 if ((units -= 3) < 0) break
81475 bytes.push(
81476 codePoint >> 0xC | 0xE0,
81477 codePoint >> 0x6 & 0x3F | 0x80,
81478 codePoint & 0x3F | 0x80
81479 )
81480 } else if (codePoint < 0x110000) {
81481 if ((units -= 4) < 0) break
81482 bytes.push(
81483 codePoint >> 0x12 | 0xF0,
81484 codePoint >> 0xC & 0x3F | 0x80,
81485 codePoint >> 0x6 & 0x3F | 0x80,
81486 codePoint & 0x3F | 0x80
81487 )
81488 } else {
81489 throw new Error('Invalid code point')
81490 }
81491 }
81492
81493 return bytes
81494 }
81495
81496 function asciiToBytes (str) {
81497 var byteArray = []
81498 for (var i = 0; i < str.length; ++i) {
81499 // Node's code seems to be doing this and not & 0x7F..
81500 byteArray.push(str.charCodeAt(i) & 0xFF)
81501 }
81502 return byteArray
81503 }
81504
81505 function utf16leToBytes (str, units) {
81506 var c, hi, lo
81507 var byteArray = []
81508 for (var i = 0; i < str.length; ++i) {
81509 if ((units -= 2) < 0) break
81510
81511 c = str.charCodeAt(i)
81512 hi = c >> 8
81513 lo = c % 256
81514 byteArray.push(lo)
81515 byteArray.push(hi)
81516 }
81517
81518 return byteArray
81519 }
81520
81521 function base64ToBytes (str) {
81522 return base64.toByteArray(base64clean(str))
81523 }
81524
81525 function blitBuffer (src, dst, offset, length) {
81526 for (var i = 0; i < length; ++i) {
81527 if ((i + offset >= dst.length) || (i >= src.length)) break
81528 dst[i + offset] = src[i]
81529 }
81530 return i
81531 }
81532
81533 function isnan (val) {
81534 return val !== val // eslint-disable-line no-self-compare
81535 }
81536
81537 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
81538 (function (Buffer){
81539 // Copyright Joyent, Inc. and other Node contributors.
81540 //
81541 // Permission is hereby granted, free of charge, to any person obtaining a
81542 // copy of this software and associated documentation files (the
81543 // "Software"), to deal in the Software without restriction, including
81544 // without limitation the rights to use, copy, modify, merge, publish,
81545 // distribute, sublicense, and/or sell copies of the Software, and to permit
81546 // persons to whom the Software is furnished to do so, subject to the
81547 // following conditions:
81548 //
81549 // The above copyright notice and this permission notice shall be included
81550 // in all copies or substantial portions of the Software.
81551 //
81552 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81553 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81554 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81555 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81556 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81557 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81558 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81559
81560 // NOTE: These type checking functions intentionally don't use `instanceof`
81561 // because it is fragile and can be easily faked with `Object.create()`.
81562
81563 function isArray(arg) {
81564 if (Array.isArray) {
81565 return Array.isArray(arg);
81566 }
81567 return objectToString(arg) === '[object Array]';
81568 }
81569 exports.isArray = isArray;
81570
81571 function isBoolean(arg) {
81572 return typeof arg === 'boolean';
81573 }
81574 exports.isBoolean = isBoolean;
81575
81576 function isNull(arg) {
81577 return arg === null;
81578 }
81579 exports.isNull = isNull;
81580
81581 function isNullOrUndefined(arg) {
81582 return arg == null;
81583 }
81584 exports.isNullOrUndefined = isNullOrUndefined;
81585
81586 function isNumber(arg) {
81587 return typeof arg === 'number';
81588 }
81589 exports.isNumber = isNumber;
81590
81591 function isString(arg) {
81592 return typeof arg === 'string';
81593 }
81594 exports.isString = isString;
81595
81596 function isSymbol(arg) {
81597 return typeof arg === 'symbol';
81598 }
81599 exports.isSymbol = isSymbol;
81600
81601 function isUndefined(arg) {
81602 return arg === void 0;
81603 }
81604 exports.isUndefined = isUndefined;
81605
81606 function isRegExp(re) {
81607 return objectToString(re) === '[object RegExp]';
81608 }
81609 exports.isRegExp = isRegExp;
81610
81611 function isObject(arg) {
81612 return typeof arg === 'object' && arg !== null;
81613 }
81614 exports.isObject = isObject;
81615
81616 function isDate(d) {
81617 return objectToString(d) === '[object Date]';
81618 }
81619 exports.isDate = isDate;
81620
81621 function isError(e) {
81622 return (objectToString(e) === '[object Error]' || e instanceof Error);
81623 }
81624 exports.isError = isError;
81625
81626 function isFunction(arg) {
81627 return typeof arg === 'function';
81628 }
81629 exports.isFunction = isFunction;
81630
81631 function isPrimitive(arg) {
81632 return arg === null ||
81633 typeof arg === 'boolean' ||
81634 typeof arg === 'number' ||
81635 typeof arg === 'string' ||
81636 typeof arg === 'symbol' || // ES6 symbol
81637 typeof arg === 'undefined';
81638 }
81639 exports.isPrimitive = isPrimitive;
81640
81641 exports.isBuffer = Buffer.isBuffer;
81642
81643 function objectToString(o) {
81644 return Object.prototype.toString.call(o);
81645 }
81646
81647 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
81648 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
81649 // Copyright Joyent, Inc. and other Node contributors.
81650 //
81651 // Permission is hereby granted, free of charge, to any person obtaining a
81652 // copy of this software and associated documentation files (the
81653 // "Software"), to deal in the Software without restriction, including
81654 // without limitation the rights to use, copy, modify, merge, publish,
81655 // distribute, sublicense, and/or sell copies of the Software, and to permit
81656 // persons to whom the Software is furnished to do so, subject to the
81657 // following conditions:
81658 //
81659 // The above copyright notice and this permission notice shall be included
81660 // in all copies or substantial portions of the Software.
81661 //
81662 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81663 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81664 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81665 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81666 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81667 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81668 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81669
81670 function EventEmitter() {
81671 this._events = this._events || {};
81672 this._maxListeners = this._maxListeners || undefined;
81673 }
81674 module.exports = EventEmitter;
81675
81676 // Backwards-compat with node 0.10.x
81677 EventEmitter.EventEmitter = EventEmitter;
81678
81679 EventEmitter.prototype._events = undefined;
81680 EventEmitter.prototype._maxListeners = undefined;
81681
81682 // By default EventEmitters will print a warning if more than 10 listeners are
81683 // added to it. This is a useful default which helps finding memory leaks.
81684 EventEmitter.defaultMaxListeners = 10;
81685
81686 // Obviously not all Emitters should be limited to 10. This function allows
81687 // that to be increased. Set to zero for unlimited.
81688 EventEmitter.prototype.setMaxListeners = function(n) {
81689 if (!isNumber(n) || n < 0 || isNaN(n))
81690 throw TypeError('n must be a positive number');
81691 this._maxListeners = n;
81692 return this;
81693 };
81694
81695 EventEmitter.prototype.emit = function(type) {
81696 var er, handler, len, args, i, listeners;
81697
81698 if (!this._events)
81699 this._events = {};
81700
81701 // If there is no 'error' event listener then throw.
81702 if (type === 'error') {
81703 if (!this._events.error ||
81704 (isObject(this._events.error) && !this._events.error.length)) {
81705 er = arguments[1];
81706 if (er instanceof Error) {
81707 throw er; // Unhandled 'error' event
81708 } else {
81709 // At least give some kind of context to the user
81710 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
81711 err.context = er;
81712 throw err;
81713 }
81714 }
81715 }
81716
81717 handler = this._events[type];
81718
81719 if (isUndefined(handler))
81720 return false;
81721
81722 if (isFunction(handler)) {
81723 switch (arguments.length) {
81724 // fast cases
81725 case 1:
81726 handler.call(this);
81727 break;
81728 case 2:
81729 handler.call(this, arguments[1]);
81730 break;
81731 case 3:
81732 handler.call(this, arguments[1], arguments[2]);
81733 break;
81734 // slower
81735 default:
81736 args = Array.prototype.slice.call(arguments, 1);
81737 handler.apply(this, args);
81738 }
81739 } else if (isObject(handler)) {
81740 args = Array.prototype.slice.call(arguments, 1);
81741 listeners = handler.slice();
81742 len = listeners.length;
81743 for (i = 0; i < len; i++)
81744 listeners[i].apply(this, args);
81745 }
81746
81747 return true;
81748 };
81749
81750 EventEmitter.prototype.addListener = function(type, listener) {
81751 var m;
81752
81753 if (!isFunction(listener))
81754 throw TypeError('listener must be a function');
81755
81756 if (!this._events)
81757 this._events = {};
81758
81759 // To avoid recursion in the case that type === "newListener"! Before
81760 // adding it to the listeners, first emit "newListener".
81761 if (this._events.newListener)
81762 this.emit('newListener', type,
81763 isFunction(listener.listener) ?
81764 listener.listener : listener);
81765
81766 if (!this._events[type])
81767 // Optimize the case of one listener. Don't need the extra array object.
81768 this._events[type] = listener;
81769 else if (isObject(this._events[type]))
81770 // If we've already got an array, just append.
81771 this._events[type].push(listener);
81772 else
81773 // Adding the second element, need to change to array.
81774 this._events[type] = [this._events[type], listener];
81775
81776 // Check for listener leak
81777 if (isObject(this._events[type]) && !this._events[type].warned) {
81778 if (!isUndefined(this._maxListeners)) {
81779 m = this._maxListeners;
81780 } else {
81781 m = EventEmitter.defaultMaxListeners;
81782 }
81783
81784 if (m && m > 0 && this._events[type].length > m) {
81785 this._events[type].warned = true;
81786 console.error('(node) warning: possible EventEmitter memory ' +
81787 'leak detected. %d listeners added. ' +
81788 'Use emitter.setMaxListeners() to increase limit.',
81789 this._events[type].length);
81790 if (typeof console.trace === 'function') {
81791 // not supported in IE 10
81792 console.trace();
81793 }
81794 }
81795 }
81796
81797 return this;
81798 };
81799
81800 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
81801
81802 EventEmitter.prototype.once = function(type, listener) {
81803 if (!isFunction(listener))
81804 throw TypeError('listener must be a function');
81805
81806 var fired = false;
81807
81808 function g() {
81809 this.removeListener(type, g);
81810
81811 if (!fired) {
81812 fired = true;
81813 listener.apply(this, arguments);
81814 }
81815 }
81816
81817 g.listener = listener;
81818 this.on(type, g);
81819
81820 return this;
81821 };
81822
81823 // emits a 'removeListener' event iff the listener was removed
81824 EventEmitter.prototype.removeListener = function(type, listener) {
81825 var list, position, length, i;
81826
81827 if (!isFunction(listener))
81828 throw TypeError('listener must be a function');
81829
81830 if (!this._events || !this._events[type])
81831 return this;
81832
81833 list = this._events[type];
81834 length = list.length;
81835 position = -1;
81836
81837 if (list === listener ||
81838 (isFunction(list.listener) && list.listener === listener)) {
81839 delete this._events[type];
81840 if (this._events.removeListener)
81841 this.emit('removeListener', type, listener);
81842
81843 } else if (isObject(list)) {
81844 for (i = length; i-- > 0;) {
81845 if (list[i] === listener ||
81846 (list[i].listener && list[i].listener === listener)) {
81847 position = i;
81848 break;
81849 }
81850 }
81851
81852 if (position < 0)
81853 return this;
81854
81855 if (list.length === 1) {
81856 list.length = 0;
81857 delete this._events[type];
81858 } else {
81859 list.splice(position, 1);
81860 }
81861
81862 if (this._events.removeListener)
81863 this.emit('removeListener', type, listener);
81864 }
81865
81866 return this;
81867 };
81868
81869 EventEmitter.prototype.removeAllListeners = function(type) {
81870 var key, listeners;
81871
81872 if (!this._events)
81873 return this;
81874
81875 // not listening for removeListener, no need to emit
81876 if (!this._events.removeListener) {
81877 if (arguments.length === 0)
81878 this._events = {};
81879 else if (this._events[type])
81880 delete this._events[type];
81881 return this;
81882 }
81883
81884 // emit removeListener for all listeners on all events
81885 if (arguments.length === 0) {
81886 for (key in this._events) {
81887 if (key === 'removeListener') continue;
81888 this.removeAllListeners(key);
81889 }
81890 this.removeAllListeners('removeListener');
81891 this._events = {};
81892 return this;
81893 }
81894
81895 listeners = this._events[type];
81896
81897 if (isFunction(listeners)) {
81898 this.removeListener(type, listeners);
81899 } else if (listeners) {
81900 // LIFO order
81901 while (listeners.length)
81902 this.removeListener(type, listeners[listeners.length - 1]);
81903 }
81904 delete this._events[type];
81905
81906 return this;
81907 };
81908
81909 EventEmitter.prototype.listeners = function(type) {
81910 var ret;
81911 if (!this._events || !this._events[type])
81912 ret = [];
81913 else if (isFunction(this._events[type]))
81914 ret = [this._events[type]];
81915 else
81916 ret = this._events[type].slice();
81917 return ret;
81918 };
81919
81920 EventEmitter.prototype.listenerCount = function(type) {
81921 if (this._events) {
81922 var evlistener = this._events[type];
81923
81924 if (isFunction(evlistener))
81925 return 1;
81926 else if (evlistener)
81927 return evlistener.length;
81928 }
81929 return 0;
81930 };
81931
81932 EventEmitter.listenerCount = function(emitter, type) {
81933 return emitter.listenerCount(type);
81934 };
81935
81936 function isFunction(arg) {
81937 return typeof arg === 'function';
81938 }
81939
81940 function isNumber(arg) {
81941 return typeof arg === 'number';
81942 }
81943
81944 function isObject(arg) {
81945 return typeof arg === 'object' && arg !== null;
81946 }
81947
81948 function isUndefined(arg) {
81949 return arg === void 0;
81950 }
81951
81952 },{}],8:[function(require,module,exports){
81953 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
81954 var e, m
81955 var eLen = nBytes * 8 - mLen - 1
81956 var eMax = (1 << eLen) - 1
81957 var eBias = eMax >> 1
81958 var nBits = -7
81959 var i = isLE ? (nBytes - 1) : 0
81960 var d = isLE ? -1 : 1
81961 var s = buffer[offset + i]
81962
81963 i += d
81964
81965 e = s & ((1 << (-nBits)) - 1)
81966 s >>= (-nBits)
81967 nBits += eLen
81968 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81969
81970 m = e & ((1 << (-nBits)) - 1)
81971 e >>= (-nBits)
81972 nBits += mLen
81973 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81974
81975 if (e === 0) {
81976 e = 1 - eBias
81977 } else if (e === eMax) {
81978 return m ? NaN : ((s ? -1 : 1) * Infinity)
81979 } else {
81980 m = m + Math.pow(2, mLen)
81981 e = e - eBias
81982 }
81983 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
81984 }
81985
81986 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
81987 var e, m, c
81988 var eLen = nBytes * 8 - mLen - 1
81989 var eMax = (1 << eLen) - 1
81990 var eBias = eMax >> 1
81991 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
81992 var i = isLE ? 0 : (nBytes - 1)
81993 var d = isLE ? 1 : -1
81994 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
81995
81996 value = Math.abs(value)
81997
81998 if (isNaN(value) || value === Infinity) {
81999 m = isNaN(value) ? 1 : 0
82000 e = eMax
82001 } else {
82002 e = Math.floor(Math.log(value) / Math.LN2)
82003 if (value * (c = Math.pow(2, -e)) < 1) {
82004 e--
82005 c *= 2
82006 }
82007 if (e + eBias >= 1) {
82008 value += rt / c
82009 } else {
82010 value += rt * Math.pow(2, 1 - eBias)
82011 }
82012 if (value * c >= 2) {
82013 e++
82014 c /= 2
82015 }
82016
82017 if (e + eBias >= eMax) {
82018 m = 0
82019 e = eMax
82020 } else if (e + eBias >= 1) {
82021 m = (value * c - 1) * Math.pow(2, mLen)
82022 e = e + eBias
82023 } else {
82024 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
82025 e = 0
82026 }
82027 }
82028
82029 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
82030
82031 e = (e << mLen) | m
82032 eLen += mLen
82033 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
82034
82035 buffer[offset + i - d] |= s * 128
82036 }
82037
82038 },{}],9:[function(require,module,exports){
82039 if (typeof Object.create === 'function') {
82040 // implementation from standard node.js 'util' module
82041 module.exports = function inherits(ctor, superCtor) {
82042 ctor.super_ = superCtor
82043 ctor.prototype = Object.create(superCtor.prototype, {
82044 constructor: {
82045 value: ctor,
82046 enumerable: false,
82047 writable: true,
82048 configurable: true
82049 }
82050 });
82051 };
82052 } else {
82053 // old school shim for old browsers
82054 module.exports = function inherits(ctor, superCtor) {
82055 ctor.super_ = superCtor
82056 var TempCtor = function () {}
82057 TempCtor.prototype = superCtor.prototype
82058 ctor.prototype = new TempCtor()
82059 ctor.prototype.constructor = ctor
82060 }
82061 }
82062
82063 },{}],10:[function(require,module,exports){
82064 /*!
82065 * Determine if an object is a Buffer
82066 *
82067 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
82068 * @license MIT
82069 */
82070
82071 // The _isBuffer check is for Safari 5-7 support, because it's missing
82072 // Object.prototype.constructor. Remove this eventually
82073 module.exports = function (obj) {
82074 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
82075 }
82076
82077 function isBuffer (obj) {
82078 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
82079 }
82080
82081 // For Node v0.10 support. Remove this eventually.
82082 function isSlowBuffer (obj) {
82083 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
82084 }
82085
82086 },{}],11:[function(require,module,exports){
82087 var toString = {}.toString;
82088
82089 module.exports = Array.isArray || function (arr) {
82090 return toString.call(arr) == '[object Array]';
82091 };
82092
82093 },{}],12:[function(require,module,exports){
82094 (function (process){
82095 'use strict';
82096
82097 if (!process.version ||
82098 process.version.indexOf('v0.') === 0 ||
82099 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
82100 module.exports = nextTick;
82101 } else {
82102 module.exports = process.nextTick;
82103 }
82104
82105 function nextTick(fn, arg1, arg2, arg3) {
82106 if (typeof fn !== 'function') {
82107 throw new TypeError('"callback" argument must be a function');
82108 }
82109 var len = arguments.length;
82110 var args, i;
82111 switch (len) {
82112 case 0:
82113 case 1:
82114 return process.nextTick(fn);
82115 case 2:
82116 return process.nextTick(function afterTickOne() {
82117 fn.call(null, arg1);
82118 });
82119 case 3:
82120 return process.nextTick(function afterTickTwo() {
82121 fn.call(null, arg1, arg2);
82122 });
82123 case 4:
82124 return process.nextTick(function afterTickThree() {
82125 fn.call(null, arg1, arg2, arg3);
82126 });
82127 default:
82128 args = new Array(len - 1);
82129 i = 0;
82130 while (i < args.length) {
82131 args[i++] = arguments[i];
82132 }
82133 return process.nextTick(function afterTick() {
82134 fn.apply(null, args);
82135 });
82136 }
82137 }
82138
82139 }).call(this,require('_process'))
82140 },{"_process":13}],13:[function(require,module,exports){
82141 // shim for using process in browser
82142 var process = module.exports = {};
82143
82144 // cached from whatever global is present so that test runners that stub it
82145 // don't break things. But we need to wrap it in a try catch in case it is
82146 // wrapped in strict mode code which doesn't define any globals. It's inside a
82147 // function because try/catches deoptimize in certain engines.
82148
82149 var cachedSetTimeout;
82150 var cachedClearTimeout;
82151
82152 function defaultSetTimout() {
82153 throw new Error('setTimeout has not been defined');
82154 }
82155 function defaultClearTimeout () {
82156 throw new Error('clearTimeout has not been defined');
82157 }
82158 (function () {
82159 try {
82160 if (typeof setTimeout === 'function') {
82161 cachedSetTimeout = setTimeout;
82162 } else {
82163 cachedSetTimeout = defaultSetTimout;
82164 }
82165 } catch (e) {
82166 cachedSetTimeout = defaultSetTimout;
82167 }
82168 try {
82169 if (typeof clearTimeout === 'function') {
82170 cachedClearTimeout = clearTimeout;
82171 } else {
82172 cachedClearTimeout = defaultClearTimeout;
82173 }
82174 } catch (e) {
82175 cachedClearTimeout = defaultClearTimeout;
82176 }
82177 } ())
82178 function runTimeout(fun) {
82179 if (cachedSetTimeout === setTimeout) {
82180 //normal enviroments in sane situations
82181 return setTimeout(fun, 0);
82182 }
82183 // if setTimeout wasn't available but was latter defined
82184 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
82185 cachedSetTimeout = setTimeout;
82186 return setTimeout(fun, 0);
82187 }
82188 try {
82189 // when when somebody has screwed with setTimeout but no I.E. maddness
82190 return cachedSetTimeout(fun, 0);
82191 } catch(e){
82192 try {
82193 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82194 return cachedSetTimeout.call(null, fun, 0);
82195 } catch(e){
82196 // 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
82197 return cachedSetTimeout.call(this, fun, 0);
82198 }
82199 }
82200
82201
82202 }
82203 function runClearTimeout(marker) {
82204 if (cachedClearTimeout === clearTimeout) {
82205 //normal enviroments in sane situations
82206 return clearTimeout(marker);
82207 }
82208 // if clearTimeout wasn't available but was latter defined
82209 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
82210 cachedClearTimeout = clearTimeout;
82211 return clearTimeout(marker);
82212 }
82213 try {
82214 // when when somebody has screwed with setTimeout but no I.E. maddness
82215 return cachedClearTimeout(marker);
82216 } catch (e){
82217 try {
82218 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82219 return cachedClearTimeout.call(null, marker);
82220 } catch (e){
82221 // 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.
82222 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
82223 return cachedClearTimeout.call(this, marker);
82224 }
82225 }
82226
82227
82228
82229 }
82230 var queue = [];
82231 var draining = false;
82232 var currentQueue;
82233 var queueIndex = -1;
82234
82235 function cleanUpNextTick() {
82236 if (!draining || !currentQueue) {
82237 return;
82238 }
82239 draining = false;
82240 if (currentQueue.length) {
82241 queue = currentQueue.concat(queue);
82242 } else {
82243 queueIndex = -1;
82244 }
82245 if (queue.length) {
82246 drainQueue();
82247 }
82248 }
82249
82250 function drainQueue() {
82251 if (draining) {
82252 return;
82253 }
82254 var timeout = runTimeout(cleanUpNextTick);
82255 draining = true;
82256
82257 var len = queue.length;
82258 while(len) {
82259 currentQueue = queue;
82260 queue = [];
82261 while (++queueIndex < len) {
82262 if (currentQueue) {
82263 currentQueue[queueIndex].run();
82264 }
82265 }
82266 queueIndex = -1;
82267 len = queue.length;
82268 }
82269 currentQueue = null;
82270 draining = false;
82271 runClearTimeout(timeout);
82272 }
82273
82274 process.nextTick = function (fun) {
82275 var args = new Array(arguments.length - 1);
82276 if (arguments.length > 1) {
82277 for (var i = 1; i < arguments.length; i++) {
82278 args[i - 1] = arguments[i];
82279 }
82280 }
82281 queue.push(new Item(fun, args));
82282 if (queue.length === 1 && !draining) {
82283 runTimeout(drainQueue);
82284 }
82285 };
82286
82287 // v8 likes predictible objects
82288 function Item(fun, array) {
82289 this.fun = fun;
82290 this.array = array;
82291 }
82292 Item.prototype.run = function () {
82293 this.fun.apply(null, this.array);
82294 };
82295 process.title = 'browser';
82296 process.browser = true;
82297 process.env = {};
82298 process.argv = [];
82299 process.version = ''; // empty string to avoid regexp issues
82300 process.versions = {};
82301
82302 function noop() {}
82303
82304 process.on = noop;
82305 process.addListener = noop;
82306 process.once = noop;
82307 process.off = noop;
82308 process.removeListener = noop;
82309 process.removeAllListeners = noop;
82310 process.emit = noop;
82311
82312 process.binding = function (name) {
82313 throw new Error('process.binding is not supported');
82314 };
82315
82316 process.cwd = function () { return '/' };
82317 process.chdir = function (dir) {
82318 throw new Error('process.chdir is not supported');
82319 };
82320 process.umask = function() { return 0; };
82321
82322 },{}],14:[function(require,module,exports){
82323 module.exports = require("./lib/_stream_duplex.js")
82324
82325 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
82326 // a duplex stream is just a stream that is both readable and writable.
82327 // Since JS doesn't have multiple prototypal inheritance, this class
82328 // prototypally inherits from Readable, and then parasitically from
82329 // Writable.
82330
82331 'use strict';
82332
82333 /*<replacement>*/
82334
82335 var objectKeys = Object.keys || function (obj) {
82336 var keys = [];
82337 for (var key in obj) {
82338 keys.push(key);
82339 }return keys;
82340 };
82341 /*</replacement>*/
82342
82343 module.exports = Duplex;
82344
82345 /*<replacement>*/
82346 var processNextTick = require('process-nextick-args');
82347 /*</replacement>*/
82348
82349 /*<replacement>*/
82350 var util = require('core-util-is');
82351 util.inherits = require('inherits');
82352 /*</replacement>*/
82353
82354 var Readable = require('./_stream_readable');
82355 var Writable = require('./_stream_writable');
82356
82357 util.inherits(Duplex, Readable);
82358
82359 var keys = objectKeys(Writable.prototype);
82360 for (var v = 0; v < keys.length; v++) {
82361 var method = keys[v];
82362 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
82363 }
82364
82365 function Duplex(options) {
82366 if (!(this instanceof Duplex)) return new Duplex(options);
82367
82368 Readable.call(this, options);
82369 Writable.call(this, options);
82370
82371 if (options && options.readable === false) this.readable = false;
82372
82373 if (options && options.writable === false) this.writable = false;
82374
82375 this.allowHalfOpen = true;
82376 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
82377
82378 this.once('end', onend);
82379 }
82380
82381 // the no-half-open enforcer
82382 function onend() {
82383 // if we allow half-open state, or if the writable side ended,
82384 // then we're ok.
82385 if (this.allowHalfOpen || this._writableState.ended) return;
82386
82387 // no more data can be written.
82388 // But allow more writes to happen in this tick.
82389 processNextTick(onEndNT, this);
82390 }
82391
82392 function onEndNT(self) {
82393 self.end();
82394 }
82395
82396 function forEach(xs, f) {
82397 for (var i = 0, l = xs.length; i < l; i++) {
82398 f(xs[i], i);
82399 }
82400 }
82401 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
82402 // a passthrough stream.
82403 // basically just the most minimal sort of Transform stream.
82404 // Every written chunk gets output as-is.
82405
82406 'use strict';
82407
82408 module.exports = PassThrough;
82409
82410 var Transform = require('./_stream_transform');
82411
82412 /*<replacement>*/
82413 var util = require('core-util-is');
82414 util.inherits = require('inherits');
82415 /*</replacement>*/
82416
82417 util.inherits(PassThrough, Transform);
82418
82419 function PassThrough(options) {
82420 if (!(this instanceof PassThrough)) return new PassThrough(options);
82421
82422 Transform.call(this, options);
82423 }
82424
82425 PassThrough.prototype._transform = function (chunk, encoding, cb) {
82426 cb(null, chunk);
82427 };
82428 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
82429 (function (process){
82430 'use strict';
82431
82432 module.exports = Readable;
82433
82434 /*<replacement>*/
82435 var processNextTick = require('process-nextick-args');
82436 /*</replacement>*/
82437
82438 /*<replacement>*/
82439 var isArray = require('isarray');
82440 /*</replacement>*/
82441
82442 /*<replacement>*/
82443 var Duplex;
82444 /*</replacement>*/
82445
82446 Readable.ReadableState = ReadableState;
82447
82448 /*<replacement>*/
82449 var EE = require('events').EventEmitter;
82450
82451 var EElistenerCount = function (emitter, type) {
82452 return emitter.listeners(type).length;
82453 };
82454 /*</replacement>*/
82455
82456 /*<replacement>*/
82457 var Stream;
82458 (function () {
82459 try {
82460 Stream = require('st' + 'ream');
82461 } catch (_) {} finally {
82462 if (!Stream) Stream = require('events').EventEmitter;
82463 }
82464 })();
82465 /*</replacement>*/
82466
82467 var Buffer = require('buffer').Buffer;
82468 /*<replacement>*/
82469 var bufferShim = require('buffer-shims');
82470 /*</replacement>*/
82471
82472 /*<replacement>*/
82473 var util = require('core-util-is');
82474 util.inherits = require('inherits');
82475 /*</replacement>*/
82476
82477 /*<replacement>*/
82478 var debugUtil = require('util');
82479 var debug = void 0;
82480 if (debugUtil && debugUtil.debuglog) {
82481 debug = debugUtil.debuglog('stream');
82482 } else {
82483 debug = function () {};
82484 }
82485 /*</replacement>*/
82486
82487 var BufferList = require('./internal/streams/BufferList');
82488 var StringDecoder;
82489
82490 util.inherits(Readable, Stream);
82491
82492 function prependListener(emitter, event, fn) {
82493 // Sadly this is not cacheable as some libraries bundle their own
82494 // event emitter implementation with them.
82495 if (typeof emitter.prependListener === 'function') {
82496 return emitter.prependListener(event, fn);
82497 } else {
82498 // This is a hack to make sure that our error handler is attached before any
82499 // userland ones. NEVER DO THIS. This is here only because this code needs
82500 // to continue to work with older versions of Node.js that do not include
82501 // the prependListener() method. The goal is to eventually remove this hack.
82502 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]];
82503 }
82504 }
82505
82506 function ReadableState(options, stream) {
82507 Duplex = Duplex || require('./_stream_duplex');
82508
82509 options = options || {};
82510
82511 // object stream flag. Used to make read(n) ignore n and to
82512 // make all the buffer merging and length checks go away
82513 this.objectMode = !!options.objectMode;
82514
82515 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
82516
82517 // the point at which it stops calling _read() to fill the buffer
82518 // Note: 0 is a valid value, means "don't call _read preemptively ever"
82519 var hwm = options.highWaterMark;
82520 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
82521 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
82522
82523 // cast to ints.
82524 this.highWaterMark = ~ ~this.highWaterMark;
82525
82526 // A linked list is used to store data chunks instead of an array because the
82527 // linked list can remove elements from the beginning faster than
82528 // array.shift()
82529 this.buffer = new BufferList();
82530 this.length = 0;
82531 this.pipes = null;
82532 this.pipesCount = 0;
82533 this.flowing = null;
82534 this.ended = false;
82535 this.endEmitted = false;
82536 this.reading = false;
82537
82538 // a flag to be able to tell if the onwrite cb is called immediately,
82539 // or on a later tick. We set this to true at first, because any
82540 // actions that shouldn't happen until "later" should generally also
82541 // not happen before the first write call.
82542 this.sync = true;
82543
82544 // whenever we return null, then we set a flag to say
82545 // that we're awaiting a 'readable' event emission.
82546 this.needReadable = false;
82547 this.emittedReadable = false;
82548 this.readableListening = false;
82549 this.resumeScheduled = false;
82550
82551 // Crypto is kind of old and crusty. Historically, its default string
82552 // encoding is 'binary' so we have to make this configurable.
82553 // Everything else in the universe uses 'utf8', though.
82554 this.defaultEncoding = options.defaultEncoding || 'utf8';
82555
82556 // when piping, we only care about 'readable' events that happen
82557 // after read()ing all the bytes and not getting any pushback.
82558 this.ranOut = false;
82559
82560 // the number of writers that are awaiting a drain event in .pipe()s
82561 this.awaitDrain = 0;
82562
82563 // if true, a maybeReadMore has been scheduled
82564 this.readingMore = false;
82565
82566 this.decoder = null;
82567 this.encoding = null;
82568 if (options.encoding) {
82569 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82570 this.decoder = new StringDecoder(options.encoding);
82571 this.encoding = options.encoding;
82572 }
82573 }
82574
82575 function Readable(options) {
82576 Duplex = Duplex || require('./_stream_duplex');
82577
82578 if (!(this instanceof Readable)) return new Readable(options);
82579
82580 this._readableState = new ReadableState(options, this);
82581
82582 // legacy
82583 this.readable = true;
82584
82585 if (options && typeof options.read === 'function') this._read = options.read;
82586
82587 Stream.call(this);
82588 }
82589
82590 // Manually shove something into the read() buffer.
82591 // This returns true if the highWaterMark has not been hit yet,
82592 // similar to how Writable.write() returns true if you should
82593 // write() some more.
82594 Readable.prototype.push = function (chunk, encoding) {
82595 var state = this._readableState;
82596
82597 if (!state.objectMode && typeof chunk === 'string') {
82598 encoding = encoding || state.defaultEncoding;
82599 if (encoding !== state.encoding) {
82600 chunk = bufferShim.from(chunk, encoding);
82601 encoding = '';
82602 }
82603 }
82604
82605 return readableAddChunk(this, state, chunk, encoding, false);
82606 };
82607
82608 // Unshift should *always* be something directly out of read()
82609 Readable.prototype.unshift = function (chunk) {
82610 var state = this._readableState;
82611 return readableAddChunk(this, state, chunk, '', true);
82612 };
82613
82614 Readable.prototype.isPaused = function () {
82615 return this._readableState.flowing === false;
82616 };
82617
82618 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
82619 var er = chunkInvalid(state, chunk);
82620 if (er) {
82621 stream.emit('error', er);
82622 } else if (chunk === null) {
82623 state.reading = false;
82624 onEofChunk(stream, state);
82625 } else if (state.objectMode || chunk && chunk.length > 0) {
82626 if (state.ended && !addToFront) {
82627 var e = new Error('stream.push() after EOF');
82628 stream.emit('error', e);
82629 } else if (state.endEmitted && addToFront) {
82630 var _e = new Error('stream.unshift() after end event');
82631 stream.emit('error', _e);
82632 } else {
82633 var skipAdd;
82634 if (state.decoder && !addToFront && !encoding) {
82635 chunk = state.decoder.write(chunk);
82636 skipAdd = !state.objectMode && chunk.length === 0;
82637 }
82638
82639 if (!addToFront) state.reading = false;
82640
82641 // Don't add to the buffer if we've decoded to an empty string chunk and
82642 // we're not in object mode
82643 if (!skipAdd) {
82644 // if we want the data now, just emit it.
82645 if (state.flowing && state.length === 0 && !state.sync) {
82646 stream.emit('data', chunk);
82647 stream.read(0);
82648 } else {
82649 // update the buffer info.
82650 state.length += state.objectMode ? 1 : chunk.length;
82651 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
82652
82653 if (state.needReadable) emitReadable(stream);
82654 }
82655 }
82656
82657 maybeReadMore(stream, state);
82658 }
82659 } else if (!addToFront) {
82660 state.reading = false;
82661 }
82662
82663 return needMoreData(state);
82664 }
82665
82666 // if it's past the high water mark, we can push in some more.
82667 // Also, if we have no data yet, we can stand some
82668 // more bytes. This is to work around cases where hwm=0,
82669 // such as the repl. Also, if the push() triggered a
82670 // readable event, and the user called read(largeNumber) such that
82671 // needReadable was set, then we ought to push more, so that another
82672 // 'readable' event will be triggered.
82673 function needMoreData(state) {
82674 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
82675 }
82676
82677 // backwards compatibility.
82678 Readable.prototype.setEncoding = function (enc) {
82679 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82680 this._readableState.decoder = new StringDecoder(enc);
82681 this._readableState.encoding = enc;
82682 return this;
82683 };
82684
82685 // Don't raise the hwm > 8MB
82686 var MAX_HWM = 0x800000;
82687 function computeNewHighWaterMark(n) {
82688 if (n >= MAX_HWM) {
82689 n = MAX_HWM;
82690 } else {
82691 // Get the next highest power of 2 to prevent increasing hwm excessively in
82692 // tiny amounts
82693 n--;
82694 n |= n >>> 1;
82695 n |= n >>> 2;
82696 n |= n >>> 4;
82697 n |= n >>> 8;
82698 n |= n >>> 16;
82699 n++;
82700 }
82701 return n;
82702 }
82703
82704 // This function is designed to be inlinable, so please take care when making
82705 // changes to the function body.
82706 function howMuchToRead(n, state) {
82707 if (n <= 0 || state.length === 0 && state.ended) return 0;
82708 if (state.objectMode) return 1;
82709 if (n !== n) {
82710 // Only flow one buffer at a time
82711 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
82712 }
82713 // If we're asking for more than the current hwm, then raise the hwm.
82714 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
82715 if (n <= state.length) return n;
82716 // Don't have enough
82717 if (!state.ended) {
82718 state.needReadable = true;
82719 return 0;
82720 }
82721 return state.length;
82722 }
82723
82724 // you can override either this method, or the async _read(n) below.
82725 Readable.prototype.read = function (n) {
82726 debug('read', n);
82727 n = parseInt(n, 10);
82728 var state = this._readableState;
82729 var nOrig = n;
82730
82731 if (n !== 0) state.emittedReadable = false;
82732
82733 // if we're doing read(0) to trigger a readable event, but we
82734 // already have a bunch of data in the buffer, then just trigger
82735 // the 'readable' event and move on.
82736 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
82737 debug('read: emitReadable', state.length, state.ended);
82738 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
82739 return null;
82740 }
82741
82742 n = howMuchToRead(n, state);
82743
82744 // if we've ended, and we're now clear, then finish it up.
82745 if (n === 0 && state.ended) {
82746 if (state.length === 0) endReadable(this);
82747 return null;
82748 }
82749
82750 // All the actual chunk generation logic needs to be
82751 // *below* the call to _read. The reason is that in certain
82752 // synthetic stream cases, such as passthrough streams, _read
82753 // may be a completely synchronous operation which may change
82754 // the state of the read buffer, providing enough data when
82755 // before there was *not* enough.
82756 //
82757 // So, the steps are:
82758 // 1. Figure out what the state of things will be after we do
82759 // a read from the buffer.
82760 //
82761 // 2. If that resulting state will trigger a _read, then call _read.
82762 // Note that this may be asynchronous, or synchronous. Yes, it is
82763 // deeply ugly to write APIs this way, but that still doesn't mean
82764 // that the Readable class should behave improperly, as streams are
82765 // designed to be sync/async agnostic.
82766 // Take note if the _read call is sync or async (ie, if the read call
82767 // has returned yet), so that we know whether or not it's safe to emit
82768 // 'readable' etc.
82769 //
82770 // 3. Actually pull the requested chunks out of the buffer and return.
82771
82772 // if we need a readable event, then we need to do some reading.
82773 var doRead = state.needReadable;
82774 debug('need readable', doRead);
82775
82776 // if we currently have less than the highWaterMark, then also read some
82777 if (state.length === 0 || state.length - n < state.highWaterMark) {
82778 doRead = true;
82779 debug('length less than watermark', doRead);
82780 }
82781
82782 // however, if we've ended, then there's no point, and if we're already
82783 // reading, then it's unnecessary.
82784 if (state.ended || state.reading) {
82785 doRead = false;
82786 debug('reading or ended', doRead);
82787 } else if (doRead) {
82788 debug('do read');
82789 state.reading = true;
82790 state.sync = true;
82791 // if the length is currently zero, then we *need* a readable event.
82792 if (state.length === 0) state.needReadable = true;
82793 // call internal read method
82794 this._read(state.highWaterMark);
82795 state.sync = false;
82796 // If _read pushed data synchronously, then `reading` will be false,
82797 // and we need to re-evaluate how much data we can return to the user.
82798 if (!state.reading) n = howMuchToRead(nOrig, state);
82799 }
82800
82801 var ret;
82802 if (n > 0) ret = fromList(n, state);else ret = null;
82803
82804 if (ret === null) {
82805 state.needReadable = true;
82806 n = 0;
82807 } else {
82808 state.length -= n;
82809 }
82810
82811 if (state.length === 0) {
82812 // If we have nothing in the buffer, then we want to know
82813 // as soon as we *do* get something into the buffer.
82814 if (!state.ended) state.needReadable = true;
82815
82816 // If we tried to read() past the EOF, then emit end on the next tick.
82817 if (nOrig !== n && state.ended) endReadable(this);
82818 }
82819
82820 if (ret !== null) this.emit('data', ret);
82821
82822 return ret;
82823 };
82824
82825 function chunkInvalid(state, chunk) {
82826 var er = null;
82827 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
82828 er = new TypeError('Invalid non-string/buffer chunk');
82829 }
82830 return er;
82831 }
82832
82833 function onEofChunk(stream, state) {
82834 if (state.ended) return;
82835 if (state.decoder) {
82836 var chunk = state.decoder.end();
82837 if (chunk && chunk.length) {
82838 state.buffer.push(chunk);
82839 state.length += state.objectMode ? 1 : chunk.length;
82840 }
82841 }
82842 state.ended = true;
82843
82844 // emit 'readable' now to make sure it gets picked up.
82845 emitReadable(stream);
82846 }
82847
82848 // Don't emit readable right away in sync mode, because this can trigger
82849 // another read() call => stack overflow. This way, it might trigger
82850 // a nextTick recursion warning, but that's not so bad.
82851 function emitReadable(stream) {
82852 var state = stream._readableState;
82853 state.needReadable = false;
82854 if (!state.emittedReadable) {
82855 debug('emitReadable', state.flowing);
82856 state.emittedReadable = true;
82857 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
82858 }
82859 }
82860
82861 function emitReadable_(stream) {
82862 debug('emit readable');
82863 stream.emit('readable');
82864 flow(stream);
82865 }
82866
82867 // at this point, the user has presumably seen the 'readable' event,
82868 // and called read() to consume some data. that may have triggered
82869 // in turn another _read(n) call, in which case reading = true if
82870 // it's in progress.
82871 // However, if we're not ended, or reading, and the length < hwm,
82872 // then go ahead and try to read some more preemptively.
82873 function maybeReadMore(stream, state) {
82874 if (!state.readingMore) {
82875 state.readingMore = true;
82876 processNextTick(maybeReadMore_, stream, state);
82877 }
82878 }
82879
82880 function maybeReadMore_(stream, state) {
82881 var len = state.length;
82882 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
82883 debug('maybeReadMore read 0');
82884 stream.read(0);
82885 if (len === state.length)
82886 // didn't get any data, stop spinning.
82887 break;else len = state.length;
82888 }
82889 state.readingMore = false;
82890 }
82891
82892 // abstract method. to be overridden in specific implementation classes.
82893 // call cb(er, data) where data is <= n in length.
82894 // for virtual (non-string, non-buffer) streams, "length" is somewhat
82895 // arbitrary, and perhaps not very meaningful.
82896 Readable.prototype._read = function (n) {
82897 this.emit('error', new Error('_read() is not implemented'));
82898 };
82899
82900 Readable.prototype.pipe = function (dest, pipeOpts) {
82901 var src = this;
82902 var state = this._readableState;
82903
82904 switch (state.pipesCount) {
82905 case 0:
82906 state.pipes = dest;
82907 break;
82908 case 1:
82909 state.pipes = [state.pipes, dest];
82910 break;
82911 default:
82912 state.pipes.push(dest);
82913 break;
82914 }
82915 state.pipesCount += 1;
82916 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
82917
82918 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
82919
82920 var endFn = doEnd ? onend : cleanup;
82921 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
82922
82923 dest.on('unpipe', onunpipe);
82924 function onunpipe(readable) {
82925 debug('onunpipe');
82926 if (readable === src) {
82927 cleanup();
82928 }
82929 }
82930
82931 function onend() {
82932 debug('onend');
82933 dest.end();
82934 }
82935
82936 // when the dest drains, it reduces the awaitDrain counter
82937 // on the source. This would be more elegant with a .once()
82938 // handler in flow(), but adding and removing repeatedly is
82939 // too slow.
82940 var ondrain = pipeOnDrain(src);
82941 dest.on('drain', ondrain);
82942
82943 var cleanedUp = false;
82944 function cleanup() {
82945 debug('cleanup');
82946 // cleanup event handlers once the pipe is broken
82947 dest.removeListener('close', onclose);
82948 dest.removeListener('finish', onfinish);
82949 dest.removeListener('drain', ondrain);
82950 dest.removeListener('error', onerror);
82951 dest.removeListener('unpipe', onunpipe);
82952 src.removeListener('end', onend);
82953 src.removeListener('end', cleanup);
82954 src.removeListener('data', ondata);
82955
82956 cleanedUp = true;
82957
82958 // if the reader is waiting for a drain event from this
82959 // specific writer, then it would cause it to never start
82960 // flowing again.
82961 // So, if this is awaiting a drain, then we just call it now.
82962 // If we don't know, then assume that we are waiting for one.
82963 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
82964 }
82965
82966 // If the user pushes more data while we're writing to dest then we'll end up
82967 // in ondata again. However, we only want to increase awaitDrain once because
82968 // dest will only emit one 'drain' event for the multiple writes.
82969 // => Introduce a guard on increasing awaitDrain.
82970 var increasedAwaitDrain = false;
82971 src.on('data', ondata);
82972 function ondata(chunk) {
82973 debug('ondata');
82974 increasedAwaitDrain = false;
82975 var ret = dest.write(chunk);
82976 if (false === ret && !increasedAwaitDrain) {
82977 // If the user unpiped during `dest.write()`, it is possible
82978 // to get stuck in a permanently paused state if that write
82979 // also returned false.
82980 // => Check whether `dest` is still a piping destination.
82981 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
82982 debug('false write response, pause', src._readableState.awaitDrain);
82983 src._readableState.awaitDrain++;
82984 increasedAwaitDrain = true;
82985 }
82986 src.pause();
82987 }
82988 }
82989
82990 // if the dest has an error, then stop piping into it.
82991 // however, don't suppress the throwing behavior for this.
82992 function onerror(er) {
82993 debug('onerror', er);
82994 unpipe();
82995 dest.removeListener('error', onerror);
82996 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
82997 }
82998
82999 // Make sure our error handler is attached before userland ones.
83000 prependListener(dest, 'error', onerror);
83001
83002 // Both close and finish should trigger unpipe, but only once.
83003 function onclose() {
83004 dest.removeListener('finish', onfinish);
83005 unpipe();
83006 }
83007 dest.once('close', onclose);
83008 function onfinish() {
83009 debug('onfinish');
83010 dest.removeListener('close', onclose);
83011 unpipe();
83012 }
83013 dest.once('finish', onfinish);
83014
83015 function unpipe() {
83016 debug('unpipe');
83017 src.unpipe(dest);
83018 }
83019
83020 // tell the dest that it's being piped to
83021 dest.emit('pipe', src);
83022
83023 // start the flow if it hasn't been started already.
83024 if (!state.flowing) {
83025 debug('pipe resume');
83026 src.resume();
83027 }
83028
83029 return dest;
83030 };
83031
83032 function pipeOnDrain(src) {
83033 return function () {
83034 var state = src._readableState;
83035 debug('pipeOnDrain', state.awaitDrain);
83036 if (state.awaitDrain) state.awaitDrain--;
83037 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
83038 state.flowing = true;
83039 flow(src);
83040 }
83041 };
83042 }
83043
83044 Readable.prototype.unpipe = function (dest) {
83045 var state = this._readableState;
83046
83047 // if we're not piping anywhere, then do nothing.
83048 if (state.pipesCount === 0) return this;
83049
83050 // just one destination. most common case.
83051 if (state.pipesCount === 1) {
83052 // passed in one, but it's not the right one.
83053 if (dest && dest !== state.pipes) return this;
83054
83055 if (!dest) dest = state.pipes;
83056
83057 // got a match.
83058 state.pipes = null;
83059 state.pipesCount = 0;
83060 state.flowing = false;
83061 if (dest) dest.emit('unpipe', this);
83062 return this;
83063 }
83064
83065 // slow case. multiple pipe destinations.
83066
83067 if (!dest) {
83068 // remove all.
83069 var dests = state.pipes;
83070 var len = state.pipesCount;
83071 state.pipes = null;
83072 state.pipesCount = 0;
83073 state.flowing = false;
83074
83075 for (var i = 0; i < len; i++) {
83076 dests[i].emit('unpipe', this);
83077 }return this;
83078 }
83079
83080 // try to find the right one.
83081 var index = indexOf(state.pipes, dest);
83082 if (index === -1) return this;
83083
83084 state.pipes.splice(index, 1);
83085 state.pipesCount -= 1;
83086 if (state.pipesCount === 1) state.pipes = state.pipes[0];
83087
83088 dest.emit('unpipe', this);
83089
83090 return this;
83091 };
83092
83093 // set up data events if they are asked for
83094 // Ensure readable listeners eventually get something
83095 Readable.prototype.on = function (ev, fn) {
83096 var res = Stream.prototype.on.call(this, ev, fn);
83097
83098 if (ev === 'data') {
83099 // Start flowing on next tick if stream isn't explicitly paused
83100 if (this._readableState.flowing !== false) this.resume();
83101 } else if (ev === 'readable') {
83102 var state = this._readableState;
83103 if (!state.endEmitted && !state.readableListening) {
83104 state.readableListening = state.needReadable = true;
83105 state.emittedReadable = false;
83106 if (!state.reading) {
83107 processNextTick(nReadingNextTick, this);
83108 } else if (state.length) {
83109 emitReadable(this, state);
83110 }
83111 }
83112 }
83113
83114 return res;
83115 };
83116 Readable.prototype.addListener = Readable.prototype.on;
83117
83118 function nReadingNextTick(self) {
83119 debug('readable nexttick read 0');
83120 self.read(0);
83121 }
83122
83123 // pause() and resume() are remnants of the legacy readable stream API
83124 // If the user uses them, then switch into old mode.
83125 Readable.prototype.resume = function () {
83126 var state = this._readableState;
83127 if (!state.flowing) {
83128 debug('resume');
83129 state.flowing = true;
83130 resume(this, state);
83131 }
83132 return this;
83133 };
83134
83135 function resume(stream, state) {
83136 if (!state.resumeScheduled) {
83137 state.resumeScheduled = true;
83138 processNextTick(resume_, stream, state);
83139 }
83140 }
83141
83142 function resume_(stream, state) {
83143 if (!state.reading) {
83144 debug('resume read 0');
83145 stream.read(0);
83146 }
83147
83148 state.resumeScheduled = false;
83149 state.awaitDrain = 0;
83150 stream.emit('resume');
83151 flow(stream);
83152 if (state.flowing && !state.reading) stream.read(0);
83153 }
83154
83155 Readable.prototype.pause = function () {
83156 debug('call pause flowing=%j', this._readableState.flowing);
83157 if (false !== this._readableState.flowing) {
83158 debug('pause');
83159 this._readableState.flowing = false;
83160 this.emit('pause');
83161 }
83162 return this;
83163 };
83164
83165 function flow(stream) {
83166 var state = stream._readableState;
83167 debug('flow', state.flowing);
83168 while (state.flowing && stream.read() !== null) {}
83169 }
83170
83171 // wrap an old-style stream as the async data source.
83172 // This is *not* part of the readable stream interface.
83173 // It is an ugly unfortunate mess of history.
83174 Readable.prototype.wrap = function (stream) {
83175 var state = this._readableState;
83176 var paused = false;
83177
83178 var self = this;
83179 stream.on('end', function () {
83180 debug('wrapped end');
83181 if (state.decoder && !state.ended) {
83182 var chunk = state.decoder.end();
83183 if (chunk && chunk.length) self.push(chunk);
83184 }
83185
83186 self.push(null);
83187 });
83188
83189 stream.on('data', function (chunk) {
83190 debug('wrapped data');
83191 if (state.decoder) chunk = state.decoder.write(chunk);
83192
83193 // don't skip over falsy values in objectMode
83194 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
83195
83196 var ret = self.push(chunk);
83197 if (!ret) {
83198 paused = true;
83199 stream.pause();
83200 }
83201 });
83202
83203 // proxy all the other methods.
83204 // important when wrapping filters and duplexes.
83205 for (var i in stream) {
83206 if (this[i] === undefined && typeof stream[i] === 'function') {
83207 this[i] = function (method) {
83208 return function () {
83209 return stream[method].apply(stream, arguments);
83210 };
83211 }(i);
83212 }
83213 }
83214
83215 // proxy certain important events.
83216 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
83217 forEach(events, function (ev) {
83218 stream.on(ev, self.emit.bind(self, ev));
83219 });
83220
83221 // when we try to consume some more bytes, simply unpause the
83222 // underlying stream.
83223 self._read = function (n) {
83224 debug('wrapped _read', n);
83225 if (paused) {
83226 paused = false;
83227 stream.resume();
83228 }
83229 };
83230
83231 return self;
83232 };
83233
83234 // exposed for testing purposes only.
83235 Readable._fromList = fromList;
83236
83237 // Pluck off n bytes from an array of buffers.
83238 // Length is the combined lengths of all the buffers in the list.
83239 // This function is designed to be inlinable, so please take care when making
83240 // changes to the function body.
83241 function fromList(n, state) {
83242 // nothing buffered
83243 if (state.length === 0) return null;
83244
83245 var ret;
83246 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
83247 // read it all, truncate the list
83248 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);
83249 state.buffer.clear();
83250 } else {
83251 // read part of list
83252 ret = fromListPartial(n, state.buffer, state.decoder);
83253 }
83254
83255 return ret;
83256 }
83257
83258 // Extracts only enough buffered data to satisfy the amount requested.
83259 // This function is designed to be inlinable, so please take care when making
83260 // changes to the function body.
83261 function fromListPartial(n, list, hasStrings) {
83262 var ret;
83263 if (n < list.head.data.length) {
83264 // slice is the same for buffers and strings
83265 ret = list.head.data.slice(0, n);
83266 list.head.data = list.head.data.slice(n);
83267 } else if (n === list.head.data.length) {
83268 // first chunk is a perfect match
83269 ret = list.shift();
83270 } else {
83271 // result spans more than one buffer
83272 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
83273 }
83274 return ret;
83275 }
83276
83277 // Copies a specified amount of characters from the list of buffered data
83278 // chunks.
83279 // This function is designed to be inlinable, so please take care when making
83280 // changes to the function body.
83281 function copyFromBufferString(n, list) {
83282 var p = list.head;
83283 var c = 1;
83284 var ret = p.data;
83285 n -= ret.length;
83286 while (p = p.next) {
83287 var str = p.data;
83288 var nb = n > str.length ? str.length : n;
83289 if (nb === str.length) ret += str;else ret += str.slice(0, n);
83290 n -= nb;
83291 if (n === 0) {
83292 if (nb === str.length) {
83293 ++c;
83294 if (p.next) list.head = p.next;else list.head = list.tail = null;
83295 } else {
83296 list.head = p;
83297 p.data = str.slice(nb);
83298 }
83299 break;
83300 }
83301 ++c;
83302 }
83303 list.length -= c;
83304 return ret;
83305 }
83306
83307 // Copies a specified amount of bytes from the list of buffered data chunks.
83308 // This function is designed to be inlinable, so please take care when making
83309 // changes to the function body.
83310 function copyFromBuffer(n, list) {
83311 var ret = bufferShim.allocUnsafe(n);
83312 var p = list.head;
83313 var c = 1;
83314 p.data.copy(ret);
83315 n -= p.data.length;
83316 while (p = p.next) {
83317 var buf = p.data;
83318 var nb = n > buf.length ? buf.length : n;
83319 buf.copy(ret, ret.length - n, 0, nb);
83320 n -= nb;
83321 if (n === 0) {
83322 if (nb === buf.length) {
83323 ++c;
83324 if (p.next) list.head = p.next;else list.head = list.tail = null;
83325 } else {
83326 list.head = p;
83327 p.data = buf.slice(nb);
83328 }
83329 break;
83330 }
83331 ++c;
83332 }
83333 list.length -= c;
83334 return ret;
83335 }
83336
83337 function endReadable(stream) {
83338 var state = stream._readableState;
83339
83340 // If we get here before consuming all the bytes, then that is a
83341 // bug in node. Should never happen.
83342 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
83343
83344 if (!state.endEmitted) {
83345 state.ended = true;
83346 processNextTick(endReadableNT, state, stream);
83347 }
83348 }
83349
83350 function endReadableNT(state, stream) {
83351 // Check that we didn't get one last unshift.
83352 if (!state.endEmitted && state.length === 0) {
83353 state.endEmitted = true;
83354 stream.readable = false;
83355 stream.emit('end');
83356 }
83357 }
83358
83359 function forEach(xs, f) {
83360 for (var i = 0, l = xs.length; i < l; i++) {
83361 f(xs[i], i);
83362 }
83363 }
83364
83365 function indexOf(xs, x) {
83366 for (var i = 0, l = xs.length; i < l; i++) {
83367 if (xs[i] === x) return i;
83368 }
83369 return -1;
83370 }
83371 }).call(this,require('_process'))
83372 },{"./_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){
83373 // a transform stream is a readable/writable stream where you do
83374 // something with the data. Sometimes it's called a "filter",
83375 // but that's not a great name for it, since that implies a thing where
83376 // some bits pass through, and others are simply ignored. (That would
83377 // be a valid example of a transform, of course.)
83378 //
83379 // While the output is causally related to the input, it's not a
83380 // necessarily symmetric or synchronous transformation. For example,
83381 // a zlib stream might take multiple plain-text writes(), and then
83382 // emit a single compressed chunk some time in the future.
83383 //
83384 // Here's how this works:
83385 //
83386 // The Transform stream has all the aspects of the readable and writable
83387 // stream classes. When you write(chunk), that calls _write(chunk,cb)
83388 // internally, and returns false if there's a lot of pending writes
83389 // buffered up. When you call read(), that calls _read(n) until
83390 // there's enough pending readable data buffered up.
83391 //
83392 // In a transform stream, the written data is placed in a buffer. When
83393 // _read(n) is called, it transforms the queued up data, calling the
83394 // buffered _write cb's as it consumes chunks. If consuming a single
83395 // written chunk would result in multiple output chunks, then the first
83396 // outputted bit calls the readcb, and subsequent chunks just go into
83397 // the read buffer, and will cause it to emit 'readable' if necessary.
83398 //
83399 // This way, back-pressure is actually determined by the reading side,
83400 // since _read has to be called to start processing a new chunk. However,
83401 // a pathological inflate type of transform can cause excessive buffering
83402 // here. For example, imagine a stream where every byte of input is
83403 // interpreted as an integer from 0-255, and then results in that many
83404 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
83405 // 1kb of data being output. In this case, you could write a very small
83406 // amount of input, and end up with a very large amount of output. In
83407 // such a pathological inflating mechanism, there'd be no way to tell
83408 // the system to stop doing the transform. A single 4MB write could
83409 // cause the system to run out of memory.
83410 //
83411 // However, even in such a pathological case, only a single written chunk
83412 // would be consumed, and then the rest would wait (un-transformed) until
83413 // the results of the previous transformed chunk were consumed.
83414
83415 'use strict';
83416
83417 module.exports = Transform;
83418
83419 var Duplex = require('./_stream_duplex');
83420
83421 /*<replacement>*/
83422 var util = require('core-util-is');
83423 util.inherits = require('inherits');
83424 /*</replacement>*/
83425
83426 util.inherits(Transform, Duplex);
83427
83428 function TransformState(stream) {
83429 this.afterTransform = function (er, data) {
83430 return afterTransform(stream, er, data);
83431 };
83432
83433 this.needTransform = false;
83434 this.transforming = false;
83435 this.writecb = null;
83436 this.writechunk = null;
83437 this.writeencoding = null;
83438 }
83439
83440 function afterTransform(stream, er, data) {
83441 var ts = stream._transformState;
83442 ts.transforming = false;
83443
83444 var cb = ts.writecb;
83445
83446 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
83447
83448 ts.writechunk = null;
83449 ts.writecb = null;
83450
83451 if (data !== null && data !== undefined) stream.push(data);
83452
83453 cb(er);
83454
83455 var rs = stream._readableState;
83456 rs.reading = false;
83457 if (rs.needReadable || rs.length < rs.highWaterMark) {
83458 stream._read(rs.highWaterMark);
83459 }
83460 }
83461
83462 function Transform(options) {
83463 if (!(this instanceof Transform)) return new Transform(options);
83464
83465 Duplex.call(this, options);
83466
83467 this._transformState = new TransformState(this);
83468
83469 var stream = this;
83470
83471 // start out asking for a readable event once data is transformed.
83472 this._readableState.needReadable = true;
83473
83474 // we have implemented the _read method, and done the other things
83475 // that Readable wants before the first _read call, so unset the
83476 // sync guard flag.
83477 this._readableState.sync = false;
83478
83479 if (options) {
83480 if (typeof options.transform === 'function') this._transform = options.transform;
83481
83482 if (typeof options.flush === 'function') this._flush = options.flush;
83483 }
83484
83485 // When the writable side finishes, then flush out anything remaining.
83486 this.once('prefinish', function () {
83487 if (typeof this._flush === 'function') this._flush(function (er, data) {
83488 done(stream, er, data);
83489 });else done(stream);
83490 });
83491 }
83492
83493 Transform.prototype.push = function (chunk, encoding) {
83494 this._transformState.needTransform = false;
83495 return Duplex.prototype.push.call(this, chunk, encoding);
83496 };
83497
83498 // This is the part where you do stuff!
83499 // override this function in implementation classes.
83500 // 'chunk' is an input chunk.
83501 //
83502 // Call `push(newChunk)` to pass along transformed output
83503 // to the readable side. You may call 'push' zero or more times.
83504 //
83505 // Call `cb(err)` when you are done with this chunk. If you pass
83506 // an error, then that'll put the hurt on the whole operation. If you
83507 // never call cb(), then you'll never get another chunk.
83508 Transform.prototype._transform = function (chunk, encoding, cb) {
83509 throw new Error('_transform() is not implemented');
83510 };
83511
83512 Transform.prototype._write = function (chunk, encoding, cb) {
83513 var ts = this._transformState;
83514 ts.writecb = cb;
83515 ts.writechunk = chunk;
83516 ts.writeencoding = encoding;
83517 if (!ts.transforming) {
83518 var rs = this._readableState;
83519 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
83520 }
83521 };
83522
83523 // Doesn't matter what the args are here.
83524 // _transform does all the work.
83525 // That we got here means that the readable side wants more data.
83526 Transform.prototype._read = function (n) {
83527 var ts = this._transformState;
83528
83529 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
83530 ts.transforming = true;
83531 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
83532 } else {
83533 // mark that we need a transform, so that any data that comes in
83534 // will get processed, now that we've asked for it.
83535 ts.needTransform = true;
83536 }
83537 };
83538
83539 function done(stream, er, data) {
83540 if (er) return stream.emit('error', er);
83541
83542 if (data !== null && data !== undefined) stream.push(data);
83543
83544 // if there's nothing in the write buffer, then that means
83545 // that nothing more will ever be provided
83546 var ws = stream._writableState;
83547 var ts = stream._transformState;
83548
83549 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
83550
83551 if (ts.transforming) throw new Error('Calling transform done when still transforming');
83552
83553 return stream.push(null);
83554 }
83555 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
83556 (function (process){
83557 // A bit simpler than readable streams.
83558 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
83559 // the drain event emission and buffering.
83560
83561 'use strict';
83562
83563 module.exports = Writable;
83564
83565 /*<replacement>*/
83566 var processNextTick = require('process-nextick-args');
83567 /*</replacement>*/
83568
83569 /*<replacement>*/
83570 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
83571 /*</replacement>*/
83572
83573 /*<replacement>*/
83574 var Duplex;
83575 /*</replacement>*/
83576
83577 Writable.WritableState = WritableState;
83578
83579 /*<replacement>*/
83580 var util = require('core-util-is');
83581 util.inherits = require('inherits');
83582 /*</replacement>*/
83583
83584 /*<replacement>*/
83585 var internalUtil = {
83586 deprecate: require('util-deprecate')
83587 };
83588 /*</replacement>*/
83589
83590 /*<replacement>*/
83591 var Stream;
83592 (function () {
83593 try {
83594 Stream = require('st' + 'ream');
83595 } catch (_) {} finally {
83596 if (!Stream) Stream = require('events').EventEmitter;
83597 }
83598 })();
83599 /*</replacement>*/
83600
83601 var Buffer = require('buffer').Buffer;
83602 /*<replacement>*/
83603 var bufferShim = require('buffer-shims');
83604 /*</replacement>*/
83605
83606 util.inherits(Writable, Stream);
83607
83608 function nop() {}
83609
83610 function WriteReq(chunk, encoding, cb) {
83611 this.chunk = chunk;
83612 this.encoding = encoding;
83613 this.callback = cb;
83614 this.next = null;
83615 }
83616
83617 function WritableState(options, stream) {
83618 Duplex = Duplex || require('./_stream_duplex');
83619
83620 options = options || {};
83621
83622 // object stream flag to indicate whether or not this stream
83623 // contains buffers or objects.
83624 this.objectMode = !!options.objectMode;
83625
83626 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
83627
83628 // the point at which write() starts returning false
83629 // Note: 0 is a valid value, means that we always return false if
83630 // the entire buffer is not flushed immediately on write()
83631 var hwm = options.highWaterMark;
83632 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
83633 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
83634
83635 // cast to ints.
83636 this.highWaterMark = ~ ~this.highWaterMark;
83637
83638 // drain event flag.
83639 this.needDrain = false;
83640 // at the start of calling end()
83641 this.ending = false;
83642 // when end() has been called, and returned
83643 this.ended = false;
83644 // when 'finish' is emitted
83645 this.finished = false;
83646
83647 // should we decode strings into buffers before passing to _write?
83648 // this is here so that some node-core streams can optimize string
83649 // handling at a lower level.
83650 var noDecode = options.decodeStrings === false;
83651 this.decodeStrings = !noDecode;
83652
83653 // Crypto is kind of old and crusty. Historically, its default string
83654 // encoding is 'binary' so we have to make this configurable.
83655 // Everything else in the universe uses 'utf8', though.
83656 this.defaultEncoding = options.defaultEncoding || 'utf8';
83657
83658 // not an actual buffer we keep track of, but a measurement
83659 // of how much we're waiting to get pushed to some underlying
83660 // socket or file.
83661 this.length = 0;
83662
83663 // a flag to see when we're in the middle of a write.
83664 this.writing = false;
83665
83666 // when true all writes will be buffered until .uncork() call
83667 this.corked = 0;
83668
83669 // a flag to be able to tell if the onwrite cb is called immediately,
83670 // or on a later tick. We set this to true at first, because any
83671 // actions that shouldn't happen until "later" should generally also
83672 // not happen before the first write call.
83673 this.sync = true;
83674
83675 // a flag to know if we're processing previously buffered items, which
83676 // may call the _write() callback in the same tick, so that we don't
83677 // end up in an overlapped onwrite situation.
83678 this.bufferProcessing = false;
83679
83680 // the callback that's passed to _write(chunk,cb)
83681 this.onwrite = function (er) {
83682 onwrite(stream, er);
83683 };
83684
83685 // the callback that the user supplies to write(chunk,encoding,cb)
83686 this.writecb = null;
83687
83688 // the amount that is being written when _write is called.
83689 this.writelen = 0;
83690
83691 this.bufferedRequest = null;
83692 this.lastBufferedRequest = null;
83693
83694 // number of pending user-supplied write callbacks
83695 // this must be 0 before 'finish' can be emitted
83696 this.pendingcb = 0;
83697
83698 // emit prefinish if the only thing we're waiting for is _write cbs
83699 // This is relevant for synchronous Transform streams
83700 this.prefinished = false;
83701
83702 // True if the error was already emitted and should not be thrown again
83703 this.errorEmitted = false;
83704
83705 // count buffered requests
83706 this.bufferedRequestCount = 0;
83707
83708 // allocate the first CorkedRequest, there is always
83709 // one allocated and free to use, and we maintain at most two
83710 this.corkedRequestsFree = new CorkedRequest(this);
83711 }
83712
83713 WritableState.prototype.getBuffer = function getBuffer() {
83714 var current = this.bufferedRequest;
83715 var out = [];
83716 while (current) {
83717 out.push(current);
83718 current = current.next;
83719 }
83720 return out;
83721 };
83722
83723 (function () {
83724 try {
83725 Object.defineProperty(WritableState.prototype, 'buffer', {
83726 get: internalUtil.deprecate(function () {
83727 return this.getBuffer();
83728 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
83729 });
83730 } catch (_) {}
83731 })();
83732
83733 // Test _writableState for inheritance to account for Duplex streams,
83734 // whose prototype chain only points to Readable.
83735 var realHasInstance;
83736 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
83737 realHasInstance = Function.prototype[Symbol.hasInstance];
83738 Object.defineProperty(Writable, Symbol.hasInstance, {
83739 value: function (object) {
83740 if (realHasInstance.call(this, object)) return true;
83741
83742 return object && object._writableState instanceof WritableState;
83743 }
83744 });
83745 } else {
83746 realHasInstance = function (object) {
83747 return object instanceof this;
83748 };
83749 }
83750
83751 function Writable(options) {
83752 Duplex = Duplex || require('./_stream_duplex');
83753
83754 // Writable ctor is applied to Duplexes, too.
83755 // `realHasInstance` is necessary because using plain `instanceof`
83756 // would return false, as no `_writableState` property is attached.
83757
83758 // Trying to use the custom `instanceof` for Writable here will also break the
83759 // Node.js LazyTransform implementation, which has a non-trivial getter for
83760 // `_writableState` that would lead to infinite recursion.
83761 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
83762 return new Writable(options);
83763 }
83764
83765 this._writableState = new WritableState(options, this);
83766
83767 // legacy.
83768 this.writable = true;
83769
83770 if (options) {
83771 if (typeof options.write === 'function') this._write = options.write;
83772
83773 if (typeof options.writev === 'function') this._writev = options.writev;
83774 }
83775
83776 Stream.call(this);
83777 }
83778
83779 // Otherwise people can pipe Writable streams, which is just wrong.
83780 Writable.prototype.pipe = function () {
83781 this.emit('error', new Error('Cannot pipe, not readable'));
83782 };
83783
83784 function writeAfterEnd(stream, cb) {
83785 var er = new Error('write after end');
83786 // TODO: defer error events consistently everywhere, not just the cb
83787 stream.emit('error', er);
83788 processNextTick(cb, er);
83789 }
83790
83791 // If we get something that is not a buffer, string, null, or undefined,
83792 // and we're not in objectMode, then that's an error.
83793 // Otherwise stream chunks are all considered to be of length=1, and the
83794 // watermarks determine how many objects to keep in the buffer, rather than
83795 // how many bytes or characters.
83796 function validChunk(stream, state, chunk, cb) {
83797 var valid = true;
83798 var er = false;
83799 // Always throw error if a null is written
83800 // if we are not in object mode then throw
83801 // if it is not a buffer, string, or undefined.
83802 if (chunk === null) {
83803 er = new TypeError('May not write null values to stream');
83804 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
83805 er = new TypeError('Invalid non-string/buffer chunk');
83806 }
83807 if (er) {
83808 stream.emit('error', er);
83809 processNextTick(cb, er);
83810 valid = false;
83811 }
83812 return valid;
83813 }
83814
83815 Writable.prototype.write = function (chunk, encoding, cb) {
83816 var state = this._writableState;
83817 var ret = false;
83818
83819 if (typeof encoding === 'function') {
83820 cb = encoding;
83821 encoding = null;
83822 }
83823
83824 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
83825
83826 if (typeof cb !== 'function') cb = nop;
83827
83828 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
83829 state.pendingcb++;
83830 ret = writeOrBuffer(this, state, chunk, encoding, cb);
83831 }
83832
83833 return ret;
83834 };
83835
83836 Writable.prototype.cork = function () {
83837 var state = this._writableState;
83838
83839 state.corked++;
83840 };
83841
83842 Writable.prototype.uncork = function () {
83843 var state = this._writableState;
83844
83845 if (state.corked) {
83846 state.corked--;
83847
83848 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
83849 }
83850 };
83851
83852 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
83853 // node::ParseEncoding() requires lower case.
83854 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
83855 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);
83856 this._writableState.defaultEncoding = encoding;
83857 return this;
83858 };
83859
83860 function decodeChunk(state, chunk, encoding) {
83861 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
83862 chunk = bufferShim.from(chunk, encoding);
83863 }
83864 return chunk;
83865 }
83866
83867 // if we're already writing something, then just put this
83868 // in the queue, and wait our turn. Otherwise, call _write
83869 // If we return false, then we need a drain event, so set that flag.
83870 function writeOrBuffer(stream, state, chunk, encoding, cb) {
83871 chunk = decodeChunk(state, chunk, encoding);
83872
83873 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
83874 var len = state.objectMode ? 1 : chunk.length;
83875
83876 state.length += len;
83877
83878 var ret = state.length < state.highWaterMark;
83879 // we must ensure that previous needDrain will not be reset to false.
83880 if (!ret) state.needDrain = true;
83881
83882 if (state.writing || state.corked) {
83883 var last = state.lastBufferedRequest;
83884 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
83885 if (last) {
83886 last.next = state.lastBufferedRequest;
83887 } else {
83888 state.bufferedRequest = state.lastBufferedRequest;
83889 }
83890 state.bufferedRequestCount += 1;
83891 } else {
83892 doWrite(stream, state, false, len, chunk, encoding, cb);
83893 }
83894
83895 return ret;
83896 }
83897
83898 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
83899 state.writelen = len;
83900 state.writecb = cb;
83901 state.writing = true;
83902 state.sync = true;
83903 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
83904 state.sync = false;
83905 }
83906
83907 function onwriteError(stream, state, sync, er, cb) {
83908 --state.pendingcb;
83909 if (sync) processNextTick(cb, er);else cb(er);
83910
83911 stream._writableState.errorEmitted = true;
83912 stream.emit('error', er);
83913 }
83914
83915 function onwriteStateUpdate(state) {
83916 state.writing = false;
83917 state.writecb = null;
83918 state.length -= state.writelen;
83919 state.writelen = 0;
83920 }
83921
83922 function onwrite(stream, er) {
83923 var state = stream._writableState;
83924 var sync = state.sync;
83925 var cb = state.writecb;
83926
83927 onwriteStateUpdate(state);
83928
83929 if (er) onwriteError(stream, state, sync, er, cb);else {
83930 // Check if we're actually ready to finish, but don't emit yet
83931 var finished = needFinish(state);
83932
83933 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
83934 clearBuffer(stream, state);
83935 }
83936
83937 if (sync) {
83938 /*<replacement>*/
83939 asyncWrite(afterWrite, stream, state, finished, cb);
83940 /*</replacement>*/
83941 } else {
83942 afterWrite(stream, state, finished, cb);
83943 }
83944 }
83945 }
83946
83947 function afterWrite(stream, state, finished, cb) {
83948 if (!finished) onwriteDrain(stream, state);
83949 state.pendingcb--;
83950 cb();
83951 finishMaybe(stream, state);
83952 }
83953
83954 // Must force callback to be called on nextTick, so that we don't
83955 // emit 'drain' before the write() consumer gets the 'false' return
83956 // value, and has a chance to attach a 'drain' listener.
83957 function onwriteDrain(stream, state) {
83958 if (state.length === 0 && state.needDrain) {
83959 state.needDrain = false;
83960 stream.emit('drain');
83961 }
83962 }
83963
83964 // if there's something in the buffer waiting, then process it
83965 function clearBuffer(stream, state) {
83966 state.bufferProcessing = true;
83967 var entry = state.bufferedRequest;
83968
83969 if (stream._writev && entry && entry.next) {
83970 // Fast case, write everything using _writev()
83971 var l = state.bufferedRequestCount;
83972 var buffer = new Array(l);
83973 var holder = state.corkedRequestsFree;
83974 holder.entry = entry;
83975
83976 var count = 0;
83977 while (entry) {
83978 buffer[count] = entry;
83979 entry = entry.next;
83980 count += 1;
83981 }
83982
83983 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
83984
83985 // doWrite is almost always async, defer these to save a bit of time
83986 // as the hot path ends with doWrite
83987 state.pendingcb++;
83988 state.lastBufferedRequest = null;
83989 if (holder.next) {
83990 state.corkedRequestsFree = holder.next;
83991 holder.next = null;
83992 } else {
83993 state.corkedRequestsFree = new CorkedRequest(state);
83994 }
83995 } else {
83996 // Slow case, write chunks one-by-one
83997 while (entry) {
83998 var chunk = entry.chunk;
83999 var encoding = entry.encoding;
84000 var cb = entry.callback;
84001 var len = state.objectMode ? 1 : chunk.length;
84002
84003 doWrite(stream, state, false, len, chunk, encoding, cb);
84004 entry = entry.next;
84005 // if we didn't call the onwrite immediately, then
84006 // it means that we need to wait until it does.
84007 // also, that means that the chunk and cb are currently
84008 // being processed, so move the buffer counter past them.
84009 if (state.writing) {
84010 break;
84011 }
84012 }
84013
84014 if (entry === null) state.lastBufferedRequest = null;
84015 }
84016
84017 state.bufferedRequestCount = 0;
84018 state.bufferedRequest = entry;
84019 state.bufferProcessing = false;
84020 }
84021
84022 Writable.prototype._write = function (chunk, encoding, cb) {
84023 cb(new Error('_write() is not implemented'));
84024 };
84025
84026 Writable.prototype._writev = null;
84027
84028 Writable.prototype.end = function (chunk, encoding, cb) {
84029 var state = this._writableState;
84030
84031 if (typeof chunk === 'function') {
84032 cb = chunk;
84033 chunk = null;
84034 encoding = null;
84035 } else if (typeof encoding === 'function') {
84036 cb = encoding;
84037 encoding = null;
84038 }
84039
84040 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
84041
84042 // .end() fully uncorks
84043 if (state.corked) {
84044 state.corked = 1;
84045 this.uncork();
84046 }
84047
84048 // ignore unnecessary end() calls.
84049 if (!state.ending && !state.finished) endWritable(this, state, cb);
84050 };
84051
84052 function needFinish(state) {
84053 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
84054 }
84055
84056 function prefinish(stream, state) {
84057 if (!state.prefinished) {
84058 state.prefinished = true;
84059 stream.emit('prefinish');
84060 }
84061 }
84062
84063 function finishMaybe(stream, state) {
84064 var need = needFinish(state);
84065 if (need) {
84066 if (state.pendingcb === 0) {
84067 prefinish(stream, state);
84068 state.finished = true;
84069 stream.emit('finish');
84070 } else {
84071 prefinish(stream, state);
84072 }
84073 }
84074 return need;
84075 }
84076
84077 function endWritable(stream, state, cb) {
84078 state.ending = true;
84079 finishMaybe(stream, state);
84080 if (cb) {
84081 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
84082 }
84083 state.ended = true;
84084 stream.writable = false;
84085 }
84086
84087 // It seems a linked list but it is not
84088 // there will be only 2 of these for each stream
84089 function CorkedRequest(state) {
84090 var _this = this;
84091
84092 this.next = null;
84093 this.entry = null;
84094
84095 this.finish = function (err) {
84096 var entry = _this.entry;
84097 _this.entry = null;
84098 while (entry) {
84099 var cb = entry.callback;
84100 state.pendingcb--;
84101 cb(err);
84102 entry = entry.next;
84103 }
84104 if (state.corkedRequestsFree) {
84105 state.corkedRequestsFree.next = _this;
84106 } else {
84107 state.corkedRequestsFree = _this;
84108 }
84109 };
84110 }
84111 }).call(this,require('_process'))
84112 },{"./_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){
84113 'use strict';
84114
84115 var Buffer = require('buffer').Buffer;
84116 /*<replacement>*/
84117 var bufferShim = require('buffer-shims');
84118 /*</replacement>*/
84119
84120 module.exports = BufferList;
84121
84122 function BufferList() {
84123 this.head = null;
84124 this.tail = null;
84125 this.length = 0;
84126 }
84127
84128 BufferList.prototype.push = function (v) {
84129 var entry = { data: v, next: null };
84130 if (this.length > 0) this.tail.next = entry;else this.head = entry;
84131 this.tail = entry;
84132 ++this.length;
84133 };
84134
84135 BufferList.prototype.unshift = function (v) {
84136 var entry = { data: v, next: this.head };
84137 if (this.length === 0) this.tail = entry;
84138 this.head = entry;
84139 ++this.length;
84140 };
84141
84142 BufferList.prototype.shift = function () {
84143 if (this.length === 0) return;
84144 var ret = this.head.data;
84145 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
84146 --this.length;
84147 return ret;
84148 };
84149
84150 BufferList.prototype.clear = function () {
84151 this.head = this.tail = null;
84152 this.length = 0;
84153 };
84154
84155 BufferList.prototype.join = function (s) {
84156 if (this.length === 0) return '';
84157 var p = this.head;
84158 var ret = '' + p.data;
84159 while (p = p.next) {
84160 ret += s + p.data;
84161 }return ret;
84162 };
84163
84164 BufferList.prototype.concat = function (n) {
84165 if (this.length === 0) return bufferShim.alloc(0);
84166 if (this.length === 1) return this.head.data;
84167 var ret = bufferShim.allocUnsafe(n >>> 0);
84168 var p = this.head;
84169 var i = 0;
84170 while (p) {
84171 p.data.copy(ret, i);
84172 i += p.data.length;
84173 p = p.next;
84174 }
84175 return ret;
84176 };
84177 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
84178 module.exports = require("./lib/_stream_passthrough.js")
84179
84180 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
84181 (function (process){
84182 var Stream = (function (){
84183 try {
84184 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
84185 } catch(_){}
84186 }());
84187 exports = module.exports = require('./lib/_stream_readable.js');
84188 exports.Stream = Stream || exports;
84189 exports.Readable = exports;
84190 exports.Writable = require('./lib/_stream_writable.js');
84191 exports.Duplex = require('./lib/_stream_duplex.js');
84192 exports.Transform = require('./lib/_stream_transform.js');
84193 exports.PassThrough = require('./lib/_stream_passthrough.js');
84194
84195 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
84196 module.exports = Stream;
84197 }
84198
84199 }).call(this,require('_process'))
84200 },{"./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){
84201 module.exports = require("./lib/_stream_transform.js")
84202
84203 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
84204 module.exports = require("./lib/_stream_writable.js")
84205
84206 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
84207 // Copyright Joyent, Inc. and other Node contributors.
84208 //
84209 // Permission is hereby granted, free of charge, to any person obtaining a
84210 // copy of this software and associated documentation files (the
84211 // "Software"), to deal in the Software without restriction, including
84212 // without limitation the rights to use, copy, modify, merge, publish,
84213 // distribute, sublicense, and/or sell copies of the Software, and to permit
84214 // persons to whom the Software is furnished to do so, subject to the
84215 // following conditions:
84216 //
84217 // The above copyright notice and this permission notice shall be included
84218 // in all copies or substantial portions of the Software.
84219 //
84220 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84221 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84222 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84223 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84224 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84225 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84226 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84227
84228 module.exports = Stream;
84229
84230 var EE = require('events').EventEmitter;
84231 var inherits = require('inherits');
84232
84233 inherits(Stream, EE);
84234 Stream.Readable = require('readable-stream/readable.js');
84235 Stream.Writable = require('readable-stream/writable.js');
84236 Stream.Duplex = require('readable-stream/duplex.js');
84237 Stream.Transform = require('readable-stream/transform.js');
84238 Stream.PassThrough = require('readable-stream/passthrough.js');
84239
84240 // Backwards-compat with node 0.4.x
84241 Stream.Stream = Stream;
84242
84243
84244
84245 // old-style streams. Note that the pipe method (the only relevant
84246 // part of this class) is overridden in the Readable class.
84247
84248 function Stream() {
84249 EE.call(this);
84250 }
84251
84252 Stream.prototype.pipe = function(dest, options) {
84253 var source = this;
84254
84255 function ondata(chunk) {
84256 if (dest.writable) {
84257 if (false === dest.write(chunk) && source.pause) {
84258 source.pause();
84259 }
84260 }
84261 }
84262
84263 source.on('data', ondata);
84264
84265 function ondrain() {
84266 if (source.readable && source.resume) {
84267 source.resume();
84268 }
84269 }
84270
84271 dest.on('drain', ondrain);
84272
84273 // If the 'end' option is not supplied, dest.end() will be called when
84274 // source gets the 'end' or 'close' events. Only dest.end() once.
84275 if (!dest._isStdio && (!options || options.end !== false)) {
84276 source.on('end', onend);
84277 source.on('close', onclose);
84278 }
84279
84280 var didOnEnd = false;
84281 function onend() {
84282 if (didOnEnd) return;
84283 didOnEnd = true;
84284
84285 dest.end();
84286 }
84287
84288
84289 function onclose() {
84290 if (didOnEnd) return;
84291 didOnEnd = true;
84292
84293 if (typeof dest.destroy === 'function') dest.destroy();
84294 }
84295
84296 // don't leave dangling pipes when there are errors.
84297 function onerror(er) {
84298 cleanup();
84299 if (EE.listenerCount(this, 'error') === 0) {
84300 throw er; // Unhandled stream error in pipe.
84301 }
84302 }
84303
84304 source.on('error', onerror);
84305 dest.on('error', onerror);
84306
84307 // remove all the event listeners that were added.
84308 function cleanup() {
84309 source.removeListener('data', ondata);
84310 dest.removeListener('drain', ondrain);
84311
84312 source.removeListener('end', onend);
84313 source.removeListener('close', onclose);
84314
84315 source.removeListener('error', onerror);
84316 dest.removeListener('error', onerror);
84317
84318 source.removeListener('end', cleanup);
84319 source.removeListener('close', cleanup);
84320
84321 dest.removeListener('close', cleanup);
84322 }
84323
84324 source.on('end', cleanup);
84325 source.on('close', cleanup);
84326
84327 dest.on('close', cleanup);
84328
84329 dest.emit('pipe', source);
84330
84331 // Allow for unix-like usage: A.pipe(B).pipe(C)
84332 return dest;
84333 };
84334
84335 },{"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){
84336 // Copyright Joyent, Inc. and other Node contributors.
84337 //
84338 // Permission is hereby granted, free of charge, to any person obtaining a
84339 // copy of this software and associated documentation files (the
84340 // "Software"), to deal in the Software without restriction, including
84341 // without limitation the rights to use, copy, modify, merge, publish,
84342 // distribute, sublicense, and/or sell copies of the Software, and to permit
84343 // persons to whom the Software is furnished to do so, subject to the
84344 // following conditions:
84345 //
84346 // The above copyright notice and this permission notice shall be included
84347 // in all copies or substantial portions of the Software.
84348 //
84349 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84350 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84351 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84352 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84353 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84354 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84355 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84356
84357 var Buffer = require('buffer').Buffer;
84358
84359 var isBufferEncoding = Buffer.isEncoding
84360 || function(encoding) {
84361 switch (encoding && encoding.toLowerCase()) {
84362 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;
84363 default: return false;
84364 }
84365 }
84366
84367
84368 function assertEncoding(encoding) {
84369 if (encoding && !isBufferEncoding(encoding)) {
84370 throw new Error('Unknown encoding: ' + encoding);
84371 }
84372 }
84373
84374 // StringDecoder provides an interface for efficiently splitting a series of
84375 // buffers into a series of JS strings without breaking apart multi-byte
84376 // characters. CESU-8 is handled as part of the UTF-8 encoding.
84377 //
84378 // @TODO Handling all encodings inside a single object makes it very difficult
84379 // to reason about this code, so it should be split up in the future.
84380 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
84381 // points as used by CESU-8.
84382 var StringDecoder = exports.StringDecoder = function(encoding) {
84383 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
84384 assertEncoding(encoding);
84385 switch (this.encoding) {
84386 case 'utf8':
84387 // CESU-8 represents each of Surrogate Pair by 3-bytes
84388 this.surrogateSize = 3;
84389 break;
84390 case 'ucs2':
84391 case 'utf16le':
84392 // UTF-16 represents each of Surrogate Pair by 2-bytes
84393 this.surrogateSize = 2;
84394 this.detectIncompleteChar = utf16DetectIncompleteChar;
84395 break;
84396 case 'base64':
84397 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
84398 this.surrogateSize = 3;
84399 this.detectIncompleteChar = base64DetectIncompleteChar;
84400 break;
84401 default:
84402 this.write = passThroughWrite;
84403 return;
84404 }
84405
84406 // Enough space to store all bytes of a single character. UTF-8 needs 4
84407 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
84408 this.charBuffer = new Buffer(6);
84409 // Number of bytes received for the current incomplete multi-byte character.
84410 this.charReceived = 0;
84411 // Number of bytes expected for the current incomplete multi-byte character.
84412 this.charLength = 0;
84413 };
84414
84415
84416 // write decodes the given buffer and returns it as JS string that is
84417 // guaranteed to not contain any partial multi-byte characters. Any partial
84418 // character found at the end of the buffer is buffered up, and will be
84419 // returned when calling write again with the remaining bytes.
84420 //
84421 // Note: Converting a Buffer containing an orphan surrogate to a String
84422 // currently works, but converting a String to a Buffer (via `new Buffer`, or
84423 // Buffer#write) will replace incomplete surrogates with the unicode
84424 // replacement character. See https://codereview.chromium.org/121173009/ .
84425 StringDecoder.prototype.write = function(buffer) {
84426 var charStr = '';
84427 // if our last write ended with an incomplete multibyte character
84428 while (this.charLength) {
84429 // determine how many remaining bytes this buffer has to offer for this char
84430 var available = (buffer.length >= this.charLength - this.charReceived) ?
84431 this.charLength - this.charReceived :
84432 buffer.length;
84433
84434 // add the new bytes to the char buffer
84435 buffer.copy(this.charBuffer, this.charReceived, 0, available);
84436 this.charReceived += available;
84437
84438 if (this.charReceived < this.charLength) {
84439 // still not enough chars in this buffer? wait for more ...
84440 return '';
84441 }
84442
84443 // remove bytes belonging to the current character from the buffer
84444 buffer = buffer.slice(available, buffer.length);
84445
84446 // get the character that was split
84447 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
84448
84449 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84450 var charCode = charStr.charCodeAt(charStr.length - 1);
84451 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84452 this.charLength += this.surrogateSize;
84453 charStr = '';
84454 continue;
84455 }
84456 this.charReceived = this.charLength = 0;
84457
84458 // if there are no more bytes in this buffer, just emit our char
84459 if (buffer.length === 0) {
84460 return charStr;
84461 }
84462 break;
84463 }
84464
84465 // determine and set charLength / charReceived
84466 this.detectIncompleteChar(buffer);
84467
84468 var end = buffer.length;
84469 if (this.charLength) {
84470 // buffer the incomplete character bytes we got
84471 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
84472 end -= this.charReceived;
84473 }
84474
84475 charStr += buffer.toString(this.encoding, 0, end);
84476
84477 var end = charStr.length - 1;
84478 var charCode = charStr.charCodeAt(end);
84479 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84480 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84481 var size = this.surrogateSize;
84482 this.charLength += size;
84483 this.charReceived += size;
84484 this.charBuffer.copy(this.charBuffer, size, 0, size);
84485 buffer.copy(this.charBuffer, 0, 0, size);
84486 return charStr.substring(0, end);
84487 }
84488
84489 // or just emit the charStr
84490 return charStr;
84491 };
84492
84493 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
84494 // the end of the given buffer. If so, it sets this.charLength to the byte
84495 // length that character, and sets this.charReceived to the number of bytes
84496 // that are available for this character.
84497 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
84498 // determine how many bytes we have to check at the end of this buffer
84499 var i = (buffer.length >= 3) ? 3 : buffer.length;
84500
84501 // Figure out if one of the last i bytes of our buffer announces an
84502 // incomplete char.
84503 for (; i > 0; i--) {
84504 var c = buffer[buffer.length - i];
84505
84506 // See http://en.wikipedia.org/wiki/UTF-8#Description
84507
84508 // 110XXXXX
84509 if (i == 1 && c >> 5 == 0x06) {
84510 this.charLength = 2;
84511 break;
84512 }
84513
84514 // 1110XXXX
84515 if (i <= 2 && c >> 4 == 0x0E) {
84516 this.charLength = 3;
84517 break;
84518 }
84519
84520 // 11110XXX
84521 if (i <= 3 && c >> 3 == 0x1E) {
84522 this.charLength = 4;
84523 break;
84524 }
84525 }
84526 this.charReceived = i;
84527 };
84528
84529 StringDecoder.prototype.end = function(buffer) {
84530 var res = '';
84531 if (buffer && buffer.length)
84532 res = this.write(buffer);
84533
84534 if (this.charReceived) {
84535 var cr = this.charReceived;
84536 var buf = this.charBuffer;
84537 var enc = this.encoding;
84538 res += buf.slice(0, cr).toString(enc);
84539 }
84540
84541 return res;
84542 };
84543
84544 function passThroughWrite(buffer) {
84545 return buffer.toString(this.encoding);
84546 }
84547
84548 function utf16DetectIncompleteChar(buffer) {
84549 this.charReceived = buffer.length % 2;
84550 this.charLength = this.charReceived ? 2 : 0;
84551 }
84552
84553 function base64DetectIncompleteChar(buffer) {
84554 this.charReceived = buffer.length % 3;
84555 this.charLength = this.charReceived ? 3 : 0;
84556 }
84557
84558 },{"buffer":5}],27:[function(require,module,exports){
84559 (function (global){
84560
84561 /**
84562 * Module exports.
84563 */
84564
84565 module.exports = deprecate;
84566
84567 /**
84568 * Mark that a method should not be used.
84569 * Returns a modified function which warns once by default.
84570 *
84571 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
84572 *
84573 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
84574 * will throw an Error when invoked.
84575 *
84576 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
84577 * will invoke `console.trace()` instead of `console.error()`.
84578 *
84579 * @param {Function} fn - the function to deprecate
84580 * @param {String} msg - the string to print to the console when `fn` is invoked
84581 * @returns {Function} a new "deprecated" version of `fn`
84582 * @api public
84583 */
84584
84585 function deprecate (fn, msg) {
84586 if (config('noDeprecation')) {
84587 return fn;
84588 }
84589
84590 var warned = false;
84591 function deprecated() {
84592 if (!warned) {
84593 if (config('throwDeprecation')) {
84594 throw new Error(msg);
84595 } else if (config('traceDeprecation')) {
84596 console.trace(msg);
84597 } else {
84598 console.warn(msg);
84599 }
84600 warned = true;
84601 }
84602 return fn.apply(this, arguments);
84603 }
84604
84605 return deprecated;
84606 }
84607
84608 /**
84609 * Checks `localStorage` for boolean values for the given `name`.
84610 *
84611 * @param {String} name
84612 * @returns {Boolean}
84613 * @api private
84614 */
84615
84616 function config (name) {
84617 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
84618 try {
84619 if (!global.localStorage) return false;
84620 } catch (_) {
84621 return false;
84622 }
84623 var val = global.localStorage[name];
84624 if (null == val) return false;
84625 return String(val).toLowerCase() === 'true';
84626 }
84627
84628 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
84629 },{}],28:[function(require,module,exports){
84630 arguments[4][9][0].apply(exports,arguments)
84631 },{"dup":9}],29:[function(require,module,exports){
84632 module.exports = function isBuffer(arg) {
84633 return arg && typeof arg === 'object'
84634 && typeof arg.copy === 'function'
84635 && typeof arg.fill === 'function'
84636 && typeof arg.readUInt8 === 'function';
84637 }
84638 },{}],30:[function(require,module,exports){
84639 (function (process,global){
84640 // Copyright Joyent, Inc. and other Node contributors.
84641 //
84642 // Permission is hereby granted, free of charge, to any person obtaining a
84643 // copy of this software and associated documentation files (the
84644 // "Software"), to deal in the Software without restriction, including
84645 // without limitation the rights to use, copy, modify, merge, publish,
84646 // distribute, sublicense, and/or sell copies of the Software, and to permit
84647 // persons to whom the Software is furnished to do so, subject to the
84648 // following conditions:
84649 //
84650 // The above copyright notice and this permission notice shall be included
84651 // in all copies or substantial portions of the Software.
84652 //
84653 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84654 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84655 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84656 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84657 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84658 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84659 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84660
84661 var formatRegExp = /%[sdj%]/g;
84662 exports.format = function(f) {
84663 if (!isString(f)) {
84664 var objects = [];
84665 for (var i = 0; i < arguments.length; i++) {
84666 objects.push(inspect(arguments[i]));
84667 }
84668 return objects.join(' ');
84669 }
84670
84671 var i = 1;
84672 var args = arguments;
84673 var len = args.length;
84674 var str = String(f).replace(formatRegExp, function(x) {
84675 if (x === '%%') return '%';
84676 if (i >= len) return x;
84677 switch (x) {
84678 case '%s': return String(args[i++]);
84679 case '%d': return Number(args[i++]);
84680 case '%j':
84681 try {
84682 return JSON.stringify(args[i++]);
84683 } catch (_) {
84684 return '[Circular]';
84685 }
84686 default:
84687 return x;
84688 }
84689 });
84690 for (var x = args[i]; i < len; x = args[++i]) {
84691 if (isNull(x) || !isObject(x)) {
84692 str += ' ' + x;
84693 } else {
84694 str += ' ' + inspect(x);
84695 }
84696 }
84697 return str;
84698 };
84699
84700
84701 // Mark that a method should not be used.
84702 // Returns a modified function which warns once by default.
84703 // If --no-deprecation is set, then it is a no-op.
84704 exports.deprecate = function(fn, msg) {
84705 // Allow for deprecating things in the process of starting up.
84706 if (isUndefined(global.process)) {
84707 return function() {
84708 return exports.deprecate(fn, msg).apply(this, arguments);
84709 };
84710 }
84711
84712 if (process.noDeprecation === true) {
84713 return fn;
84714 }
84715
84716 var warned = false;
84717 function deprecated() {
84718 if (!warned) {
84719 if (process.throwDeprecation) {
84720 throw new Error(msg);
84721 } else if (process.traceDeprecation) {
84722 console.trace(msg);
84723 } else {
84724 console.error(msg);
84725 }
84726 warned = true;
84727 }
84728 return fn.apply(this, arguments);
84729 }
84730
84731 return deprecated;
84732 };
84733
84734
84735 var debugs = {};
84736 var debugEnviron;
84737 exports.debuglog = function(set) {
84738 if (isUndefined(debugEnviron))
84739 debugEnviron = process.env.NODE_DEBUG || '';
84740 set = set.toUpperCase();
84741 if (!debugs[set]) {
84742 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
84743 var pid = process.pid;
84744 debugs[set] = function() {
84745 var msg = exports.format.apply(exports, arguments);
84746 console.error('%s %d: %s', set, pid, msg);
84747 };
84748 } else {
84749 debugs[set] = function() {};
84750 }
84751 }
84752 return debugs[set];
84753 };
84754
84755
84756 /**
84757 * Echos the value of a value. Trys to print the value out
84758 * in the best way possible given the different types.
84759 *
84760 * @param {Object} obj The object to print out.
84761 * @param {Object} opts Optional options object that alters the output.
84762 */
84763 /* legacy: obj, showHidden, depth, colors*/
84764 function inspect(obj, opts) {
84765 // default options
84766 var ctx = {
84767 seen: [],
84768 stylize: stylizeNoColor
84769 };
84770 // legacy...
84771 if (arguments.length >= 3) ctx.depth = arguments[2];
84772 if (arguments.length >= 4) ctx.colors = arguments[3];
84773 if (isBoolean(opts)) {
84774 // legacy...
84775 ctx.showHidden = opts;
84776 } else if (opts) {
84777 // got an "options" object
84778 exports._extend(ctx, opts);
84779 }
84780 // set default options
84781 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
84782 if (isUndefined(ctx.depth)) ctx.depth = 2;
84783 if (isUndefined(ctx.colors)) ctx.colors = false;
84784 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
84785 if (ctx.colors) ctx.stylize = stylizeWithColor;
84786 return formatValue(ctx, obj, ctx.depth);
84787 }
84788 exports.inspect = inspect;
84789
84790
84791 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
84792 inspect.colors = {
84793 'bold' : [1, 22],
84794 'italic' : [3, 23],
84795 'underline' : [4, 24],
84796 'inverse' : [7, 27],
84797 'white' : [37, 39],
84798 'grey' : [90, 39],
84799 'black' : [30, 39],
84800 'blue' : [34, 39],
84801 'cyan' : [36, 39],
84802 'green' : [32, 39],
84803 'magenta' : [35, 39],
84804 'red' : [31, 39],
84805 'yellow' : [33, 39]
84806 };
84807
84808 // Don't use 'blue' not visible on cmd.exe
84809 inspect.styles = {
84810 'special': 'cyan',
84811 'number': 'yellow',
84812 'boolean': 'yellow',
84813 'undefined': 'grey',
84814 'null': 'bold',
84815 'string': 'green',
84816 'date': 'magenta',
84817 // "name": intentionally not styling
84818 'regexp': 'red'
84819 };
84820
84821
84822 function stylizeWithColor(str, styleType) {
84823 var style = inspect.styles[styleType];
84824
84825 if (style) {
84826 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
84827 '\u001b[' + inspect.colors[style][1] + 'm';
84828 } else {
84829 return str;
84830 }
84831 }
84832
84833
84834 function stylizeNoColor(str, styleType) {
84835 return str;
84836 }
84837
84838
84839 function arrayToHash(array) {
84840 var hash = {};
84841
84842 array.forEach(function(val, idx) {
84843 hash[val] = true;
84844 });
84845
84846 return hash;
84847 }
84848
84849
84850 function formatValue(ctx, value, recurseTimes) {
84851 // Provide a hook for user-specified inspect functions.
84852 // Check that value is an object with an inspect function on it
84853 if (ctx.customInspect &&
84854 value &&
84855 isFunction(value.inspect) &&
84856 // Filter out the util module, it's inspect function is special
84857 value.inspect !== exports.inspect &&
84858 // Also filter out any prototype objects using the circular check.
84859 !(value.constructor && value.constructor.prototype === value)) {
84860 var ret = value.inspect(recurseTimes, ctx);
84861 if (!isString(ret)) {
84862 ret = formatValue(ctx, ret, recurseTimes);
84863 }
84864 return ret;
84865 }
84866
84867 // Primitive types cannot have properties
84868 var primitive = formatPrimitive(ctx, value);
84869 if (primitive) {
84870 return primitive;
84871 }
84872
84873 // Look up the keys of the object.
84874 var keys = Object.keys(value);
84875 var visibleKeys = arrayToHash(keys);
84876
84877 if (ctx.showHidden) {
84878 keys = Object.getOwnPropertyNames(value);
84879 }
84880
84881 // IE doesn't make error fields non-enumerable
84882 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
84883 if (isError(value)
84884 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
84885 return formatError(value);
84886 }
84887
84888 // Some type of object without properties can be shortcutted.
84889 if (keys.length === 0) {
84890 if (isFunction(value)) {
84891 var name = value.name ? ': ' + value.name : '';
84892 return ctx.stylize('[Function' + name + ']', 'special');
84893 }
84894 if (isRegExp(value)) {
84895 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84896 }
84897 if (isDate(value)) {
84898 return ctx.stylize(Date.prototype.toString.call(value), 'date');
84899 }
84900 if (isError(value)) {
84901 return formatError(value);
84902 }
84903 }
84904
84905 var base = '', array = false, braces = ['{', '}'];
84906
84907 // Make Array say that they are Array
84908 if (isArray(value)) {
84909 array = true;
84910 braces = ['[', ']'];
84911 }
84912
84913 // Make functions say that they are functions
84914 if (isFunction(value)) {
84915 var n = value.name ? ': ' + value.name : '';
84916 base = ' [Function' + n + ']';
84917 }
84918
84919 // Make RegExps say that they are RegExps
84920 if (isRegExp(value)) {
84921 base = ' ' + RegExp.prototype.toString.call(value);
84922 }
84923
84924 // Make dates with properties first say the date
84925 if (isDate(value)) {
84926 base = ' ' + Date.prototype.toUTCString.call(value);
84927 }
84928
84929 // Make error with message first say the error
84930 if (isError(value)) {
84931 base = ' ' + formatError(value);
84932 }
84933
84934 if (keys.length === 0 && (!array || value.length == 0)) {
84935 return braces[0] + base + braces[1];
84936 }
84937
84938 if (recurseTimes < 0) {
84939 if (isRegExp(value)) {
84940 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84941 } else {
84942 return ctx.stylize('[Object]', 'special');
84943 }
84944 }
84945
84946 ctx.seen.push(value);
84947
84948 var output;
84949 if (array) {
84950 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
84951 } else {
84952 output = keys.map(function(key) {
84953 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
84954 });
84955 }
84956
84957 ctx.seen.pop();
84958
84959 return reduceToSingleString(output, base, braces);
84960 }
84961
84962
84963 function formatPrimitive(ctx, value) {
84964 if (isUndefined(value))
84965 return ctx.stylize('undefined', 'undefined');
84966 if (isString(value)) {
84967 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
84968 .replace(/'/g, "\\'")
84969 .replace(/\\"/g, '"') + '\'';
84970 return ctx.stylize(simple, 'string');
84971 }
84972 if (isNumber(value))
84973 return ctx.stylize('' + value, 'number');
84974 if (isBoolean(value))
84975 return ctx.stylize('' + value, 'boolean');
84976 // For some reason typeof null is "object", so special case here.
84977 if (isNull(value))
84978 return ctx.stylize('null', 'null');
84979 }
84980
84981
84982 function formatError(value) {
84983 return '[' + Error.prototype.toString.call(value) + ']';
84984 }
84985
84986
84987 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
84988 var output = [];
84989 for (var i = 0, l = value.length; i < l; ++i) {
84990 if (hasOwnProperty(value, String(i))) {
84991 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
84992 String(i), true));
84993 } else {
84994 output.push('');
84995 }
84996 }
84997 keys.forEach(function(key) {
84998 if (!key.match(/^\d+$/)) {
84999 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
85000 key, true));
85001 }
85002 });
85003 return output;
85004 }
85005
85006
85007 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
85008 var name, str, desc;
85009 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
85010 if (desc.get) {
85011 if (desc.set) {
85012 str = ctx.stylize('[Getter/Setter]', 'special');
85013 } else {
85014 str = ctx.stylize('[Getter]', 'special');
85015 }
85016 } else {
85017 if (desc.set) {
85018 str = ctx.stylize('[Setter]', 'special');
85019 }
85020 }
85021 if (!hasOwnProperty(visibleKeys, key)) {
85022 name = '[' + key + ']';
85023 }
85024 if (!str) {
85025 if (ctx.seen.indexOf(desc.value) < 0) {
85026 if (isNull(recurseTimes)) {
85027 str = formatValue(ctx, desc.value, null);
85028 } else {
85029 str = formatValue(ctx, desc.value, recurseTimes - 1);
85030 }
85031 if (str.indexOf('\n') > -1) {
85032 if (array) {
85033 str = str.split('\n').map(function(line) {
85034 return ' ' + line;
85035 }).join('\n').substr(2);
85036 } else {
85037 str = '\n' + str.split('\n').map(function(line) {
85038 return ' ' + line;
85039 }).join('\n');
85040 }
85041 }
85042 } else {
85043 str = ctx.stylize('[Circular]', 'special');
85044 }
85045 }
85046 if (isUndefined(name)) {
85047 if (array && key.match(/^\d+$/)) {
85048 return str;
85049 }
85050 name = JSON.stringify('' + key);
85051 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
85052 name = name.substr(1, name.length - 2);
85053 name = ctx.stylize(name, 'name');
85054 } else {
85055 name = name.replace(/'/g, "\\'")
85056 .replace(/\\"/g, '"')
85057 .replace(/(^"|"$)/g, "'");
85058 name = ctx.stylize(name, 'string');
85059 }
85060 }
85061
85062 return name + ': ' + str;
85063 }
85064
85065
85066 function reduceToSingleString(output, base, braces) {
85067 var numLinesEst = 0;
85068 var length = output.reduce(function(prev, cur) {
85069 numLinesEst++;
85070 if (cur.indexOf('\n') >= 0) numLinesEst++;
85071 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
85072 }, 0);
85073
85074 if (length > 60) {
85075 return braces[0] +
85076 (base === '' ? '' : base + '\n ') +
85077 ' ' +
85078 output.join(',\n ') +
85079 ' ' +
85080 braces[1];
85081 }
85082
85083 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
85084 }
85085
85086
85087 // NOTE: These type checking functions intentionally don't use `instanceof`
85088 // because it is fragile and can be easily faked with `Object.create()`.
85089 function isArray(ar) {
85090 return Array.isArray(ar);
85091 }
85092 exports.isArray = isArray;
85093
85094 function isBoolean(arg) {
85095 return typeof arg === 'boolean';
85096 }
85097 exports.isBoolean = isBoolean;
85098
85099 function isNull(arg) {
85100 return arg === null;
85101 }
85102 exports.isNull = isNull;
85103
85104 function isNullOrUndefined(arg) {
85105 return arg == null;
85106 }
85107 exports.isNullOrUndefined = isNullOrUndefined;
85108
85109 function isNumber(arg) {
85110 return typeof arg === 'number';
85111 }
85112 exports.isNumber = isNumber;
85113
85114 function isString(arg) {
85115 return typeof arg === 'string';
85116 }
85117 exports.isString = isString;
85118
85119 function isSymbol(arg) {
85120 return typeof arg === 'symbol';
85121 }
85122 exports.isSymbol = isSymbol;
85123
85124 function isUndefined(arg) {
85125 return arg === void 0;
85126 }
85127 exports.isUndefined = isUndefined;
85128
85129 function isRegExp(re) {
85130 return isObject(re) && objectToString(re) === '[object RegExp]';
85131 }
85132 exports.isRegExp = isRegExp;
85133
85134 function isObject(arg) {
85135 return typeof arg === 'object' && arg !== null;
85136 }
85137 exports.isObject = isObject;
85138
85139 function isDate(d) {
85140 return isObject(d) && objectToString(d) === '[object Date]';
85141 }
85142 exports.isDate = isDate;
85143
85144 function isError(e) {
85145 return isObject(e) &&
85146 (objectToString(e) === '[object Error]' || e instanceof Error);
85147 }
85148 exports.isError = isError;
85149
85150 function isFunction(arg) {
85151 return typeof arg === 'function';
85152 }
85153 exports.isFunction = isFunction;
85154
85155 function isPrimitive(arg) {
85156 return arg === null ||
85157 typeof arg === 'boolean' ||
85158 typeof arg === 'number' ||
85159 typeof arg === 'string' ||
85160 typeof arg === 'symbol' || // ES6 symbol
85161 typeof arg === 'undefined';
85162 }
85163 exports.isPrimitive = isPrimitive;
85164
85165 exports.isBuffer = require('./support/isBuffer');
85166
85167 function objectToString(o) {
85168 return Object.prototype.toString.call(o);
85169 }
85170
85171
85172 function pad(n) {
85173 return n < 10 ? '0' + n.toString(10) : n.toString(10);
85174 }
85175
85176
85177 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
85178 'Oct', 'Nov', 'Dec'];
85179
85180 // 26 Feb 16:19:34
85181 function timestamp() {
85182 var d = new Date();
85183 var time = [pad(d.getHours()),
85184 pad(d.getMinutes()),
85185 pad(d.getSeconds())].join(':');
85186 return [d.getDate(), months[d.getMonth()], time].join(' ');
85187 }
85188
85189
85190 // log is just a thin wrapper to console.log that prepends a timestamp
85191 exports.log = function() {
85192 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
85193 };
85194
85195
85196 /**
85197 * Inherit the prototype methods from one constructor into another.
85198 *
85199 * The Function.prototype.inherits from lang.js rewritten as a standalone
85200 * function (not on Function.prototype). NOTE: If this file is to be loaded
85201 * during bootstrapping this function needs to be rewritten using some native
85202 * functions as prototype setup using normal JavaScript does not work as
85203 * expected during bootstrapping (see mirror.js in r114903).
85204 *
85205 * @param {function} ctor Constructor function which needs to inherit the
85206 * prototype.
85207 * @param {function} superCtor Constructor function to inherit prototype from.
85208 */
85209 exports.inherits = require('inherits');
85210
85211 exports._extend = function(origin, add) {
85212 // Don't do anything if add isn't an object
85213 if (!add || !isObject(add)) return origin;
85214
85215 var keys = Object.keys(add);
85216 var i = keys.length;
85217 while (i--) {
85218 origin[keys[i]] = add[keys[i]];
85219 }
85220 return origin;
85221 };
85222
85223 function hasOwnProperty(obj, prop) {
85224 return Object.prototype.hasOwnProperty.call(obj, prop);
85225 }
85226
85227 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
85228 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
85229 (function (Buffer){
85230 const createKeccakHash = require('keccak')
85231 const secp256k1 = require('secp256k1')
85232 const assert = require('assert')
85233 const rlp = require('rlp')
85234 const BN = require('bn.js')
85235 const createHash = require('create-hash')
85236 Object.assign(exports, require('ethjs-util'))
85237
85238 /**
85239 * the max integer that this VM can handle (a ```BN```)
85240 * @var {BN} MAX_INTEGER
85241 */
85242 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
85243
85244 /**
85245 * 2^256 (a ```BN```)
85246 * @var {BN} TWO_POW256
85247 */
85248 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
85249
85250 /**
85251 * SHA3-256 hash of null (a ```String```)
85252 * @var {String} SHA3_NULL_S
85253 */
85254 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
85255
85256 /**
85257 * SHA3-256 hash of null (a ```Buffer```)
85258 * @var {Buffer} SHA3_NULL
85259 */
85260 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
85261
85262 /**
85263 * SHA3-256 of an RLP of an empty array (a ```String```)
85264 * @var {String} SHA3_RLP_ARRAY_S
85265 */
85266 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
85267
85268 /**
85269 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
85270 * @var {Buffer} SHA3_RLP_ARRAY
85271 */
85272 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
85273
85274 /**
85275 * SHA3-256 hash of the RLP of null (a ```String```)
85276 * @var {String} SHA3_RLP_S
85277 */
85278 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
85279
85280 /**
85281 * SHA3-256 hash of the RLP of null (a ```Buffer```)
85282 * @var {Buffer} SHA3_RLP
85283 */
85284 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
85285
85286 /**
85287 * [`BN`](https://github.com/indutny/bn.js)
85288 * @var {Function}
85289 */
85290 exports.BN = BN
85291
85292 /**
85293 * [`rlp`](https://github.com/ethereumjs/rlp)
85294 * @var {Function}
85295 */
85296 exports.rlp = rlp
85297
85298 /**
85299 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
85300 * @var {Object}
85301 */
85302 exports.secp256k1 = secp256k1
85303
85304 /**
85305 * Returns a buffer filled with 0s
85306 * @method zeros
85307 * @param {Number} bytes the number of bytes the buffer should be
85308 * @return {Buffer}
85309 */
85310 exports.zeros = function (bytes) {
85311 return Buffer.allocUnsafe(bytes).fill(0)
85312 }
85313
85314 /**
85315 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85316 * Or it truncates the beginning if it exceeds.
85317 * @method lsetLength
85318 * @param {Buffer|Array} msg the value to pad
85319 * @param {Number} length the number of bytes the output should be
85320 * @param {Boolean} [right=false] whether to start padding form the left or right
85321 * @return {Buffer|Array}
85322 */
85323 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
85324 var buf = exports.zeros(length)
85325 msg = exports.toBuffer(msg)
85326 if (right) {
85327 if (msg.length < length) {
85328 msg.copy(buf)
85329 return buf
85330 }
85331 return msg.slice(0, length)
85332 } else {
85333 if (msg.length < length) {
85334 msg.copy(buf, length - msg.length)
85335 return buf
85336 }
85337 return msg.slice(-length)
85338 }
85339 }
85340
85341 /**
85342 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85343 * Or it truncates the beginning if it exceeds.
85344 * @param {Buffer|Array} msg the value to pad
85345 * @param {Number} length the number of bytes the output should be
85346 * @return {Buffer|Array}
85347 */
85348 exports.setLengthRight = function (msg, length) {
85349 return exports.setLength(msg, length, true)
85350 }
85351
85352 /**
85353 * Trims leading zeros from a `Buffer` or an `Array`
85354 * @param {Buffer|Array|String} a
85355 * @return {Buffer|Array|String}
85356 */
85357 exports.unpad = exports.stripZeros = function (a) {
85358 a = exports.stripHexPrefix(a)
85359 var first = a[0]
85360 while (a.length > 0 && first.toString() === '0') {
85361 a = a.slice(1)
85362 first = a[0]
85363 }
85364 return a
85365 }
85366 /**
85367 * 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.
85368 * @param {*} v the value
85369 */
85370 exports.toBuffer = function (v) {
85371 if (!Buffer.isBuffer(v)) {
85372 if (Array.isArray(v)) {
85373 v = Buffer.from(v)
85374 } else if (typeof v === 'string') {
85375 if (exports.isHexPrefixed(v)) {
85376 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
85377 } else {
85378 v = Buffer.from(v)
85379 }
85380 } else if (typeof v === 'number') {
85381 v = exports.intToBuffer(v)
85382 } else if (v === null || v === undefined) {
85383 v = Buffer.allocUnsafe(0)
85384 } else if (v.toArray) {
85385 // converts a BN to a Buffer
85386 v = Buffer.from(v.toArray())
85387 } else {
85388 throw new Error('invalid type')
85389 }
85390 }
85391 return v
85392 }
85393
85394 /**
85395 * Converts a `Buffer` to a `Number`
85396 * @param {Buffer} buf
85397 * @return {Number}
85398 * @throws If the input number exceeds 53 bits.
85399 */
85400 exports.bufferToInt = function (buf) {
85401 return new BN(exports.toBuffer(buf)).toNumber()
85402 }
85403
85404 /**
85405 * Converts a `Buffer` into a hex `String`
85406 * @param {Buffer} buf
85407 * @return {String}
85408 */
85409 exports.bufferToHex = function (buf) {
85410 buf = exports.toBuffer(buf)
85411 return '0x' + buf.toString('hex')
85412 }
85413
85414 /**
85415 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
85416 * @param {Buffer} num
85417 * @return {BN}
85418 */
85419 exports.fromSigned = function (num) {
85420 return new BN(num).fromTwos(256)
85421 }
85422
85423 /**
85424 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
85425 * @param {BN} num
85426 * @return {Buffer}
85427 */
85428 exports.toUnsigned = function (num) {
85429 return Buffer.from(num.toTwos(256).toArray())
85430 }
85431
85432 /**
85433 * Creates SHA-3 hash of the input
85434 * @param {Buffer|Array|String|Number} a the input data
85435 * @param {Number} [bits=256] the SHA width
85436 * @return {Buffer}
85437 */
85438 exports.sha3 = function (a, bits) {
85439 a = exports.toBuffer(a)
85440 if (!bits) bits = 256
85441
85442 return createKeccakHash('keccak' + bits).update(a).digest()
85443 }
85444
85445 /**
85446 * Creates SHA256 hash of the input
85447 * @param {Buffer|Array|String|Number} a the input data
85448 * @return {Buffer}
85449 */
85450 exports.sha256 = function (a) {
85451 a = exports.toBuffer(a)
85452 return createHash('sha256').update(a).digest()
85453 }
85454
85455 /**
85456 * Creates RIPEMD160 hash of the input
85457 * @param {Buffer|Array|String|Number} a the input data
85458 * @param {Boolean} padded whether it should be padded to 256 bits or not
85459 * @return {Buffer}
85460 */
85461 exports.ripemd160 = function (a, padded) {
85462 a = exports.toBuffer(a)
85463 var hash = createHash('rmd160').update(a).digest()
85464 if (padded === true) {
85465 return exports.setLength(hash, 32)
85466 } else {
85467 return hash
85468 }
85469 }
85470
85471 /**
85472 * Creates SHA-3 hash of the RLP encoded version of the input
85473 * @param {Buffer|Array|String|Number} a the input data
85474 * @return {Buffer}
85475 */
85476 exports.rlphash = function (a) {
85477 return exports.sha3(rlp.encode(a))
85478 }
85479
85480 /**
85481 * Checks if the private key satisfies the rules of the curve secp256k1.
85482 * @param {Buffer} privateKey
85483 * @return {Boolean}
85484 */
85485 exports.isValidPrivate = function (privateKey) {
85486 return secp256k1.privateKeyVerify(privateKey)
85487 }
85488
85489 /**
85490 * Checks if the public key satisfies the rules of the curve secp256k1
85491 * and the requirements of Ethereum.
85492 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
85493 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85494 * @return {Boolean}
85495 */
85496 exports.isValidPublic = function (publicKey, sanitize) {
85497 if (publicKey.length === 64) {
85498 // Convert to SEC1 for secp256k1
85499 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
85500 }
85501
85502 if (!sanitize) {
85503 return false
85504 }
85505
85506 return secp256k1.publicKeyVerify(publicKey)
85507 }
85508
85509 /**
85510 * Returns the ethereum address of a given public key.
85511 * Accepts "Ethereum public keys" and SEC1 encoded keys.
85512 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
85513 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85514 * @return {Buffer}
85515 */
85516 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
85517 pubKey = exports.toBuffer(pubKey)
85518 if (sanitize && (pubKey.length !== 64)) {
85519 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
85520 }
85521 assert(pubKey.length === 64)
85522 // Only take the lower 160bits of the hash
85523 return exports.sha3(pubKey).slice(-20)
85524 }
85525
85526 /**
85527 * Returns the ethereum public key of a given private key
85528 * @param {Buffer} privateKey A private key must be 256 bits wide
85529 * @return {Buffer}
85530 */
85531 var privateToPublic = exports.privateToPublic = function (privateKey) {
85532 privateKey = exports.toBuffer(privateKey)
85533 // skip the type flag and use the X, Y points
85534 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
85535 }
85536
85537 /**
85538 * Converts a public key to the Ethereum format.
85539 * @param {Buffer} publicKey
85540 * @return {Buffer}
85541 */
85542 exports.importPublic = function (publicKey) {
85543 publicKey = exports.toBuffer(publicKey)
85544 if (publicKey.length !== 64) {
85545 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
85546 }
85547 return publicKey
85548 }
85549
85550 /**
85551 * ECDSA sign
85552 * @param {Buffer} msgHash
85553 * @param {Buffer} privateKey
85554 * @return {Object}
85555 */
85556 exports.ecsign = function (msgHash, privateKey) {
85557 var sig = secp256k1.sign(msgHash, privateKey)
85558
85559 var ret = {}
85560 ret.r = sig.signature.slice(0, 32)
85561 ret.s = sig.signature.slice(32, 64)
85562 ret.v = sig.recovery + 27
85563 return ret
85564 }
85565
85566 /**
85567 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
85568 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
85569 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
85570 * used to produce the signature.
85571 * @param message
85572 * @returns {Buffer} hash
85573 */
85574 exports.hashPersonalMessage = function (message) {
85575 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
85576 return exports.sha3(Buffer.concat([prefix, message]))
85577 }
85578
85579 /**
85580 * ECDSA public key recovery from signature
85581 * @param {Buffer} msgHash
85582 * @param {Number} v
85583 * @param {Buffer} r
85584 * @param {Buffer} s
85585 * @return {Buffer} publicKey
85586 */
85587 exports.ecrecover = function (msgHash, v, r, s) {
85588 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
85589 var recovery = v - 27
85590 if (recovery !== 0 && recovery !== 1) {
85591 throw new Error('Invalid signature v value')
85592 }
85593 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
85594 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
85595 }
85596
85597 /**
85598 * Convert signature parameters into the format of `eth_sign` RPC method
85599 * @param {Number} v
85600 * @param {Buffer} r
85601 * @param {Buffer} s
85602 * @return {String} sig
85603 */
85604 exports.toRpcSig = function (v, r, s) {
85605 // NOTE: with potential introduction of chainId this might need to be updated
85606 if (v !== 27 && v !== 28) {
85607 throw new Error('Invalid recovery id')
85608 }
85609
85610 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
85611 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
85612 return exports.bufferToHex(Buffer.concat([
85613 exports.setLengthLeft(r, 32),
85614 exports.setLengthLeft(s, 32),
85615 exports.toBuffer(v - 27)
85616 ]))
85617 }
85618
85619 /**
85620 * Convert signature format of the `eth_sign` RPC method to signature parameters
85621 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
85622 * @param {String} sig
85623 * @return {Object}
85624 */
85625 exports.fromRpcSig = function (sig) {
85626 sig = exports.toBuffer(sig)
85627
85628 // NOTE: with potential introduction of chainId this might need to be updated
85629 if (sig.length !== 65) {
85630 throw new Error('Invalid signature length')
85631 }
85632
85633 var v = sig[64]
85634 // support both versions of `eth_sign` responses
85635 if (v < 27) {
85636 v += 27
85637 }
85638
85639 return {
85640 v: v,
85641 r: sig.slice(0, 32),
85642 s: sig.slice(32, 64)
85643 }
85644 }
85645
85646 /**
85647 * Returns the ethereum address of a given private key
85648 * @param {Buffer} privateKey A private key must be 256 bits wide
85649 * @return {Buffer}
85650 */
85651 exports.privateToAddress = function (privateKey) {
85652 return exports.publicToAddress(privateToPublic(privateKey))
85653 }
85654
85655 /**
85656 * Checks if the address is a valid. Accepts checksummed addresses too
85657 * @param {String} address
85658 * @return {Boolean}
85659 */
85660 exports.isValidAddress = function (address) {
85661 return /^0x[0-9a-fA-F]{40}$/i.test(address)
85662 }
85663
85664 /**
85665 * Returns a checksummed address
85666 * @param {String} address
85667 * @return {String}
85668 */
85669 exports.toChecksumAddress = function (address) {
85670 address = exports.stripHexPrefix(address).toLowerCase()
85671 var hash = exports.sha3(address).toString('hex')
85672 var ret = '0x'
85673
85674 for (var i = 0; i < address.length; i++) {
85675 if (parseInt(hash[i], 16) >= 8) {
85676 ret += address[i].toUpperCase()
85677 } else {
85678 ret += address[i]
85679 }
85680 }
85681
85682 return ret
85683 }
85684
85685 /**
85686 * Checks if the address is a valid checksummed address
85687 * @param {Buffer} address
85688 * @return {Boolean}
85689 */
85690 exports.isValidChecksumAddress = function (address) {
85691 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
85692 }
85693
85694 /**
85695 * Generates an address of a newly created contract
85696 * @param {Buffer} from the address which is creating this new address
85697 * @param {Buffer} nonce the nonce of the from account
85698 * @return {Buffer}
85699 */
85700 exports.generateAddress = function (from, nonce) {
85701 from = exports.toBuffer(from)
85702 nonce = new BN(nonce)
85703
85704 if (nonce.isZero()) {
85705 // in RLP we want to encode null in the case of zero nonce
85706 // read the RLP documentation for an answer if you dare
85707 nonce = null
85708 } else {
85709 nonce = Buffer.from(nonce.toArray())
85710 }
85711
85712 // Only take the lower 160bits of the hash
85713 return exports.rlphash([from, nonce]).slice(-20)
85714 }
85715
85716 /**
85717 * Returns true if the supplied address belongs to a precompiled account
85718 * @param {Buffer|String} address
85719 * @return {Boolean}
85720 */
85721 exports.isPrecompiled = function (address) {
85722 var a = exports.unpad(address)
85723 return a.length === 1 && a[0] > 0 && a[0] < 5
85724 }
85725
85726 /**
85727 * Adds "0x" to a given `String` if it does not already start with "0x"
85728 * @param {String} str
85729 * @return {String}
85730 */
85731 exports.addHexPrefix = function (str) {
85732 if (typeof str !== 'string') {
85733 return str
85734 }
85735
85736 return exports.isHexPrefixed(str) ? str : '0x' + str
85737 }
85738
85739 /**
85740 * Validate ECDSA signature
85741 * @method isValidSignature
85742 * @param {Buffer} v
85743 * @param {Buffer} r
85744 * @param {Buffer} s
85745 * @param {Boolean} [homestead=true]
85746 * @return {Boolean}
85747 */
85748
85749 exports.isValidSignature = function (v, r, s, homestead) {
85750 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
85751 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
85752
85753 if (r.length !== 32 || s.length !== 32) {
85754 return false
85755 }
85756
85757 if (v !== 27 && v !== 28) {
85758 return false
85759 }
85760
85761 r = new BN(r)
85762 s = new BN(s)
85763
85764 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
85765 return false
85766 }
85767
85768 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
85769 return false
85770 }
85771
85772 return true
85773 }
85774
85775 /**
85776 * Converts a `Buffer` or `Array` to JSON
85777 * @param {Buffer|Array} ba
85778 * @return {Array|String|null}
85779 */
85780 exports.baToJSON = function (ba) {
85781 if (Buffer.isBuffer(ba)) {
85782 return '0x' + ba.toString('hex')
85783 } else if (ba instanceof Array) {
85784 var array = []
85785 for (var i = 0; i < ba.length; i++) {
85786 array.push(exports.baToJSON(ba[i]))
85787 }
85788 return array
85789 }
85790 }
85791
85792 /**
85793 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
85794 * @param {Object} self the `Object` to define properties on
85795 * @param {Array} fields an array fields to define. Fields can contain:
85796 * * `name` - the name of the properties
85797 * * `length` - the number of bytes the field can have
85798 * * `allowLess` - if the field can be less than the length
85799 * * `allowEmpty`
85800 * @param {*} data data to be validated against the definitions
85801 */
85802 exports.defineProperties = function (self, fields, data) {
85803 self.raw = []
85804 self._fields = []
85805
85806 // attach the `toJSON`
85807 self.toJSON = function (label) {
85808 if (label) {
85809 var obj = {}
85810 self._fields.forEach(function (field) {
85811 obj[field] = '0x' + self[field].toString('hex')
85812 })
85813 return obj
85814 }
85815 return exports.baToJSON(this.raw)
85816 }
85817
85818 self.serialize = function serialize () {
85819 return rlp.encode(self.raw)
85820 }
85821
85822 fields.forEach(function (field, i) {
85823 self._fields.push(field.name)
85824 function getter () {
85825 return self.raw[i]
85826 }
85827 function setter (v) {
85828 v = exports.toBuffer(v)
85829
85830 if (v.toString('hex') === '00' && !field.allowZero) {
85831 v = Buffer.allocUnsafe(0)
85832 }
85833
85834 if (field.allowLess && field.length) {
85835 v = exports.stripZeros(v)
85836 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
85837 } else if (!(field.allowZero && v.length === 0) && field.length) {
85838 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
85839 }
85840
85841 self.raw[i] = v
85842 }
85843
85844 Object.defineProperty(self, field.name, {
85845 enumerable: true,
85846 configurable: true,
85847 get: getter,
85848 set: setter
85849 })
85850
85851 if (field.default) {
85852 self[field.name] = field.default
85853 }
85854
85855 // attach alias
85856 if (field.alias) {
85857 Object.defineProperty(self, field.alias, {
85858 enumerable: false,
85859 configurable: true,
85860 set: setter,
85861 get: getter
85862 })
85863 }
85864 })
85865
85866 // if the constuctor is passed data
85867 if (data) {
85868 if (typeof data === 'string') {
85869 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
85870 }
85871
85872 if (Buffer.isBuffer(data)) {
85873 data = rlp.decode(data)
85874 }
85875
85876 if (Array.isArray(data)) {
85877 if (data.length > self._fields.length) {
85878 throw (new Error('wrong number of fields in data'))
85879 }
85880
85881 // make sure all the items are buffers
85882 data.forEach(function (d, i) {
85883 self[self._fields[i]] = exports.toBuffer(d)
85884 })
85885 } else if (typeof data === 'object') {
85886 const keys = Object.keys(data)
85887 fields.forEach(function (field) {
85888 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
85889 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
85890 })
85891 } else {
85892 throw new Error('invalid data')
85893 }
85894 }
85895 }
85896
85897 }).call(this,require("buffer").Buffer)
85898 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
85899 (function (Buffer){
85900 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
85901 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85902 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
85903
85904 function check (buffer) {
85905 if (buffer.length < 8) return false
85906 if (buffer.length > 72) return false
85907 if (buffer[0] !== 0x30) return false
85908 if (buffer[1] !== buffer.length - 2) return false
85909 if (buffer[2] !== 0x02) return false
85910
85911 var lenR = buffer[3]
85912 if (lenR === 0) return false
85913 if (5 + lenR >= buffer.length) return false
85914 if (buffer[4 + lenR] !== 0x02) return false
85915
85916 var lenS = buffer[5 + lenR]
85917 if (lenS === 0) return false
85918 if ((6 + lenR + lenS) !== buffer.length) return false
85919
85920 if (buffer[4] & 0x80) return false
85921 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
85922
85923 if (buffer[lenR + 6] & 0x80) return false
85924 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
85925 return true
85926 }
85927
85928 function decode (buffer) {
85929 if (buffer.length < 8) throw new Error('DER sequence length is too short')
85930 if (buffer.length > 72) throw new Error('DER sequence length is too long')
85931 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
85932 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
85933 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
85934
85935 var lenR = buffer[3]
85936 if (lenR === 0) throw new Error('R length is zero')
85937 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
85938 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
85939
85940 var lenS = buffer[5 + lenR]
85941 if (lenS === 0) throw new Error('S length is zero')
85942 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
85943
85944 if (buffer[4] & 0x80) throw new Error('R value is negative')
85945 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
85946
85947 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
85948 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
85949
85950 // non-BIP66 - extract R, S values
85951 return {
85952 r: buffer.slice(4, 4 + lenR),
85953 s: buffer.slice(6 + lenR)
85954 }
85955 }
85956
85957 /*
85958 * Expects r and s to be positive DER integers.
85959 *
85960 * The DER format uses the most significant bit as a sign bit (& 0x80).
85961 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
85962 *
85963 * Examples:
85964 *
85965 * 0 => 0x00
85966 * 1 => 0x01
85967 * -1 => 0xff
85968 * 127 => 0x7f
85969 * -127 => 0x81
85970 * 128 => 0x0080
85971 * -128 => 0x80
85972 * 255 => 0x00ff
85973 * -255 => 0xff01
85974 * 16300 => 0x3fac
85975 * -16300 => 0xc054
85976 * 62300 => 0x00f35c
85977 * -62300 => 0xff0ca4
85978 */
85979 function encode (r, s) {
85980 var lenR = r.length
85981 var lenS = s.length
85982 if (lenR === 0) throw new Error('R length is zero')
85983 if (lenS === 0) throw new Error('S length is zero')
85984 if (lenR > 33) throw new Error('R length is too long')
85985 if (lenS > 33) throw new Error('S length is too long')
85986 if (r[0] & 0x80) throw new Error('R value is negative')
85987 if (s[0] & 0x80) throw new Error('S value is negative')
85988 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
85989 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
85990
85991 var signature = new Buffer(6 + lenR + lenS)
85992
85993 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85994 signature[0] = 0x30
85995 signature[1] = signature.length - 2
85996 signature[2] = 0x02
85997 signature[3] = r.length
85998 r.copy(signature, 4)
85999 signature[4 + lenR] = 0x02
86000 signature[5 + lenR] = s.length
86001 s.copy(signature, 6 + lenR)
86002
86003 return signature
86004 }
86005
86006 module.exports = {
86007 check: check,
86008 decode: decode,
86009 encode: encode
86010 }
86011
86012 }).call(this,require("buffer").Buffer)
86013 },{"buffer":5}],33:[function(require,module,exports){
86014 (function (module, exports) {
86015 'use strict';
86016
86017 // Utils
86018 function assert (val, msg) {
86019 if (!val) throw new Error(msg || 'Assertion failed');
86020 }
86021
86022 // Could use `inherits` module, but don't want to move from single file
86023 // architecture yet.
86024 function inherits (ctor, superCtor) {
86025 ctor.super_ = superCtor;
86026 var TempCtor = function () {};
86027 TempCtor.prototype = superCtor.prototype;
86028 ctor.prototype = new TempCtor();
86029 ctor.prototype.constructor = ctor;
86030 }
86031
86032 // BN
86033
86034 function BN (number, base, endian) {
86035 if (BN.isBN(number)) {
86036 return number;
86037 }
86038
86039 this.negative = 0;
86040 this.words = null;
86041 this.length = 0;
86042
86043 // Reduction context
86044 this.red = null;
86045
86046 if (number !== null) {
86047 if (base === 'le' || base === 'be') {
86048 endian = base;
86049 base = 10;
86050 }
86051
86052 this._init(number || 0, base || 10, endian || 'be');
86053 }
86054 }
86055 if (typeof module === 'object') {
86056 module.exports = BN;
86057 } else {
86058 exports.BN = BN;
86059 }
86060
86061 BN.BN = BN;
86062 BN.wordSize = 26;
86063
86064 var Buffer;
86065 try {
86066 Buffer = require('buf' + 'fer').Buffer;
86067 } catch (e) {
86068 }
86069
86070 BN.isBN = function isBN (num) {
86071 if (num instanceof BN) {
86072 return true;
86073 }
86074
86075 return num !== null && typeof num === 'object' &&
86076 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
86077 };
86078
86079 BN.max = function max (left, right) {
86080 if (left.cmp(right) > 0) return left;
86081 return right;
86082 };
86083
86084 BN.min = function min (left, right) {
86085 if (left.cmp(right) < 0) return left;
86086 return right;
86087 };
86088
86089 BN.prototype._init = function init (number, base, endian) {
86090 if (typeof number === 'number') {
86091 return this._initNumber(number, base, endian);
86092 }
86093
86094 if (typeof number === 'object') {
86095 return this._initArray(number, base, endian);
86096 }
86097
86098 if (base === 'hex') {
86099 base = 16;
86100 }
86101 assert(base === (base | 0) && base >= 2 && base <= 36);
86102
86103 number = number.toString().replace(/\s+/g, '');
86104 var start = 0;
86105 if (number[0] === '-') {
86106 start++;
86107 }
86108
86109 if (base === 16) {
86110 this._parseHex(number, start);
86111 } else {
86112 this._parseBase(number, base, start);
86113 }
86114
86115 if (number[0] === '-') {
86116 this.negative = 1;
86117 }
86118
86119 this.strip();
86120
86121 if (endian !== 'le') return;
86122
86123 this._initArray(this.toArray(), base, endian);
86124 };
86125
86126 BN.prototype._initNumber = function _initNumber (number, base, endian) {
86127 if (number < 0) {
86128 this.negative = 1;
86129 number = -number;
86130 }
86131 if (number < 0x4000000) {
86132 this.words = [ number & 0x3ffffff ];
86133 this.length = 1;
86134 } else if (number < 0x10000000000000) {
86135 this.words = [
86136 number & 0x3ffffff,
86137 (number / 0x4000000) & 0x3ffffff
86138 ];
86139 this.length = 2;
86140 } else {
86141 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
86142 this.words = [
86143 number & 0x3ffffff,
86144 (number / 0x4000000) & 0x3ffffff,
86145 1
86146 ];
86147 this.length = 3;
86148 }
86149
86150 if (endian !== 'le') return;
86151
86152 // Reverse the bytes
86153 this._initArray(this.toArray(), base, endian);
86154 };
86155
86156 BN.prototype._initArray = function _initArray (number, base, endian) {
86157 // Perhaps a Uint8Array
86158 assert(typeof number.length === 'number');
86159 if (number.length <= 0) {
86160 this.words = [ 0 ];
86161 this.length = 1;
86162 return this;
86163 }
86164
86165 this.length = Math.ceil(number.length / 3);
86166 this.words = new Array(this.length);
86167 for (var i = 0; i < this.length; i++) {
86168 this.words[i] = 0;
86169 }
86170
86171 var j, w;
86172 var off = 0;
86173 if (endian === 'be') {
86174 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
86175 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
86176 this.words[j] |= (w << off) & 0x3ffffff;
86177 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86178 off += 24;
86179 if (off >= 26) {
86180 off -= 26;
86181 j++;
86182 }
86183 }
86184 } else if (endian === 'le') {
86185 for (i = 0, j = 0; i < number.length; i += 3) {
86186 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
86187 this.words[j] |= (w << off) & 0x3ffffff;
86188 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86189 off += 24;
86190 if (off >= 26) {
86191 off -= 26;
86192 j++;
86193 }
86194 }
86195 }
86196 return this.strip();
86197 };
86198
86199 function parseHex (str, start, end) {
86200 var r = 0;
86201 var len = Math.min(str.length, end);
86202 for (var i = start; i < len; i++) {
86203 var c = str.charCodeAt(i) - 48;
86204
86205 r <<= 4;
86206
86207 // 'a' - 'f'
86208 if (c >= 49 && c <= 54) {
86209 r |= c - 49 + 0xa;
86210
86211 // 'A' - 'F'
86212 } else if (c >= 17 && c <= 22) {
86213 r |= c - 17 + 0xa;
86214
86215 // '0' - '9'
86216 } else {
86217 r |= c & 0xf;
86218 }
86219 }
86220 return r;
86221 }
86222
86223 BN.prototype._parseHex = function _parseHex (number, start) {
86224 // Create possibly bigger array to ensure that it fits the number
86225 this.length = Math.ceil((number.length - start) / 6);
86226 this.words = new Array(this.length);
86227 for (var i = 0; i < this.length; i++) {
86228 this.words[i] = 0;
86229 }
86230
86231 var j, w;
86232 // Scan 24-bit chunks and add them to the number
86233 var off = 0;
86234 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
86235 w = parseHex(number, i, i + 6);
86236 this.words[j] |= (w << off) & 0x3ffffff;
86237 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
86238 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86239 off += 24;
86240 if (off >= 26) {
86241 off -= 26;
86242 j++;
86243 }
86244 }
86245 if (i + 6 !== start) {
86246 w = parseHex(number, start, i + 6);
86247 this.words[j] |= (w << off) & 0x3ffffff;
86248 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86249 }
86250 this.strip();
86251 };
86252
86253 function parseBase (str, start, end, mul) {
86254 var r = 0;
86255 var len = Math.min(str.length, end);
86256 for (var i = start; i < len; i++) {
86257 var c = str.charCodeAt(i) - 48;
86258
86259 r *= mul;
86260
86261 // 'a'
86262 if (c >= 49) {
86263 r += c - 49 + 0xa;
86264
86265 // 'A'
86266 } else if (c >= 17) {
86267 r += c - 17 + 0xa;
86268
86269 // '0' - '9'
86270 } else {
86271 r += c;
86272 }
86273 }
86274 return r;
86275 }
86276
86277 BN.prototype._parseBase = function _parseBase (number, base, start) {
86278 // Initialize as zero
86279 this.words = [ 0 ];
86280 this.length = 1;
86281
86282 // Find length of limb in base
86283 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
86284 limbLen++;
86285 }
86286 limbLen--;
86287 limbPow = (limbPow / base) | 0;
86288
86289 var total = number.length - start;
86290 var mod = total % limbLen;
86291 var end = Math.min(total, total - mod) + start;
86292
86293 var word = 0;
86294 for (var i = start; i < end; i += limbLen) {
86295 word = parseBase(number, i, i + limbLen, base);
86296
86297 this.imuln(limbPow);
86298 if (this.words[0] + word < 0x4000000) {
86299 this.words[0] += word;
86300 } else {
86301 this._iaddn(word);
86302 }
86303 }
86304
86305 if (mod !== 0) {
86306 var pow = 1;
86307 word = parseBase(number, i, number.length, base);
86308
86309 for (i = 0; i < mod; i++) {
86310 pow *= base;
86311 }
86312
86313 this.imuln(pow);
86314 if (this.words[0] + word < 0x4000000) {
86315 this.words[0] += word;
86316 } else {
86317 this._iaddn(word);
86318 }
86319 }
86320 };
86321
86322 BN.prototype.copy = function copy (dest) {
86323 dest.words = new Array(this.length);
86324 for (var i = 0; i < this.length; i++) {
86325 dest.words[i] = this.words[i];
86326 }
86327 dest.length = this.length;
86328 dest.negative = this.negative;
86329 dest.red = this.red;
86330 };
86331
86332 BN.prototype.clone = function clone () {
86333 var r = new BN(null);
86334 this.copy(r);
86335 return r;
86336 };
86337
86338 BN.prototype._expand = function _expand (size) {
86339 while (this.length < size) {
86340 this.words[this.length++] = 0;
86341 }
86342 return this;
86343 };
86344
86345 // Remove leading `0` from `this`
86346 BN.prototype.strip = function strip () {
86347 while (this.length > 1 && this.words[this.length - 1] === 0) {
86348 this.length--;
86349 }
86350 return this._normSign();
86351 };
86352
86353 BN.prototype._normSign = function _normSign () {
86354 // -0 = 0
86355 if (this.length === 1 && this.words[0] === 0) {
86356 this.negative = 0;
86357 }
86358 return this;
86359 };
86360
86361 BN.prototype.inspect = function inspect () {
86362 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
86363 };
86364
86365 /*
86366
86367 var zeros = [];
86368 var groupSizes = [];
86369 var groupBases = [];
86370
86371 var s = '';
86372 var i = -1;
86373 while (++i < BN.wordSize) {
86374 zeros[i] = s;
86375 s += '0';
86376 }
86377 groupSizes[0] = 0;
86378 groupSizes[1] = 0;
86379 groupBases[0] = 0;
86380 groupBases[1] = 0;
86381 var base = 2 - 1;
86382 while (++base < 36 + 1) {
86383 var groupSize = 0;
86384 var groupBase = 1;
86385 while (groupBase < (1 << BN.wordSize) / base) {
86386 groupBase *= base;
86387 groupSize += 1;
86388 }
86389 groupSizes[base] = groupSize;
86390 groupBases[base] = groupBase;
86391 }
86392
86393 */
86394
86395 var zeros = [
86396 '',
86397 '0',
86398 '00',
86399 '000',
86400 '0000',
86401 '00000',
86402 '000000',
86403 '0000000',
86404 '00000000',
86405 '000000000',
86406 '0000000000',
86407 '00000000000',
86408 '000000000000',
86409 '0000000000000',
86410 '00000000000000',
86411 '000000000000000',
86412 '0000000000000000',
86413 '00000000000000000',
86414 '000000000000000000',
86415 '0000000000000000000',
86416 '00000000000000000000',
86417 '000000000000000000000',
86418 '0000000000000000000000',
86419 '00000000000000000000000',
86420 '000000000000000000000000',
86421 '0000000000000000000000000'
86422 ];
86423
86424 var groupSizes = [
86425 0, 0,
86426 25, 16, 12, 11, 10, 9, 8,
86427 8, 7, 7, 7, 7, 6, 6,
86428 6, 6, 6, 6, 6, 5, 5,
86429 5, 5, 5, 5, 5, 5, 5,
86430 5, 5, 5, 5, 5, 5, 5
86431 ];
86432
86433 var groupBases = [
86434 0, 0,
86435 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
86436 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
86437 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
86438 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
86439 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
86440 ];
86441
86442 BN.prototype.toString = function toString (base, padding) {
86443 base = base || 10;
86444 padding = padding | 0 || 1;
86445
86446 var out;
86447 if (base === 16 || base === 'hex') {
86448 out = '';
86449 var off = 0;
86450 var carry = 0;
86451 for (var i = 0; i < this.length; i++) {
86452 var w = this.words[i];
86453 var word = (((w << off) | carry) & 0xffffff).toString(16);
86454 carry = (w >>> (24 - off)) & 0xffffff;
86455 if (carry !== 0 || i !== this.length - 1) {
86456 out = zeros[6 - word.length] + word + out;
86457 } else {
86458 out = word + out;
86459 }
86460 off += 2;
86461 if (off >= 26) {
86462 off -= 26;
86463 i--;
86464 }
86465 }
86466 if (carry !== 0) {
86467 out = carry.toString(16) + out;
86468 }
86469 while (out.length % padding !== 0) {
86470 out = '0' + out;
86471 }
86472 if (this.negative !== 0) {
86473 out = '-' + out;
86474 }
86475 return out;
86476 }
86477
86478 if (base === (base | 0) && base >= 2 && base <= 36) {
86479 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
86480 var groupSize = groupSizes[base];
86481 // var groupBase = Math.pow(base, groupSize);
86482 var groupBase = groupBases[base];
86483 out = '';
86484 var c = this.clone();
86485 c.negative = 0;
86486 while (!c.isZero()) {
86487 var r = c.modn(groupBase).toString(base);
86488 c = c.idivn(groupBase);
86489
86490 if (!c.isZero()) {
86491 out = zeros[groupSize - r.length] + r + out;
86492 } else {
86493 out = r + out;
86494 }
86495 }
86496 if (this.isZero()) {
86497 out = '0' + out;
86498 }
86499 while (out.length % padding !== 0) {
86500 out = '0' + out;
86501 }
86502 if (this.negative !== 0) {
86503 out = '-' + out;
86504 }
86505 return out;
86506 }
86507
86508 assert(false, 'Base should be between 2 and 36');
86509 };
86510
86511 BN.prototype.toNumber = function toNumber () {
86512 var ret = this.words[0];
86513 if (this.length === 2) {
86514 ret += this.words[1] * 0x4000000;
86515 } else if (this.length === 3 && this.words[2] === 0x01) {
86516 // NOTE: at this stage it is known that the top bit is set
86517 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
86518 } else if (this.length > 2) {
86519 assert(false, 'Number can only safely store up to 53 bits');
86520 }
86521 return (this.negative !== 0) ? -ret : ret;
86522 };
86523
86524 BN.prototype.toJSON = function toJSON () {
86525 return this.toString(16);
86526 };
86527
86528 BN.prototype.toBuffer = function toBuffer (endian, length) {
86529 assert(typeof Buffer !== 'undefined');
86530 return this.toArrayLike(Buffer, endian, length);
86531 };
86532
86533 BN.prototype.toArray = function toArray (endian, length) {
86534 return this.toArrayLike(Array, endian, length);
86535 };
86536
86537 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
86538 var byteLength = this.byteLength();
86539 var reqLength = length || Math.max(1, byteLength);
86540 assert(byteLength <= reqLength, 'byte array longer than desired length');
86541 assert(reqLength > 0, 'Requested array length <= 0');
86542
86543 this.strip();
86544 var littleEndian = endian === 'le';
86545 var res = new ArrayType(reqLength);
86546
86547 var b, i;
86548 var q = this.clone();
86549 if (!littleEndian) {
86550 // Assume big-endian
86551 for (i = 0; i < reqLength - byteLength; i++) {
86552 res[i] = 0;
86553 }
86554
86555 for (i = 0; !q.isZero(); i++) {
86556 b = q.andln(0xff);
86557 q.iushrn(8);
86558
86559 res[reqLength - i - 1] = b;
86560 }
86561 } else {
86562 for (i = 0; !q.isZero(); i++) {
86563 b = q.andln(0xff);
86564 q.iushrn(8);
86565
86566 res[i] = b;
86567 }
86568
86569 for (; i < reqLength; i++) {
86570 res[i] = 0;
86571 }
86572 }
86573
86574 return res;
86575 };
86576
86577 if (Math.clz32) {
86578 BN.prototype._countBits = function _countBits (w) {
86579 return 32 - Math.clz32(w);
86580 };
86581 } else {
86582 BN.prototype._countBits = function _countBits (w) {
86583 var t = w;
86584 var r = 0;
86585 if (t >= 0x1000) {
86586 r += 13;
86587 t >>>= 13;
86588 }
86589 if (t >= 0x40) {
86590 r += 7;
86591 t >>>= 7;
86592 }
86593 if (t >= 0x8) {
86594 r += 4;
86595 t >>>= 4;
86596 }
86597 if (t >= 0x02) {
86598 r += 2;
86599 t >>>= 2;
86600 }
86601 return r + t;
86602 };
86603 }
86604
86605 BN.prototype._zeroBits = function _zeroBits (w) {
86606 // Short-cut
86607 if (w === 0) return 26;
86608
86609 var t = w;
86610 var r = 0;
86611 if ((t & 0x1fff) === 0) {
86612 r += 13;
86613 t >>>= 13;
86614 }
86615 if ((t & 0x7f) === 0) {
86616 r += 7;
86617 t >>>= 7;
86618 }
86619 if ((t & 0xf) === 0) {
86620 r += 4;
86621 t >>>= 4;
86622 }
86623 if ((t & 0x3) === 0) {
86624 r += 2;
86625 t >>>= 2;
86626 }
86627 if ((t & 0x1) === 0) {
86628 r++;
86629 }
86630 return r;
86631 };
86632
86633 // Return number of used bits in a BN
86634 BN.prototype.bitLength = function bitLength () {
86635 var w = this.words[this.length - 1];
86636 var hi = this._countBits(w);
86637 return (this.length - 1) * 26 + hi;
86638 };
86639
86640 function toBitArray (num) {
86641 var w = new Array(num.bitLength());
86642
86643 for (var bit = 0; bit < w.length; bit++) {
86644 var off = (bit / 26) | 0;
86645 var wbit = bit % 26;
86646
86647 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
86648 }
86649
86650 return w;
86651 }
86652
86653 // Number of trailing zero bits
86654 BN.prototype.zeroBits = function zeroBits () {
86655 if (this.isZero()) return 0;
86656
86657 var r = 0;
86658 for (var i = 0; i < this.length; i++) {
86659 var b = this._zeroBits(this.words[i]);
86660 r += b;
86661 if (b !== 26) break;
86662 }
86663 return r;
86664 };
86665
86666 BN.prototype.byteLength = function byteLength () {
86667 return Math.ceil(this.bitLength() / 8);
86668 };
86669
86670 BN.prototype.toTwos = function toTwos (width) {
86671 if (this.negative !== 0) {
86672 return this.abs().inotn(width).iaddn(1);
86673 }
86674 return this.clone();
86675 };
86676
86677 BN.prototype.fromTwos = function fromTwos (width) {
86678 if (this.testn(width - 1)) {
86679 return this.notn(width).iaddn(1).ineg();
86680 }
86681 return this.clone();
86682 };
86683
86684 BN.prototype.isNeg = function isNeg () {
86685 return this.negative !== 0;
86686 };
86687
86688 // Return negative clone of `this`
86689 BN.prototype.neg = function neg () {
86690 return this.clone().ineg();
86691 };
86692
86693 BN.prototype.ineg = function ineg () {
86694 if (!this.isZero()) {
86695 this.negative ^= 1;
86696 }
86697
86698 return this;
86699 };
86700
86701 // Or `num` with `this` in-place
86702 BN.prototype.iuor = function iuor (num) {
86703 while (this.length < num.length) {
86704 this.words[this.length++] = 0;
86705 }
86706
86707 for (var i = 0; i < num.length; i++) {
86708 this.words[i] = this.words[i] | num.words[i];
86709 }
86710
86711 return this.strip();
86712 };
86713
86714 BN.prototype.ior = function ior (num) {
86715 assert((this.negative | num.negative) === 0);
86716 return this.iuor(num);
86717 };
86718
86719 // Or `num` with `this`
86720 BN.prototype.or = function or (num) {
86721 if (this.length > num.length) return this.clone().ior(num);
86722 return num.clone().ior(this);
86723 };
86724
86725 BN.prototype.uor = function uor (num) {
86726 if (this.length > num.length) return this.clone().iuor(num);
86727 return num.clone().iuor(this);
86728 };
86729
86730 // And `num` with `this` in-place
86731 BN.prototype.iuand = function iuand (num) {
86732 // b = min-length(num, this)
86733 var b;
86734 if (this.length > num.length) {
86735 b = num;
86736 } else {
86737 b = this;
86738 }
86739
86740 for (var i = 0; i < b.length; i++) {
86741 this.words[i] = this.words[i] & num.words[i];
86742 }
86743
86744 this.length = b.length;
86745
86746 return this.strip();
86747 };
86748
86749 BN.prototype.iand = function iand (num) {
86750 assert((this.negative | num.negative) === 0);
86751 return this.iuand(num);
86752 };
86753
86754 // And `num` with `this`
86755 BN.prototype.and = function and (num) {
86756 if (this.length > num.length) return this.clone().iand(num);
86757 return num.clone().iand(this);
86758 };
86759
86760 BN.prototype.uand = function uand (num) {
86761 if (this.length > num.length) return this.clone().iuand(num);
86762 return num.clone().iuand(this);
86763 };
86764
86765 // Xor `num` with `this` in-place
86766 BN.prototype.iuxor = function iuxor (num) {
86767 // a.length > b.length
86768 var a;
86769 var b;
86770 if (this.length > num.length) {
86771 a = this;
86772 b = num;
86773 } else {
86774 a = num;
86775 b = this;
86776 }
86777
86778 for (var i = 0; i < b.length; i++) {
86779 this.words[i] = a.words[i] ^ b.words[i];
86780 }
86781
86782 if (this !== a) {
86783 for (; i < a.length; i++) {
86784 this.words[i] = a.words[i];
86785 }
86786 }
86787
86788 this.length = a.length;
86789
86790 return this.strip();
86791 };
86792
86793 BN.prototype.ixor = function ixor (num) {
86794 assert((this.negative | num.negative) === 0);
86795 return this.iuxor(num);
86796 };
86797
86798 // Xor `num` with `this`
86799 BN.prototype.xor = function xor (num) {
86800 if (this.length > num.length) return this.clone().ixor(num);
86801 return num.clone().ixor(this);
86802 };
86803
86804 BN.prototype.uxor = function uxor (num) {
86805 if (this.length > num.length) return this.clone().iuxor(num);
86806 return num.clone().iuxor(this);
86807 };
86808
86809 // Not ``this`` with ``width`` bitwidth
86810 BN.prototype.inotn = function inotn (width) {
86811 assert(typeof width === 'number' && width >= 0);
86812
86813 var bytesNeeded = Math.ceil(width / 26) | 0;
86814 var bitsLeft = width % 26;
86815
86816 // Extend the buffer with leading zeroes
86817 this._expand(bytesNeeded);
86818
86819 if (bitsLeft > 0) {
86820 bytesNeeded--;
86821 }
86822
86823 // Handle complete words
86824 for (var i = 0; i < bytesNeeded; i++) {
86825 this.words[i] = ~this.words[i] & 0x3ffffff;
86826 }
86827
86828 // Handle the residue
86829 if (bitsLeft > 0) {
86830 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
86831 }
86832
86833 // And remove leading zeroes
86834 return this.strip();
86835 };
86836
86837 BN.prototype.notn = function notn (width) {
86838 return this.clone().inotn(width);
86839 };
86840
86841 // Set `bit` of `this`
86842 BN.prototype.setn = function setn (bit, val) {
86843 assert(typeof bit === 'number' && bit >= 0);
86844
86845 var off = (bit / 26) | 0;
86846 var wbit = bit % 26;
86847
86848 this._expand(off + 1);
86849
86850 if (val) {
86851 this.words[off] = this.words[off] | (1 << wbit);
86852 } else {
86853 this.words[off] = this.words[off] & ~(1 << wbit);
86854 }
86855
86856 return this.strip();
86857 };
86858
86859 // Add `num` to `this` in-place
86860 BN.prototype.iadd = function iadd (num) {
86861 var r;
86862
86863 // negative + positive
86864 if (this.negative !== 0 && num.negative === 0) {
86865 this.negative = 0;
86866 r = this.isub(num);
86867 this.negative ^= 1;
86868 return this._normSign();
86869
86870 // positive + negative
86871 } else if (this.negative === 0 && num.negative !== 0) {
86872 num.negative = 0;
86873 r = this.isub(num);
86874 num.negative = 1;
86875 return r._normSign();
86876 }
86877
86878 // a.length > b.length
86879 var a, b;
86880 if (this.length > num.length) {
86881 a = this;
86882 b = num;
86883 } else {
86884 a = num;
86885 b = this;
86886 }
86887
86888 var carry = 0;
86889 for (var i = 0; i < b.length; i++) {
86890 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
86891 this.words[i] = r & 0x3ffffff;
86892 carry = r >>> 26;
86893 }
86894 for (; carry !== 0 && i < a.length; i++) {
86895 r = (a.words[i] | 0) + carry;
86896 this.words[i] = r & 0x3ffffff;
86897 carry = r >>> 26;
86898 }
86899
86900 this.length = a.length;
86901 if (carry !== 0) {
86902 this.words[this.length] = carry;
86903 this.length++;
86904 // Copy the rest of the words
86905 } else if (a !== this) {
86906 for (; i < a.length; i++) {
86907 this.words[i] = a.words[i];
86908 }
86909 }
86910
86911 return this;
86912 };
86913
86914 // Add `num` to `this`
86915 BN.prototype.add = function add (num) {
86916 var res;
86917 if (num.negative !== 0 && this.negative === 0) {
86918 num.negative = 0;
86919 res = this.sub(num);
86920 num.negative ^= 1;
86921 return res;
86922 } else if (num.negative === 0 && this.negative !== 0) {
86923 this.negative = 0;
86924 res = num.sub(this);
86925 this.negative = 1;
86926 return res;
86927 }
86928
86929 if (this.length > num.length) return this.clone().iadd(num);
86930
86931 return num.clone().iadd(this);
86932 };
86933
86934 // Subtract `num` from `this` in-place
86935 BN.prototype.isub = function isub (num) {
86936 // this - (-num) = this + num
86937 if (num.negative !== 0) {
86938 num.negative = 0;
86939 var r = this.iadd(num);
86940 num.negative = 1;
86941 return r._normSign();
86942
86943 // -this - num = -(this + num)
86944 } else if (this.negative !== 0) {
86945 this.negative = 0;
86946 this.iadd(num);
86947 this.negative = 1;
86948 return this._normSign();
86949 }
86950
86951 // At this point both numbers are positive
86952 var cmp = this.cmp(num);
86953
86954 // Optimization - zeroify
86955 if (cmp === 0) {
86956 this.negative = 0;
86957 this.length = 1;
86958 this.words[0] = 0;
86959 return this;
86960 }
86961
86962 // a > b
86963 var a, b;
86964 if (cmp > 0) {
86965 a = this;
86966 b = num;
86967 } else {
86968 a = num;
86969 b = this;
86970 }
86971
86972 var carry = 0;
86973 for (var i = 0; i < b.length; i++) {
86974 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
86975 carry = r >> 26;
86976 this.words[i] = r & 0x3ffffff;
86977 }
86978 for (; carry !== 0 && i < a.length; i++) {
86979 r = (a.words[i] | 0) + carry;
86980 carry = r >> 26;
86981 this.words[i] = r & 0x3ffffff;
86982 }
86983
86984 // Copy rest of the words
86985 if (carry === 0 && i < a.length && a !== this) {
86986 for (; i < a.length; i++) {
86987 this.words[i] = a.words[i];
86988 }
86989 }
86990
86991 this.length = Math.max(this.length, i);
86992
86993 if (a !== this) {
86994 this.negative = 1;
86995 }
86996
86997 return this.strip();
86998 };
86999
87000 // Subtract `num` from `this`
87001 BN.prototype.sub = function sub (num) {
87002 return this.clone().isub(num);
87003 };
87004
87005 function smallMulTo (self, num, out) {
87006 out.negative = num.negative ^ self.negative;
87007 var len = (self.length + num.length) | 0;
87008 out.length = len;
87009 len = (len - 1) | 0;
87010
87011 // Peel one iteration (compiler can't do it, because of code complexity)
87012 var a = self.words[0] | 0;
87013 var b = num.words[0] | 0;
87014 var r = a * b;
87015
87016 var lo = r & 0x3ffffff;
87017 var carry = (r / 0x4000000) | 0;
87018 out.words[0] = lo;
87019
87020 for (var k = 1; k < len; k++) {
87021 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
87022 // note that ncarry could be >= 0x3ffffff
87023 var ncarry = carry >>> 26;
87024 var rword = carry & 0x3ffffff;
87025 var maxJ = Math.min(k, num.length - 1);
87026 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
87027 var i = (k - j) | 0;
87028 a = self.words[i] | 0;
87029 b = num.words[j] | 0;
87030 r = a * b + rword;
87031 ncarry += (r / 0x4000000) | 0;
87032 rword = r & 0x3ffffff;
87033 }
87034 out.words[k] = rword | 0;
87035 carry = ncarry | 0;
87036 }
87037 if (carry !== 0) {
87038 out.words[k] = carry | 0;
87039 } else {
87040 out.length--;
87041 }
87042
87043 return out.strip();
87044 }
87045
87046 // TODO(indutny): it may be reasonable to omit it for users who don't need
87047 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
87048 // multiplication (like elliptic secp256k1).
87049 var comb10MulTo = function comb10MulTo (self, num, out) {
87050 var a = self.words;
87051 var b = num.words;
87052 var o = out.words;
87053 var c = 0;
87054 var lo;
87055 var mid;
87056 var hi;
87057 var a0 = a[0] | 0;
87058 var al0 = a0 & 0x1fff;
87059 var ah0 = a0 >>> 13;
87060 var a1 = a[1] | 0;
87061 var al1 = a1 & 0x1fff;
87062 var ah1 = a1 >>> 13;
87063 var a2 = a[2] | 0;
87064 var al2 = a2 & 0x1fff;
87065 var ah2 = a2 >>> 13;
87066 var a3 = a[3] | 0;
87067 var al3 = a3 & 0x1fff;
87068 var ah3 = a3 >>> 13;
87069 var a4 = a[4] | 0;
87070 var al4 = a4 & 0x1fff;
87071 var ah4 = a4 >>> 13;
87072 var a5 = a[5] | 0;
87073 var al5 = a5 & 0x1fff;
87074 var ah5 = a5 >>> 13;
87075 var a6 = a[6] | 0;
87076 var al6 = a6 & 0x1fff;
87077 var ah6 = a6 >>> 13;
87078 var a7 = a[7] | 0;
87079 var al7 = a7 & 0x1fff;
87080 var ah7 = a7 >>> 13;
87081 var a8 = a[8] | 0;
87082 var al8 = a8 & 0x1fff;
87083 var ah8 = a8 >>> 13;
87084 var a9 = a[9] | 0;
87085 var al9 = a9 & 0x1fff;
87086 var ah9 = a9 >>> 13;
87087 var b0 = b[0] | 0;
87088 var bl0 = b0 & 0x1fff;
87089 var bh0 = b0 >>> 13;
87090 var b1 = b[1] | 0;
87091 var bl1 = b1 & 0x1fff;
87092 var bh1 = b1 >>> 13;
87093 var b2 = b[2] | 0;
87094 var bl2 = b2 & 0x1fff;
87095 var bh2 = b2 >>> 13;
87096 var b3 = b[3] | 0;
87097 var bl3 = b3 & 0x1fff;
87098 var bh3 = b3 >>> 13;
87099 var b4 = b[4] | 0;
87100 var bl4 = b4 & 0x1fff;
87101 var bh4 = b4 >>> 13;
87102 var b5 = b[5] | 0;
87103 var bl5 = b5 & 0x1fff;
87104 var bh5 = b5 >>> 13;
87105 var b6 = b[6] | 0;
87106 var bl6 = b6 & 0x1fff;
87107 var bh6 = b6 >>> 13;
87108 var b7 = b[7] | 0;
87109 var bl7 = b7 & 0x1fff;
87110 var bh7 = b7 >>> 13;
87111 var b8 = b[8] | 0;
87112 var bl8 = b8 & 0x1fff;
87113 var bh8 = b8 >>> 13;
87114 var b9 = b[9] | 0;
87115 var bl9 = b9 & 0x1fff;
87116 var bh9 = b9 >>> 13;
87117
87118 out.negative = self.negative ^ num.negative;
87119 out.length = 19;
87120 /* k = 0 */
87121 lo = Math.imul(al0, bl0);
87122 mid = Math.imul(al0, bh0);
87123 mid = (mid + Math.imul(ah0, bl0)) | 0;
87124 hi = Math.imul(ah0, bh0);
87125 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87126 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
87127 w0 &= 0x3ffffff;
87128 /* k = 1 */
87129 lo = Math.imul(al1, bl0);
87130 mid = Math.imul(al1, bh0);
87131 mid = (mid + Math.imul(ah1, bl0)) | 0;
87132 hi = Math.imul(ah1, bh0);
87133 lo = (lo + Math.imul(al0, bl1)) | 0;
87134 mid = (mid + Math.imul(al0, bh1)) | 0;
87135 mid = (mid + Math.imul(ah0, bl1)) | 0;
87136 hi = (hi + Math.imul(ah0, bh1)) | 0;
87137 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87138 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
87139 w1 &= 0x3ffffff;
87140 /* k = 2 */
87141 lo = Math.imul(al2, bl0);
87142 mid = Math.imul(al2, bh0);
87143 mid = (mid + Math.imul(ah2, bl0)) | 0;
87144 hi = Math.imul(ah2, bh0);
87145 lo = (lo + Math.imul(al1, bl1)) | 0;
87146 mid = (mid + Math.imul(al1, bh1)) | 0;
87147 mid = (mid + Math.imul(ah1, bl1)) | 0;
87148 hi = (hi + Math.imul(ah1, bh1)) | 0;
87149 lo = (lo + Math.imul(al0, bl2)) | 0;
87150 mid = (mid + Math.imul(al0, bh2)) | 0;
87151 mid = (mid + Math.imul(ah0, bl2)) | 0;
87152 hi = (hi + Math.imul(ah0, bh2)) | 0;
87153 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87154 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
87155 w2 &= 0x3ffffff;
87156 /* k = 3 */
87157 lo = Math.imul(al3, bl0);
87158 mid = Math.imul(al3, bh0);
87159 mid = (mid + Math.imul(ah3, bl0)) | 0;
87160 hi = Math.imul(ah3, bh0);
87161 lo = (lo + Math.imul(al2, bl1)) | 0;
87162 mid = (mid + Math.imul(al2, bh1)) | 0;
87163 mid = (mid + Math.imul(ah2, bl1)) | 0;
87164 hi = (hi + Math.imul(ah2, bh1)) | 0;
87165 lo = (lo + Math.imul(al1, bl2)) | 0;
87166 mid = (mid + Math.imul(al1, bh2)) | 0;
87167 mid = (mid + Math.imul(ah1, bl2)) | 0;
87168 hi = (hi + Math.imul(ah1, bh2)) | 0;
87169 lo = (lo + Math.imul(al0, bl3)) | 0;
87170 mid = (mid + Math.imul(al0, bh3)) | 0;
87171 mid = (mid + Math.imul(ah0, bl3)) | 0;
87172 hi = (hi + Math.imul(ah0, bh3)) | 0;
87173 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87174 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
87175 w3 &= 0x3ffffff;
87176 /* k = 4 */
87177 lo = Math.imul(al4, bl0);
87178 mid = Math.imul(al4, bh0);
87179 mid = (mid + Math.imul(ah4, bl0)) | 0;
87180 hi = Math.imul(ah4, bh0);
87181 lo = (lo + Math.imul(al3, bl1)) | 0;
87182 mid = (mid + Math.imul(al3, bh1)) | 0;
87183 mid = (mid + Math.imul(ah3, bl1)) | 0;
87184 hi = (hi + Math.imul(ah3, bh1)) | 0;
87185 lo = (lo + Math.imul(al2, bl2)) | 0;
87186 mid = (mid + Math.imul(al2, bh2)) | 0;
87187 mid = (mid + Math.imul(ah2, bl2)) | 0;
87188 hi = (hi + Math.imul(ah2, bh2)) | 0;
87189 lo = (lo + Math.imul(al1, bl3)) | 0;
87190 mid = (mid + Math.imul(al1, bh3)) | 0;
87191 mid = (mid + Math.imul(ah1, bl3)) | 0;
87192 hi = (hi + Math.imul(ah1, bh3)) | 0;
87193 lo = (lo + Math.imul(al0, bl4)) | 0;
87194 mid = (mid + Math.imul(al0, bh4)) | 0;
87195 mid = (mid + Math.imul(ah0, bl4)) | 0;
87196 hi = (hi + Math.imul(ah0, bh4)) | 0;
87197 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87198 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
87199 w4 &= 0x3ffffff;
87200 /* k = 5 */
87201 lo = Math.imul(al5, bl0);
87202 mid = Math.imul(al5, bh0);
87203 mid = (mid + Math.imul(ah5, bl0)) | 0;
87204 hi = Math.imul(ah5, bh0);
87205 lo = (lo + Math.imul(al4, bl1)) | 0;
87206 mid = (mid + Math.imul(al4, bh1)) | 0;
87207 mid = (mid + Math.imul(ah4, bl1)) | 0;
87208 hi = (hi + Math.imul(ah4, bh1)) | 0;
87209 lo = (lo + Math.imul(al3, bl2)) | 0;
87210 mid = (mid + Math.imul(al3, bh2)) | 0;
87211 mid = (mid + Math.imul(ah3, bl2)) | 0;
87212 hi = (hi + Math.imul(ah3, bh2)) | 0;
87213 lo = (lo + Math.imul(al2, bl3)) | 0;
87214 mid = (mid + Math.imul(al2, bh3)) | 0;
87215 mid = (mid + Math.imul(ah2, bl3)) | 0;
87216 hi = (hi + Math.imul(ah2, bh3)) | 0;
87217 lo = (lo + Math.imul(al1, bl4)) | 0;
87218 mid = (mid + Math.imul(al1, bh4)) | 0;
87219 mid = (mid + Math.imul(ah1, bl4)) | 0;
87220 hi = (hi + Math.imul(ah1, bh4)) | 0;
87221 lo = (lo + Math.imul(al0, bl5)) | 0;
87222 mid = (mid + Math.imul(al0, bh5)) | 0;
87223 mid = (mid + Math.imul(ah0, bl5)) | 0;
87224 hi = (hi + Math.imul(ah0, bh5)) | 0;
87225 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87226 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
87227 w5 &= 0x3ffffff;
87228 /* k = 6 */
87229 lo = Math.imul(al6, bl0);
87230 mid = Math.imul(al6, bh0);
87231 mid = (mid + Math.imul(ah6, bl0)) | 0;
87232 hi = Math.imul(ah6, bh0);
87233 lo = (lo + Math.imul(al5, bl1)) | 0;
87234 mid = (mid + Math.imul(al5, bh1)) | 0;
87235 mid = (mid + Math.imul(ah5, bl1)) | 0;
87236 hi = (hi + Math.imul(ah5, bh1)) | 0;
87237 lo = (lo + Math.imul(al4, bl2)) | 0;
87238 mid = (mid + Math.imul(al4, bh2)) | 0;
87239 mid = (mid + Math.imul(ah4, bl2)) | 0;
87240 hi = (hi + Math.imul(ah4, bh2)) | 0;
87241 lo = (lo + Math.imul(al3, bl3)) | 0;
87242 mid = (mid + Math.imul(al3, bh3)) | 0;
87243 mid = (mid + Math.imul(ah3, bl3)) | 0;
87244 hi = (hi + Math.imul(ah3, bh3)) | 0;
87245 lo = (lo + Math.imul(al2, bl4)) | 0;
87246 mid = (mid + Math.imul(al2, bh4)) | 0;
87247 mid = (mid + Math.imul(ah2, bl4)) | 0;
87248 hi = (hi + Math.imul(ah2, bh4)) | 0;
87249 lo = (lo + Math.imul(al1, bl5)) | 0;
87250 mid = (mid + Math.imul(al1, bh5)) | 0;
87251 mid = (mid + Math.imul(ah1, bl5)) | 0;
87252 hi = (hi + Math.imul(ah1, bh5)) | 0;
87253 lo = (lo + Math.imul(al0, bl6)) | 0;
87254 mid = (mid + Math.imul(al0, bh6)) | 0;
87255 mid = (mid + Math.imul(ah0, bl6)) | 0;
87256 hi = (hi + Math.imul(ah0, bh6)) | 0;
87257 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87258 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
87259 w6 &= 0x3ffffff;
87260 /* k = 7 */
87261 lo = Math.imul(al7, bl0);
87262 mid = Math.imul(al7, bh0);
87263 mid = (mid + Math.imul(ah7, bl0)) | 0;
87264 hi = Math.imul(ah7, bh0);
87265 lo = (lo + Math.imul(al6, bl1)) | 0;
87266 mid = (mid + Math.imul(al6, bh1)) | 0;
87267 mid = (mid + Math.imul(ah6, bl1)) | 0;
87268 hi = (hi + Math.imul(ah6, bh1)) | 0;
87269 lo = (lo + Math.imul(al5, bl2)) | 0;
87270 mid = (mid + Math.imul(al5, bh2)) | 0;
87271 mid = (mid + Math.imul(ah5, bl2)) | 0;
87272 hi = (hi + Math.imul(ah5, bh2)) | 0;
87273 lo = (lo + Math.imul(al4, bl3)) | 0;
87274 mid = (mid + Math.imul(al4, bh3)) | 0;
87275 mid = (mid + Math.imul(ah4, bl3)) | 0;
87276 hi = (hi + Math.imul(ah4, bh3)) | 0;
87277 lo = (lo + Math.imul(al3, bl4)) | 0;
87278 mid = (mid + Math.imul(al3, bh4)) | 0;
87279 mid = (mid + Math.imul(ah3, bl4)) | 0;
87280 hi = (hi + Math.imul(ah3, bh4)) | 0;
87281 lo = (lo + Math.imul(al2, bl5)) | 0;
87282 mid = (mid + Math.imul(al2, bh5)) | 0;
87283 mid = (mid + Math.imul(ah2, bl5)) | 0;
87284 hi = (hi + Math.imul(ah2, bh5)) | 0;
87285 lo = (lo + Math.imul(al1, bl6)) | 0;
87286 mid = (mid + Math.imul(al1, bh6)) | 0;
87287 mid = (mid + Math.imul(ah1, bl6)) | 0;
87288 hi = (hi + Math.imul(ah1, bh6)) | 0;
87289 lo = (lo + Math.imul(al0, bl7)) | 0;
87290 mid = (mid + Math.imul(al0, bh7)) | 0;
87291 mid = (mid + Math.imul(ah0, bl7)) | 0;
87292 hi = (hi + Math.imul(ah0, bh7)) | 0;
87293 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87294 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
87295 w7 &= 0x3ffffff;
87296 /* k = 8 */
87297 lo = Math.imul(al8, bl0);
87298 mid = Math.imul(al8, bh0);
87299 mid = (mid + Math.imul(ah8, bl0)) | 0;
87300 hi = Math.imul(ah8, bh0);
87301 lo = (lo + Math.imul(al7, bl1)) | 0;
87302 mid = (mid + Math.imul(al7, bh1)) | 0;
87303 mid = (mid + Math.imul(ah7, bl1)) | 0;
87304 hi = (hi + Math.imul(ah7, bh1)) | 0;
87305 lo = (lo + Math.imul(al6, bl2)) | 0;
87306 mid = (mid + Math.imul(al6, bh2)) | 0;
87307 mid = (mid + Math.imul(ah6, bl2)) | 0;
87308 hi = (hi + Math.imul(ah6, bh2)) | 0;
87309 lo = (lo + Math.imul(al5, bl3)) | 0;
87310 mid = (mid + Math.imul(al5, bh3)) | 0;
87311 mid = (mid + Math.imul(ah5, bl3)) | 0;
87312 hi = (hi + Math.imul(ah5, bh3)) | 0;
87313 lo = (lo + Math.imul(al4, bl4)) | 0;
87314 mid = (mid + Math.imul(al4, bh4)) | 0;
87315 mid = (mid + Math.imul(ah4, bl4)) | 0;
87316 hi = (hi + Math.imul(ah4, bh4)) | 0;
87317 lo = (lo + Math.imul(al3, bl5)) | 0;
87318 mid = (mid + Math.imul(al3, bh5)) | 0;
87319 mid = (mid + Math.imul(ah3, bl5)) | 0;
87320 hi = (hi + Math.imul(ah3, bh5)) | 0;
87321 lo = (lo + Math.imul(al2, bl6)) | 0;
87322 mid = (mid + Math.imul(al2, bh6)) | 0;
87323 mid = (mid + Math.imul(ah2, bl6)) | 0;
87324 hi = (hi + Math.imul(ah2, bh6)) | 0;
87325 lo = (lo + Math.imul(al1, bl7)) | 0;
87326 mid = (mid + Math.imul(al1, bh7)) | 0;
87327 mid = (mid + Math.imul(ah1, bl7)) | 0;
87328 hi = (hi + Math.imul(ah1, bh7)) | 0;
87329 lo = (lo + Math.imul(al0, bl8)) | 0;
87330 mid = (mid + Math.imul(al0, bh8)) | 0;
87331 mid = (mid + Math.imul(ah0, bl8)) | 0;
87332 hi = (hi + Math.imul(ah0, bh8)) | 0;
87333 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87334 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
87335 w8 &= 0x3ffffff;
87336 /* k = 9 */
87337 lo = Math.imul(al9, bl0);
87338 mid = Math.imul(al9, bh0);
87339 mid = (mid + Math.imul(ah9, bl0)) | 0;
87340 hi = Math.imul(ah9, bh0);
87341 lo = (lo + Math.imul(al8, bl1)) | 0;
87342 mid = (mid + Math.imul(al8, bh1)) | 0;
87343 mid = (mid + Math.imul(ah8, bl1)) | 0;
87344 hi = (hi + Math.imul(ah8, bh1)) | 0;
87345 lo = (lo + Math.imul(al7, bl2)) | 0;
87346 mid = (mid + Math.imul(al7, bh2)) | 0;
87347 mid = (mid + Math.imul(ah7, bl2)) | 0;
87348 hi = (hi + Math.imul(ah7, bh2)) | 0;
87349 lo = (lo + Math.imul(al6, bl3)) | 0;
87350 mid = (mid + Math.imul(al6, bh3)) | 0;
87351 mid = (mid + Math.imul(ah6, bl3)) | 0;
87352 hi = (hi + Math.imul(ah6, bh3)) | 0;
87353 lo = (lo + Math.imul(al5, bl4)) | 0;
87354 mid = (mid + Math.imul(al5, bh4)) | 0;
87355 mid = (mid + Math.imul(ah5, bl4)) | 0;
87356 hi = (hi + Math.imul(ah5, bh4)) | 0;
87357 lo = (lo + Math.imul(al4, bl5)) | 0;
87358 mid = (mid + Math.imul(al4, bh5)) | 0;
87359 mid = (mid + Math.imul(ah4, bl5)) | 0;
87360 hi = (hi + Math.imul(ah4, bh5)) | 0;
87361 lo = (lo + Math.imul(al3, bl6)) | 0;
87362 mid = (mid + Math.imul(al3, bh6)) | 0;
87363 mid = (mid + Math.imul(ah3, bl6)) | 0;
87364 hi = (hi + Math.imul(ah3, bh6)) | 0;
87365 lo = (lo + Math.imul(al2, bl7)) | 0;
87366 mid = (mid + Math.imul(al2, bh7)) | 0;
87367 mid = (mid + Math.imul(ah2, bl7)) | 0;
87368 hi = (hi + Math.imul(ah2, bh7)) | 0;
87369 lo = (lo + Math.imul(al1, bl8)) | 0;
87370 mid = (mid + Math.imul(al1, bh8)) | 0;
87371 mid = (mid + Math.imul(ah1, bl8)) | 0;
87372 hi = (hi + Math.imul(ah1, bh8)) | 0;
87373 lo = (lo + Math.imul(al0, bl9)) | 0;
87374 mid = (mid + Math.imul(al0, bh9)) | 0;
87375 mid = (mid + Math.imul(ah0, bl9)) | 0;
87376 hi = (hi + Math.imul(ah0, bh9)) | 0;
87377 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87378 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
87379 w9 &= 0x3ffffff;
87380 /* k = 10 */
87381 lo = Math.imul(al9, bl1);
87382 mid = Math.imul(al9, bh1);
87383 mid = (mid + Math.imul(ah9, bl1)) | 0;
87384 hi = Math.imul(ah9, bh1);
87385 lo = (lo + Math.imul(al8, bl2)) | 0;
87386 mid = (mid + Math.imul(al8, bh2)) | 0;
87387 mid = (mid + Math.imul(ah8, bl2)) | 0;
87388 hi = (hi + Math.imul(ah8, bh2)) | 0;
87389 lo = (lo + Math.imul(al7, bl3)) | 0;
87390 mid = (mid + Math.imul(al7, bh3)) | 0;
87391 mid = (mid + Math.imul(ah7, bl3)) | 0;
87392 hi = (hi + Math.imul(ah7, bh3)) | 0;
87393 lo = (lo + Math.imul(al6, bl4)) | 0;
87394 mid = (mid + Math.imul(al6, bh4)) | 0;
87395 mid = (mid + Math.imul(ah6, bl4)) | 0;
87396 hi = (hi + Math.imul(ah6, bh4)) | 0;
87397 lo = (lo + Math.imul(al5, bl5)) | 0;
87398 mid = (mid + Math.imul(al5, bh5)) | 0;
87399 mid = (mid + Math.imul(ah5, bl5)) | 0;
87400 hi = (hi + Math.imul(ah5, bh5)) | 0;
87401 lo = (lo + Math.imul(al4, bl6)) | 0;
87402 mid = (mid + Math.imul(al4, bh6)) | 0;
87403 mid = (mid + Math.imul(ah4, bl6)) | 0;
87404 hi = (hi + Math.imul(ah4, bh6)) | 0;
87405 lo = (lo + Math.imul(al3, bl7)) | 0;
87406 mid = (mid + Math.imul(al3, bh7)) | 0;
87407 mid = (mid + Math.imul(ah3, bl7)) | 0;
87408 hi = (hi + Math.imul(ah3, bh7)) | 0;
87409 lo = (lo + Math.imul(al2, bl8)) | 0;
87410 mid = (mid + Math.imul(al2, bh8)) | 0;
87411 mid = (mid + Math.imul(ah2, bl8)) | 0;
87412 hi = (hi + Math.imul(ah2, bh8)) | 0;
87413 lo = (lo + Math.imul(al1, bl9)) | 0;
87414 mid = (mid + Math.imul(al1, bh9)) | 0;
87415 mid = (mid + Math.imul(ah1, bl9)) | 0;
87416 hi = (hi + Math.imul(ah1, bh9)) | 0;
87417 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87418 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
87419 w10 &= 0x3ffffff;
87420 /* k = 11 */
87421 lo = Math.imul(al9, bl2);
87422 mid = Math.imul(al9, bh2);
87423 mid = (mid + Math.imul(ah9, bl2)) | 0;
87424 hi = Math.imul(ah9, bh2);
87425 lo = (lo + Math.imul(al8, bl3)) | 0;
87426 mid = (mid + Math.imul(al8, bh3)) | 0;
87427 mid = (mid + Math.imul(ah8, bl3)) | 0;
87428 hi = (hi + Math.imul(ah8, bh3)) | 0;
87429 lo = (lo + Math.imul(al7, bl4)) | 0;
87430 mid = (mid + Math.imul(al7, bh4)) | 0;
87431 mid = (mid + Math.imul(ah7, bl4)) | 0;
87432 hi = (hi + Math.imul(ah7, bh4)) | 0;
87433 lo = (lo + Math.imul(al6, bl5)) | 0;
87434 mid = (mid + Math.imul(al6, bh5)) | 0;
87435 mid = (mid + Math.imul(ah6, bl5)) | 0;
87436 hi = (hi + Math.imul(ah6, bh5)) | 0;
87437 lo = (lo + Math.imul(al5, bl6)) | 0;
87438 mid = (mid + Math.imul(al5, bh6)) | 0;
87439 mid = (mid + Math.imul(ah5, bl6)) | 0;
87440 hi = (hi + Math.imul(ah5, bh6)) | 0;
87441 lo = (lo + Math.imul(al4, bl7)) | 0;
87442 mid = (mid + Math.imul(al4, bh7)) | 0;
87443 mid = (mid + Math.imul(ah4, bl7)) | 0;
87444 hi = (hi + Math.imul(ah4, bh7)) | 0;
87445 lo = (lo + Math.imul(al3, bl8)) | 0;
87446 mid = (mid + Math.imul(al3, bh8)) | 0;
87447 mid = (mid + Math.imul(ah3, bl8)) | 0;
87448 hi = (hi + Math.imul(ah3, bh8)) | 0;
87449 lo = (lo + Math.imul(al2, bl9)) | 0;
87450 mid = (mid + Math.imul(al2, bh9)) | 0;
87451 mid = (mid + Math.imul(ah2, bl9)) | 0;
87452 hi = (hi + Math.imul(ah2, bh9)) | 0;
87453 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87454 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
87455 w11 &= 0x3ffffff;
87456 /* k = 12 */
87457 lo = Math.imul(al9, bl3);
87458 mid = Math.imul(al9, bh3);
87459 mid = (mid + Math.imul(ah9, bl3)) | 0;
87460 hi = Math.imul(ah9, bh3);
87461 lo = (lo + Math.imul(al8, bl4)) | 0;
87462 mid = (mid + Math.imul(al8, bh4)) | 0;
87463 mid = (mid + Math.imul(ah8, bl4)) | 0;
87464 hi = (hi + Math.imul(ah8, bh4)) | 0;
87465 lo = (lo + Math.imul(al7, bl5)) | 0;
87466 mid = (mid + Math.imul(al7, bh5)) | 0;
87467 mid = (mid + Math.imul(ah7, bl5)) | 0;
87468 hi = (hi + Math.imul(ah7, bh5)) | 0;
87469 lo = (lo + Math.imul(al6, bl6)) | 0;
87470 mid = (mid + Math.imul(al6, bh6)) | 0;
87471 mid = (mid + Math.imul(ah6, bl6)) | 0;
87472 hi = (hi + Math.imul(ah6, bh6)) | 0;
87473 lo = (lo + Math.imul(al5, bl7)) | 0;
87474 mid = (mid + Math.imul(al5, bh7)) | 0;
87475 mid = (mid + Math.imul(ah5, bl7)) | 0;
87476 hi = (hi + Math.imul(ah5, bh7)) | 0;
87477 lo = (lo + Math.imul(al4, bl8)) | 0;
87478 mid = (mid + Math.imul(al4, bh8)) | 0;
87479 mid = (mid + Math.imul(ah4, bl8)) | 0;
87480 hi = (hi + Math.imul(ah4, bh8)) | 0;
87481 lo = (lo + Math.imul(al3, bl9)) | 0;
87482 mid = (mid + Math.imul(al3, bh9)) | 0;
87483 mid = (mid + Math.imul(ah3, bl9)) | 0;
87484 hi = (hi + Math.imul(ah3, bh9)) | 0;
87485 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87486 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
87487 w12 &= 0x3ffffff;
87488 /* k = 13 */
87489 lo = Math.imul(al9, bl4);
87490 mid = Math.imul(al9, bh4);
87491 mid = (mid + Math.imul(ah9, bl4)) | 0;
87492 hi = Math.imul(ah9, bh4);
87493 lo = (lo + Math.imul(al8, bl5)) | 0;
87494 mid = (mid + Math.imul(al8, bh5)) | 0;
87495 mid = (mid + Math.imul(ah8, bl5)) | 0;
87496 hi = (hi + Math.imul(ah8, bh5)) | 0;
87497 lo = (lo + Math.imul(al7, bl6)) | 0;
87498 mid = (mid + Math.imul(al7, bh6)) | 0;
87499 mid = (mid + Math.imul(ah7, bl6)) | 0;
87500 hi = (hi + Math.imul(ah7, bh6)) | 0;
87501 lo = (lo + Math.imul(al6, bl7)) | 0;
87502 mid = (mid + Math.imul(al6, bh7)) | 0;
87503 mid = (mid + Math.imul(ah6, bl7)) | 0;
87504 hi = (hi + Math.imul(ah6, bh7)) | 0;
87505 lo = (lo + Math.imul(al5, bl8)) | 0;
87506 mid = (mid + Math.imul(al5, bh8)) | 0;
87507 mid = (mid + Math.imul(ah5, bl8)) | 0;
87508 hi = (hi + Math.imul(ah5, bh8)) | 0;
87509 lo = (lo + Math.imul(al4, bl9)) | 0;
87510 mid = (mid + Math.imul(al4, bh9)) | 0;
87511 mid = (mid + Math.imul(ah4, bl9)) | 0;
87512 hi = (hi + Math.imul(ah4, bh9)) | 0;
87513 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87514 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
87515 w13 &= 0x3ffffff;
87516 /* k = 14 */
87517 lo = Math.imul(al9, bl5);
87518 mid = Math.imul(al9, bh5);
87519 mid = (mid + Math.imul(ah9, bl5)) | 0;
87520 hi = Math.imul(ah9, bh5);
87521 lo = (lo + Math.imul(al8, bl6)) | 0;
87522 mid = (mid + Math.imul(al8, bh6)) | 0;
87523 mid = (mid + Math.imul(ah8, bl6)) | 0;
87524 hi = (hi + Math.imul(ah8, bh6)) | 0;
87525 lo = (lo + Math.imul(al7, bl7)) | 0;
87526 mid = (mid + Math.imul(al7, bh7)) | 0;
87527 mid = (mid + Math.imul(ah7, bl7)) | 0;
87528 hi = (hi + Math.imul(ah7, bh7)) | 0;
87529 lo = (lo + Math.imul(al6, bl8)) | 0;
87530 mid = (mid + Math.imul(al6, bh8)) | 0;
87531 mid = (mid + Math.imul(ah6, bl8)) | 0;
87532 hi = (hi + Math.imul(ah6, bh8)) | 0;
87533 lo = (lo + Math.imul(al5, bl9)) | 0;
87534 mid = (mid + Math.imul(al5, bh9)) | 0;
87535 mid = (mid + Math.imul(ah5, bl9)) | 0;
87536 hi = (hi + Math.imul(ah5, bh9)) | 0;
87537 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87538 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
87539 w14 &= 0x3ffffff;
87540 /* k = 15 */
87541 lo = Math.imul(al9, bl6);
87542 mid = Math.imul(al9, bh6);
87543 mid = (mid + Math.imul(ah9, bl6)) | 0;
87544 hi = Math.imul(ah9, bh6);
87545 lo = (lo + Math.imul(al8, bl7)) | 0;
87546 mid = (mid + Math.imul(al8, bh7)) | 0;
87547 mid = (mid + Math.imul(ah8, bl7)) | 0;
87548 hi = (hi + Math.imul(ah8, bh7)) | 0;
87549 lo = (lo + Math.imul(al7, bl8)) | 0;
87550 mid = (mid + Math.imul(al7, bh8)) | 0;
87551 mid = (mid + Math.imul(ah7, bl8)) | 0;
87552 hi = (hi + Math.imul(ah7, bh8)) | 0;
87553 lo = (lo + Math.imul(al6, bl9)) | 0;
87554 mid = (mid + Math.imul(al6, bh9)) | 0;
87555 mid = (mid + Math.imul(ah6, bl9)) | 0;
87556 hi = (hi + Math.imul(ah6, bh9)) | 0;
87557 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87558 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
87559 w15 &= 0x3ffffff;
87560 /* k = 16 */
87561 lo = Math.imul(al9, bl7);
87562 mid = Math.imul(al9, bh7);
87563 mid = (mid + Math.imul(ah9, bl7)) | 0;
87564 hi = Math.imul(ah9, bh7);
87565 lo = (lo + Math.imul(al8, bl8)) | 0;
87566 mid = (mid + Math.imul(al8, bh8)) | 0;
87567 mid = (mid + Math.imul(ah8, bl8)) | 0;
87568 hi = (hi + Math.imul(ah8, bh8)) | 0;
87569 lo = (lo + Math.imul(al7, bl9)) | 0;
87570 mid = (mid + Math.imul(al7, bh9)) | 0;
87571 mid = (mid + Math.imul(ah7, bl9)) | 0;
87572 hi = (hi + Math.imul(ah7, bh9)) | 0;
87573 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87574 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
87575 w16 &= 0x3ffffff;
87576 /* k = 17 */
87577 lo = Math.imul(al9, bl8);
87578 mid = Math.imul(al9, bh8);
87579 mid = (mid + Math.imul(ah9, bl8)) | 0;
87580 hi = Math.imul(ah9, bh8);
87581 lo = (lo + Math.imul(al8, bl9)) | 0;
87582 mid = (mid + Math.imul(al8, bh9)) | 0;
87583 mid = (mid + Math.imul(ah8, bl9)) | 0;
87584 hi = (hi + Math.imul(ah8, bh9)) | 0;
87585 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87586 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
87587 w17 &= 0x3ffffff;
87588 /* k = 18 */
87589 lo = Math.imul(al9, bl9);
87590 mid = Math.imul(al9, bh9);
87591 mid = (mid + Math.imul(ah9, bl9)) | 0;
87592 hi = Math.imul(ah9, bh9);
87593 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87594 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
87595 w18 &= 0x3ffffff;
87596 o[0] = w0;
87597 o[1] = w1;
87598 o[2] = w2;
87599 o[3] = w3;
87600 o[4] = w4;
87601 o[5] = w5;
87602 o[6] = w6;
87603 o[7] = w7;
87604 o[8] = w8;
87605 o[9] = w9;
87606 o[10] = w10;
87607 o[11] = w11;
87608 o[12] = w12;
87609 o[13] = w13;
87610 o[14] = w14;
87611 o[15] = w15;
87612 o[16] = w16;
87613 o[17] = w17;
87614 o[18] = w18;
87615 if (c !== 0) {
87616 o[19] = c;
87617 out.length++;
87618 }
87619 return out;
87620 };
87621
87622 // Polyfill comb
87623 if (!Math.imul) {
87624 comb10MulTo = smallMulTo;
87625 }
87626
87627 function bigMulTo (self, num, out) {
87628 out.negative = num.negative ^ self.negative;
87629 out.length = self.length + num.length;
87630
87631 var carry = 0;
87632 var hncarry = 0;
87633 for (var k = 0; k < out.length - 1; k++) {
87634 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
87635 // note that ncarry could be >= 0x3ffffff
87636 var ncarry = hncarry;
87637 hncarry = 0;
87638 var rword = carry & 0x3ffffff;
87639 var maxJ = Math.min(k, num.length - 1);
87640 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
87641 var i = k - j;
87642 var a = self.words[i] | 0;
87643 var b = num.words[j] | 0;
87644 var r = a * b;
87645
87646 var lo = r & 0x3ffffff;
87647 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
87648 lo = (lo + rword) | 0;
87649 rword = lo & 0x3ffffff;
87650 ncarry = (ncarry + (lo >>> 26)) | 0;
87651
87652 hncarry += ncarry >>> 26;
87653 ncarry &= 0x3ffffff;
87654 }
87655 out.words[k] = rword;
87656 carry = ncarry;
87657 ncarry = hncarry;
87658 }
87659 if (carry !== 0) {
87660 out.words[k] = carry;
87661 } else {
87662 out.length--;
87663 }
87664
87665 return out.strip();
87666 }
87667
87668 function jumboMulTo (self, num, out) {
87669 var fftm = new FFTM();
87670 return fftm.mulp(self, num, out);
87671 }
87672
87673 BN.prototype.mulTo = function mulTo (num, out) {
87674 var res;
87675 var len = this.length + num.length;
87676 if (this.length === 10 && num.length === 10) {
87677 res = comb10MulTo(this, num, out);
87678 } else if (len < 63) {
87679 res = smallMulTo(this, num, out);
87680 } else if (len < 1024) {
87681 res = bigMulTo(this, num, out);
87682 } else {
87683 res = jumboMulTo(this, num, out);
87684 }
87685
87686 return res;
87687 };
87688
87689 // Cooley-Tukey algorithm for FFT
87690 // slightly revisited to rely on looping instead of recursion
87691
87692 function FFTM (x, y) {
87693 this.x = x;
87694 this.y = y;
87695 }
87696
87697 FFTM.prototype.makeRBT = function makeRBT (N) {
87698 var t = new Array(N);
87699 var l = BN.prototype._countBits(N) - 1;
87700 for (var i = 0; i < N; i++) {
87701 t[i] = this.revBin(i, l, N);
87702 }
87703
87704 return t;
87705 };
87706
87707 // Returns binary-reversed representation of `x`
87708 FFTM.prototype.revBin = function revBin (x, l, N) {
87709 if (x === 0 || x === N - 1) return x;
87710
87711 var rb = 0;
87712 for (var i = 0; i < l; i++) {
87713 rb |= (x & 1) << (l - i - 1);
87714 x >>= 1;
87715 }
87716
87717 return rb;
87718 };
87719
87720 // Performs "tweedling" phase, therefore 'emulating'
87721 // behaviour of the recursive algorithm
87722 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
87723 for (var i = 0; i < N; i++) {
87724 rtws[i] = rws[rbt[i]];
87725 itws[i] = iws[rbt[i]];
87726 }
87727 };
87728
87729 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
87730 this.permute(rbt, rws, iws, rtws, itws, N);
87731
87732 for (var s = 1; s < N; s <<= 1) {
87733 var l = s << 1;
87734
87735 var rtwdf = Math.cos(2 * Math.PI / l);
87736 var itwdf = Math.sin(2 * Math.PI / l);
87737
87738 for (var p = 0; p < N; p += l) {
87739 var rtwdf_ = rtwdf;
87740 var itwdf_ = itwdf;
87741
87742 for (var j = 0; j < s; j++) {
87743 var re = rtws[p + j];
87744 var ie = itws[p + j];
87745
87746 var ro = rtws[p + j + s];
87747 var io = itws[p + j + s];
87748
87749 var rx = rtwdf_ * ro - itwdf_ * io;
87750
87751 io = rtwdf_ * io + itwdf_ * ro;
87752 ro = rx;
87753
87754 rtws[p + j] = re + ro;
87755 itws[p + j] = ie + io;
87756
87757 rtws[p + j + s] = re - ro;
87758 itws[p + j + s] = ie - io;
87759
87760 /* jshint maxdepth : false */
87761 if (j !== l) {
87762 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
87763
87764 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
87765 rtwdf_ = rx;
87766 }
87767 }
87768 }
87769 }
87770 };
87771
87772 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
87773 var N = Math.max(m, n) | 1;
87774 var odd = N & 1;
87775 var i = 0;
87776 for (N = N / 2 | 0; N; N = N >>> 1) {
87777 i++;
87778 }
87779
87780 return 1 << i + 1 + odd;
87781 };
87782
87783 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
87784 if (N <= 1) return;
87785
87786 for (var i = 0; i < N / 2; i++) {
87787 var t = rws[i];
87788
87789 rws[i] = rws[N - i - 1];
87790 rws[N - i - 1] = t;
87791
87792 t = iws[i];
87793
87794 iws[i] = -iws[N - i - 1];
87795 iws[N - i - 1] = -t;
87796 }
87797 };
87798
87799 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
87800 var carry = 0;
87801 for (var i = 0; i < N / 2; i++) {
87802 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
87803 Math.round(ws[2 * i] / N) +
87804 carry;
87805
87806 ws[i] = w & 0x3ffffff;
87807
87808 if (w < 0x4000000) {
87809 carry = 0;
87810 } else {
87811 carry = w / 0x4000000 | 0;
87812 }
87813 }
87814
87815 return ws;
87816 };
87817
87818 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
87819 var carry = 0;
87820 for (var i = 0; i < len; i++) {
87821 carry = carry + (ws[i] | 0);
87822
87823 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
87824 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
87825 }
87826
87827 // Pad with zeroes
87828 for (i = 2 * len; i < N; ++i) {
87829 rws[i] = 0;
87830 }
87831
87832 assert(carry === 0);
87833 assert((carry & ~0x1fff) === 0);
87834 };
87835
87836 FFTM.prototype.stub = function stub (N) {
87837 var ph = new Array(N);
87838 for (var i = 0; i < N; i++) {
87839 ph[i] = 0;
87840 }
87841
87842 return ph;
87843 };
87844
87845 FFTM.prototype.mulp = function mulp (x, y, out) {
87846 var N = 2 * this.guessLen13b(x.length, y.length);
87847
87848 var rbt = this.makeRBT(N);
87849
87850 var _ = this.stub(N);
87851
87852 var rws = new Array(N);
87853 var rwst = new Array(N);
87854 var iwst = new Array(N);
87855
87856 var nrws = new Array(N);
87857 var nrwst = new Array(N);
87858 var niwst = new Array(N);
87859
87860 var rmws = out.words;
87861 rmws.length = N;
87862
87863 this.convert13b(x.words, x.length, rws, N);
87864 this.convert13b(y.words, y.length, nrws, N);
87865
87866 this.transform(rws, _, rwst, iwst, N, rbt);
87867 this.transform(nrws, _, nrwst, niwst, N, rbt);
87868
87869 for (var i = 0; i < N; i++) {
87870 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
87871 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
87872 rwst[i] = rx;
87873 }
87874
87875 this.conjugate(rwst, iwst, N);
87876 this.transform(rwst, iwst, rmws, _, N, rbt);
87877 this.conjugate(rmws, _, N);
87878 this.normalize13b(rmws, N);
87879
87880 out.negative = x.negative ^ y.negative;
87881 out.length = x.length + y.length;
87882 return out.strip();
87883 };
87884
87885 // Multiply `this` by `num`
87886 BN.prototype.mul = function mul (num) {
87887 var out = new BN(null);
87888 out.words = new Array(this.length + num.length);
87889 return this.mulTo(num, out);
87890 };
87891
87892 // Multiply employing FFT
87893 BN.prototype.mulf = function mulf (num) {
87894 var out = new BN(null);
87895 out.words = new Array(this.length + num.length);
87896 return jumboMulTo(this, num, out);
87897 };
87898
87899 // In-place Multiplication
87900 BN.prototype.imul = function imul (num) {
87901 return this.clone().mulTo(num, this);
87902 };
87903
87904 BN.prototype.imuln = function imuln (num) {
87905 assert(typeof num === 'number');
87906 assert(num < 0x4000000);
87907
87908 // Carry
87909 var carry = 0;
87910 for (var i = 0; i < this.length; i++) {
87911 var w = (this.words[i] | 0) * num;
87912 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
87913 carry >>= 26;
87914 carry += (w / 0x4000000) | 0;
87915 // NOTE: lo is 27bit maximum
87916 carry += lo >>> 26;
87917 this.words[i] = lo & 0x3ffffff;
87918 }
87919
87920 if (carry !== 0) {
87921 this.words[i] = carry;
87922 this.length++;
87923 }
87924
87925 return this;
87926 };
87927
87928 BN.prototype.muln = function muln (num) {
87929 return this.clone().imuln(num);
87930 };
87931
87932 // `this` * `this`
87933 BN.prototype.sqr = function sqr () {
87934 return this.mul(this);
87935 };
87936
87937 // `this` * `this` in-place
87938 BN.prototype.isqr = function isqr () {
87939 return this.imul(this.clone());
87940 };
87941
87942 // Math.pow(`this`, `num`)
87943 BN.prototype.pow = function pow (num) {
87944 var w = toBitArray(num);
87945 if (w.length === 0) return new BN(1);
87946
87947 // Skip leading zeroes
87948 var res = this;
87949 for (var i = 0; i < w.length; i++, res = res.sqr()) {
87950 if (w[i] !== 0) break;
87951 }
87952
87953 if (++i < w.length) {
87954 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
87955 if (w[i] === 0) continue;
87956
87957 res = res.mul(q);
87958 }
87959 }
87960
87961 return res;
87962 };
87963
87964 // Shift-left in-place
87965 BN.prototype.iushln = function iushln (bits) {
87966 assert(typeof bits === 'number' && bits >= 0);
87967 var r = bits % 26;
87968 var s = (bits - r) / 26;
87969 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
87970 var i;
87971
87972 if (r !== 0) {
87973 var carry = 0;
87974
87975 for (i = 0; i < this.length; i++) {
87976 var newCarry = this.words[i] & carryMask;
87977 var c = ((this.words[i] | 0) - newCarry) << r;
87978 this.words[i] = c | carry;
87979 carry = newCarry >>> (26 - r);
87980 }
87981
87982 if (carry) {
87983 this.words[i] = carry;
87984 this.length++;
87985 }
87986 }
87987
87988 if (s !== 0) {
87989 for (i = this.length - 1; i >= 0; i--) {
87990 this.words[i + s] = this.words[i];
87991 }
87992
87993 for (i = 0; i < s; i++) {
87994 this.words[i] = 0;
87995 }
87996
87997 this.length += s;
87998 }
87999
88000 return this.strip();
88001 };
88002
88003 BN.prototype.ishln = function ishln (bits) {
88004 // TODO(indutny): implement me
88005 assert(this.negative === 0);
88006 return this.iushln(bits);
88007 };
88008
88009 // Shift-right in-place
88010 // NOTE: `hint` is a lowest bit before trailing zeroes
88011 // NOTE: if `extended` is present - it will be filled with destroyed bits
88012 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
88013 assert(typeof bits === 'number' && bits >= 0);
88014 var h;
88015 if (hint) {
88016 h = (hint - (hint % 26)) / 26;
88017 } else {
88018 h = 0;
88019 }
88020
88021 var r = bits % 26;
88022 var s = Math.min((bits - r) / 26, this.length);
88023 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
88024 var maskedWords = extended;
88025
88026 h -= s;
88027 h = Math.max(0, h);
88028
88029 // Extended mode, copy masked part
88030 if (maskedWords) {
88031 for (var i = 0; i < s; i++) {
88032 maskedWords.words[i] = this.words[i];
88033 }
88034 maskedWords.length = s;
88035 }
88036
88037 if (s === 0) {
88038 // No-op, we should not move anything at all
88039 } else if (this.length > s) {
88040 this.length -= s;
88041 for (i = 0; i < this.length; i++) {
88042 this.words[i] = this.words[i + s];
88043 }
88044 } else {
88045 this.words[0] = 0;
88046 this.length = 1;
88047 }
88048
88049 var carry = 0;
88050 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
88051 var word = this.words[i] | 0;
88052 this.words[i] = (carry << (26 - r)) | (word >>> r);
88053 carry = word & mask;
88054 }
88055
88056 // Push carried bits as a mask
88057 if (maskedWords && carry !== 0) {
88058 maskedWords.words[maskedWords.length++] = carry;
88059 }
88060
88061 if (this.length === 0) {
88062 this.words[0] = 0;
88063 this.length = 1;
88064 }
88065
88066 return this.strip();
88067 };
88068
88069 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
88070 // TODO(indutny): implement me
88071 assert(this.negative === 0);
88072 return this.iushrn(bits, hint, extended);
88073 };
88074
88075 // Shift-left
88076 BN.prototype.shln = function shln (bits) {
88077 return this.clone().ishln(bits);
88078 };
88079
88080 BN.prototype.ushln = function ushln (bits) {
88081 return this.clone().iushln(bits);
88082 };
88083
88084 // Shift-right
88085 BN.prototype.shrn = function shrn (bits) {
88086 return this.clone().ishrn(bits);
88087 };
88088
88089 BN.prototype.ushrn = function ushrn (bits) {
88090 return this.clone().iushrn(bits);
88091 };
88092
88093 // Test if n bit is set
88094 BN.prototype.testn = function testn (bit) {
88095 assert(typeof bit === 'number' && bit >= 0);
88096 var r = bit % 26;
88097 var s = (bit - r) / 26;
88098 var q = 1 << r;
88099
88100 // Fast case: bit is much higher than all existing words
88101 if (this.length <= s) return false;
88102
88103 // Check bit and return
88104 var w = this.words[s];
88105
88106 return !!(w & q);
88107 };
88108
88109 // Return only lowers bits of number (in-place)
88110 BN.prototype.imaskn = function imaskn (bits) {
88111 assert(typeof bits === 'number' && bits >= 0);
88112 var r = bits % 26;
88113 var s = (bits - r) / 26;
88114
88115 assert(this.negative === 0, 'imaskn works only with positive numbers');
88116
88117 if (this.length <= s) {
88118 return this;
88119 }
88120
88121 if (r !== 0) {
88122 s++;
88123 }
88124 this.length = Math.min(s, this.length);
88125
88126 if (r !== 0) {
88127 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
88128 this.words[this.length - 1] &= mask;
88129 }
88130
88131 return this.strip();
88132 };
88133
88134 // Return only lowers bits of number
88135 BN.prototype.maskn = function maskn (bits) {
88136 return this.clone().imaskn(bits);
88137 };
88138
88139 // Add plain number `num` to `this`
88140 BN.prototype.iaddn = function iaddn (num) {
88141 assert(typeof num === 'number');
88142 assert(num < 0x4000000);
88143 if (num < 0) return this.isubn(-num);
88144
88145 // Possible sign change
88146 if (this.negative !== 0) {
88147 if (this.length === 1 && (this.words[0] | 0) < num) {
88148 this.words[0] = num - (this.words[0] | 0);
88149 this.negative = 0;
88150 return this;
88151 }
88152
88153 this.negative = 0;
88154 this.isubn(num);
88155 this.negative = 1;
88156 return this;
88157 }
88158
88159 // Add without checks
88160 return this._iaddn(num);
88161 };
88162
88163 BN.prototype._iaddn = function _iaddn (num) {
88164 this.words[0] += num;
88165
88166 // Carry
88167 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
88168 this.words[i] -= 0x4000000;
88169 if (i === this.length - 1) {
88170 this.words[i + 1] = 1;
88171 } else {
88172 this.words[i + 1]++;
88173 }
88174 }
88175 this.length = Math.max(this.length, i + 1);
88176
88177 return this;
88178 };
88179
88180 // Subtract plain number `num` from `this`
88181 BN.prototype.isubn = function isubn (num) {
88182 assert(typeof num === 'number');
88183 assert(num < 0x4000000);
88184 if (num < 0) return this.iaddn(-num);
88185
88186 if (this.negative !== 0) {
88187 this.negative = 0;
88188 this.iaddn(num);
88189 this.negative = 1;
88190 return this;
88191 }
88192
88193 this.words[0] -= num;
88194
88195 if (this.length === 1 && this.words[0] < 0) {
88196 this.words[0] = -this.words[0];
88197 this.negative = 1;
88198 } else {
88199 // Carry
88200 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
88201 this.words[i] += 0x4000000;
88202 this.words[i + 1] -= 1;
88203 }
88204 }
88205
88206 return this.strip();
88207 };
88208
88209 BN.prototype.addn = function addn (num) {
88210 return this.clone().iaddn(num);
88211 };
88212
88213 BN.prototype.subn = function subn (num) {
88214 return this.clone().isubn(num);
88215 };
88216
88217 BN.prototype.iabs = function iabs () {
88218 this.negative = 0;
88219
88220 return this;
88221 };
88222
88223 BN.prototype.abs = function abs () {
88224 return this.clone().iabs();
88225 };
88226
88227 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
88228 var len = num.length + shift;
88229 var i;
88230
88231 this._expand(len);
88232
88233 var w;
88234 var carry = 0;
88235 for (i = 0; i < num.length; i++) {
88236 w = (this.words[i + shift] | 0) + carry;
88237 var right = (num.words[i] | 0) * mul;
88238 w -= right & 0x3ffffff;
88239 carry = (w >> 26) - ((right / 0x4000000) | 0);
88240 this.words[i + shift] = w & 0x3ffffff;
88241 }
88242 for (; i < this.length - shift; i++) {
88243 w = (this.words[i + shift] | 0) + carry;
88244 carry = w >> 26;
88245 this.words[i + shift] = w & 0x3ffffff;
88246 }
88247
88248 if (carry === 0) return this.strip();
88249
88250 // Subtraction overflow
88251 assert(carry === -1);
88252 carry = 0;
88253 for (i = 0; i < this.length; i++) {
88254 w = -(this.words[i] | 0) + carry;
88255 carry = w >> 26;
88256 this.words[i] = w & 0x3ffffff;
88257 }
88258 this.negative = 1;
88259
88260 return this.strip();
88261 };
88262
88263 BN.prototype._wordDiv = function _wordDiv (num, mode) {
88264 var shift = this.length - num.length;
88265
88266 var a = this.clone();
88267 var b = num;
88268
88269 // Normalize
88270 var bhi = b.words[b.length - 1] | 0;
88271 var bhiBits = this._countBits(bhi);
88272 shift = 26 - bhiBits;
88273 if (shift !== 0) {
88274 b = b.ushln(shift);
88275 a.iushln(shift);
88276 bhi = b.words[b.length - 1] | 0;
88277 }
88278
88279 // Initialize quotient
88280 var m = a.length - b.length;
88281 var q;
88282
88283 if (mode !== 'mod') {
88284 q = new BN(null);
88285 q.length = m + 1;
88286 q.words = new Array(q.length);
88287 for (var i = 0; i < q.length; i++) {
88288 q.words[i] = 0;
88289 }
88290 }
88291
88292 var diff = a.clone()._ishlnsubmul(b, 1, m);
88293 if (diff.negative === 0) {
88294 a = diff;
88295 if (q) {
88296 q.words[m] = 1;
88297 }
88298 }
88299
88300 for (var j = m - 1; j >= 0; j--) {
88301 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
88302 (a.words[b.length + j - 1] | 0);
88303
88304 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
88305 // (0x7ffffff)
88306 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
88307
88308 a._ishlnsubmul(b, qj, j);
88309 while (a.negative !== 0) {
88310 qj--;
88311 a.negative = 0;
88312 a._ishlnsubmul(b, 1, j);
88313 if (!a.isZero()) {
88314 a.negative ^= 1;
88315 }
88316 }
88317 if (q) {
88318 q.words[j] = qj;
88319 }
88320 }
88321 if (q) {
88322 q.strip();
88323 }
88324 a.strip();
88325
88326 // Denormalize
88327 if (mode !== 'div' && shift !== 0) {
88328 a.iushrn(shift);
88329 }
88330
88331 return {
88332 div: q || null,
88333 mod: a
88334 };
88335 };
88336
88337 // NOTE: 1) `mode` can be set to `mod` to request mod only,
88338 // to `div` to request div only, or be absent to
88339 // request both div & mod
88340 // 2) `positive` is true if unsigned mod is requested
88341 BN.prototype.divmod = function divmod (num, mode, positive) {
88342 assert(!num.isZero());
88343
88344 if (this.isZero()) {
88345 return {
88346 div: new BN(0),
88347 mod: new BN(0)
88348 };
88349 }
88350
88351 var div, mod, res;
88352 if (this.negative !== 0 && num.negative === 0) {
88353 res = this.neg().divmod(num, mode);
88354
88355 if (mode !== 'mod') {
88356 div = res.div.neg();
88357 }
88358
88359 if (mode !== 'div') {
88360 mod = res.mod.neg();
88361 if (positive && mod.negative !== 0) {
88362 mod.iadd(num);
88363 }
88364 }
88365
88366 return {
88367 div: div,
88368 mod: mod
88369 };
88370 }
88371
88372 if (this.negative === 0 && num.negative !== 0) {
88373 res = this.divmod(num.neg(), mode);
88374
88375 if (mode !== 'mod') {
88376 div = res.div.neg();
88377 }
88378
88379 return {
88380 div: div,
88381 mod: res.mod
88382 };
88383 }
88384
88385 if ((this.negative & num.negative) !== 0) {
88386 res = this.neg().divmod(num.neg(), mode);
88387
88388 if (mode !== 'div') {
88389 mod = res.mod.neg();
88390 if (positive && mod.negative !== 0) {
88391 mod.isub(num);
88392 }
88393 }
88394
88395 return {
88396 div: res.div,
88397 mod: mod
88398 };
88399 }
88400
88401 // Both numbers are positive at this point
88402
88403 // Strip both numbers to approximate shift value
88404 if (num.length > this.length || this.cmp(num) < 0) {
88405 return {
88406 div: new BN(0),
88407 mod: this
88408 };
88409 }
88410
88411 // Very short reduction
88412 if (num.length === 1) {
88413 if (mode === 'div') {
88414 return {
88415 div: this.divn(num.words[0]),
88416 mod: null
88417 };
88418 }
88419
88420 if (mode === 'mod') {
88421 return {
88422 div: null,
88423 mod: new BN(this.modn(num.words[0]))
88424 };
88425 }
88426
88427 return {
88428 div: this.divn(num.words[0]),
88429 mod: new BN(this.modn(num.words[0]))
88430 };
88431 }
88432
88433 return this._wordDiv(num, mode);
88434 };
88435
88436 // Find `this` / `num`
88437 BN.prototype.div = function div (num) {
88438 return this.divmod(num, 'div', false).div;
88439 };
88440
88441 // Find `this` % `num`
88442 BN.prototype.mod = function mod (num) {
88443 return this.divmod(num, 'mod', false).mod;
88444 };
88445
88446 BN.prototype.umod = function umod (num) {
88447 return this.divmod(num, 'mod', true).mod;
88448 };
88449
88450 // Find Round(`this` / `num`)
88451 BN.prototype.divRound = function divRound (num) {
88452 var dm = this.divmod(num);
88453
88454 // Fast case - exact division
88455 if (dm.mod.isZero()) return dm.div;
88456
88457 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
88458
88459 var half = num.ushrn(1);
88460 var r2 = num.andln(1);
88461 var cmp = mod.cmp(half);
88462
88463 // Round down
88464 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
88465
88466 // Round up
88467 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
88468 };
88469
88470 BN.prototype.modn = function modn (num) {
88471 assert(num <= 0x3ffffff);
88472 var p = (1 << 26) % num;
88473
88474 var acc = 0;
88475 for (var i = this.length - 1; i >= 0; i--) {
88476 acc = (p * acc + (this.words[i] | 0)) % num;
88477 }
88478
88479 return acc;
88480 };
88481
88482 // In-place division by number
88483 BN.prototype.idivn = function idivn (num) {
88484 assert(num <= 0x3ffffff);
88485
88486 var carry = 0;
88487 for (var i = this.length - 1; i >= 0; i--) {
88488 var w = (this.words[i] | 0) + carry * 0x4000000;
88489 this.words[i] = (w / num) | 0;
88490 carry = w % num;
88491 }
88492
88493 return this.strip();
88494 };
88495
88496 BN.prototype.divn = function divn (num) {
88497 return this.clone().idivn(num);
88498 };
88499
88500 BN.prototype.egcd = function egcd (p) {
88501 assert(p.negative === 0);
88502 assert(!p.isZero());
88503
88504 var x = this;
88505 var y = p.clone();
88506
88507 if (x.negative !== 0) {
88508 x = x.umod(p);
88509 } else {
88510 x = x.clone();
88511 }
88512
88513 // A * x + B * y = x
88514 var A = new BN(1);
88515 var B = new BN(0);
88516
88517 // C * x + D * y = y
88518 var C = new BN(0);
88519 var D = new BN(1);
88520
88521 var g = 0;
88522
88523 while (x.isEven() && y.isEven()) {
88524 x.iushrn(1);
88525 y.iushrn(1);
88526 ++g;
88527 }
88528
88529 var yp = y.clone();
88530 var xp = x.clone();
88531
88532 while (!x.isZero()) {
88533 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88534 if (i > 0) {
88535 x.iushrn(i);
88536 while (i-- > 0) {
88537 if (A.isOdd() || B.isOdd()) {
88538 A.iadd(yp);
88539 B.isub(xp);
88540 }
88541
88542 A.iushrn(1);
88543 B.iushrn(1);
88544 }
88545 }
88546
88547 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88548 if (j > 0) {
88549 y.iushrn(j);
88550 while (j-- > 0) {
88551 if (C.isOdd() || D.isOdd()) {
88552 C.iadd(yp);
88553 D.isub(xp);
88554 }
88555
88556 C.iushrn(1);
88557 D.iushrn(1);
88558 }
88559 }
88560
88561 if (x.cmp(y) >= 0) {
88562 x.isub(y);
88563 A.isub(C);
88564 B.isub(D);
88565 } else {
88566 y.isub(x);
88567 C.isub(A);
88568 D.isub(B);
88569 }
88570 }
88571
88572 return {
88573 a: C,
88574 b: D,
88575 gcd: y.iushln(g)
88576 };
88577 };
88578
88579 // This is reduced incarnation of the binary EEA
88580 // above, designated to invert members of the
88581 // _prime_ fields F(p) at a maximal speed
88582 BN.prototype._invmp = function _invmp (p) {
88583 assert(p.negative === 0);
88584 assert(!p.isZero());
88585
88586 var a = this;
88587 var b = p.clone();
88588
88589 if (a.negative !== 0) {
88590 a = a.umod(p);
88591 } else {
88592 a = a.clone();
88593 }
88594
88595 var x1 = new BN(1);
88596 var x2 = new BN(0);
88597
88598 var delta = b.clone();
88599
88600 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
88601 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88602 if (i > 0) {
88603 a.iushrn(i);
88604 while (i-- > 0) {
88605 if (x1.isOdd()) {
88606 x1.iadd(delta);
88607 }
88608
88609 x1.iushrn(1);
88610 }
88611 }
88612
88613 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88614 if (j > 0) {
88615 b.iushrn(j);
88616 while (j-- > 0) {
88617 if (x2.isOdd()) {
88618 x2.iadd(delta);
88619 }
88620
88621 x2.iushrn(1);
88622 }
88623 }
88624
88625 if (a.cmp(b) >= 0) {
88626 a.isub(b);
88627 x1.isub(x2);
88628 } else {
88629 b.isub(a);
88630 x2.isub(x1);
88631 }
88632 }
88633
88634 var res;
88635 if (a.cmpn(1) === 0) {
88636 res = x1;
88637 } else {
88638 res = x2;
88639 }
88640
88641 if (res.cmpn(0) < 0) {
88642 res.iadd(p);
88643 }
88644
88645 return res;
88646 };
88647
88648 BN.prototype.gcd = function gcd (num) {
88649 if (this.isZero()) return num.abs();
88650 if (num.isZero()) return this.abs();
88651
88652 var a = this.clone();
88653 var b = num.clone();
88654 a.negative = 0;
88655 b.negative = 0;
88656
88657 // Remove common factor of two
88658 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
88659 a.iushrn(1);
88660 b.iushrn(1);
88661 }
88662
88663 do {
88664 while (a.isEven()) {
88665 a.iushrn(1);
88666 }
88667 while (b.isEven()) {
88668 b.iushrn(1);
88669 }
88670
88671 var r = a.cmp(b);
88672 if (r < 0) {
88673 // Swap `a` and `b` to make `a` always bigger than `b`
88674 var t = a;
88675 a = b;
88676 b = t;
88677 } else if (r === 0 || b.cmpn(1) === 0) {
88678 break;
88679 }
88680
88681 a.isub(b);
88682 } while (true);
88683
88684 return b.iushln(shift);
88685 };
88686
88687 // Invert number in the field F(num)
88688 BN.prototype.invm = function invm (num) {
88689 return this.egcd(num).a.umod(num);
88690 };
88691
88692 BN.prototype.isEven = function isEven () {
88693 return (this.words[0] & 1) === 0;
88694 };
88695
88696 BN.prototype.isOdd = function isOdd () {
88697 return (this.words[0] & 1) === 1;
88698 };
88699
88700 // And first word and num
88701 BN.prototype.andln = function andln (num) {
88702 return this.words[0] & num;
88703 };
88704
88705 // Increment at the bit position in-line
88706 BN.prototype.bincn = function bincn (bit) {
88707 assert(typeof bit === 'number');
88708 var r = bit % 26;
88709 var s = (bit - r) / 26;
88710 var q = 1 << r;
88711
88712 // Fast case: bit is much higher than all existing words
88713 if (this.length <= s) {
88714 this._expand(s + 1);
88715 this.words[s] |= q;
88716 return this;
88717 }
88718
88719 // Add bit and propagate, if needed
88720 var carry = q;
88721 for (var i = s; carry !== 0 && i < this.length; i++) {
88722 var w = this.words[i] | 0;
88723 w += carry;
88724 carry = w >>> 26;
88725 w &= 0x3ffffff;
88726 this.words[i] = w;
88727 }
88728 if (carry !== 0) {
88729 this.words[i] = carry;
88730 this.length++;
88731 }
88732 return this;
88733 };
88734
88735 BN.prototype.isZero = function isZero () {
88736 return this.length === 1 && this.words[0] === 0;
88737 };
88738
88739 BN.prototype.cmpn = function cmpn (num) {
88740 var negative = num < 0;
88741
88742 if (this.negative !== 0 && !negative) return -1;
88743 if (this.negative === 0 && negative) return 1;
88744
88745 this.strip();
88746
88747 var res;
88748 if (this.length > 1) {
88749 res = 1;
88750 } else {
88751 if (negative) {
88752 num = -num;
88753 }
88754
88755 assert(num <= 0x3ffffff, 'Number is too big');
88756
88757 var w = this.words[0] | 0;
88758 res = w === num ? 0 : w < num ? -1 : 1;
88759 }
88760 if (this.negative !== 0) return -res | 0;
88761 return res;
88762 };
88763
88764 // Compare two numbers and return:
88765 // 1 - if `this` > `num`
88766 // 0 - if `this` == `num`
88767 // -1 - if `this` < `num`
88768 BN.prototype.cmp = function cmp (num) {
88769 if (this.negative !== 0 && num.negative === 0) return -1;
88770 if (this.negative === 0 && num.negative !== 0) return 1;
88771
88772 var res = this.ucmp(num);
88773 if (this.negative !== 0) return -res | 0;
88774 return res;
88775 };
88776
88777 // Unsigned comparison
88778 BN.prototype.ucmp = function ucmp (num) {
88779 // At this point both numbers have the same sign
88780 if (this.length > num.length) return 1;
88781 if (this.length < num.length) return -1;
88782
88783 var res = 0;
88784 for (var i = this.length - 1; i >= 0; i--) {
88785 var a = this.words[i] | 0;
88786 var b = num.words[i] | 0;
88787
88788 if (a === b) continue;
88789 if (a < b) {
88790 res = -1;
88791 } else if (a > b) {
88792 res = 1;
88793 }
88794 break;
88795 }
88796 return res;
88797 };
88798
88799 BN.prototype.gtn = function gtn (num) {
88800 return this.cmpn(num) === 1;
88801 };
88802
88803 BN.prototype.gt = function gt (num) {
88804 return this.cmp(num) === 1;
88805 };
88806
88807 BN.prototype.gten = function gten (num) {
88808 return this.cmpn(num) >= 0;
88809 };
88810
88811 BN.prototype.gte = function gte (num) {
88812 return this.cmp(num) >= 0;
88813 };
88814
88815 BN.prototype.ltn = function ltn (num) {
88816 return this.cmpn(num) === -1;
88817 };
88818
88819 BN.prototype.lt = function lt (num) {
88820 return this.cmp(num) === -1;
88821 };
88822
88823 BN.prototype.lten = function lten (num) {
88824 return this.cmpn(num) <= 0;
88825 };
88826
88827 BN.prototype.lte = function lte (num) {
88828 return this.cmp(num) <= 0;
88829 };
88830
88831 BN.prototype.eqn = function eqn (num) {
88832 return this.cmpn(num) === 0;
88833 };
88834
88835 BN.prototype.eq = function eq (num) {
88836 return this.cmp(num) === 0;
88837 };
88838
88839 //
88840 // A reduce context, could be using montgomery or something better, depending
88841 // on the `m` itself.
88842 //
88843 BN.red = function red (num) {
88844 return new Red(num);
88845 };
88846
88847 BN.prototype.toRed = function toRed (ctx) {
88848 assert(!this.red, 'Already a number in reduction context');
88849 assert(this.negative === 0, 'red works only with positives');
88850 return ctx.convertTo(this)._forceRed(ctx);
88851 };
88852
88853 BN.prototype.fromRed = function fromRed () {
88854 assert(this.red, 'fromRed works only with numbers in reduction context');
88855 return this.red.convertFrom(this);
88856 };
88857
88858 BN.prototype._forceRed = function _forceRed (ctx) {
88859 this.red = ctx;
88860 return this;
88861 };
88862
88863 BN.prototype.forceRed = function forceRed (ctx) {
88864 assert(!this.red, 'Already a number in reduction context');
88865 return this._forceRed(ctx);
88866 };
88867
88868 BN.prototype.redAdd = function redAdd (num) {
88869 assert(this.red, 'redAdd works only with red numbers');
88870 return this.red.add(this, num);
88871 };
88872
88873 BN.prototype.redIAdd = function redIAdd (num) {
88874 assert(this.red, 'redIAdd works only with red numbers');
88875 return this.red.iadd(this, num);
88876 };
88877
88878 BN.prototype.redSub = function redSub (num) {
88879 assert(this.red, 'redSub works only with red numbers');
88880 return this.red.sub(this, num);
88881 };
88882
88883 BN.prototype.redISub = function redISub (num) {
88884 assert(this.red, 'redISub works only with red numbers');
88885 return this.red.isub(this, num);
88886 };
88887
88888 BN.prototype.redShl = function redShl (num) {
88889 assert(this.red, 'redShl works only with red numbers');
88890 return this.red.shl(this, num);
88891 };
88892
88893 BN.prototype.redMul = function redMul (num) {
88894 assert(this.red, 'redMul works only with red numbers');
88895 this.red._verify2(this, num);
88896 return this.red.mul(this, num);
88897 };
88898
88899 BN.prototype.redIMul = function redIMul (num) {
88900 assert(this.red, 'redMul works only with red numbers');
88901 this.red._verify2(this, num);
88902 return this.red.imul(this, num);
88903 };
88904
88905 BN.prototype.redSqr = function redSqr () {
88906 assert(this.red, 'redSqr works only with red numbers');
88907 this.red._verify1(this);
88908 return this.red.sqr(this);
88909 };
88910
88911 BN.prototype.redISqr = function redISqr () {
88912 assert(this.red, 'redISqr works only with red numbers');
88913 this.red._verify1(this);
88914 return this.red.isqr(this);
88915 };
88916
88917 // Square root over p
88918 BN.prototype.redSqrt = function redSqrt () {
88919 assert(this.red, 'redSqrt works only with red numbers');
88920 this.red._verify1(this);
88921 return this.red.sqrt(this);
88922 };
88923
88924 BN.prototype.redInvm = function redInvm () {
88925 assert(this.red, 'redInvm works only with red numbers');
88926 this.red._verify1(this);
88927 return this.red.invm(this);
88928 };
88929
88930 // Return negative clone of `this` % `red modulo`
88931 BN.prototype.redNeg = function redNeg () {
88932 assert(this.red, 'redNeg works only with red numbers');
88933 this.red._verify1(this);
88934 return this.red.neg(this);
88935 };
88936
88937 BN.prototype.redPow = function redPow (num) {
88938 assert(this.red && !num.red, 'redPow(normalNum)');
88939 this.red._verify1(this);
88940 return this.red.pow(this, num);
88941 };
88942
88943 // Prime numbers with efficient reduction
88944 var primes = {
88945 k256: null,
88946 p224: null,
88947 p192: null,
88948 p25519: null
88949 };
88950
88951 // Pseudo-Mersenne prime
88952 function MPrime (name, p) {
88953 // P = 2 ^ N - K
88954 this.name = name;
88955 this.p = new BN(p, 16);
88956 this.n = this.p.bitLength();
88957 this.k = new BN(1).iushln(this.n).isub(this.p);
88958
88959 this.tmp = this._tmp();
88960 }
88961
88962 MPrime.prototype._tmp = function _tmp () {
88963 var tmp = new BN(null);
88964 tmp.words = new Array(Math.ceil(this.n / 13));
88965 return tmp;
88966 };
88967
88968 MPrime.prototype.ireduce = function ireduce (num) {
88969 // Assumes that `num` is less than `P^2`
88970 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
88971 var r = num;
88972 var rlen;
88973
88974 do {
88975 this.split(r, this.tmp);
88976 r = this.imulK(r);
88977 r = r.iadd(this.tmp);
88978 rlen = r.bitLength();
88979 } while (rlen > this.n);
88980
88981 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
88982 if (cmp === 0) {
88983 r.words[0] = 0;
88984 r.length = 1;
88985 } else if (cmp > 0) {
88986 r.isub(this.p);
88987 } else {
88988 r.strip();
88989 }
88990
88991 return r;
88992 };
88993
88994 MPrime.prototype.split = function split (input, out) {
88995 input.iushrn(this.n, 0, out);
88996 };
88997
88998 MPrime.prototype.imulK = function imulK (num) {
88999 return num.imul(this.k);
89000 };
89001
89002 function K256 () {
89003 MPrime.call(
89004 this,
89005 'k256',
89006 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
89007 }
89008 inherits(K256, MPrime);
89009
89010 K256.prototype.split = function split (input, output) {
89011 // 256 = 9 * 26 + 22
89012 var mask = 0x3fffff;
89013
89014 var outLen = Math.min(input.length, 9);
89015 for (var i = 0; i < outLen; i++) {
89016 output.words[i] = input.words[i];
89017 }
89018 output.length = outLen;
89019
89020 if (input.length <= 9) {
89021 input.words[0] = 0;
89022 input.length = 1;
89023 return;
89024 }
89025
89026 // Shift by 9 limbs
89027 var prev = input.words[9];
89028 output.words[output.length++] = prev & mask;
89029
89030 for (i = 10; i < input.length; i++) {
89031 var next = input.words[i] | 0;
89032 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
89033 prev = next;
89034 }
89035 prev >>>= 22;
89036 input.words[i - 10] = prev;
89037 if (prev === 0 && input.length > 10) {
89038 input.length -= 10;
89039 } else {
89040 input.length -= 9;
89041 }
89042 };
89043
89044 K256.prototype.imulK = function imulK (num) {
89045 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
89046 num.words[num.length] = 0;
89047 num.words[num.length + 1] = 0;
89048 num.length += 2;
89049
89050 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
89051 var lo = 0;
89052 for (var i = 0; i < num.length; i++) {
89053 var w = num.words[i] | 0;
89054 lo += w * 0x3d1;
89055 num.words[i] = lo & 0x3ffffff;
89056 lo = w * 0x40 + ((lo / 0x4000000) | 0);
89057 }
89058
89059 // Fast length reduction
89060 if (num.words[num.length - 1] === 0) {
89061 num.length--;
89062 if (num.words[num.length - 1] === 0) {
89063 num.length--;
89064 }
89065 }
89066 return num;
89067 };
89068
89069 function P224 () {
89070 MPrime.call(
89071 this,
89072 'p224',
89073 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
89074 }
89075 inherits(P224, MPrime);
89076
89077 function P192 () {
89078 MPrime.call(
89079 this,
89080 'p192',
89081 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
89082 }
89083 inherits(P192, MPrime);
89084
89085 function P25519 () {
89086 // 2 ^ 255 - 19
89087 MPrime.call(
89088 this,
89089 '25519',
89090 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
89091 }
89092 inherits(P25519, MPrime);
89093
89094 P25519.prototype.imulK = function imulK (num) {
89095 // K = 0x13
89096 var carry = 0;
89097 for (var i = 0; i < num.length; i++) {
89098 var hi = (num.words[i] | 0) * 0x13 + carry;
89099 var lo = hi & 0x3ffffff;
89100 hi >>>= 26;
89101
89102 num.words[i] = lo;
89103 carry = hi;
89104 }
89105 if (carry !== 0) {
89106 num.words[num.length++] = carry;
89107 }
89108 return num;
89109 };
89110
89111 // Exported mostly for testing purposes, use plain name instead
89112 BN._prime = function prime (name) {
89113 // Cached version of prime
89114 if (primes[name]) return primes[name];
89115
89116 var prime;
89117 if (name === 'k256') {
89118 prime = new K256();
89119 } else if (name === 'p224') {
89120 prime = new P224();
89121 } else if (name === 'p192') {
89122 prime = new P192();
89123 } else if (name === 'p25519') {
89124 prime = new P25519();
89125 } else {
89126 throw new Error('Unknown prime ' + name);
89127 }
89128 primes[name] = prime;
89129
89130 return prime;
89131 };
89132
89133 //
89134 // Base reduction engine
89135 //
89136 function Red (m) {
89137 if (typeof m === 'string') {
89138 var prime = BN._prime(m);
89139 this.m = prime.p;
89140 this.prime = prime;
89141 } else {
89142 assert(m.gtn(1), 'modulus must be greater than 1');
89143 this.m = m;
89144 this.prime = null;
89145 }
89146 }
89147
89148 Red.prototype._verify1 = function _verify1 (a) {
89149 assert(a.negative === 0, 'red works only with positives');
89150 assert(a.red, 'red works only with red numbers');
89151 };
89152
89153 Red.prototype._verify2 = function _verify2 (a, b) {
89154 assert((a.negative | b.negative) === 0, 'red works only with positives');
89155 assert(a.red && a.red === b.red,
89156 'red works only with red numbers');
89157 };
89158
89159 Red.prototype.imod = function imod (a) {
89160 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
89161 return a.umod(this.m)._forceRed(this);
89162 };
89163
89164 Red.prototype.neg = function neg (a) {
89165 if (a.isZero()) {
89166 return a.clone();
89167 }
89168
89169 return this.m.sub(a)._forceRed(this);
89170 };
89171
89172 Red.prototype.add = function add (a, b) {
89173 this._verify2(a, b);
89174
89175 var res = a.add(b);
89176 if (res.cmp(this.m) >= 0) {
89177 res.isub(this.m);
89178 }
89179 return res._forceRed(this);
89180 };
89181
89182 Red.prototype.iadd = function iadd (a, b) {
89183 this._verify2(a, b);
89184
89185 var res = a.iadd(b);
89186 if (res.cmp(this.m) >= 0) {
89187 res.isub(this.m);
89188 }
89189 return res;
89190 };
89191
89192 Red.prototype.sub = function sub (a, b) {
89193 this._verify2(a, b);
89194
89195 var res = a.sub(b);
89196 if (res.cmpn(0) < 0) {
89197 res.iadd(this.m);
89198 }
89199 return res._forceRed(this);
89200 };
89201
89202 Red.prototype.isub = function isub (a, b) {
89203 this._verify2(a, b);
89204
89205 var res = a.isub(b);
89206 if (res.cmpn(0) < 0) {
89207 res.iadd(this.m);
89208 }
89209 return res;
89210 };
89211
89212 Red.prototype.shl = function shl (a, num) {
89213 this._verify1(a);
89214 return this.imod(a.ushln(num));
89215 };
89216
89217 Red.prototype.imul = function imul (a, b) {
89218 this._verify2(a, b);
89219 return this.imod(a.imul(b));
89220 };
89221
89222 Red.prototype.mul = function mul (a, b) {
89223 this._verify2(a, b);
89224 return this.imod(a.mul(b));
89225 };
89226
89227 Red.prototype.isqr = function isqr (a) {
89228 return this.imul(a, a.clone());
89229 };
89230
89231 Red.prototype.sqr = function sqr (a) {
89232 return this.mul(a, a);
89233 };
89234
89235 Red.prototype.sqrt = function sqrt (a) {
89236 if (a.isZero()) return a.clone();
89237
89238 var mod3 = this.m.andln(3);
89239 assert(mod3 % 2 === 1);
89240
89241 // Fast case
89242 if (mod3 === 3) {
89243 var pow = this.m.add(new BN(1)).iushrn(2);
89244 return this.pow(a, pow);
89245 }
89246
89247 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
89248 //
89249 // Find Q and S, that Q * 2 ^ S = (P - 1)
89250 var q = this.m.subn(1);
89251 var s = 0;
89252 while (!q.isZero() && q.andln(1) === 0) {
89253 s++;
89254 q.iushrn(1);
89255 }
89256 assert(!q.isZero());
89257
89258 var one = new BN(1).toRed(this);
89259 var nOne = one.redNeg();
89260
89261 // Find quadratic non-residue
89262 // NOTE: Max is such because of generalized Riemann hypothesis.
89263 var lpow = this.m.subn(1).iushrn(1);
89264 var z = this.m.bitLength();
89265 z = new BN(2 * z * z).toRed(this);
89266
89267 while (this.pow(z, lpow).cmp(nOne) !== 0) {
89268 z.redIAdd(nOne);
89269 }
89270
89271 var c = this.pow(z, q);
89272 var r = this.pow(a, q.addn(1).iushrn(1));
89273 var t = this.pow(a, q);
89274 var m = s;
89275 while (t.cmp(one) !== 0) {
89276 var tmp = t;
89277 for (var i = 0; tmp.cmp(one) !== 0; i++) {
89278 tmp = tmp.redSqr();
89279 }
89280 assert(i < m);
89281 var b = this.pow(c, new BN(1).iushln(m - i - 1));
89282
89283 r = r.redMul(b);
89284 c = b.redSqr();
89285 t = t.redMul(c);
89286 m = i;
89287 }
89288
89289 return r;
89290 };
89291
89292 Red.prototype.invm = function invm (a) {
89293 var inv = a._invmp(this.m);
89294 if (inv.negative !== 0) {
89295 inv.negative = 0;
89296 return this.imod(inv).redNeg();
89297 } else {
89298 return this.imod(inv);
89299 }
89300 };
89301
89302 Red.prototype.pow = function pow (a, num) {
89303 if (num.isZero()) return new BN(1);
89304 if (num.cmpn(1) === 0) return a.clone();
89305
89306 var windowSize = 4;
89307 var wnd = new Array(1 << windowSize);
89308 wnd[0] = new BN(1).toRed(this);
89309 wnd[1] = a;
89310 for (var i = 2; i < wnd.length; i++) {
89311 wnd[i] = this.mul(wnd[i - 1], a);
89312 }
89313
89314 var res = wnd[0];
89315 var current = 0;
89316 var currentLen = 0;
89317 var start = num.bitLength() % 26;
89318 if (start === 0) {
89319 start = 26;
89320 }
89321
89322 for (i = num.length - 1; i >= 0; i--) {
89323 var word = num.words[i];
89324 for (var j = start - 1; j >= 0; j--) {
89325 var bit = (word >> j) & 1;
89326 if (res !== wnd[0]) {
89327 res = this.sqr(res);
89328 }
89329
89330 if (bit === 0 && current === 0) {
89331 currentLen = 0;
89332 continue;
89333 }
89334
89335 current <<= 1;
89336 current |= bit;
89337 currentLen++;
89338 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
89339
89340 res = this.mul(res, wnd[current]);
89341 currentLen = 0;
89342 current = 0;
89343 }
89344 start = 26;
89345 }
89346
89347 return res;
89348 };
89349
89350 Red.prototype.convertTo = function convertTo (num) {
89351 var r = num.umod(this.m);
89352
89353 return r === num ? r.clone() : r;
89354 };
89355
89356 Red.prototype.convertFrom = function convertFrom (num) {
89357 var res = num.clone();
89358 res.red = null;
89359 return res;
89360 };
89361
89362 //
89363 // Montgomery method engine
89364 //
89365
89366 BN.mont = function mont (num) {
89367 return new Mont(num);
89368 };
89369
89370 function Mont (m) {
89371 Red.call(this, m);
89372
89373 this.shift = this.m.bitLength();
89374 if (this.shift % 26 !== 0) {
89375 this.shift += 26 - (this.shift % 26);
89376 }
89377
89378 this.r = new BN(1).iushln(this.shift);
89379 this.r2 = this.imod(this.r.sqr());
89380 this.rinv = this.r._invmp(this.m);
89381
89382 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
89383 this.minv = this.minv.umod(this.r);
89384 this.minv = this.r.sub(this.minv);
89385 }
89386 inherits(Mont, Red);
89387
89388 Mont.prototype.convertTo = function convertTo (num) {
89389 return this.imod(num.ushln(this.shift));
89390 };
89391
89392 Mont.prototype.convertFrom = function convertFrom (num) {
89393 var r = this.imod(num.mul(this.rinv));
89394 r.red = null;
89395 return r;
89396 };
89397
89398 Mont.prototype.imul = function imul (a, b) {
89399 if (a.isZero() || b.isZero()) {
89400 a.words[0] = 0;
89401 a.length = 1;
89402 return a;
89403 }
89404
89405 var t = a.imul(b);
89406 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89407 var u = t.isub(c).iushrn(this.shift);
89408 var res = u;
89409
89410 if (u.cmp(this.m) >= 0) {
89411 res = u.isub(this.m);
89412 } else if (u.cmpn(0) < 0) {
89413 res = u.iadd(this.m);
89414 }
89415
89416 return res._forceRed(this);
89417 };
89418
89419 Mont.prototype.mul = function mul (a, b) {
89420 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
89421
89422 var t = a.mul(b);
89423 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89424 var u = t.isub(c).iushrn(this.shift);
89425 var res = u;
89426 if (u.cmp(this.m) >= 0) {
89427 res = u.isub(this.m);
89428 } else if (u.cmpn(0) < 0) {
89429 res = u.iadd(this.m);
89430 }
89431
89432 return res._forceRed(this);
89433 };
89434
89435 Mont.prototype.invm = function invm (a) {
89436 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
89437 var res = this.imod(a._invmp(this.m).mul(this.r2));
89438 return res._forceRed(this);
89439 };
89440 })(typeof module === 'undefined' || module, this);
89441
89442 },{}],34:[function(require,module,exports){
89443 var r;
89444
89445 module.exports = function rand(len) {
89446 if (!r)
89447 r = new Rand(null);
89448
89449 return r.generate(len);
89450 };
89451
89452 function Rand(rand) {
89453 this.rand = rand;
89454 }
89455 module.exports.Rand = Rand;
89456
89457 Rand.prototype.generate = function generate(len) {
89458 return this._rand(len);
89459 };
89460
89461 if (typeof self === 'object') {
89462 if (self.crypto && self.crypto.getRandomValues) {
89463 // Modern browsers
89464 Rand.prototype._rand = function _rand(n) {
89465 var arr = new Uint8Array(n);
89466 self.crypto.getRandomValues(arr);
89467 return arr;
89468 };
89469 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
89470 // IE
89471 Rand.prototype._rand = function _rand(n) {
89472 var arr = new Uint8Array(n);
89473 self.msCrypto.getRandomValues(arr);
89474 return arr;
89475 };
89476 } else {
89477 // Old junk
89478 Rand.prototype._rand = function() {
89479 throw new Error('Not implemented yet');
89480 };
89481 }
89482 } else {
89483 // Node.js or Web worker with no crypto support
89484 try {
89485 var crypto = require('crypto');
89486
89487 Rand.prototype._rand = function _rand(n) {
89488 return crypto.randomBytes(n);
89489 };
89490 } catch (e) {
89491 // Emulate crypto API using randy
89492 Rand.prototype._rand = function _rand(n) {
89493 var res = new Uint8Array(n);
89494 for (var i = 0; i < res.length; i++)
89495 res[i] = this.rand.getByte();
89496 return res;
89497 };
89498 }
89499 }
89500
89501 },{"crypto":3}],35:[function(require,module,exports){
89502 (function (Buffer){
89503 var Transform = require('stream').Transform
89504 var inherits = require('inherits')
89505 var StringDecoder = require('string_decoder').StringDecoder
89506 module.exports = CipherBase
89507 inherits(CipherBase, Transform)
89508 function CipherBase (hashMode) {
89509 Transform.call(this)
89510 this.hashMode = typeof hashMode === 'string'
89511 if (this.hashMode) {
89512 this[hashMode] = this._finalOrDigest
89513 } else {
89514 this.final = this._finalOrDigest
89515 }
89516 this._decoder = null
89517 this._encoding = null
89518 }
89519 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
89520 if (typeof data === 'string') {
89521 data = new Buffer(data, inputEnc)
89522 }
89523 var outData = this._update(data)
89524 if (this.hashMode) {
89525 return this
89526 }
89527 if (outputEnc) {
89528 outData = this._toString(outData, outputEnc)
89529 }
89530 return outData
89531 }
89532
89533 CipherBase.prototype.setAutoPadding = function () {}
89534
89535 CipherBase.prototype.getAuthTag = function () {
89536 throw new Error('trying to get auth tag in unsupported state')
89537 }
89538
89539 CipherBase.prototype.setAuthTag = function () {
89540 throw new Error('trying to set auth tag in unsupported state')
89541 }
89542
89543 CipherBase.prototype.setAAD = function () {
89544 throw new Error('trying to set aad in unsupported state')
89545 }
89546
89547 CipherBase.prototype._transform = function (data, _, next) {
89548 var err
89549 try {
89550 if (this.hashMode) {
89551 this._update(data)
89552 } else {
89553 this.push(this._update(data))
89554 }
89555 } catch (e) {
89556 err = e
89557 } finally {
89558 next(err)
89559 }
89560 }
89561 CipherBase.prototype._flush = function (done) {
89562 var err
89563 try {
89564 this.push(this._final())
89565 } catch (e) {
89566 err = e
89567 } finally {
89568 done(err)
89569 }
89570 }
89571 CipherBase.prototype._finalOrDigest = function (outputEnc) {
89572 var outData = this._final() || new Buffer('')
89573 if (outputEnc) {
89574 outData = this._toString(outData, outputEnc, true)
89575 }
89576 return outData
89577 }
89578
89579 CipherBase.prototype._toString = function (value, enc, fin) {
89580 if (!this._decoder) {
89581 this._decoder = new StringDecoder(enc)
89582 this._encoding = enc
89583 }
89584 if (this._encoding !== enc) {
89585 throw new Error('can\'t switch encodings')
89586 }
89587 var out = this._decoder.write(value)
89588 if (fin) {
89589 out += this._decoder.end()
89590 }
89591 return out
89592 }
89593
89594 }).call(this,require("buffer").Buffer)
89595 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
89596 (function (Buffer){
89597 'use strict';
89598 var inherits = require('inherits')
89599 var md5 = require('./md5')
89600 var rmd160 = require('ripemd160')
89601 var sha = require('sha.js')
89602
89603 var Base = require('cipher-base')
89604
89605 function HashNoConstructor(hash) {
89606 Base.call(this, 'digest')
89607
89608 this._hash = hash
89609 this.buffers = []
89610 }
89611
89612 inherits(HashNoConstructor, Base)
89613
89614 HashNoConstructor.prototype._update = function (data) {
89615 this.buffers.push(data)
89616 }
89617
89618 HashNoConstructor.prototype._final = function () {
89619 var buf = Buffer.concat(this.buffers)
89620 var r = this._hash(buf)
89621 this.buffers = null
89622
89623 return r
89624 }
89625
89626 function Hash(hash) {
89627 Base.call(this, 'digest')
89628
89629 this._hash = hash
89630 }
89631
89632 inherits(Hash, Base)
89633
89634 Hash.prototype._update = function (data) {
89635 this._hash.update(data)
89636 }
89637
89638 Hash.prototype._final = function () {
89639 return this._hash.digest()
89640 }
89641
89642 module.exports = function createHash (alg) {
89643 alg = alg.toLowerCase()
89644 if ('md5' === alg) return new HashNoConstructor(md5)
89645 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
89646
89647 return new Hash(sha(alg))
89648 }
89649
89650 }).call(this,require("buffer").Buffer)
89651 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
89652 (function (Buffer){
89653 'use strict';
89654 var intSize = 4;
89655 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
89656 var chrsz = 8;
89657
89658 function toArray(buf, bigEndian) {
89659 if ((buf.length % intSize) !== 0) {
89660 var len = buf.length + (intSize - (buf.length % intSize));
89661 buf = Buffer.concat([buf, zeroBuffer], len);
89662 }
89663
89664 var arr = [];
89665 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
89666 for (var i = 0; i < buf.length; i += intSize) {
89667 arr.push(fn.call(buf, i));
89668 }
89669 return arr;
89670 }
89671
89672 function toBuffer(arr, size, bigEndian) {
89673 var buf = new Buffer(size);
89674 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
89675 for (var i = 0; i < arr.length; i++) {
89676 fn.call(buf, arr[i], i * 4, true);
89677 }
89678 return buf;
89679 }
89680
89681 function hash(buf, fn, hashSize, bigEndian) {
89682 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
89683 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
89684 return toBuffer(arr, hashSize, bigEndian);
89685 }
89686 exports.hash = hash;
89687 }).call(this,require("buffer").Buffer)
89688 },{"buffer":5}],38:[function(require,module,exports){
89689 'use strict';
89690 /*
89691 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
89692 * Digest Algorithm, as defined in RFC 1321.
89693 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
89694 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89695 * Distributed under the BSD License
89696 * See http://pajhome.org.uk/crypt/md5 for more info.
89697 */
89698
89699 var helpers = require('./helpers');
89700
89701 /*
89702 * Calculate the MD5 of an array of little-endian words, and a bit length
89703 */
89704 function core_md5(x, len)
89705 {
89706 /* append padding */
89707 x[len >> 5] |= 0x80 << ((len) % 32);
89708 x[(((len + 64) >>> 9) << 4) + 14] = len;
89709
89710 var a = 1732584193;
89711 var b = -271733879;
89712 var c = -1732584194;
89713 var d = 271733878;
89714
89715 for(var i = 0; i < x.length; i += 16)
89716 {
89717 var olda = a;
89718 var oldb = b;
89719 var oldc = c;
89720 var oldd = d;
89721
89722 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
89723 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
89724 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
89725 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
89726 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
89727 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
89728 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
89729 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
89730 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
89731 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
89732 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
89733 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
89734 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
89735 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
89736 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
89737 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
89738
89739 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
89740 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
89741 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
89742 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
89743 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
89744 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
89745 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
89746 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
89747 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
89748 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
89749 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
89750 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
89751 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
89752 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
89753 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
89754 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
89755
89756 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
89757 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
89758 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
89759 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
89760 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
89761 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
89762 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
89763 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
89764 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
89765 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
89766 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
89767 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
89768 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
89769 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
89770 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
89771 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
89772
89773 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
89774 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
89775 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
89776 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
89777 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
89778 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
89779 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
89780 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
89781 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
89782 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
89783 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
89784 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
89785 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
89786 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
89787 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
89788 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
89789
89790 a = safe_add(a, olda);
89791 b = safe_add(b, oldb);
89792 c = safe_add(c, oldc);
89793 d = safe_add(d, oldd);
89794 }
89795 return Array(a, b, c, d);
89796
89797 }
89798
89799 /*
89800 * These functions implement the four basic operations the algorithm uses.
89801 */
89802 function md5_cmn(q, a, b, x, s, t)
89803 {
89804 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
89805 }
89806 function md5_ff(a, b, c, d, x, s, t)
89807 {
89808 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
89809 }
89810 function md5_gg(a, b, c, d, x, s, t)
89811 {
89812 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
89813 }
89814 function md5_hh(a, b, c, d, x, s, t)
89815 {
89816 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
89817 }
89818 function md5_ii(a, b, c, d, x, s, t)
89819 {
89820 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
89821 }
89822
89823 /*
89824 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
89825 * to work around bugs in some JS interpreters.
89826 */
89827 function safe_add(x, y)
89828 {
89829 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
89830 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
89831 return (msw << 16) | (lsw & 0xFFFF);
89832 }
89833
89834 /*
89835 * Bitwise rotate a 32-bit number to the left.
89836 */
89837 function bit_rol(num, cnt)
89838 {
89839 return (num << cnt) | (num >>> (32 - cnt));
89840 }
89841
89842 module.exports = function md5(buf) {
89843 return helpers.hash(buf, core_md5, 16);
89844 };
89845 },{"./helpers":37}],39:[function(require,module,exports){
89846 'use strict';
89847
89848 var elliptic = exports;
89849
89850 elliptic.version = require('../package.json').version;
89851 elliptic.utils = require('./elliptic/utils');
89852 elliptic.rand = require('brorand');
89853 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
89854 elliptic.curve = require('./elliptic/curve');
89855 elliptic.curves = require('./elliptic/curves');
89856
89857 // Protocols
89858 elliptic.ec = require('./elliptic/ec');
89859 elliptic.eddsa = require('./elliptic/eddsa');
89860
89861 },{"../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){
89862 'use strict';
89863
89864 var BN = require('bn.js');
89865 var elliptic = require('../../elliptic');
89866 var utils = elliptic.utils;
89867 var getNAF = utils.getNAF;
89868 var getJSF = utils.getJSF;
89869 var assert = utils.assert;
89870
89871 function BaseCurve(type, conf) {
89872 this.type = type;
89873 this.p = new BN(conf.p, 16);
89874
89875 // Use Montgomery, when there is no fast reduction for the prime
89876 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
89877
89878 // Useful for many curves
89879 this.zero = new BN(0).toRed(this.red);
89880 this.one = new BN(1).toRed(this.red);
89881 this.two = new BN(2).toRed(this.red);
89882
89883 // Curve configuration, optional
89884 this.n = conf.n && new BN(conf.n, 16);
89885 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
89886
89887 // Temporary arrays
89888 this._wnafT1 = new Array(4);
89889 this._wnafT2 = new Array(4);
89890 this._wnafT3 = new Array(4);
89891 this._wnafT4 = new Array(4);
89892
89893 // Generalized Greg Maxwell's trick
89894 var adjustCount = this.n && this.p.div(this.n);
89895 if (!adjustCount || adjustCount.cmpn(100) > 0) {
89896 this.redN = null;
89897 } else {
89898 this._maxwellTrick = true;
89899 this.redN = this.n.toRed(this.red);
89900 }
89901 }
89902 module.exports = BaseCurve;
89903
89904 BaseCurve.prototype.point = function point() {
89905 throw new Error('Not implemented');
89906 };
89907
89908 BaseCurve.prototype.validate = function validate() {
89909 throw new Error('Not implemented');
89910 };
89911
89912 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
89913 assert(p.precomputed);
89914 var doubles = p._getDoubles();
89915
89916 var naf = getNAF(k, 1);
89917 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
89918 I /= 3;
89919
89920 // Translate into more windowed form
89921 var repr = [];
89922 for (var j = 0; j < naf.length; j += doubles.step) {
89923 var nafW = 0;
89924 for (var k = j + doubles.step - 1; k >= j; k--)
89925 nafW = (nafW << 1) + naf[k];
89926 repr.push(nafW);
89927 }
89928
89929 var a = this.jpoint(null, null, null);
89930 var b = this.jpoint(null, null, null);
89931 for (var i = I; i > 0; i--) {
89932 for (var j = 0; j < repr.length; j++) {
89933 var nafW = repr[j];
89934 if (nafW === i)
89935 b = b.mixedAdd(doubles.points[j]);
89936 else if (nafW === -i)
89937 b = b.mixedAdd(doubles.points[j].neg());
89938 }
89939 a = a.add(b);
89940 }
89941 return a.toP();
89942 };
89943
89944 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
89945 var w = 4;
89946
89947 // Precompute window
89948 var nafPoints = p._getNAFPoints(w);
89949 w = nafPoints.wnd;
89950 var wnd = nafPoints.points;
89951
89952 // Get NAF form
89953 var naf = getNAF(k, w);
89954
89955 // Add `this`*(N+1) for every w-NAF index
89956 var acc = this.jpoint(null, null, null);
89957 for (var i = naf.length - 1; i >= 0; i--) {
89958 // Count zeroes
89959 for (var k = 0; i >= 0 && naf[i] === 0; i--)
89960 k++;
89961 if (i >= 0)
89962 k++;
89963 acc = acc.dblp(k);
89964
89965 if (i < 0)
89966 break;
89967 var z = naf[i];
89968 assert(z !== 0);
89969 if (p.type === 'affine') {
89970 // J +- P
89971 if (z > 0)
89972 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
89973 else
89974 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
89975 } else {
89976 // J +- J
89977 if (z > 0)
89978 acc = acc.add(wnd[(z - 1) >> 1]);
89979 else
89980 acc = acc.add(wnd[(-z - 1) >> 1].neg());
89981 }
89982 }
89983 return p.type === 'affine' ? acc.toP() : acc;
89984 };
89985
89986 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
89987 points,
89988 coeffs,
89989 len,
89990 jacobianResult) {
89991 var wndWidth = this._wnafT1;
89992 var wnd = this._wnafT2;
89993 var naf = this._wnafT3;
89994
89995 // Fill all arrays
89996 var max = 0;
89997 for (var i = 0; i < len; i++) {
89998 var p = points[i];
89999 var nafPoints = p._getNAFPoints(defW);
90000 wndWidth[i] = nafPoints.wnd;
90001 wnd[i] = nafPoints.points;
90002 }
90003
90004 // Comb small window NAFs
90005 for (var i = len - 1; i >= 1; i -= 2) {
90006 var a = i - 1;
90007 var b = i;
90008 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
90009 naf[a] = getNAF(coeffs[a], wndWidth[a]);
90010 naf[b] = getNAF(coeffs[b], wndWidth[b]);
90011 max = Math.max(naf[a].length, max);
90012 max = Math.max(naf[b].length, max);
90013 continue;
90014 }
90015
90016 var comb = [
90017 points[a], /* 1 */
90018 null, /* 3 */
90019 null, /* 5 */
90020 points[b] /* 7 */
90021 ];
90022
90023 // Try to avoid Projective points, if possible
90024 if (points[a].y.cmp(points[b].y) === 0) {
90025 comb[1] = points[a].add(points[b]);
90026 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
90027 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
90028 comb[1] = points[a].toJ().mixedAdd(points[b]);
90029 comb[2] = points[a].add(points[b].neg());
90030 } else {
90031 comb[1] = points[a].toJ().mixedAdd(points[b]);
90032 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
90033 }
90034
90035 var index = [
90036 -3, /* -1 -1 */
90037 -1, /* -1 0 */
90038 -5, /* -1 1 */
90039 -7, /* 0 -1 */
90040 0, /* 0 0 */
90041 7, /* 0 1 */
90042 5, /* 1 -1 */
90043 1, /* 1 0 */
90044 3 /* 1 1 */
90045 ];
90046
90047 var jsf = getJSF(coeffs[a], coeffs[b]);
90048 max = Math.max(jsf[0].length, max);
90049 naf[a] = new Array(max);
90050 naf[b] = new Array(max);
90051 for (var j = 0; j < max; j++) {
90052 var ja = jsf[0][j] | 0;
90053 var jb = jsf[1][j] | 0;
90054
90055 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
90056 naf[b][j] = 0;
90057 wnd[a] = comb;
90058 }
90059 }
90060
90061 var acc = this.jpoint(null, null, null);
90062 var tmp = this._wnafT4;
90063 for (var i = max; i >= 0; i--) {
90064 var k = 0;
90065
90066 while (i >= 0) {
90067 var zero = true;
90068 for (var j = 0; j < len; j++) {
90069 tmp[j] = naf[j][i] | 0;
90070 if (tmp[j] !== 0)
90071 zero = false;
90072 }
90073 if (!zero)
90074 break;
90075 k++;
90076 i--;
90077 }
90078 if (i >= 0)
90079 k++;
90080 acc = acc.dblp(k);
90081 if (i < 0)
90082 break;
90083
90084 for (var j = 0; j < len; j++) {
90085 var z = tmp[j];
90086 var p;
90087 if (z === 0)
90088 continue;
90089 else if (z > 0)
90090 p = wnd[j][(z - 1) >> 1];
90091 else if (z < 0)
90092 p = wnd[j][(-z - 1) >> 1].neg();
90093
90094 if (p.type === 'affine')
90095 acc = acc.mixedAdd(p);
90096 else
90097 acc = acc.add(p);
90098 }
90099 }
90100 // Zeroify references
90101 for (var i = 0; i < len; i++)
90102 wnd[i] = null;
90103
90104 if (jacobianResult)
90105 return acc;
90106 else
90107 return acc.toP();
90108 };
90109
90110 function BasePoint(curve, type) {
90111 this.curve = curve;
90112 this.type = type;
90113 this.precomputed = null;
90114 }
90115 BaseCurve.BasePoint = BasePoint;
90116
90117 BasePoint.prototype.eq = function eq(/*other*/) {
90118 throw new Error('Not implemented');
90119 };
90120
90121 BasePoint.prototype.validate = function validate() {
90122 return this.curve.validate(this);
90123 };
90124
90125 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90126 bytes = utils.toArray(bytes, enc);
90127
90128 var len = this.p.byteLength();
90129
90130 // uncompressed, hybrid-odd, hybrid-even
90131 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
90132 bytes.length - 1 === 2 * len) {
90133 if (bytes[0] === 0x06)
90134 assert(bytes[bytes.length - 1] % 2 === 0);
90135 else if (bytes[0] === 0x07)
90136 assert(bytes[bytes.length - 1] % 2 === 1);
90137
90138 var res = this.point(bytes.slice(1, 1 + len),
90139 bytes.slice(1 + len, 1 + 2 * len));
90140
90141 return res;
90142 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
90143 bytes.length - 1 === len) {
90144 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
90145 }
90146 throw new Error('Unknown point format');
90147 };
90148
90149 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
90150 return this.encode(enc, true);
90151 };
90152
90153 BasePoint.prototype._encode = function _encode(compact) {
90154 var len = this.curve.p.byteLength();
90155 var x = this.getX().toArray('be', len);
90156
90157 if (compact)
90158 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
90159
90160 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
90161 };
90162
90163 BasePoint.prototype.encode = function encode(enc, compact) {
90164 return utils.encode(this._encode(compact), enc);
90165 };
90166
90167 BasePoint.prototype.precompute = function precompute(power) {
90168 if (this.precomputed)
90169 return this;
90170
90171 var precomputed = {
90172 doubles: null,
90173 naf: null,
90174 beta: null
90175 };
90176 precomputed.naf = this._getNAFPoints(8);
90177 precomputed.doubles = this._getDoubles(4, power);
90178 precomputed.beta = this._getBeta();
90179 this.precomputed = precomputed;
90180
90181 return this;
90182 };
90183
90184 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
90185 if (!this.precomputed)
90186 return false;
90187
90188 var doubles = this.precomputed.doubles;
90189 if (!doubles)
90190 return false;
90191
90192 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
90193 };
90194
90195 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
90196 if (this.precomputed && this.precomputed.doubles)
90197 return this.precomputed.doubles;
90198
90199 var doubles = [ this ];
90200 var acc = this;
90201 for (var i = 0; i < power; i += step) {
90202 for (var j = 0; j < step; j++)
90203 acc = acc.dbl();
90204 doubles.push(acc);
90205 }
90206 return {
90207 step: step,
90208 points: doubles
90209 };
90210 };
90211
90212 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
90213 if (this.precomputed && this.precomputed.naf)
90214 return this.precomputed.naf;
90215
90216 var res = [ this ];
90217 var max = (1 << wnd) - 1;
90218 var dbl = max === 1 ? null : this.dbl();
90219 for (var i = 1; i < max; i++)
90220 res[i] = res[i - 1].add(dbl);
90221 return {
90222 wnd: wnd,
90223 points: res
90224 };
90225 };
90226
90227 BasePoint.prototype._getBeta = function _getBeta() {
90228 return null;
90229 };
90230
90231 BasePoint.prototype.dblp = function dblp(k) {
90232 var r = this;
90233 for (var i = 0; i < k; i++)
90234 r = r.dbl();
90235 return r;
90236 };
90237
90238 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
90239 'use strict';
90240
90241 var curve = require('../curve');
90242 var elliptic = require('../../elliptic');
90243 var BN = require('bn.js');
90244 var inherits = require('inherits');
90245 var Base = curve.base;
90246
90247 var assert = elliptic.utils.assert;
90248
90249 function EdwardsCurve(conf) {
90250 // NOTE: Important as we are creating point in Base.call()
90251 this.twisted = (conf.a | 0) !== 1;
90252 this.mOneA = this.twisted && (conf.a | 0) === -1;
90253 this.extended = this.mOneA;
90254
90255 Base.call(this, 'edwards', conf);
90256
90257 this.a = new BN(conf.a, 16).umod(this.red.m);
90258 this.a = this.a.toRed(this.red);
90259 this.c = new BN(conf.c, 16).toRed(this.red);
90260 this.c2 = this.c.redSqr();
90261 this.d = new BN(conf.d, 16).toRed(this.red);
90262 this.dd = this.d.redAdd(this.d);
90263
90264 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
90265 this.oneC = (conf.c | 0) === 1;
90266 }
90267 inherits(EdwardsCurve, Base);
90268 module.exports = EdwardsCurve;
90269
90270 EdwardsCurve.prototype._mulA = function _mulA(num) {
90271 if (this.mOneA)
90272 return num.redNeg();
90273 else
90274 return this.a.redMul(num);
90275 };
90276
90277 EdwardsCurve.prototype._mulC = function _mulC(num) {
90278 if (this.oneC)
90279 return num;
90280 else
90281 return this.c.redMul(num);
90282 };
90283
90284 // Just for compatibility with Short curve
90285 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
90286 return this.point(x, y, z, t);
90287 };
90288
90289 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
90290 x = new BN(x, 16);
90291 if (!x.red)
90292 x = x.toRed(this.red);
90293
90294 var x2 = x.redSqr();
90295 var rhs = this.c2.redSub(this.a.redMul(x2));
90296 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
90297
90298 var y2 = rhs.redMul(lhs.redInvm());
90299 var y = y2.redSqrt();
90300 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
90301 throw new Error('invalid point');
90302
90303 var isOdd = y.fromRed().isOdd();
90304 if (odd && !isOdd || !odd && isOdd)
90305 y = y.redNeg();
90306
90307 return this.point(x, y);
90308 };
90309
90310 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
90311 y = new BN(y, 16);
90312 if (!y.red)
90313 y = y.toRed(this.red);
90314
90315 // x^2 = (y^2 - 1) / (d y^2 + 1)
90316 var y2 = y.redSqr();
90317 var lhs = y2.redSub(this.one);
90318 var rhs = y2.redMul(this.d).redAdd(this.one);
90319 var x2 = lhs.redMul(rhs.redInvm());
90320
90321 if (x2.cmp(this.zero) === 0) {
90322 if (odd)
90323 throw new Error('invalid point');
90324 else
90325 return this.point(this.zero, y);
90326 }
90327
90328 var x = x2.redSqrt();
90329 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
90330 throw new Error('invalid point');
90331
90332 if (x.isOdd() !== odd)
90333 x = x.redNeg();
90334
90335 return this.point(x, y);
90336 };
90337
90338 EdwardsCurve.prototype.validate = function validate(point) {
90339 if (point.isInfinity())
90340 return true;
90341
90342 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
90343 point.normalize();
90344
90345 var x2 = point.x.redSqr();
90346 var y2 = point.y.redSqr();
90347 var lhs = x2.redMul(this.a).redAdd(y2);
90348 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
90349
90350 return lhs.cmp(rhs) === 0;
90351 };
90352
90353 function Point(curve, x, y, z, t) {
90354 Base.BasePoint.call(this, curve, 'projective');
90355 if (x === null && y === null && z === null) {
90356 this.x = this.curve.zero;
90357 this.y = this.curve.one;
90358 this.z = this.curve.one;
90359 this.t = this.curve.zero;
90360 this.zOne = true;
90361 } else {
90362 this.x = new BN(x, 16);
90363 this.y = new BN(y, 16);
90364 this.z = z ? new BN(z, 16) : this.curve.one;
90365 this.t = t && new BN(t, 16);
90366 if (!this.x.red)
90367 this.x = this.x.toRed(this.curve.red);
90368 if (!this.y.red)
90369 this.y = this.y.toRed(this.curve.red);
90370 if (!this.z.red)
90371 this.z = this.z.toRed(this.curve.red);
90372 if (this.t && !this.t.red)
90373 this.t = this.t.toRed(this.curve.red);
90374 this.zOne = this.z === this.curve.one;
90375
90376 // Use extended coordinates
90377 if (this.curve.extended && !this.t) {
90378 this.t = this.x.redMul(this.y);
90379 if (!this.zOne)
90380 this.t = this.t.redMul(this.z.redInvm());
90381 }
90382 }
90383 }
90384 inherits(Point, Base.BasePoint);
90385
90386 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90387 return Point.fromJSON(this, obj);
90388 };
90389
90390 EdwardsCurve.prototype.point = function point(x, y, z, t) {
90391 return new Point(this, x, y, z, t);
90392 };
90393
90394 Point.fromJSON = function fromJSON(curve, obj) {
90395 return new Point(curve, obj[0], obj[1], obj[2]);
90396 };
90397
90398 Point.prototype.inspect = function inspect() {
90399 if (this.isInfinity())
90400 return '<EC Point Infinity>';
90401 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90402 ' y: ' + this.y.fromRed().toString(16, 2) +
90403 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90404 };
90405
90406 Point.prototype.isInfinity = function isInfinity() {
90407 // XXX This code assumes that zero is always zero in red
90408 return this.x.cmpn(0) === 0 &&
90409 this.y.cmp(this.z) === 0;
90410 };
90411
90412 Point.prototype._extDbl = function _extDbl() {
90413 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90414 // #doubling-dbl-2008-hwcd
90415 // 4M + 4S
90416
90417 // A = X1^2
90418 var a = this.x.redSqr();
90419 // B = Y1^2
90420 var b = this.y.redSqr();
90421 // C = 2 * Z1^2
90422 var c = this.z.redSqr();
90423 c = c.redIAdd(c);
90424 // D = a * A
90425 var d = this.curve._mulA(a);
90426 // E = (X1 + Y1)^2 - A - B
90427 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
90428 // G = D + B
90429 var g = d.redAdd(b);
90430 // F = G - C
90431 var f = g.redSub(c);
90432 // H = D - B
90433 var h = d.redSub(b);
90434 // X3 = E * F
90435 var nx = e.redMul(f);
90436 // Y3 = G * H
90437 var ny = g.redMul(h);
90438 // T3 = E * H
90439 var nt = e.redMul(h);
90440 // Z3 = F * G
90441 var nz = f.redMul(g);
90442 return this.curve.point(nx, ny, nz, nt);
90443 };
90444
90445 Point.prototype._projDbl = function _projDbl() {
90446 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90447 // #doubling-dbl-2008-bbjlp
90448 // #doubling-dbl-2007-bl
90449 // and others
90450 // Generally 3M + 4S or 2M + 4S
90451
90452 // B = (X1 + Y1)^2
90453 var b = this.x.redAdd(this.y).redSqr();
90454 // C = X1^2
90455 var c = this.x.redSqr();
90456 // D = Y1^2
90457 var d = this.y.redSqr();
90458
90459 var nx;
90460 var ny;
90461 var nz;
90462 if (this.curve.twisted) {
90463 // E = a * C
90464 var e = this.curve._mulA(c);
90465 // F = E + D
90466 var f = e.redAdd(d);
90467 if (this.zOne) {
90468 // X3 = (B - C - D) * (F - 2)
90469 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
90470 // Y3 = F * (E - D)
90471 ny = f.redMul(e.redSub(d));
90472 // Z3 = F^2 - 2 * F
90473 nz = f.redSqr().redSub(f).redSub(f);
90474 } else {
90475 // H = Z1^2
90476 var h = this.z.redSqr();
90477 // J = F - 2 * H
90478 var j = f.redSub(h).redISub(h);
90479 // X3 = (B-C-D)*J
90480 nx = b.redSub(c).redISub(d).redMul(j);
90481 // Y3 = F * (E - D)
90482 ny = f.redMul(e.redSub(d));
90483 // Z3 = F * J
90484 nz = f.redMul(j);
90485 }
90486 } else {
90487 // E = C + D
90488 var e = c.redAdd(d);
90489 // H = (c * Z1)^2
90490 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
90491 // J = E - 2 * H
90492 var j = e.redSub(h).redSub(h);
90493 // X3 = c * (B - E) * J
90494 nx = this.curve._mulC(b.redISub(e)).redMul(j);
90495 // Y3 = c * E * (C - D)
90496 ny = this.curve._mulC(e).redMul(c.redISub(d));
90497 // Z3 = E * J
90498 nz = e.redMul(j);
90499 }
90500 return this.curve.point(nx, ny, nz);
90501 };
90502
90503 Point.prototype.dbl = function dbl() {
90504 if (this.isInfinity())
90505 return this;
90506
90507 // Double in extended coordinates
90508 if (this.curve.extended)
90509 return this._extDbl();
90510 else
90511 return this._projDbl();
90512 };
90513
90514 Point.prototype._extAdd = function _extAdd(p) {
90515 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90516 // #addition-add-2008-hwcd-3
90517 // 8M
90518
90519 // A = (Y1 - X1) * (Y2 - X2)
90520 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
90521 // B = (Y1 + X1) * (Y2 + X2)
90522 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
90523 // C = T1 * k * T2
90524 var c = this.t.redMul(this.curve.dd).redMul(p.t);
90525 // D = Z1 * 2 * Z2
90526 var d = this.z.redMul(p.z.redAdd(p.z));
90527 // E = B - A
90528 var e = b.redSub(a);
90529 // F = D - C
90530 var f = d.redSub(c);
90531 // G = D + C
90532 var g = d.redAdd(c);
90533 // H = B + A
90534 var h = b.redAdd(a);
90535 // X3 = E * F
90536 var nx = e.redMul(f);
90537 // Y3 = G * H
90538 var ny = g.redMul(h);
90539 // T3 = E * H
90540 var nt = e.redMul(h);
90541 // Z3 = F * G
90542 var nz = f.redMul(g);
90543 return this.curve.point(nx, ny, nz, nt);
90544 };
90545
90546 Point.prototype._projAdd = function _projAdd(p) {
90547 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90548 // #addition-add-2008-bbjlp
90549 // #addition-add-2007-bl
90550 // 10M + 1S
90551
90552 // A = Z1 * Z2
90553 var a = this.z.redMul(p.z);
90554 // B = A^2
90555 var b = a.redSqr();
90556 // C = X1 * X2
90557 var c = this.x.redMul(p.x);
90558 // D = Y1 * Y2
90559 var d = this.y.redMul(p.y);
90560 // E = d * C * D
90561 var e = this.curve.d.redMul(c).redMul(d);
90562 // F = B - E
90563 var f = b.redSub(e);
90564 // G = B + E
90565 var g = b.redAdd(e);
90566 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
90567 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
90568 var nx = a.redMul(f).redMul(tmp);
90569 var ny;
90570 var nz;
90571 if (this.curve.twisted) {
90572 // Y3 = A * G * (D - a * C)
90573 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
90574 // Z3 = F * G
90575 nz = f.redMul(g);
90576 } else {
90577 // Y3 = A * G * (D - C)
90578 ny = a.redMul(g).redMul(d.redSub(c));
90579 // Z3 = c * F * G
90580 nz = this.curve._mulC(f).redMul(g);
90581 }
90582 return this.curve.point(nx, ny, nz);
90583 };
90584
90585 Point.prototype.add = function add(p) {
90586 if (this.isInfinity())
90587 return p;
90588 if (p.isInfinity())
90589 return this;
90590
90591 if (this.curve.extended)
90592 return this._extAdd(p);
90593 else
90594 return this._projAdd(p);
90595 };
90596
90597 Point.prototype.mul = function mul(k) {
90598 if (this._hasDoubles(k))
90599 return this.curve._fixedNafMul(this, k);
90600 else
90601 return this.curve._wnafMul(this, k);
90602 };
90603
90604 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
90605 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
90606 };
90607
90608 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
90609 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
90610 };
90611
90612 Point.prototype.normalize = function normalize() {
90613 if (this.zOne)
90614 return this;
90615
90616 // Normalize coordinates
90617 var zi = this.z.redInvm();
90618 this.x = this.x.redMul(zi);
90619 this.y = this.y.redMul(zi);
90620 if (this.t)
90621 this.t = this.t.redMul(zi);
90622 this.z = this.curve.one;
90623 this.zOne = true;
90624 return this;
90625 };
90626
90627 Point.prototype.neg = function neg() {
90628 return this.curve.point(this.x.redNeg(),
90629 this.y,
90630 this.z,
90631 this.t && this.t.redNeg());
90632 };
90633
90634 Point.prototype.getX = function getX() {
90635 this.normalize();
90636 return this.x.fromRed();
90637 };
90638
90639 Point.prototype.getY = function getY() {
90640 this.normalize();
90641 return this.y.fromRed();
90642 };
90643
90644 Point.prototype.eq = function eq(other) {
90645 return this === other ||
90646 this.getX().cmp(other.getX()) === 0 &&
90647 this.getY().cmp(other.getY()) === 0;
90648 };
90649
90650 Point.prototype.eqXToP = function eqXToP(x) {
90651 var rx = x.toRed(this.curve.red).redMul(this.z);
90652 if (this.x.cmp(rx) === 0)
90653 return true;
90654
90655 var xc = x.clone();
90656 var t = this.curve.redN.redMul(this.z);
90657 for (;;) {
90658 xc.iadd(this.curve.n);
90659 if (xc.cmp(this.curve.p) >= 0)
90660 return false;
90661
90662 rx.redIAdd(t);
90663 if (this.x.cmp(rx) === 0)
90664 return true;
90665 }
90666 return false;
90667 };
90668
90669 // Compatibility with BaseCurve
90670 Point.prototype.toP = Point.prototype.normalize;
90671 Point.prototype.mixedAdd = Point.prototype.add;
90672
90673 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
90674 'use strict';
90675
90676 var curve = exports;
90677
90678 curve.base = require('./base');
90679 curve.short = require('./short');
90680 curve.mont = require('./mont');
90681 curve.edwards = require('./edwards');
90682
90683 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
90684 'use strict';
90685
90686 var curve = require('../curve');
90687 var BN = require('bn.js');
90688 var inherits = require('inherits');
90689 var Base = curve.base;
90690
90691 var elliptic = require('../../elliptic');
90692 var utils = elliptic.utils;
90693
90694 function MontCurve(conf) {
90695 Base.call(this, 'mont', conf);
90696
90697 this.a = new BN(conf.a, 16).toRed(this.red);
90698 this.b = new BN(conf.b, 16).toRed(this.red);
90699 this.i4 = new BN(4).toRed(this.red).redInvm();
90700 this.two = new BN(2).toRed(this.red);
90701 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
90702 }
90703 inherits(MontCurve, Base);
90704 module.exports = MontCurve;
90705
90706 MontCurve.prototype.validate = function validate(point) {
90707 var x = point.normalize().x;
90708 var x2 = x.redSqr();
90709 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
90710 var y = rhs.redSqrt();
90711
90712 return y.redSqr().cmp(rhs) === 0;
90713 };
90714
90715 function Point(curve, x, z) {
90716 Base.BasePoint.call(this, curve, 'projective');
90717 if (x === null && z === null) {
90718 this.x = this.curve.one;
90719 this.z = this.curve.zero;
90720 } else {
90721 this.x = new BN(x, 16);
90722 this.z = new BN(z, 16);
90723 if (!this.x.red)
90724 this.x = this.x.toRed(this.curve.red);
90725 if (!this.z.red)
90726 this.z = this.z.toRed(this.curve.red);
90727 }
90728 }
90729 inherits(Point, Base.BasePoint);
90730
90731 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90732 return this.point(utils.toArray(bytes, enc), 1);
90733 };
90734
90735 MontCurve.prototype.point = function point(x, z) {
90736 return new Point(this, x, z);
90737 };
90738
90739 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90740 return Point.fromJSON(this, obj);
90741 };
90742
90743 Point.prototype.precompute = function precompute() {
90744 // No-op
90745 };
90746
90747 Point.prototype._encode = function _encode() {
90748 return this.getX().toArray('be', this.curve.p.byteLength());
90749 };
90750
90751 Point.fromJSON = function fromJSON(curve, obj) {
90752 return new Point(curve, obj[0], obj[1] || curve.one);
90753 };
90754
90755 Point.prototype.inspect = function inspect() {
90756 if (this.isInfinity())
90757 return '<EC Point Infinity>';
90758 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90759 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90760 };
90761
90762 Point.prototype.isInfinity = function isInfinity() {
90763 // XXX This code assumes that zero is always zero in red
90764 return this.z.cmpn(0) === 0;
90765 };
90766
90767 Point.prototype.dbl = function dbl() {
90768 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
90769 // 2M + 2S + 4A
90770
90771 // A = X1 + Z1
90772 var a = this.x.redAdd(this.z);
90773 // AA = A^2
90774 var aa = a.redSqr();
90775 // B = X1 - Z1
90776 var b = this.x.redSub(this.z);
90777 // BB = B^2
90778 var bb = b.redSqr();
90779 // C = AA - BB
90780 var c = aa.redSub(bb);
90781 // X3 = AA * BB
90782 var nx = aa.redMul(bb);
90783 // Z3 = C * (BB + A24 * C)
90784 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
90785 return this.curve.point(nx, nz);
90786 };
90787
90788 Point.prototype.add = function add() {
90789 throw new Error('Not supported on Montgomery curve');
90790 };
90791
90792 Point.prototype.diffAdd = function diffAdd(p, diff) {
90793 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
90794 // 4M + 2S + 6A
90795
90796 // A = X2 + Z2
90797 var a = this.x.redAdd(this.z);
90798 // B = X2 - Z2
90799 var b = this.x.redSub(this.z);
90800 // C = X3 + Z3
90801 var c = p.x.redAdd(p.z);
90802 // D = X3 - Z3
90803 var d = p.x.redSub(p.z);
90804 // DA = D * A
90805 var da = d.redMul(a);
90806 // CB = C * B
90807 var cb = c.redMul(b);
90808 // X5 = Z1 * (DA + CB)^2
90809 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
90810 // Z5 = X1 * (DA - CB)^2
90811 var nz = diff.x.redMul(da.redISub(cb).redSqr());
90812 return this.curve.point(nx, nz);
90813 };
90814
90815 Point.prototype.mul = function mul(k) {
90816 var t = k.clone();
90817 var a = this; // (N / 2) * Q + Q
90818 var b = this.curve.point(null, null); // (N / 2) * Q
90819 var c = this; // Q
90820
90821 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
90822 bits.push(t.andln(1));
90823
90824 for (var i = bits.length - 1; i >= 0; i--) {
90825 if (bits[i] === 0) {
90826 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
90827 a = a.diffAdd(b, c);
90828 // N * Q = 2 * ((N / 2) * Q + Q))
90829 b = b.dbl();
90830 } else {
90831 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
90832 b = a.diffAdd(b, c);
90833 // N * Q + Q = 2 * ((N / 2) * Q + Q)
90834 a = a.dbl();
90835 }
90836 }
90837 return b;
90838 };
90839
90840 Point.prototype.mulAdd = function mulAdd() {
90841 throw new Error('Not supported on Montgomery curve');
90842 };
90843
90844 Point.prototype.jumlAdd = function jumlAdd() {
90845 throw new Error('Not supported on Montgomery curve');
90846 };
90847
90848 Point.prototype.eq = function eq(other) {
90849 return this.getX().cmp(other.getX()) === 0;
90850 };
90851
90852 Point.prototype.normalize = function normalize() {
90853 this.x = this.x.redMul(this.z.redInvm());
90854 this.z = this.curve.one;
90855 return this;
90856 };
90857
90858 Point.prototype.getX = function getX() {
90859 // Normalize coordinates
90860 this.normalize();
90861
90862 return this.x.fromRed();
90863 };
90864
90865 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
90866 'use strict';
90867
90868 var curve = require('../curve');
90869 var elliptic = require('../../elliptic');
90870 var BN = require('bn.js');
90871 var inherits = require('inherits');
90872 var Base = curve.base;
90873
90874 var assert = elliptic.utils.assert;
90875
90876 function ShortCurve(conf) {
90877 Base.call(this, 'short', conf);
90878
90879 this.a = new BN(conf.a, 16).toRed(this.red);
90880 this.b = new BN(conf.b, 16).toRed(this.red);
90881 this.tinv = this.two.redInvm();
90882
90883 this.zeroA = this.a.fromRed().cmpn(0) === 0;
90884 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
90885
90886 // If the curve is endomorphic, precalculate beta and lambda
90887 this.endo = this._getEndomorphism(conf);
90888 this._endoWnafT1 = new Array(4);
90889 this._endoWnafT2 = new Array(4);
90890 }
90891 inherits(ShortCurve, Base);
90892 module.exports = ShortCurve;
90893
90894 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
90895 // No efficient endomorphism
90896 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
90897 return;
90898
90899 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
90900 var beta;
90901 var lambda;
90902 if (conf.beta) {
90903 beta = new BN(conf.beta, 16).toRed(this.red);
90904 } else {
90905 var betas = this._getEndoRoots(this.p);
90906 // Choose the smallest beta
90907 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
90908 beta = beta.toRed(this.red);
90909 }
90910 if (conf.lambda) {
90911 lambda = new BN(conf.lambda, 16);
90912 } else {
90913 // Choose the lambda that is matching selected beta
90914 var lambdas = this._getEndoRoots(this.n);
90915 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
90916 lambda = lambdas[0];
90917 } else {
90918 lambda = lambdas[1];
90919 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
90920 }
90921 }
90922
90923 // Get basis vectors, used for balanced length-two representation
90924 var basis;
90925 if (conf.basis) {
90926 basis = conf.basis.map(function(vec) {
90927 return {
90928 a: new BN(vec.a, 16),
90929 b: new BN(vec.b, 16)
90930 };
90931 });
90932 } else {
90933 basis = this._getEndoBasis(lambda);
90934 }
90935
90936 return {
90937 beta: beta,
90938 lambda: lambda,
90939 basis: basis
90940 };
90941 };
90942
90943 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
90944 // Find roots of for x^2 + x + 1 in F
90945 // Root = (-1 +- Sqrt(-3)) / 2
90946 //
90947 var red = num === this.p ? this.red : BN.mont(num);
90948 var tinv = new BN(2).toRed(red).redInvm();
90949 var ntinv = tinv.redNeg();
90950
90951 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
90952
90953 var l1 = ntinv.redAdd(s).fromRed();
90954 var l2 = ntinv.redSub(s).fromRed();
90955 return [ l1, l2 ];
90956 };
90957
90958 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
90959 // aprxSqrt >= sqrt(this.n)
90960 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
90961
90962 // 3.74
90963 // Run EGCD, until r(L + 1) < aprxSqrt
90964 var u = lambda;
90965 var v = this.n.clone();
90966 var x1 = new BN(1);
90967 var y1 = new BN(0);
90968 var x2 = new BN(0);
90969 var y2 = new BN(1);
90970
90971 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
90972 var a0;
90973 var b0;
90974 // First vector
90975 var a1;
90976 var b1;
90977 // Second vector
90978 var a2;
90979 var b2;
90980
90981 var prevR;
90982 var i = 0;
90983 var r;
90984 var x;
90985 while (u.cmpn(0) !== 0) {
90986 var q = v.div(u);
90987 r = v.sub(q.mul(u));
90988 x = x2.sub(q.mul(x1));
90989 var y = y2.sub(q.mul(y1));
90990
90991 if (!a1 && r.cmp(aprxSqrt) < 0) {
90992 a0 = prevR.neg();
90993 b0 = x1;
90994 a1 = r.neg();
90995 b1 = x;
90996 } else if (a1 && ++i === 2) {
90997 break;
90998 }
90999 prevR = r;
91000
91001 v = u;
91002 u = r;
91003 x2 = x1;
91004 x1 = x;
91005 y2 = y1;
91006 y1 = y;
91007 }
91008 a2 = r.neg();
91009 b2 = x;
91010
91011 var len1 = a1.sqr().add(b1.sqr());
91012 var len2 = a2.sqr().add(b2.sqr());
91013 if (len2.cmp(len1) >= 0) {
91014 a2 = a0;
91015 b2 = b0;
91016 }
91017
91018 // Normalize signs
91019 if (a1.negative) {
91020 a1 = a1.neg();
91021 b1 = b1.neg();
91022 }
91023 if (a2.negative) {
91024 a2 = a2.neg();
91025 b2 = b2.neg();
91026 }
91027
91028 return [
91029 { a: a1, b: b1 },
91030 { a: a2, b: b2 }
91031 ];
91032 };
91033
91034 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
91035 var basis = this.endo.basis;
91036 var v1 = basis[0];
91037 var v2 = basis[1];
91038
91039 var c1 = v2.b.mul(k).divRound(this.n);
91040 var c2 = v1.b.neg().mul(k).divRound(this.n);
91041
91042 var p1 = c1.mul(v1.a);
91043 var p2 = c2.mul(v2.a);
91044 var q1 = c1.mul(v1.b);
91045 var q2 = c2.mul(v2.b);
91046
91047 // Calculate answer
91048 var k1 = k.sub(p1).sub(p2);
91049 var k2 = q1.add(q2).neg();
91050 return { k1: k1, k2: k2 };
91051 };
91052
91053 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
91054 x = new BN(x, 16);
91055 if (!x.red)
91056 x = x.toRed(this.red);
91057
91058 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
91059 var y = y2.redSqrt();
91060 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
91061 throw new Error('invalid point');
91062
91063 // XXX Is there any way to tell if the number is odd without converting it
91064 // to non-red form?
91065 var isOdd = y.fromRed().isOdd();
91066 if (odd && !isOdd || !odd && isOdd)
91067 y = y.redNeg();
91068
91069 return this.point(x, y);
91070 };
91071
91072 ShortCurve.prototype.validate = function validate(point) {
91073 if (point.inf)
91074 return true;
91075
91076 var x = point.x;
91077 var y = point.y;
91078
91079 var ax = this.a.redMul(x);
91080 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
91081 return y.redSqr().redISub(rhs).cmpn(0) === 0;
91082 };
91083
91084 ShortCurve.prototype._endoWnafMulAdd =
91085 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
91086 var npoints = this._endoWnafT1;
91087 var ncoeffs = this._endoWnafT2;
91088 for (var i = 0; i < points.length; i++) {
91089 var split = this._endoSplit(coeffs[i]);
91090 var p = points[i];
91091 var beta = p._getBeta();
91092
91093 if (split.k1.negative) {
91094 split.k1.ineg();
91095 p = p.neg(true);
91096 }
91097 if (split.k2.negative) {
91098 split.k2.ineg();
91099 beta = beta.neg(true);
91100 }
91101
91102 npoints[i * 2] = p;
91103 npoints[i * 2 + 1] = beta;
91104 ncoeffs[i * 2] = split.k1;
91105 ncoeffs[i * 2 + 1] = split.k2;
91106 }
91107 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
91108
91109 // Clean-up references to points and coefficients
91110 for (var j = 0; j < i * 2; j++) {
91111 npoints[j] = null;
91112 ncoeffs[j] = null;
91113 }
91114 return res;
91115 };
91116
91117 function Point(curve, x, y, isRed) {
91118 Base.BasePoint.call(this, curve, 'affine');
91119 if (x === null && y === null) {
91120 this.x = null;
91121 this.y = null;
91122 this.inf = true;
91123 } else {
91124 this.x = new BN(x, 16);
91125 this.y = new BN(y, 16);
91126 // Force redgomery representation when loading from JSON
91127 if (isRed) {
91128 this.x.forceRed(this.curve.red);
91129 this.y.forceRed(this.curve.red);
91130 }
91131 if (!this.x.red)
91132 this.x = this.x.toRed(this.curve.red);
91133 if (!this.y.red)
91134 this.y = this.y.toRed(this.curve.red);
91135 this.inf = false;
91136 }
91137 }
91138 inherits(Point, Base.BasePoint);
91139
91140 ShortCurve.prototype.point = function point(x, y, isRed) {
91141 return new Point(this, x, y, isRed);
91142 };
91143
91144 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
91145 return Point.fromJSON(this, obj, red);
91146 };
91147
91148 Point.prototype._getBeta = function _getBeta() {
91149 if (!this.curve.endo)
91150 return;
91151
91152 var pre = this.precomputed;
91153 if (pre && pre.beta)
91154 return pre.beta;
91155
91156 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
91157 if (pre) {
91158 var curve = this.curve;
91159 var endoMul = function(p) {
91160 return curve.point(p.x.redMul(curve.endo.beta), p.y);
91161 };
91162 pre.beta = beta;
91163 beta.precomputed = {
91164 beta: null,
91165 naf: pre.naf && {
91166 wnd: pre.naf.wnd,
91167 points: pre.naf.points.map(endoMul)
91168 },
91169 doubles: pre.doubles && {
91170 step: pre.doubles.step,
91171 points: pre.doubles.points.map(endoMul)
91172 }
91173 };
91174 }
91175 return beta;
91176 };
91177
91178 Point.prototype.toJSON = function toJSON() {
91179 if (!this.precomputed)
91180 return [ this.x, this.y ];
91181
91182 return [ this.x, this.y, this.precomputed && {
91183 doubles: this.precomputed.doubles && {
91184 step: this.precomputed.doubles.step,
91185 points: this.precomputed.doubles.points.slice(1)
91186 },
91187 naf: this.precomputed.naf && {
91188 wnd: this.precomputed.naf.wnd,
91189 points: this.precomputed.naf.points.slice(1)
91190 }
91191 } ];
91192 };
91193
91194 Point.fromJSON = function fromJSON(curve, obj, red) {
91195 if (typeof obj === 'string')
91196 obj = JSON.parse(obj);
91197 var res = curve.point(obj[0], obj[1], red);
91198 if (!obj[2])
91199 return res;
91200
91201 function obj2point(obj) {
91202 return curve.point(obj[0], obj[1], red);
91203 }
91204
91205 var pre = obj[2];
91206 res.precomputed = {
91207 beta: null,
91208 doubles: pre.doubles && {
91209 step: pre.doubles.step,
91210 points: [ res ].concat(pre.doubles.points.map(obj2point))
91211 },
91212 naf: pre.naf && {
91213 wnd: pre.naf.wnd,
91214 points: [ res ].concat(pre.naf.points.map(obj2point))
91215 }
91216 };
91217 return res;
91218 };
91219
91220 Point.prototype.inspect = function inspect() {
91221 if (this.isInfinity())
91222 return '<EC Point Infinity>';
91223 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
91224 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
91225 };
91226
91227 Point.prototype.isInfinity = function isInfinity() {
91228 return this.inf;
91229 };
91230
91231 Point.prototype.add = function add(p) {
91232 // O + P = P
91233 if (this.inf)
91234 return p;
91235
91236 // P + O = P
91237 if (p.inf)
91238 return this;
91239
91240 // P + P = 2P
91241 if (this.eq(p))
91242 return this.dbl();
91243
91244 // P + (-P) = O
91245 if (this.neg().eq(p))
91246 return this.curve.point(null, null);
91247
91248 // P + Q = O
91249 if (this.x.cmp(p.x) === 0)
91250 return this.curve.point(null, null);
91251
91252 var c = this.y.redSub(p.y);
91253 if (c.cmpn(0) !== 0)
91254 c = c.redMul(this.x.redSub(p.x).redInvm());
91255 var nx = c.redSqr().redISub(this.x).redISub(p.x);
91256 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91257 return this.curve.point(nx, ny);
91258 };
91259
91260 Point.prototype.dbl = function dbl() {
91261 if (this.inf)
91262 return this;
91263
91264 // 2P = O
91265 var ys1 = this.y.redAdd(this.y);
91266 if (ys1.cmpn(0) === 0)
91267 return this.curve.point(null, null);
91268
91269 var a = this.curve.a;
91270
91271 var x2 = this.x.redSqr();
91272 var dyinv = ys1.redInvm();
91273 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
91274
91275 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
91276 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91277 return this.curve.point(nx, ny);
91278 };
91279
91280 Point.prototype.getX = function getX() {
91281 return this.x.fromRed();
91282 };
91283
91284 Point.prototype.getY = function getY() {
91285 return this.y.fromRed();
91286 };
91287
91288 Point.prototype.mul = function mul(k) {
91289 k = new BN(k, 16);
91290
91291 if (this._hasDoubles(k))
91292 return this.curve._fixedNafMul(this, k);
91293 else if (this.curve.endo)
91294 return this.curve._endoWnafMulAdd([ this ], [ k ]);
91295 else
91296 return this.curve._wnafMul(this, k);
91297 };
91298
91299 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
91300 var points = [ this, p2 ];
91301 var coeffs = [ k1, k2 ];
91302 if (this.curve.endo)
91303 return this.curve._endoWnafMulAdd(points, coeffs);
91304 else
91305 return this.curve._wnafMulAdd(1, points, coeffs, 2);
91306 };
91307
91308 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
91309 var points = [ this, p2 ];
91310 var coeffs = [ k1, k2 ];
91311 if (this.curve.endo)
91312 return this.curve._endoWnafMulAdd(points, coeffs, true);
91313 else
91314 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
91315 };
91316
91317 Point.prototype.eq = function eq(p) {
91318 return this === p ||
91319 this.inf === p.inf &&
91320 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
91321 };
91322
91323 Point.prototype.neg = function neg(_precompute) {
91324 if (this.inf)
91325 return this;
91326
91327 var res = this.curve.point(this.x, this.y.redNeg());
91328 if (_precompute && this.precomputed) {
91329 var pre = this.precomputed;
91330 var negate = function(p) {
91331 return p.neg();
91332 };
91333 res.precomputed = {
91334 naf: pre.naf && {
91335 wnd: pre.naf.wnd,
91336 points: pre.naf.points.map(negate)
91337 },
91338 doubles: pre.doubles && {
91339 step: pre.doubles.step,
91340 points: pre.doubles.points.map(negate)
91341 }
91342 };
91343 }
91344 return res;
91345 };
91346
91347 Point.prototype.toJ = function toJ() {
91348 if (this.inf)
91349 return this.curve.jpoint(null, null, null);
91350
91351 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
91352 return res;
91353 };
91354
91355 function JPoint(curve, x, y, z) {
91356 Base.BasePoint.call(this, curve, 'jacobian');
91357 if (x === null && y === null && z === null) {
91358 this.x = this.curve.one;
91359 this.y = this.curve.one;
91360 this.z = new BN(0);
91361 } else {
91362 this.x = new BN(x, 16);
91363 this.y = new BN(y, 16);
91364 this.z = new BN(z, 16);
91365 }
91366 if (!this.x.red)
91367 this.x = this.x.toRed(this.curve.red);
91368 if (!this.y.red)
91369 this.y = this.y.toRed(this.curve.red);
91370 if (!this.z.red)
91371 this.z = this.z.toRed(this.curve.red);
91372
91373 this.zOne = this.z === this.curve.one;
91374 }
91375 inherits(JPoint, Base.BasePoint);
91376
91377 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
91378 return new JPoint(this, x, y, z);
91379 };
91380
91381 JPoint.prototype.toP = function toP() {
91382 if (this.isInfinity())
91383 return this.curve.point(null, null);
91384
91385 var zinv = this.z.redInvm();
91386 var zinv2 = zinv.redSqr();
91387 var ax = this.x.redMul(zinv2);
91388 var ay = this.y.redMul(zinv2).redMul(zinv);
91389
91390 return this.curve.point(ax, ay);
91391 };
91392
91393 JPoint.prototype.neg = function neg() {
91394 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
91395 };
91396
91397 JPoint.prototype.add = function add(p) {
91398 // O + P = P
91399 if (this.isInfinity())
91400 return p;
91401
91402 // P + O = P
91403 if (p.isInfinity())
91404 return this;
91405
91406 // 12M + 4S + 7A
91407 var pz2 = p.z.redSqr();
91408 var z2 = this.z.redSqr();
91409 var u1 = this.x.redMul(pz2);
91410 var u2 = p.x.redMul(z2);
91411 var s1 = this.y.redMul(pz2.redMul(p.z));
91412 var s2 = p.y.redMul(z2.redMul(this.z));
91413
91414 var h = u1.redSub(u2);
91415 var r = s1.redSub(s2);
91416 if (h.cmpn(0) === 0) {
91417 if (r.cmpn(0) !== 0)
91418 return this.curve.jpoint(null, null, null);
91419 else
91420 return this.dbl();
91421 }
91422
91423 var h2 = h.redSqr();
91424 var h3 = h2.redMul(h);
91425 var v = u1.redMul(h2);
91426
91427 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91428 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91429 var nz = this.z.redMul(p.z).redMul(h);
91430
91431 return this.curve.jpoint(nx, ny, nz);
91432 };
91433
91434 JPoint.prototype.mixedAdd = function mixedAdd(p) {
91435 // O + P = P
91436 if (this.isInfinity())
91437 return p.toJ();
91438
91439 // P + O = P
91440 if (p.isInfinity())
91441 return this;
91442
91443 // 8M + 3S + 7A
91444 var z2 = this.z.redSqr();
91445 var u1 = this.x;
91446 var u2 = p.x.redMul(z2);
91447 var s1 = this.y;
91448 var s2 = p.y.redMul(z2).redMul(this.z);
91449
91450 var h = u1.redSub(u2);
91451 var r = s1.redSub(s2);
91452 if (h.cmpn(0) === 0) {
91453 if (r.cmpn(0) !== 0)
91454 return this.curve.jpoint(null, null, null);
91455 else
91456 return this.dbl();
91457 }
91458
91459 var h2 = h.redSqr();
91460 var h3 = h2.redMul(h);
91461 var v = u1.redMul(h2);
91462
91463 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91464 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91465 var nz = this.z.redMul(h);
91466
91467 return this.curve.jpoint(nx, ny, nz);
91468 };
91469
91470 JPoint.prototype.dblp = function dblp(pow) {
91471 if (pow === 0)
91472 return this;
91473 if (this.isInfinity())
91474 return this;
91475 if (!pow)
91476 return this.dbl();
91477
91478 if (this.curve.zeroA || this.curve.threeA) {
91479 var r = this;
91480 for (var i = 0; i < pow; i++)
91481 r = r.dbl();
91482 return r;
91483 }
91484
91485 // 1M + 2S + 1A + N * (4S + 5M + 8A)
91486 // N = 1 => 6M + 6S + 9A
91487 var a = this.curve.a;
91488 var tinv = this.curve.tinv;
91489
91490 var jx = this.x;
91491 var jy = this.y;
91492 var jz = this.z;
91493 var jz4 = jz.redSqr().redSqr();
91494
91495 // Reuse results
91496 var jyd = jy.redAdd(jy);
91497 for (var i = 0; i < pow; i++) {
91498 var jx2 = jx.redSqr();
91499 var jyd2 = jyd.redSqr();
91500 var jyd4 = jyd2.redSqr();
91501 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91502
91503 var t1 = jx.redMul(jyd2);
91504 var nx = c.redSqr().redISub(t1.redAdd(t1));
91505 var t2 = t1.redISub(nx);
91506 var dny = c.redMul(t2);
91507 dny = dny.redIAdd(dny).redISub(jyd4);
91508 var nz = jyd.redMul(jz);
91509 if (i + 1 < pow)
91510 jz4 = jz4.redMul(jyd4);
91511
91512 jx = nx;
91513 jz = nz;
91514 jyd = dny;
91515 }
91516
91517 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
91518 };
91519
91520 JPoint.prototype.dbl = function dbl() {
91521 if (this.isInfinity())
91522 return this;
91523
91524 if (this.curve.zeroA)
91525 return this._zeroDbl();
91526 else if (this.curve.threeA)
91527 return this._threeDbl();
91528 else
91529 return this._dbl();
91530 };
91531
91532 JPoint.prototype._zeroDbl = function _zeroDbl() {
91533 var nx;
91534 var ny;
91535 var nz;
91536 // Z = 1
91537 if (this.zOne) {
91538 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91539 // #doubling-mdbl-2007-bl
91540 // 1M + 5S + 14A
91541
91542 // XX = X1^2
91543 var xx = this.x.redSqr();
91544 // YY = Y1^2
91545 var yy = this.y.redSqr();
91546 // YYYY = YY^2
91547 var yyyy = yy.redSqr();
91548 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91549 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91550 s = s.redIAdd(s);
91551 // M = 3 * XX + a; a = 0
91552 var m = xx.redAdd(xx).redIAdd(xx);
91553 // T = M ^ 2 - 2*S
91554 var t = m.redSqr().redISub(s).redISub(s);
91555
91556 // 8 * YYYY
91557 var yyyy8 = yyyy.redIAdd(yyyy);
91558 yyyy8 = yyyy8.redIAdd(yyyy8);
91559 yyyy8 = yyyy8.redIAdd(yyyy8);
91560
91561 // X3 = T
91562 nx = t;
91563 // Y3 = M * (S - T) - 8 * YYYY
91564 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91565 // Z3 = 2*Y1
91566 nz = this.y.redAdd(this.y);
91567 } else {
91568 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91569 // #doubling-dbl-2009-l
91570 // 2M + 5S + 13A
91571
91572 // A = X1^2
91573 var a = this.x.redSqr();
91574 // B = Y1^2
91575 var b = this.y.redSqr();
91576 // C = B^2
91577 var c = b.redSqr();
91578 // D = 2 * ((X1 + B)^2 - A - C)
91579 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
91580 d = d.redIAdd(d);
91581 // E = 3 * A
91582 var e = a.redAdd(a).redIAdd(a);
91583 // F = E^2
91584 var f = e.redSqr();
91585
91586 // 8 * C
91587 var c8 = c.redIAdd(c);
91588 c8 = c8.redIAdd(c8);
91589 c8 = c8.redIAdd(c8);
91590
91591 // X3 = F - 2 * D
91592 nx = f.redISub(d).redISub(d);
91593 // Y3 = E * (D - X3) - 8 * C
91594 ny = e.redMul(d.redISub(nx)).redISub(c8);
91595 // Z3 = 2 * Y1 * Z1
91596 nz = this.y.redMul(this.z);
91597 nz = nz.redIAdd(nz);
91598 }
91599
91600 return this.curve.jpoint(nx, ny, nz);
91601 };
91602
91603 JPoint.prototype._threeDbl = function _threeDbl() {
91604 var nx;
91605 var ny;
91606 var nz;
91607 // Z = 1
91608 if (this.zOne) {
91609 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
91610 // #doubling-mdbl-2007-bl
91611 // 1M + 5S + 15A
91612
91613 // XX = X1^2
91614 var xx = this.x.redSqr();
91615 // YY = Y1^2
91616 var yy = this.y.redSqr();
91617 // YYYY = YY^2
91618 var yyyy = yy.redSqr();
91619 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91620 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91621 s = s.redIAdd(s);
91622 // M = 3 * XX + a
91623 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
91624 // T = M^2 - 2 * S
91625 var t = m.redSqr().redISub(s).redISub(s);
91626 // X3 = T
91627 nx = t;
91628 // Y3 = M * (S - T) - 8 * YYYY
91629 var yyyy8 = yyyy.redIAdd(yyyy);
91630 yyyy8 = yyyy8.redIAdd(yyyy8);
91631 yyyy8 = yyyy8.redIAdd(yyyy8);
91632 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91633 // Z3 = 2 * Y1
91634 nz = this.y.redAdd(this.y);
91635 } else {
91636 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
91637 // 3M + 5S
91638
91639 // delta = Z1^2
91640 var delta = this.z.redSqr();
91641 // gamma = Y1^2
91642 var gamma = this.y.redSqr();
91643 // beta = X1 * gamma
91644 var beta = this.x.redMul(gamma);
91645 // alpha = 3 * (X1 - delta) * (X1 + delta)
91646 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
91647 alpha = alpha.redAdd(alpha).redIAdd(alpha);
91648 // X3 = alpha^2 - 8 * beta
91649 var beta4 = beta.redIAdd(beta);
91650 beta4 = beta4.redIAdd(beta4);
91651 var beta8 = beta4.redAdd(beta4);
91652 nx = alpha.redSqr().redISub(beta8);
91653 // Z3 = (Y1 + Z1)^2 - gamma - delta
91654 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
91655 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
91656 var ggamma8 = gamma.redSqr();
91657 ggamma8 = ggamma8.redIAdd(ggamma8);
91658 ggamma8 = ggamma8.redIAdd(ggamma8);
91659 ggamma8 = ggamma8.redIAdd(ggamma8);
91660 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
91661 }
91662
91663 return this.curve.jpoint(nx, ny, nz);
91664 };
91665
91666 JPoint.prototype._dbl = function _dbl() {
91667 var a = this.curve.a;
91668
91669 // 4M + 6S + 10A
91670 var jx = this.x;
91671 var jy = this.y;
91672 var jz = this.z;
91673 var jz4 = jz.redSqr().redSqr();
91674
91675 var jx2 = jx.redSqr();
91676 var jy2 = jy.redSqr();
91677
91678 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91679
91680 var jxd4 = jx.redAdd(jx);
91681 jxd4 = jxd4.redIAdd(jxd4);
91682 var t1 = jxd4.redMul(jy2);
91683 var nx = c.redSqr().redISub(t1.redAdd(t1));
91684 var t2 = t1.redISub(nx);
91685
91686 var jyd8 = jy2.redSqr();
91687 jyd8 = jyd8.redIAdd(jyd8);
91688 jyd8 = jyd8.redIAdd(jyd8);
91689 jyd8 = jyd8.redIAdd(jyd8);
91690 var ny = c.redMul(t2).redISub(jyd8);
91691 var nz = jy.redAdd(jy).redMul(jz);
91692
91693 return this.curve.jpoint(nx, ny, nz);
91694 };
91695
91696 JPoint.prototype.trpl = function trpl() {
91697 if (!this.curve.zeroA)
91698 return this.dbl().add(this);
91699
91700 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
91701 // 5M + 10S + ...
91702
91703 // XX = X1^2
91704 var xx = this.x.redSqr();
91705 // YY = Y1^2
91706 var yy = this.y.redSqr();
91707 // ZZ = Z1^2
91708 var zz = this.z.redSqr();
91709 // YYYY = YY^2
91710 var yyyy = yy.redSqr();
91711 // M = 3 * XX + a * ZZ2; a = 0
91712 var m = xx.redAdd(xx).redIAdd(xx);
91713 // MM = M^2
91714 var mm = m.redSqr();
91715 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
91716 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91717 e = e.redIAdd(e);
91718 e = e.redAdd(e).redIAdd(e);
91719 e = e.redISub(mm);
91720 // EE = E^2
91721 var ee = e.redSqr();
91722 // T = 16*YYYY
91723 var t = yyyy.redIAdd(yyyy);
91724 t = t.redIAdd(t);
91725 t = t.redIAdd(t);
91726 t = t.redIAdd(t);
91727 // U = (M + E)^2 - MM - EE - T
91728 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
91729 // X3 = 4 * (X1 * EE - 4 * YY * U)
91730 var yyu4 = yy.redMul(u);
91731 yyu4 = yyu4.redIAdd(yyu4);
91732 yyu4 = yyu4.redIAdd(yyu4);
91733 var nx = this.x.redMul(ee).redISub(yyu4);
91734 nx = nx.redIAdd(nx);
91735 nx = nx.redIAdd(nx);
91736 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
91737 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
91738 ny = ny.redIAdd(ny);
91739 ny = ny.redIAdd(ny);
91740 ny = ny.redIAdd(ny);
91741 // Z3 = (Z1 + E)^2 - ZZ - EE
91742 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
91743
91744 return this.curve.jpoint(nx, ny, nz);
91745 };
91746
91747 JPoint.prototype.mul = function mul(k, kbase) {
91748 k = new BN(k, kbase);
91749
91750 return this.curve._wnafMul(this, k);
91751 };
91752
91753 JPoint.prototype.eq = function eq(p) {
91754 if (p.type === 'affine')
91755 return this.eq(p.toJ());
91756
91757 if (this === p)
91758 return true;
91759
91760 // x1 * z2^2 == x2 * z1^2
91761 var z2 = this.z.redSqr();
91762 var pz2 = p.z.redSqr();
91763 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
91764 return false;
91765
91766 // y1 * z2^3 == y2 * z1^3
91767 var z3 = z2.redMul(this.z);
91768 var pz3 = pz2.redMul(p.z);
91769 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
91770 };
91771
91772 JPoint.prototype.eqXToP = function eqXToP(x) {
91773 var zs = this.z.redSqr();
91774 var rx = x.toRed(this.curve.red).redMul(zs);
91775 if (this.x.cmp(rx) === 0)
91776 return true;
91777
91778 var xc = x.clone();
91779 var t = this.curve.redN.redMul(zs);
91780 for (;;) {
91781 xc.iadd(this.curve.n);
91782 if (xc.cmp(this.curve.p) >= 0)
91783 return false;
91784
91785 rx.redIAdd(t);
91786 if (this.x.cmp(rx) === 0)
91787 return true;
91788 }
91789 return false;
91790 };
91791
91792 JPoint.prototype.inspect = function inspect() {
91793 if (this.isInfinity())
91794 return '<EC JPoint Infinity>';
91795 return '<EC JPoint x: ' + this.x.toString(16, 2) +
91796 ' y: ' + this.y.toString(16, 2) +
91797 ' z: ' + this.z.toString(16, 2) + '>';
91798 };
91799
91800 JPoint.prototype.isInfinity = function isInfinity() {
91801 // XXX This code assumes that zero is always zero in red
91802 return this.z.cmpn(0) === 0;
91803 };
91804
91805 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
91806 'use strict';
91807
91808 var curves = exports;
91809
91810 var hash = require('hash.js');
91811 var elliptic = require('../elliptic');
91812
91813 var assert = elliptic.utils.assert;
91814
91815 function PresetCurve(options) {
91816 if (options.type === 'short')
91817 this.curve = new elliptic.curve.short(options);
91818 else if (options.type === 'edwards')
91819 this.curve = new elliptic.curve.edwards(options);
91820 else
91821 this.curve = new elliptic.curve.mont(options);
91822 this.g = this.curve.g;
91823 this.n = this.curve.n;
91824 this.hash = options.hash;
91825
91826 assert(this.g.validate(), 'Invalid curve');
91827 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
91828 }
91829 curves.PresetCurve = PresetCurve;
91830
91831 function defineCurve(name, options) {
91832 Object.defineProperty(curves, name, {
91833 configurable: true,
91834 enumerable: true,
91835 get: function() {
91836 var curve = new PresetCurve(options);
91837 Object.defineProperty(curves, name, {
91838 configurable: true,
91839 enumerable: true,
91840 value: curve
91841 });
91842 return curve;
91843 }
91844 });
91845 }
91846
91847 defineCurve('p192', {
91848 type: 'short',
91849 prime: 'p192',
91850 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
91851 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
91852 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
91853 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
91854 hash: hash.sha256,
91855 gRed: false,
91856 g: [
91857 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
91858 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
91859 ]
91860 });
91861
91862 defineCurve('p224', {
91863 type: 'short',
91864 prime: 'p224',
91865 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
91866 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
91867 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
91868 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
91869 hash: hash.sha256,
91870 gRed: false,
91871 g: [
91872 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
91873 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
91874 ]
91875 });
91876
91877 defineCurve('p256', {
91878 type: 'short',
91879 prime: null,
91880 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
91881 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
91882 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
91883 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
91884 hash: hash.sha256,
91885 gRed: false,
91886 g: [
91887 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
91888 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
91889 ]
91890 });
91891
91892 defineCurve('p384', {
91893 type: 'short',
91894 prime: null,
91895 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91896 'fffffffe ffffffff 00000000 00000000 ffffffff',
91897 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91898 'fffffffe ffffffff 00000000 00000000 fffffffc',
91899 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
91900 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
91901 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
91902 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
91903 hash: hash.sha384,
91904 gRed: false,
91905 g: [
91906 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
91907 '5502f25d bf55296c 3a545e38 72760ab7',
91908 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
91909 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
91910 ]
91911 });
91912
91913 defineCurve('p521', {
91914 type: 'short',
91915 prime: null,
91916 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91917 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91918 'ffffffff ffffffff ffffffff ffffffff ffffffff',
91919 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91920 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91921 'ffffffff ffffffff ffffffff ffffffff fffffffc',
91922 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
91923 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
91924 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
91925 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91926 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
91927 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
91928 hash: hash.sha512,
91929 gRed: false,
91930 g: [
91931 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
91932 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
91933 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
91934 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
91935 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
91936 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
91937 ]
91938 });
91939
91940 defineCurve('curve25519', {
91941 type: 'mont',
91942 prime: 'p25519',
91943 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91944 a: '76d06',
91945 b: '1',
91946 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91947 hash: hash.sha256,
91948 gRed: false,
91949 g: [
91950 '9'
91951 ]
91952 });
91953
91954 defineCurve('ed25519', {
91955 type: 'edwards',
91956 prime: 'p25519',
91957 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91958 a: '-1',
91959 c: '1',
91960 // -121665 * (121666^(-1)) (mod P)
91961 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
91962 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91963 hash: hash.sha256,
91964 gRed: false,
91965 g: [
91966 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
91967
91968 // 4/5
91969 '6666666666666666666666666666666666666666666666666666666666666658'
91970 ]
91971 });
91972
91973 var pre;
91974 try {
91975 pre = require('./precomputed/secp256k1');
91976 } catch (e) {
91977 pre = undefined;
91978 }
91979
91980 defineCurve('secp256k1', {
91981 type: 'short',
91982 prime: 'k256',
91983 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
91984 a: '0',
91985 b: '7',
91986 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
91987 h: '1',
91988 hash: hash.sha256,
91989
91990 // Precomputed endomorphism
91991 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
91992 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
91993 basis: [
91994 {
91995 a: '3086d221a7d46bcde86c90e49284eb15',
91996 b: '-e4437ed6010e88286f547fa90abfe4c3'
91997 },
91998 {
91999 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
92000 b: '3086d221a7d46bcde86c90e49284eb15'
92001 }
92002 ],
92003
92004 gRed: false,
92005 g: [
92006 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
92007 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
92008 pre
92009 ]
92010 });
92011
92012 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
92013 'use strict';
92014
92015 var BN = require('bn.js');
92016 var elliptic = require('../../elliptic');
92017 var utils = elliptic.utils;
92018 var assert = utils.assert;
92019
92020 var KeyPair = require('./key');
92021 var Signature = require('./signature');
92022
92023 function EC(options) {
92024 if (!(this instanceof EC))
92025 return new EC(options);
92026
92027 // Shortcut `elliptic.ec(curve-name)`
92028 if (typeof options === 'string') {
92029 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
92030
92031 options = elliptic.curves[options];
92032 }
92033
92034 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
92035 if (options instanceof elliptic.curves.PresetCurve)
92036 options = { curve: options };
92037
92038 this.curve = options.curve.curve;
92039 this.n = this.curve.n;
92040 this.nh = this.n.ushrn(1);
92041 this.g = this.curve.g;
92042
92043 // Point on curve
92044 this.g = options.curve.g;
92045 this.g.precompute(options.curve.n.bitLength() + 1);
92046
92047 // Hash for function for DRBG
92048 this.hash = options.hash || options.curve.hash;
92049 }
92050 module.exports = EC;
92051
92052 EC.prototype.keyPair = function keyPair(options) {
92053 return new KeyPair(this, options);
92054 };
92055
92056 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
92057 return KeyPair.fromPrivate(this, priv, enc);
92058 };
92059
92060 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
92061 return KeyPair.fromPublic(this, pub, enc);
92062 };
92063
92064 EC.prototype.genKeyPair = function genKeyPair(options) {
92065 if (!options)
92066 options = {};
92067
92068 // Instantiate Hmac_DRBG
92069 var drbg = new elliptic.hmacDRBG({
92070 hash: this.hash,
92071 pers: options.pers,
92072 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
92073 nonce: this.n.toArray()
92074 });
92075
92076 var bytes = this.n.byteLength();
92077 var ns2 = this.n.sub(new BN(2));
92078 do {
92079 var priv = new BN(drbg.generate(bytes));
92080 if (priv.cmp(ns2) > 0)
92081 continue;
92082
92083 priv.iaddn(1);
92084 return this.keyFromPrivate(priv);
92085 } while (true);
92086 };
92087
92088 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
92089 var delta = msg.byteLength() * 8 - this.n.bitLength();
92090 if (delta > 0)
92091 msg = msg.ushrn(delta);
92092 if (!truncOnly && msg.cmp(this.n) >= 0)
92093 return msg.sub(this.n);
92094 else
92095 return msg;
92096 };
92097
92098 EC.prototype.sign = function sign(msg, key, enc, options) {
92099 if (typeof enc === 'object') {
92100 options = enc;
92101 enc = null;
92102 }
92103 if (!options)
92104 options = {};
92105
92106 key = this.keyFromPrivate(key, enc);
92107 msg = this._truncateToN(new BN(msg, 16));
92108
92109 // Zero-extend key to provide enough entropy
92110 var bytes = this.n.byteLength();
92111 var bkey = key.getPrivate().toArray('be', bytes);
92112
92113 // Zero-extend nonce to have the same byte size as N
92114 var nonce = msg.toArray('be', bytes);
92115
92116 // Instantiate Hmac_DRBG
92117 var drbg = new elliptic.hmacDRBG({
92118 hash: this.hash,
92119 entropy: bkey,
92120 nonce: nonce,
92121 pers: options.pers,
92122 persEnc: options.persEnc
92123 });
92124
92125 // Number of bytes to generate
92126 var ns1 = this.n.sub(new BN(1));
92127
92128 for (var iter = 0; true; iter++) {
92129 var k = options.k ?
92130 options.k(iter) :
92131 new BN(drbg.generate(this.n.byteLength()));
92132 k = this._truncateToN(k, true);
92133 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
92134 continue;
92135
92136 var kp = this.g.mul(k);
92137 if (kp.isInfinity())
92138 continue;
92139
92140 var kpX = kp.getX();
92141 var r = kpX.umod(this.n);
92142 if (r.cmpn(0) === 0)
92143 continue;
92144
92145 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
92146 s = s.umod(this.n);
92147 if (s.cmpn(0) === 0)
92148 continue;
92149
92150 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
92151 (kpX.cmp(r) !== 0 ? 2 : 0);
92152
92153 // Use complement of `s`, if it is > `n / 2`
92154 if (options.canonical && s.cmp(this.nh) > 0) {
92155 s = this.n.sub(s);
92156 recoveryParam ^= 1;
92157 }
92158
92159 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
92160 }
92161 };
92162
92163 EC.prototype.verify = function verify(msg, signature, key, enc) {
92164 msg = this._truncateToN(new BN(msg, 16));
92165 key = this.keyFromPublic(key, enc);
92166 signature = new Signature(signature, 'hex');
92167
92168 // Perform primitive values validation
92169 var r = signature.r;
92170 var s = signature.s;
92171 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
92172 return false;
92173 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
92174 return false;
92175
92176 // Validate signature
92177 var sinv = s.invm(this.n);
92178 var u1 = sinv.mul(msg).umod(this.n);
92179 var u2 = sinv.mul(r).umod(this.n);
92180
92181 if (!this.curve._maxwellTrick) {
92182 var p = this.g.mulAdd(u1, key.getPublic(), u2);
92183 if (p.isInfinity())
92184 return false;
92185
92186 return p.getX().umod(this.n).cmp(r) === 0;
92187 }
92188
92189 // NOTE: Greg Maxwell's trick, inspired by:
92190 // https://git.io/vad3K
92191
92192 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
92193 if (p.isInfinity())
92194 return false;
92195
92196 // Compare `p.x` of Jacobian point with `r`,
92197 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
92198 // inverse of `p.z^2`
92199 return p.eqXToP(r);
92200 };
92201
92202 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
92203 assert((3 & j) === j, 'The recovery param is more than two bits');
92204 signature = new Signature(signature, enc);
92205
92206 var n = this.n;
92207 var e = new BN(msg);
92208 var r = signature.r;
92209 var s = signature.s;
92210
92211 // A set LSB signifies that the y-coordinate is odd
92212 var isYOdd = j & 1;
92213 var isSecondKey = j >> 1;
92214 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
92215 throw new Error('Unable to find sencond key candinate');
92216
92217 // 1.1. Let x = r + jn.
92218 if (isSecondKey)
92219 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
92220 else
92221 r = this.curve.pointFromX(r, isYOdd);
92222
92223 var rInv = signature.r.invm(n);
92224 var s1 = n.sub(e).mul(rInv).umod(n);
92225 var s2 = s.mul(rInv).umod(n);
92226
92227 // 1.6.1 Compute Q = r^-1 (sR - eG)
92228 // Q = r^-1 (sR + -eG)
92229 return this.g.mulAdd(s1, r, s2);
92230 };
92231
92232 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
92233 signature = new Signature(signature, enc);
92234 if (signature.recoveryParam !== null)
92235 return signature.recoveryParam;
92236
92237 for (var i = 0; i < 4; i++) {
92238 var Qprime;
92239 try {
92240 Qprime = this.recoverPubKey(e, signature, i);
92241 } catch (e) {
92242 continue;
92243 }
92244
92245 if (Qprime.eq(Q))
92246 return i;
92247 }
92248 throw new Error('Unable to find valid recovery factor');
92249 };
92250
92251 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
92252 'use strict';
92253
92254 var BN = require('bn.js');
92255 var elliptic = require('../../elliptic');
92256 var utils = elliptic.utils;
92257 var assert = utils.assert;
92258
92259 function KeyPair(ec, options) {
92260 this.ec = ec;
92261 this.priv = null;
92262 this.pub = null;
92263
92264 // KeyPair(ec, { priv: ..., pub: ... })
92265 if (options.priv)
92266 this._importPrivate(options.priv, options.privEnc);
92267 if (options.pub)
92268 this._importPublic(options.pub, options.pubEnc);
92269 }
92270 module.exports = KeyPair;
92271
92272 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
92273 if (pub instanceof KeyPair)
92274 return pub;
92275
92276 return new KeyPair(ec, {
92277 pub: pub,
92278 pubEnc: enc
92279 });
92280 };
92281
92282 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
92283 if (priv instanceof KeyPair)
92284 return priv;
92285
92286 return new KeyPair(ec, {
92287 priv: priv,
92288 privEnc: enc
92289 });
92290 };
92291
92292 KeyPair.prototype.validate = function validate() {
92293 var pub = this.getPublic();
92294
92295 if (pub.isInfinity())
92296 return { result: false, reason: 'Invalid public key' };
92297 if (!pub.validate())
92298 return { result: false, reason: 'Public key is not a point' };
92299 if (!pub.mul(this.ec.curve.n).isInfinity())
92300 return { result: false, reason: 'Public key * N != O' };
92301
92302 return { result: true, reason: null };
92303 };
92304
92305 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
92306 // compact is optional argument
92307 if (typeof compact === 'string') {
92308 enc = compact;
92309 compact = null;
92310 }
92311
92312 if (!this.pub)
92313 this.pub = this.ec.g.mul(this.priv);
92314
92315 if (!enc)
92316 return this.pub;
92317
92318 return this.pub.encode(enc, compact);
92319 };
92320
92321 KeyPair.prototype.getPrivate = function getPrivate(enc) {
92322 if (enc === 'hex')
92323 return this.priv.toString(16, 2);
92324 else
92325 return this.priv;
92326 };
92327
92328 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
92329 this.priv = new BN(key, enc || 16);
92330
92331 // Ensure that the priv won't be bigger than n, otherwise we may fail
92332 // in fixed multiplication method
92333 this.priv = this.priv.umod(this.ec.curve.n);
92334 };
92335
92336 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
92337 if (key.x || key.y) {
92338 // Montgomery points only have an `x` coordinate.
92339 // Weierstrass/Edwards points on the other hand have both `x` and
92340 // `y` coordinates.
92341 if (this.ec.curve.type === 'mont') {
92342 assert(key.x, 'Need x coordinate');
92343 } else if (this.ec.curve.type === 'short' ||
92344 this.ec.curve.type === 'edwards') {
92345 assert(key.x && key.y, 'Need both x and y coordinate');
92346 }
92347 this.pub = this.ec.curve.point(key.x, key.y);
92348 return;
92349 }
92350 this.pub = this.ec.curve.decodePoint(key, enc);
92351 };
92352
92353 // ECDH
92354 KeyPair.prototype.derive = function derive(pub) {
92355 return pub.mul(this.priv).getX();
92356 };
92357
92358 // ECDSA
92359 KeyPair.prototype.sign = function sign(msg, enc, options) {
92360 return this.ec.sign(msg, this, enc, options);
92361 };
92362
92363 KeyPair.prototype.verify = function verify(msg, signature) {
92364 return this.ec.verify(msg, signature, this);
92365 };
92366
92367 KeyPair.prototype.inspect = function inspect() {
92368 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
92369 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
92370 };
92371
92372 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
92373 'use strict';
92374
92375 var BN = require('bn.js');
92376
92377 var elliptic = require('../../elliptic');
92378 var utils = elliptic.utils;
92379 var assert = utils.assert;
92380
92381 function Signature(options, enc) {
92382 if (options instanceof Signature)
92383 return options;
92384
92385 if (this._importDER(options, enc))
92386 return;
92387
92388 assert(options.r && options.s, 'Signature without r or s');
92389 this.r = new BN(options.r, 16);
92390 this.s = new BN(options.s, 16);
92391 if (options.recoveryParam === undefined)
92392 this.recoveryParam = null;
92393 else
92394 this.recoveryParam = options.recoveryParam;
92395 }
92396 module.exports = Signature;
92397
92398 function Position() {
92399 this.place = 0;
92400 }
92401
92402 function getLength(buf, p) {
92403 var initial = buf[p.place++];
92404 if (!(initial & 0x80)) {
92405 return initial;
92406 }
92407 var octetLen = initial & 0xf;
92408 var val = 0;
92409 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
92410 val <<= 8;
92411 val |= buf[off];
92412 }
92413 p.place = off;
92414 return val;
92415 }
92416
92417 function rmPadding(buf) {
92418 var i = 0;
92419 var len = buf.length - 1;
92420 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
92421 i++;
92422 }
92423 if (i === 0) {
92424 return buf;
92425 }
92426 return buf.slice(i);
92427 }
92428
92429 Signature.prototype._importDER = function _importDER(data, enc) {
92430 data = utils.toArray(data, enc);
92431 var p = new Position();
92432 if (data[p.place++] !== 0x30) {
92433 return false;
92434 }
92435 var len = getLength(data, p);
92436 if ((len + p.place) !== data.length) {
92437 return false;
92438 }
92439 if (data[p.place++] !== 0x02) {
92440 return false;
92441 }
92442 var rlen = getLength(data, p);
92443 var r = data.slice(p.place, rlen + p.place);
92444 p.place += rlen;
92445 if (data[p.place++] !== 0x02) {
92446 return false;
92447 }
92448 var slen = getLength(data, p);
92449 if (data.length !== slen + p.place) {
92450 return false;
92451 }
92452 var s = data.slice(p.place, slen + p.place);
92453 if (r[0] === 0 && (r[1] & 0x80)) {
92454 r = r.slice(1);
92455 }
92456 if (s[0] === 0 && (s[1] & 0x80)) {
92457 s = s.slice(1);
92458 }
92459
92460 this.r = new BN(r);
92461 this.s = new BN(s);
92462 this.recoveryParam = null;
92463
92464 return true;
92465 };
92466
92467 function constructLength(arr, len) {
92468 if (len < 0x80) {
92469 arr.push(len);
92470 return;
92471 }
92472 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
92473 arr.push(octets | 0x80);
92474 while (--octets) {
92475 arr.push((len >>> (octets << 3)) & 0xff);
92476 }
92477 arr.push(len);
92478 }
92479
92480 Signature.prototype.toDER = function toDER(enc) {
92481 var r = this.r.toArray();
92482 var s = this.s.toArray();
92483
92484 // Pad values
92485 if (r[0] & 0x80)
92486 r = [ 0 ].concat(r);
92487 // Pad values
92488 if (s[0] & 0x80)
92489 s = [ 0 ].concat(s);
92490
92491 r = rmPadding(r);
92492 s = rmPadding(s);
92493
92494 while (!s[0] && !(s[1] & 0x80)) {
92495 s = s.slice(1);
92496 }
92497 var arr = [ 0x02 ];
92498 constructLength(arr, r.length);
92499 arr = arr.concat(r);
92500 arr.push(0x02);
92501 constructLength(arr, s.length);
92502 var backHalf = arr.concat(s);
92503 var res = [ 0x30 ];
92504 constructLength(res, backHalf.length);
92505 res = res.concat(backHalf);
92506 return utils.encode(res, enc);
92507 };
92508
92509 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
92510 'use strict';
92511
92512 var hash = require('hash.js');
92513 var elliptic = require('../../elliptic');
92514 var utils = elliptic.utils;
92515 var assert = utils.assert;
92516 var parseBytes = utils.parseBytes;
92517 var KeyPair = require('./key');
92518 var Signature = require('./signature');
92519
92520 function EDDSA(curve) {
92521 assert(curve === 'ed25519', 'only tested with ed25519 so far');
92522
92523 if (!(this instanceof EDDSA))
92524 return new EDDSA(curve);
92525
92526 var curve = elliptic.curves[curve].curve;
92527 this.curve = curve;
92528 this.g = curve.g;
92529 this.g.precompute(curve.n.bitLength() + 1);
92530
92531 this.pointClass = curve.point().constructor;
92532 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
92533 this.hash = hash.sha512;
92534 }
92535
92536 module.exports = EDDSA;
92537
92538 /**
92539 * @param {Array|String} message - message bytes
92540 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
92541 * @returns {Signature} - signature
92542 */
92543 EDDSA.prototype.sign = function sign(message, secret) {
92544 message = parseBytes(message);
92545 var key = this.keyFromSecret(secret);
92546 var r = this.hashInt(key.messagePrefix(), message);
92547 var R = this.g.mul(r);
92548 var Rencoded = this.encodePoint(R);
92549 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
92550 .mul(key.priv());
92551 var S = r.add(s_).umod(this.curve.n);
92552 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
92553 };
92554
92555 /**
92556 * @param {Array} message - message bytes
92557 * @param {Array|String|Signature} sig - sig bytes
92558 * @param {Array|String|Point|KeyPair} pub - public key
92559 * @returns {Boolean} - true if public key matches sig of message
92560 */
92561 EDDSA.prototype.verify = function verify(message, sig, pub) {
92562 message = parseBytes(message);
92563 sig = this.makeSignature(sig);
92564 var key = this.keyFromPublic(pub);
92565 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
92566 var SG = this.g.mul(sig.S());
92567 var RplusAh = sig.R().add(key.pub().mul(h));
92568 return RplusAh.eq(SG);
92569 };
92570
92571 EDDSA.prototype.hashInt = function hashInt() {
92572 var hash = this.hash();
92573 for (var i = 0; i < arguments.length; i++)
92574 hash.update(arguments[i]);
92575 return utils.intFromLE(hash.digest()).umod(this.curve.n);
92576 };
92577
92578 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
92579 return KeyPair.fromPublic(this, pub);
92580 };
92581
92582 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
92583 return KeyPair.fromSecret(this, secret);
92584 };
92585
92586 EDDSA.prototype.makeSignature = function makeSignature(sig) {
92587 if (sig instanceof Signature)
92588 return sig;
92589 return new Signature(this, sig);
92590 };
92591
92592 /**
92593 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
92594 *
92595 * EDDSA defines methods for encoding and decoding points and integers. These are
92596 * helper convenience methods, that pass along to utility functions implied
92597 * parameters.
92598 *
92599 */
92600 EDDSA.prototype.encodePoint = function encodePoint(point) {
92601 var enc = point.getY().toArray('le', this.encodingLength);
92602 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
92603 return enc;
92604 };
92605
92606 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
92607 bytes = utils.parseBytes(bytes);
92608
92609 var lastIx = bytes.length - 1;
92610 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
92611 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
92612
92613 var y = utils.intFromLE(normed);
92614 return this.curve.pointFromY(y, xIsOdd);
92615 };
92616
92617 EDDSA.prototype.encodeInt = function encodeInt(num) {
92618 return num.toArray('le', this.encodingLength);
92619 };
92620
92621 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
92622 return utils.intFromLE(bytes);
92623 };
92624
92625 EDDSA.prototype.isPoint = function isPoint(val) {
92626 return val instanceof this.pointClass;
92627 };
92628
92629 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
92630 'use strict';
92631
92632 var elliptic = require('../../elliptic');
92633 var utils = elliptic.utils;
92634 var assert = utils.assert;
92635 var parseBytes = utils.parseBytes;
92636 var cachedProperty = utils.cachedProperty;
92637
92638 /**
92639 * @param {EDDSA} eddsa - instance
92640 * @param {Object} params - public/private key parameters
92641 *
92642 * @param {Array<Byte>} [params.secret] - secret seed bytes
92643 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
92644 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
92645 *
92646 */
92647 function KeyPair(eddsa, params) {
92648 this.eddsa = eddsa;
92649 this._secret = parseBytes(params.secret);
92650 if (eddsa.isPoint(params.pub))
92651 this._pub = params.pub;
92652 else
92653 this._pubBytes = parseBytes(params.pub);
92654 }
92655
92656 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
92657 if (pub instanceof KeyPair)
92658 return pub;
92659 return new KeyPair(eddsa, { pub: pub });
92660 };
92661
92662 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
92663 if (secret instanceof KeyPair)
92664 return secret;
92665 return new KeyPair(eddsa, { secret: secret });
92666 };
92667
92668 KeyPair.prototype.secret = function secret() {
92669 return this._secret;
92670 };
92671
92672 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
92673 return this.eddsa.encodePoint(this.pub());
92674 });
92675
92676 cachedProperty(KeyPair, 'pub', function pub() {
92677 if (this._pubBytes)
92678 return this.eddsa.decodePoint(this._pubBytes);
92679 return this.eddsa.g.mul(this.priv());
92680 });
92681
92682 cachedProperty(KeyPair, 'privBytes', function privBytes() {
92683 var eddsa = this.eddsa;
92684 var hash = this.hash();
92685 var lastIx = eddsa.encodingLength - 1;
92686
92687 var a = hash.slice(0, eddsa.encodingLength);
92688 a[0] &= 248;
92689 a[lastIx] &= 127;
92690 a[lastIx] |= 64;
92691
92692 return a;
92693 });
92694
92695 cachedProperty(KeyPair, 'priv', function priv() {
92696 return this.eddsa.decodeInt(this.privBytes());
92697 });
92698
92699 cachedProperty(KeyPair, 'hash', function hash() {
92700 return this.eddsa.hash().update(this.secret()).digest();
92701 });
92702
92703 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
92704 return this.hash().slice(this.eddsa.encodingLength);
92705 });
92706
92707 KeyPair.prototype.sign = function sign(message) {
92708 assert(this._secret, 'KeyPair can only verify');
92709 return this.eddsa.sign(message, this);
92710 };
92711
92712 KeyPair.prototype.verify = function verify(message, sig) {
92713 return this.eddsa.verify(message, sig, this);
92714 };
92715
92716 KeyPair.prototype.getSecret = function getSecret(enc) {
92717 assert(this._secret, 'KeyPair is public only');
92718 return utils.encode(this.secret(), enc);
92719 };
92720
92721 KeyPair.prototype.getPublic = function getPublic(enc) {
92722 return utils.encode(this.pubBytes(), enc);
92723 };
92724
92725 module.exports = KeyPair;
92726
92727 },{"../../elliptic":39}],51:[function(require,module,exports){
92728 'use strict';
92729
92730 var BN = require('bn.js');
92731 var elliptic = require('../../elliptic');
92732 var utils = elliptic.utils;
92733 var assert = utils.assert;
92734 var cachedProperty = utils.cachedProperty;
92735 var parseBytes = utils.parseBytes;
92736
92737 /**
92738 * @param {EDDSA} eddsa - eddsa instance
92739 * @param {Array<Bytes>|Object} sig -
92740 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
92741 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
92742 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
92743 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
92744 */
92745 function Signature(eddsa, sig) {
92746 this.eddsa = eddsa;
92747
92748 if (typeof sig !== 'object')
92749 sig = parseBytes(sig);
92750
92751 if (Array.isArray(sig)) {
92752 sig = {
92753 R: sig.slice(0, eddsa.encodingLength),
92754 S: sig.slice(eddsa.encodingLength)
92755 };
92756 }
92757
92758 assert(sig.R && sig.S, 'Signature without R or S');
92759
92760 if (eddsa.isPoint(sig.R))
92761 this._R = sig.R;
92762 if (sig.S instanceof BN)
92763 this._S = sig.S;
92764
92765 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
92766 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
92767 }
92768
92769 cachedProperty(Signature, 'S', function S() {
92770 return this.eddsa.decodeInt(this.Sencoded());
92771 });
92772
92773 cachedProperty(Signature, 'R', function R() {
92774 return this.eddsa.decodePoint(this.Rencoded());
92775 });
92776
92777 cachedProperty(Signature, 'Rencoded', function Rencoded() {
92778 return this.eddsa.encodePoint(this.R());
92779 });
92780
92781 cachedProperty(Signature, 'Sencoded', function Sencoded() {
92782 return this.eddsa.encodeInt(this.S());
92783 });
92784
92785 Signature.prototype.toBytes = function toBytes() {
92786 return this.Rencoded().concat(this.Sencoded());
92787 };
92788
92789 Signature.prototype.toHex = function toHex() {
92790 return utils.encode(this.toBytes(), 'hex').toUpperCase();
92791 };
92792
92793 module.exports = Signature;
92794
92795 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
92796 'use strict';
92797
92798 var hash = require('hash.js');
92799 var elliptic = require('../elliptic');
92800 var utils = elliptic.utils;
92801 var assert = utils.assert;
92802
92803 function HmacDRBG(options) {
92804 if (!(this instanceof HmacDRBG))
92805 return new HmacDRBG(options);
92806 this.hash = options.hash;
92807 this.predResist = !!options.predResist;
92808
92809 this.outLen = this.hash.outSize;
92810 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
92811
92812 this.reseed = null;
92813 this.reseedInterval = null;
92814 this.K = null;
92815 this.V = null;
92816
92817 var entropy = utils.toArray(options.entropy, options.entropyEnc);
92818 var nonce = utils.toArray(options.nonce, options.nonceEnc);
92819 var pers = utils.toArray(options.pers, options.persEnc);
92820 assert(entropy.length >= (this.minEntropy / 8),
92821 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92822 this._init(entropy, nonce, pers);
92823 }
92824 module.exports = HmacDRBG;
92825
92826 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
92827 var seed = entropy.concat(nonce).concat(pers);
92828
92829 this.K = new Array(this.outLen / 8);
92830 this.V = new Array(this.outLen / 8);
92831 for (var i = 0; i < this.V.length; i++) {
92832 this.K[i] = 0x00;
92833 this.V[i] = 0x01;
92834 }
92835
92836 this._update(seed);
92837 this.reseed = 1;
92838 this.reseedInterval = 0x1000000000000; // 2^48
92839 };
92840
92841 HmacDRBG.prototype._hmac = function hmac() {
92842 return new hash.hmac(this.hash, this.K);
92843 };
92844
92845 HmacDRBG.prototype._update = function update(seed) {
92846 var kmac = this._hmac()
92847 .update(this.V)
92848 .update([ 0x00 ]);
92849 if (seed)
92850 kmac = kmac.update(seed);
92851 this.K = kmac.digest();
92852 this.V = this._hmac().update(this.V).digest();
92853 if (!seed)
92854 return;
92855
92856 this.K = this._hmac()
92857 .update(this.V)
92858 .update([ 0x01 ])
92859 .update(seed)
92860 .digest();
92861 this.V = this._hmac().update(this.V).digest();
92862 };
92863
92864 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
92865 // Optional entropy enc
92866 if (typeof entropyEnc !== 'string') {
92867 addEnc = add;
92868 add = entropyEnc;
92869 entropyEnc = null;
92870 }
92871
92872 entropy = utils.toBuffer(entropy, entropyEnc);
92873 add = utils.toBuffer(add, addEnc);
92874
92875 assert(entropy.length >= (this.minEntropy / 8),
92876 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92877
92878 this._update(entropy.concat(add || []));
92879 this.reseed = 1;
92880 };
92881
92882 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
92883 if (this.reseed > this.reseedInterval)
92884 throw new Error('Reseed is required');
92885
92886 // Optional encoding
92887 if (typeof enc !== 'string') {
92888 addEnc = add;
92889 add = enc;
92890 enc = null;
92891 }
92892
92893 // Optional additional data
92894 if (add) {
92895 add = utils.toArray(add, addEnc);
92896 this._update(add);
92897 }
92898
92899 var temp = [];
92900 while (temp.length < len) {
92901 this.V = this._hmac().update(this.V).digest();
92902 temp = temp.concat(this.V);
92903 }
92904
92905 var res = temp.slice(0, len);
92906 this._update(add);
92907 this.reseed++;
92908 return utils.encode(res, enc);
92909 };
92910
92911 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
92912 module.exports = {
92913 doubles: {
92914 step: 4,
92915 points: [
92916 [
92917 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
92918 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
92919 ],
92920 [
92921 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
92922 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
92923 ],
92924 [
92925 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
92926 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
92927 ],
92928 [
92929 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
92930 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
92931 ],
92932 [
92933 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
92934 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
92935 ],
92936 [
92937 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
92938 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
92939 ],
92940 [
92941 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
92942 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
92943 ],
92944 [
92945 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
92946 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
92947 ],
92948 [
92949 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
92950 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
92951 ],
92952 [
92953 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
92954 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
92955 ],
92956 [
92957 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
92958 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
92959 ],
92960 [
92961 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
92962 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
92963 ],
92964 [
92965 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
92966 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
92967 ],
92968 [
92969 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
92970 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
92971 ],
92972 [
92973 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
92974 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
92975 ],
92976 [
92977 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
92978 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
92979 ],
92980 [
92981 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
92982 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
92983 ],
92984 [
92985 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
92986 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
92987 ],
92988 [
92989 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
92990 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
92991 ],
92992 [
92993 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
92994 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
92995 ],
92996 [
92997 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
92998 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
92999 ],
93000 [
93001 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
93002 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
93003 ],
93004 [
93005 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
93006 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
93007 ],
93008 [
93009 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
93010 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
93011 ],
93012 [
93013 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
93014 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
93015 ],
93016 [
93017 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
93018 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
93019 ],
93020 [
93021 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
93022 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
93023 ],
93024 [
93025 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
93026 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
93027 ],
93028 [
93029 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
93030 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
93031 ],
93032 [
93033 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
93034 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
93035 ],
93036 [
93037 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
93038 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
93039 ],
93040 [
93041 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
93042 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
93043 ],
93044 [
93045 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
93046 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
93047 ],
93048 [
93049 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
93050 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
93051 ],
93052 [
93053 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
93054 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
93055 ],
93056 [
93057 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
93058 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
93059 ],
93060 [
93061 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
93062 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
93063 ],
93064 [
93065 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
93066 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
93067 ],
93068 [
93069 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
93070 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
93071 ],
93072 [
93073 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
93074 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
93075 ],
93076 [
93077 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
93078 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
93079 ],
93080 [
93081 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
93082 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
93083 ],
93084 [
93085 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
93086 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
93087 ],
93088 [
93089 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
93090 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
93091 ],
93092 [
93093 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
93094 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
93095 ],
93096 [
93097 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
93098 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
93099 ],
93100 [
93101 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
93102 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
93103 ],
93104 [
93105 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
93106 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
93107 ],
93108 [
93109 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
93110 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
93111 ],
93112 [
93113 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
93114 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
93115 ],
93116 [
93117 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
93118 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
93119 ],
93120 [
93121 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
93122 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
93123 ],
93124 [
93125 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
93126 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
93127 ],
93128 [
93129 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
93130 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
93131 ],
93132 [
93133 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
93134 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
93135 ],
93136 [
93137 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
93138 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
93139 ],
93140 [
93141 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
93142 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
93143 ],
93144 [
93145 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
93146 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
93147 ],
93148 [
93149 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
93150 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
93151 ],
93152 [
93153 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
93154 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
93155 ],
93156 [
93157 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
93158 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
93159 ],
93160 [
93161 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
93162 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
93163 ],
93164 [
93165 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
93166 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
93167 ],
93168 [
93169 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
93170 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
93171 ],
93172 [
93173 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
93174 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
93175 ]
93176 ]
93177 },
93178 naf: {
93179 wnd: 7,
93180 points: [
93181 [
93182 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
93183 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
93184 ],
93185 [
93186 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
93187 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
93188 ],
93189 [
93190 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
93191 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
93192 ],
93193 [
93194 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
93195 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
93196 ],
93197 [
93198 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
93199 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
93200 ],
93201 [
93202 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
93203 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
93204 ],
93205 [
93206 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
93207 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
93208 ],
93209 [
93210 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
93211 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
93212 ],
93213 [
93214 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
93215 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
93216 ],
93217 [
93218 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
93219 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
93220 ],
93221 [
93222 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
93223 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
93224 ],
93225 [
93226 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
93227 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
93228 ],
93229 [
93230 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
93231 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
93232 ],
93233 [
93234 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
93235 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
93236 ],
93237 [
93238 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
93239 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
93240 ],
93241 [
93242 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
93243 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
93244 ],
93245 [
93246 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
93247 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
93248 ],
93249 [
93250 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
93251 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
93252 ],
93253 [
93254 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
93255 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
93256 ],
93257 [
93258 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
93259 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
93260 ],
93261 [
93262 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
93263 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
93264 ],
93265 [
93266 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
93267 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
93268 ],
93269 [
93270 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
93271 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
93272 ],
93273 [
93274 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
93275 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
93276 ],
93277 [
93278 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
93279 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
93280 ],
93281 [
93282 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
93283 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
93284 ],
93285 [
93286 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
93287 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
93288 ],
93289 [
93290 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
93291 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
93292 ],
93293 [
93294 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
93295 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
93296 ],
93297 [
93298 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
93299 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
93300 ],
93301 [
93302 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
93303 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
93304 ],
93305 [
93306 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
93307 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
93308 ],
93309 [
93310 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
93311 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
93312 ],
93313 [
93314 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
93315 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
93316 ],
93317 [
93318 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
93319 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
93320 ],
93321 [
93322 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
93323 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
93324 ],
93325 [
93326 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
93327 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
93328 ],
93329 [
93330 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
93331 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
93332 ],
93333 [
93334 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
93335 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
93336 ],
93337 [
93338 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
93339 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
93340 ],
93341 [
93342 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
93343 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
93344 ],
93345 [
93346 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
93347 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
93348 ],
93349 [
93350 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
93351 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
93352 ],
93353 [
93354 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
93355 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
93356 ],
93357 [
93358 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
93359 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
93360 ],
93361 [
93362 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
93363 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
93364 ],
93365 [
93366 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
93367 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
93368 ],
93369 [
93370 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
93371 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
93372 ],
93373 [
93374 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
93375 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
93376 ],
93377 [
93378 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
93379 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
93380 ],
93381 [
93382 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
93383 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
93384 ],
93385 [
93386 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
93387 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
93388 ],
93389 [
93390 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
93391 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
93392 ],
93393 [
93394 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
93395 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
93396 ],
93397 [
93398 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
93399 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
93400 ],
93401 [
93402 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
93403 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
93404 ],
93405 [
93406 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
93407 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
93408 ],
93409 [
93410 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
93411 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
93412 ],
93413 [
93414 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
93415 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
93416 ],
93417 [
93418 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
93419 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
93420 ],
93421 [
93422 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
93423 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
93424 ],
93425 [
93426 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
93427 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
93428 ],
93429 [
93430 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
93431 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
93432 ],
93433 [
93434 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
93435 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
93436 ],
93437 [
93438 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
93439 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
93440 ],
93441 [
93442 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
93443 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
93444 ],
93445 [
93446 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
93447 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
93448 ],
93449 [
93450 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
93451 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
93452 ],
93453 [
93454 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
93455 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
93456 ],
93457 [
93458 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
93459 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
93460 ],
93461 [
93462 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
93463 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
93464 ],
93465 [
93466 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
93467 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
93468 ],
93469 [
93470 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
93471 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
93472 ],
93473 [
93474 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
93475 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
93476 ],
93477 [
93478 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
93479 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
93480 ],
93481 [
93482 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
93483 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
93484 ],
93485 [
93486 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
93487 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
93488 ],
93489 [
93490 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
93491 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
93492 ],
93493 [
93494 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
93495 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
93496 ],
93497 [
93498 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
93499 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
93500 ],
93501 [
93502 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
93503 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
93504 ],
93505 [
93506 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
93507 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
93508 ],
93509 [
93510 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
93511 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
93512 ],
93513 [
93514 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
93515 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
93516 ],
93517 [
93518 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
93519 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
93520 ],
93521 [
93522 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
93523 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
93524 ],
93525 [
93526 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
93527 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
93528 ],
93529 [
93530 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
93531 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
93532 ],
93533 [
93534 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
93535 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
93536 ],
93537 [
93538 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
93539 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
93540 ],
93541 [
93542 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
93543 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
93544 ],
93545 [
93546 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
93547 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
93548 ],
93549 [
93550 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
93551 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
93552 ],
93553 [
93554 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
93555 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
93556 ],
93557 [
93558 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
93559 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
93560 ],
93561 [
93562 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
93563 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
93564 ],
93565 [
93566 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
93567 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
93568 ],
93569 [
93570 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
93571 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
93572 ],
93573 [
93574 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
93575 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
93576 ],
93577 [
93578 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
93579 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
93580 ],
93581 [
93582 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
93583 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
93584 ],
93585 [
93586 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
93587 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
93588 ],
93589 [
93590 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
93591 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
93592 ],
93593 [
93594 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
93595 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
93596 ],
93597 [
93598 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
93599 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
93600 ],
93601 [
93602 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
93603 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
93604 ],
93605 [
93606 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
93607 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
93608 ],
93609 [
93610 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
93611 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
93612 ],
93613 [
93614 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
93615 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
93616 ],
93617 [
93618 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
93619 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
93620 ],
93621 [
93622 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
93623 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
93624 ],
93625 [
93626 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
93627 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
93628 ],
93629 [
93630 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
93631 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
93632 ],
93633 [
93634 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
93635 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
93636 ],
93637 [
93638 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
93639 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
93640 ],
93641 [
93642 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
93643 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
93644 ],
93645 [
93646 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
93647 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
93648 ],
93649 [
93650 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
93651 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
93652 ],
93653 [
93654 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
93655 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
93656 ],
93657 [
93658 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
93659 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
93660 ],
93661 [
93662 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
93663 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
93664 ],
93665 [
93666 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
93667 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
93668 ],
93669 [
93670 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
93671 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
93672 ],
93673 [
93674 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
93675 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
93676 ],
93677 [
93678 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
93679 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
93680 ],
93681 [
93682 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
93683 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
93684 ],
93685 [
93686 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
93687 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
93688 ]
93689 ]
93690 }
93691 };
93692
93693 },{}],54:[function(require,module,exports){
93694 'use strict';
93695
93696 var utils = exports;
93697 var BN = require('bn.js');
93698
93699 utils.assert = function assert(val, msg) {
93700 if (!val)
93701 throw new Error(msg || 'Assertion failed');
93702 };
93703
93704 function toArray(msg, enc) {
93705 if (Array.isArray(msg))
93706 return msg.slice();
93707 if (!msg)
93708 return [];
93709 var res = [];
93710 if (typeof msg !== 'string') {
93711 for (var i = 0; i < msg.length; i++)
93712 res[i] = msg[i] | 0;
93713 return res;
93714 }
93715 if (!enc) {
93716 for (var i = 0; i < msg.length; i++) {
93717 var c = msg.charCodeAt(i);
93718 var hi = c >> 8;
93719 var lo = c & 0xff;
93720 if (hi)
93721 res.push(hi, lo);
93722 else
93723 res.push(lo);
93724 }
93725 } else if (enc === 'hex') {
93726 msg = msg.replace(/[^a-z0-9]+/ig, '');
93727 if (msg.length % 2 !== 0)
93728 msg = '0' + msg;
93729 for (var i = 0; i < msg.length; i += 2)
93730 res.push(parseInt(msg[i] + msg[i + 1], 16));
93731 }
93732 return res;
93733 }
93734 utils.toArray = toArray;
93735
93736 function zero2(word) {
93737 if (word.length === 1)
93738 return '0' + word;
93739 else
93740 return word;
93741 }
93742 utils.zero2 = zero2;
93743
93744 function toHex(msg) {
93745 var res = '';
93746 for (var i = 0; i < msg.length; i++)
93747 res += zero2(msg[i].toString(16));
93748 return res;
93749 }
93750 utils.toHex = toHex;
93751
93752 utils.encode = function encode(arr, enc) {
93753 if (enc === 'hex')
93754 return toHex(arr);
93755 else
93756 return arr;
93757 };
93758
93759 // Represent num in a w-NAF form
93760 function getNAF(num, w) {
93761 var naf = [];
93762 var ws = 1 << (w + 1);
93763 var k = num.clone();
93764 while (k.cmpn(1) >= 0) {
93765 var z;
93766 if (k.isOdd()) {
93767 var mod = k.andln(ws - 1);
93768 if (mod > (ws >> 1) - 1)
93769 z = (ws >> 1) - mod;
93770 else
93771 z = mod;
93772 k.isubn(z);
93773 } else {
93774 z = 0;
93775 }
93776 naf.push(z);
93777
93778 // Optimization, shift by word if possible
93779 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
93780 for (var i = 1; i < shift; i++)
93781 naf.push(0);
93782 k.iushrn(shift);
93783 }
93784
93785 return naf;
93786 }
93787 utils.getNAF = getNAF;
93788
93789 // Represent k1, k2 in a Joint Sparse Form
93790 function getJSF(k1, k2) {
93791 var jsf = [
93792 [],
93793 []
93794 ];
93795
93796 k1 = k1.clone();
93797 k2 = k2.clone();
93798 var d1 = 0;
93799 var d2 = 0;
93800 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
93801
93802 // First phase
93803 var m14 = (k1.andln(3) + d1) & 3;
93804 var m24 = (k2.andln(3) + d2) & 3;
93805 if (m14 === 3)
93806 m14 = -1;
93807 if (m24 === 3)
93808 m24 = -1;
93809 var u1;
93810 if ((m14 & 1) === 0) {
93811 u1 = 0;
93812 } else {
93813 var m8 = (k1.andln(7) + d1) & 7;
93814 if ((m8 === 3 || m8 === 5) && m24 === 2)
93815 u1 = -m14;
93816 else
93817 u1 = m14;
93818 }
93819 jsf[0].push(u1);
93820
93821 var u2;
93822 if ((m24 & 1) === 0) {
93823 u2 = 0;
93824 } else {
93825 var m8 = (k2.andln(7) + d2) & 7;
93826 if ((m8 === 3 || m8 === 5) && m14 === 2)
93827 u2 = -m24;
93828 else
93829 u2 = m24;
93830 }
93831 jsf[1].push(u2);
93832
93833 // Second phase
93834 if (2 * d1 === u1 + 1)
93835 d1 = 1 - d1;
93836 if (2 * d2 === u2 + 1)
93837 d2 = 1 - d2;
93838 k1.iushrn(1);
93839 k2.iushrn(1);
93840 }
93841
93842 return jsf;
93843 }
93844 utils.getJSF = getJSF;
93845
93846 function cachedProperty(obj, name, computer) {
93847 var key = '_' + name;
93848 obj.prototype[name] = function cachedProperty() {
93849 return this[key] !== undefined ? this[key] :
93850 this[key] = computer.call(this);
93851 };
93852 }
93853 utils.cachedProperty = cachedProperty;
93854
93855 function parseBytes(bytes) {
93856 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
93857 bytes;
93858 }
93859 utils.parseBytes = parseBytes;
93860
93861 function intFromLE(bytes) {
93862 return new BN(bytes, 'hex', 'le');
93863 }
93864 utils.intFromLE = intFromLE;
93865
93866
93867 },{"bn.js":33}],55:[function(require,module,exports){
93868 module.exports={
93869 "_args": [
93870 [
93871 {
93872 "raw": "elliptic@^6.2.3",
93873 "scope": null,
93874 "escapedName": "elliptic",
93875 "name": "elliptic",
93876 "rawSpec": "^6.2.3",
93877 "spec": ">=6.2.3 <7.0.0",
93878 "type": "range"
93879 },
93880 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
93881 ]
93882 ],
93883 "_from": "elliptic@>=6.2.3 <7.0.0",
93884 "_id": "elliptic@6.3.3",
93885 "_inCache": true,
93886 "_location": "/elliptic",
93887 "_nodeVersion": "7.0.0",
93888 "_npmOperationalInternal": {
93889 "host": "packages-18-east.internal.npmjs.com",
93890 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
93891 },
93892 "_npmUser": {
93893 "name": "indutny",
93894 "email": "fedor@indutny.com"
93895 },
93896 "_npmVersion": "3.10.8",
93897 "_phantomChildren": {},
93898 "_requested": {
93899 "raw": "elliptic@^6.2.3",
93900 "scope": null,
93901 "escapedName": "elliptic",
93902 "name": "elliptic",
93903 "rawSpec": "^6.2.3",
93904 "spec": ">=6.2.3 <7.0.0",
93905 "type": "range"
93906 },
93907 "_requiredBy": [
93908 "/browserify-sign",
93909 "/create-ecdh",
93910 "/secp256k1"
93911 ],
93912 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
93913 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93914 "_shrinkwrap": null,
93915 "_spec": "elliptic@^6.2.3",
93916 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
93917 "author": {
93918 "name": "Fedor Indutny",
93919 "email": "fedor@indutny.com"
93920 },
93921 "bugs": {
93922 "url": "https://github.com/indutny/elliptic/issues"
93923 },
93924 "dependencies": {
93925 "bn.js": "^4.4.0",
93926 "brorand": "^1.0.1",
93927 "hash.js": "^1.0.0",
93928 "inherits": "^2.0.1"
93929 },
93930 "description": "EC cryptography",
93931 "devDependencies": {
93932 "brfs": "^1.4.3",
93933 "coveralls": "^2.11.3",
93934 "grunt": "^0.4.5",
93935 "grunt-browserify": "^5.0.0",
93936 "grunt-cli": "^1.2.0",
93937 "grunt-contrib-connect": "^1.0.0",
93938 "grunt-contrib-copy": "^1.0.0",
93939 "grunt-contrib-uglify": "^1.0.1",
93940 "grunt-mocha-istanbul": "^3.0.1",
93941 "grunt-saucelabs": "^8.6.2",
93942 "istanbul": "^0.4.2",
93943 "jscs": "^2.9.0",
93944 "jshint": "^2.6.0",
93945 "mocha": "^2.1.0"
93946 },
93947 "directories": {},
93948 "dist": {
93949 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93950 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
93951 },
93952 "files": [
93953 "lib"
93954 ],
93955 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
93956 "homepage": "https://github.com/indutny/elliptic",
93957 "keywords": [
93958 "EC",
93959 "Elliptic",
93960 "curve",
93961 "Cryptography"
93962 ],
93963 "license": "MIT",
93964 "main": "lib/elliptic.js",
93965 "maintainers": [
93966 {
93967 "name": "indutny",
93968 "email": "fedor@indutny.com"
93969 }
93970 ],
93971 "name": "elliptic",
93972 "optionalDependencies": {},
93973 "readme": "ERROR: No README data found!",
93974 "repository": {
93975 "type": "git",
93976 "url": "git+ssh://git@github.com/indutny/elliptic.git"
93977 },
93978 "scripts": {
93979 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93980 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93981 "lint": "npm run jscs && npm run jshint",
93982 "test": "npm run lint && npm run unit",
93983 "unit": "istanbul test _mocha --reporter=spec test/index.js",
93984 "version": "grunt dist && git add dist/"
93985 },
93986 "version": "6.3.3"
93987 }
93988
93989 },{}],56:[function(require,module,exports){
93990 (function (Buffer){
93991 'use strict';
93992
93993 var isHexPrefixed = require('is-hex-prefixed');
93994 var stripHexPrefix = require('strip-hex-prefix');
93995
93996 /**
93997 * Pads a `String` to have an even length
93998 * @param {String} value
93999 * @return {String} output
94000 */
94001 function padToEven(value) {
94002 var a = value; // eslint-disable-line
94003
94004 if (typeof a !== 'string') {
94005 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
94006 }
94007
94008 if (a.length % 2) {
94009 a = '0' + a;
94010 }
94011
94012 return a;
94013 }
94014
94015 /**
94016 * Converts a `Number` into a hex `String`
94017 * @param {Number} i
94018 * @return {String}
94019 */
94020 function intToHex(i) {
94021 var hex = i.toString(16); // eslint-disable-line
94022
94023 return '0x' + padToEven(hex);
94024 }
94025
94026 /**
94027 * Converts an `Number` to a `Buffer`
94028 * @param {Number} i
94029 * @return {Buffer}
94030 */
94031 function intToBuffer(i) {
94032 var hex = intToHex(i);
94033
94034 return new Buffer(hex.slice(2), 'hex');
94035 }
94036
94037 /**
94038 * Get the binary size of a string
94039 * @param {String} str
94040 * @return {Number}
94041 */
94042 function getBinarySize(str) {
94043 if (typeof str !== 'string') {
94044 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
94045 }
94046
94047 return Buffer.byteLength(str, 'utf8');
94048 }
94049
94050 /**
94051 * Returns TRUE if the first specified array contains all elements
94052 * from the second one. FALSE otherwise.
94053 *
94054 * @param {array} superset
94055 * @param {array} subset
94056 *
94057 * @returns {boolean}
94058 */
94059 function arrayContainsArray(superset, subset, some) {
94060 if (Array.isArray(superset) !== true) {
94061 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
94062 }
94063 if (Array.isArray(subset) !== true) {
94064 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
94065 }
94066
94067 return subset[Boolean(some) && 'some' || 'every'](function (value) {
94068 return superset.indexOf(value) >= 0;
94069 });
94070 }
94071
94072 /**
94073 * Should be called to get utf8 from it's hex representation
94074 *
94075 * @method toUtf8
94076 * @param {String} string in hex
94077 * @returns {String} ascii string representation of hex value
94078 */
94079 function toUtf8(hex) {
94080 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
94081
94082 return bufferValue.toString('utf8');
94083 }
94084
94085 /**
94086 * Should be called to get ascii from it's hex representation
94087 *
94088 * @method toAscii
94089 * @param {String} string in hex
94090 * @returns {String} ascii string representation of hex value
94091 */
94092 function toAscii(hex) {
94093 var str = ''; // eslint-disable-line
94094 var i = 0,
94095 l = hex.length; // eslint-disable-line
94096
94097 if (hex.substring(0, 2) === '0x') {
94098 i = 2;
94099 }
94100
94101 for (; i < l; i += 2) {
94102 var code = parseInt(hex.substr(i, 2), 16);
94103 str += String.fromCharCode(code);
94104 }
94105
94106 return str;
94107 }
94108
94109 /**
94110 * Should be called to get hex representation (prefixed by 0x) of utf8 string
94111 *
94112 * @method fromUtf8
94113 * @param {String} string
94114 * @param {Number} optional padding
94115 * @returns {String} hex representation of input string
94116 */
94117 function fromUtf8(stringValue) {
94118 var str = new Buffer(stringValue, 'utf8');
94119
94120 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
94121 }
94122
94123 /**
94124 * Should be called to get hex representation (prefixed by 0x) of ascii string
94125 *
94126 * @method fromAscii
94127 * @param {String} string
94128 * @param {Number} optional padding
94129 * @returns {String} hex representation of input string
94130 */
94131 function fromAscii(stringValue) {
94132 var hex = ''; // eslint-disable-line
94133 for (var i = 0; i < stringValue.length; i++) {
94134 // eslint-disable-line
94135 var code = stringValue.charCodeAt(i);
94136 var n = code.toString(16);
94137 hex += n.length < 2 ? '0' + n : n;
94138 }
94139
94140 return '0x' + hex;
94141 }
94142
94143 /**
94144 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
94145 *
94146 * @method getKeys get specific key from inner object array of objects
94147 * @param {String} params
94148 * @param {String} key
94149 * @param {Boolean} allowEmpty
94150 * @returns {Array} output just a simple array of output keys
94151 */
94152 function getKeys(params, key, allowEmpty) {
94153 if (!Array.isArray(params)) {
94154 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
94155 }
94156 if (typeof key !== 'string') {
94157 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
94158 }
94159
94160 var result = []; // eslint-disable-line
94161
94162 for (var i = 0; i < params.length; i++) {
94163 // eslint-disable-line
94164 var value = params[i][key]; // eslint-disable-line
94165 if (allowEmpty && !value) {
94166 value = '';
94167 } else if (typeof value !== 'string') {
94168 throw new Error('invalid abi');
94169 }
94170 result.push(value);
94171 }
94172
94173 return result;
94174 }
94175
94176 /**
94177 * Is the string a hex string.
94178 *
94179 * @method check if string is hex string of specific length
94180 * @param {String} value
94181 * @param {Number} length
94182 * @returns {Boolean} output the string is a hex string
94183 */
94184 function isHexString(value, length) {
94185 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
94186 return false;
94187 }
94188
94189 if (length && value.length !== 2 + 2 * length) {
94190 return false;
94191 }
94192
94193 return true;
94194 }
94195
94196 module.exports = {
94197 arrayContainsArray: arrayContainsArray,
94198 intToBuffer: intToBuffer,
94199 getBinarySize: getBinarySize,
94200 isHexPrefixed: isHexPrefixed,
94201 stripHexPrefix: stripHexPrefix,
94202 padToEven: padToEven,
94203 intToHex: intToHex,
94204 fromAscii: fromAscii,
94205 fromUtf8: fromUtf8,
94206 toAscii: toAscii,
94207 toUtf8: toUtf8,
94208 getKeys: getKeys,
94209 isHexString: isHexString
94210 };
94211 }).call(this,require("buffer").Buffer)
94212 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
94213 var hash = exports;
94214
94215 hash.utils = require('./hash/utils');
94216 hash.common = require('./hash/common');
94217 hash.sha = require('./hash/sha');
94218 hash.ripemd = require('./hash/ripemd');
94219 hash.hmac = require('./hash/hmac');
94220
94221 // Proxy hash functions to the main object
94222 hash.sha1 = hash.sha.sha1;
94223 hash.sha256 = hash.sha.sha256;
94224 hash.sha224 = hash.sha.sha224;
94225 hash.sha384 = hash.sha.sha384;
94226 hash.sha512 = hash.sha.sha512;
94227 hash.ripemd160 = hash.ripemd.ripemd160;
94228
94229 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
94230 var hash = require('../hash');
94231 var utils = hash.utils;
94232 var assert = utils.assert;
94233
94234 function BlockHash() {
94235 this.pending = null;
94236 this.pendingTotal = 0;
94237 this.blockSize = this.constructor.blockSize;
94238 this.outSize = this.constructor.outSize;
94239 this.hmacStrength = this.constructor.hmacStrength;
94240 this.padLength = this.constructor.padLength / 8;
94241 this.endian = 'big';
94242
94243 this._delta8 = this.blockSize / 8;
94244 this._delta32 = this.blockSize / 32;
94245 }
94246 exports.BlockHash = BlockHash;
94247
94248 BlockHash.prototype.update = function update(msg, enc) {
94249 // Convert message to array, pad it, and join into 32bit blocks
94250 msg = utils.toArray(msg, enc);
94251 if (!this.pending)
94252 this.pending = msg;
94253 else
94254 this.pending = this.pending.concat(msg);
94255 this.pendingTotal += msg.length;
94256
94257 // Enough data, try updating
94258 if (this.pending.length >= this._delta8) {
94259 msg = this.pending;
94260
94261 // Process pending data in blocks
94262 var r = msg.length % this._delta8;
94263 this.pending = msg.slice(msg.length - r, msg.length);
94264 if (this.pending.length === 0)
94265 this.pending = null;
94266
94267 msg = utils.join32(msg, 0, msg.length - r, this.endian);
94268 for (var i = 0; i < msg.length; i += this._delta32)
94269 this._update(msg, i, i + this._delta32);
94270 }
94271
94272 return this;
94273 };
94274
94275 BlockHash.prototype.digest = function digest(enc) {
94276 this.update(this._pad());
94277 assert(this.pending === null);
94278
94279 return this._digest(enc);
94280 };
94281
94282 BlockHash.prototype._pad = function pad() {
94283 var len = this.pendingTotal;
94284 var bytes = this._delta8;
94285 var k = bytes - ((len + this.padLength) % bytes);
94286 var res = new Array(k + this.padLength);
94287 res[0] = 0x80;
94288 for (var i = 1; i < k; i++)
94289 res[i] = 0;
94290
94291 // Append length
94292 len <<= 3;
94293 if (this.endian === 'big') {
94294 for (var t = 8; t < this.padLength; t++)
94295 res[i++] = 0;
94296
94297 res[i++] = 0;
94298 res[i++] = 0;
94299 res[i++] = 0;
94300 res[i++] = 0;
94301 res[i++] = (len >>> 24) & 0xff;
94302 res[i++] = (len >>> 16) & 0xff;
94303 res[i++] = (len >>> 8) & 0xff;
94304 res[i++] = len & 0xff;
94305 } else {
94306 res[i++] = len & 0xff;
94307 res[i++] = (len >>> 8) & 0xff;
94308 res[i++] = (len >>> 16) & 0xff;
94309 res[i++] = (len >>> 24) & 0xff;
94310 res[i++] = 0;
94311 res[i++] = 0;
94312 res[i++] = 0;
94313 res[i++] = 0;
94314
94315 for (var t = 8; t < this.padLength; t++)
94316 res[i++] = 0;
94317 }
94318
94319 return res;
94320 };
94321
94322 },{"../hash":57}],59:[function(require,module,exports){
94323 var hmac = exports;
94324
94325 var hash = require('../hash');
94326 var utils = hash.utils;
94327 var assert = utils.assert;
94328
94329 function Hmac(hash, key, enc) {
94330 if (!(this instanceof Hmac))
94331 return new Hmac(hash, key, enc);
94332 this.Hash = hash;
94333 this.blockSize = hash.blockSize / 8;
94334 this.outSize = hash.outSize / 8;
94335 this.inner = null;
94336 this.outer = null;
94337
94338 this._init(utils.toArray(key, enc));
94339 }
94340 module.exports = Hmac;
94341
94342 Hmac.prototype._init = function init(key) {
94343 // Shorten key, if needed
94344 if (key.length > this.blockSize)
94345 key = new this.Hash().update(key).digest();
94346 assert(key.length <= this.blockSize);
94347
94348 // Add padding to key
94349 for (var i = key.length; i < this.blockSize; i++)
94350 key.push(0);
94351
94352 for (var i = 0; i < key.length; i++)
94353 key[i] ^= 0x36;
94354 this.inner = new this.Hash().update(key);
94355
94356 // 0x36 ^ 0x5c = 0x6a
94357 for (var i = 0; i < key.length; i++)
94358 key[i] ^= 0x6a;
94359 this.outer = new this.Hash().update(key);
94360 };
94361
94362 Hmac.prototype.update = function update(msg, enc) {
94363 this.inner.update(msg, enc);
94364 return this;
94365 };
94366
94367 Hmac.prototype.digest = function digest(enc) {
94368 this.outer.update(this.inner.digest());
94369 return this.outer.digest(enc);
94370 };
94371
94372 },{"../hash":57}],60:[function(require,module,exports){
94373 var hash = require('../hash');
94374 var utils = hash.utils;
94375
94376 var rotl32 = utils.rotl32;
94377 var sum32 = utils.sum32;
94378 var sum32_3 = utils.sum32_3;
94379 var sum32_4 = utils.sum32_4;
94380 var BlockHash = hash.common.BlockHash;
94381
94382 function RIPEMD160() {
94383 if (!(this instanceof RIPEMD160))
94384 return new RIPEMD160();
94385
94386 BlockHash.call(this);
94387
94388 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
94389 this.endian = 'little';
94390 }
94391 utils.inherits(RIPEMD160, BlockHash);
94392 exports.ripemd160 = RIPEMD160;
94393
94394 RIPEMD160.blockSize = 512;
94395 RIPEMD160.outSize = 160;
94396 RIPEMD160.hmacStrength = 192;
94397 RIPEMD160.padLength = 64;
94398
94399 RIPEMD160.prototype._update = function update(msg, start) {
94400 var A = this.h[0];
94401 var B = this.h[1];
94402 var C = this.h[2];
94403 var D = this.h[3];
94404 var E = this.h[4];
94405 var Ah = A;
94406 var Bh = B;
94407 var Ch = C;
94408 var Dh = D;
94409 var Eh = E;
94410 for (var j = 0; j < 80; j++) {
94411 var T = sum32(
94412 rotl32(
94413 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
94414 s[j]),
94415 E);
94416 A = E;
94417 E = D;
94418 D = rotl32(C, 10);
94419 C = B;
94420 B = T;
94421 T = sum32(
94422 rotl32(
94423 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
94424 sh[j]),
94425 Eh);
94426 Ah = Eh;
94427 Eh = Dh;
94428 Dh = rotl32(Ch, 10);
94429 Ch = Bh;
94430 Bh = T;
94431 }
94432 T = sum32_3(this.h[1], C, Dh);
94433 this.h[1] = sum32_3(this.h[2], D, Eh);
94434 this.h[2] = sum32_3(this.h[3], E, Ah);
94435 this.h[3] = sum32_3(this.h[4], A, Bh);
94436 this.h[4] = sum32_3(this.h[0], B, Ch);
94437 this.h[0] = T;
94438 };
94439
94440 RIPEMD160.prototype._digest = function digest(enc) {
94441 if (enc === 'hex')
94442 return utils.toHex32(this.h, 'little');
94443 else
94444 return utils.split32(this.h, 'little');
94445 };
94446
94447 function f(j, x, y, z) {
94448 if (j <= 15)
94449 return x ^ y ^ z;
94450 else if (j <= 31)
94451 return (x & y) | ((~x) & z);
94452 else if (j <= 47)
94453 return (x | (~y)) ^ z;
94454 else if (j <= 63)
94455 return (x & z) | (y & (~z));
94456 else
94457 return x ^ (y | (~z));
94458 }
94459
94460 function K(j) {
94461 if (j <= 15)
94462 return 0x00000000;
94463 else if (j <= 31)
94464 return 0x5a827999;
94465 else if (j <= 47)
94466 return 0x6ed9eba1;
94467 else if (j <= 63)
94468 return 0x8f1bbcdc;
94469 else
94470 return 0xa953fd4e;
94471 }
94472
94473 function Kh(j) {
94474 if (j <= 15)
94475 return 0x50a28be6;
94476 else if (j <= 31)
94477 return 0x5c4dd124;
94478 else if (j <= 47)
94479 return 0x6d703ef3;
94480 else if (j <= 63)
94481 return 0x7a6d76e9;
94482 else
94483 return 0x00000000;
94484 }
94485
94486 var r = [
94487 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
94488 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
94489 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
94490 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
94491 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
94492 ];
94493
94494 var rh = [
94495 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
94496 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
94497 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
94498 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
94499 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
94500 ];
94501
94502 var s = [
94503 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
94504 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
94505 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
94506 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
94507 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
94508 ];
94509
94510 var sh = [
94511 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
94512 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
94513 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
94514 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
94515 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
94516 ];
94517
94518 },{"../hash":57}],61:[function(require,module,exports){
94519 var hash = require('../hash');
94520 var utils = hash.utils;
94521 var assert = utils.assert;
94522
94523 var rotr32 = utils.rotr32;
94524 var rotl32 = utils.rotl32;
94525 var sum32 = utils.sum32;
94526 var sum32_4 = utils.sum32_4;
94527 var sum32_5 = utils.sum32_5;
94528 var rotr64_hi = utils.rotr64_hi;
94529 var rotr64_lo = utils.rotr64_lo;
94530 var shr64_hi = utils.shr64_hi;
94531 var shr64_lo = utils.shr64_lo;
94532 var sum64 = utils.sum64;
94533 var sum64_hi = utils.sum64_hi;
94534 var sum64_lo = utils.sum64_lo;
94535 var sum64_4_hi = utils.sum64_4_hi;
94536 var sum64_4_lo = utils.sum64_4_lo;
94537 var sum64_5_hi = utils.sum64_5_hi;
94538 var sum64_5_lo = utils.sum64_5_lo;
94539 var BlockHash = hash.common.BlockHash;
94540
94541 var sha256_K = [
94542 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
94543 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
94544 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
94545 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
94546 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
94547 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
94548 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
94549 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
94550 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
94551 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
94552 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
94553 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
94554 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
94555 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
94556 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
94557 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
94558 ];
94559
94560 var sha512_K = [
94561 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
94562 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
94563 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
94564 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
94565 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
94566 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
94567 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
94568 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
94569 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
94570 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
94571 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
94572 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
94573 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
94574 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
94575 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
94576 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
94577 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
94578 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
94579 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
94580 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
94581 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
94582 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
94583 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
94584 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
94585 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
94586 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
94587 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
94588 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
94589 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
94590 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
94591 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
94592 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
94593 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
94594 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
94595 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
94596 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
94597 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
94598 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
94599 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
94600 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
94601 ];
94602
94603 var sha1_K = [
94604 0x5A827999, 0x6ED9EBA1,
94605 0x8F1BBCDC, 0xCA62C1D6
94606 ];
94607
94608 function SHA256() {
94609 if (!(this instanceof SHA256))
94610 return new SHA256();
94611
94612 BlockHash.call(this);
94613 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
94614 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
94615 this.k = sha256_K;
94616 this.W = new Array(64);
94617 }
94618 utils.inherits(SHA256, BlockHash);
94619 exports.sha256 = SHA256;
94620
94621 SHA256.blockSize = 512;
94622 SHA256.outSize = 256;
94623 SHA256.hmacStrength = 192;
94624 SHA256.padLength = 64;
94625
94626 SHA256.prototype._update = function _update(msg, start) {
94627 var W = this.W;
94628
94629 for (var i = 0; i < 16; i++)
94630 W[i] = msg[start + i];
94631 for (; i < W.length; i++)
94632 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
94633
94634 var a = this.h[0];
94635 var b = this.h[1];
94636 var c = this.h[2];
94637 var d = this.h[3];
94638 var e = this.h[4];
94639 var f = this.h[5];
94640 var g = this.h[6];
94641 var h = this.h[7];
94642
94643 assert(this.k.length === W.length);
94644 for (var i = 0; i < W.length; i++) {
94645 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
94646 var T2 = sum32(s0_256(a), maj32(a, b, c));
94647 h = g;
94648 g = f;
94649 f = e;
94650 e = sum32(d, T1);
94651 d = c;
94652 c = b;
94653 b = a;
94654 a = sum32(T1, T2);
94655 }
94656
94657 this.h[0] = sum32(this.h[0], a);
94658 this.h[1] = sum32(this.h[1], b);
94659 this.h[2] = sum32(this.h[2], c);
94660 this.h[3] = sum32(this.h[3], d);
94661 this.h[4] = sum32(this.h[4], e);
94662 this.h[5] = sum32(this.h[5], f);
94663 this.h[6] = sum32(this.h[6], g);
94664 this.h[7] = sum32(this.h[7], h);
94665 };
94666
94667 SHA256.prototype._digest = function digest(enc) {
94668 if (enc === 'hex')
94669 return utils.toHex32(this.h, 'big');
94670 else
94671 return utils.split32(this.h, 'big');
94672 };
94673
94674 function SHA224() {
94675 if (!(this instanceof SHA224))
94676 return new SHA224();
94677
94678 SHA256.call(this);
94679 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
94680 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
94681 }
94682 utils.inherits(SHA224, SHA256);
94683 exports.sha224 = SHA224;
94684
94685 SHA224.blockSize = 512;
94686 SHA224.outSize = 224;
94687 SHA224.hmacStrength = 192;
94688 SHA224.padLength = 64;
94689
94690 SHA224.prototype._digest = function digest(enc) {
94691 // Just truncate output
94692 if (enc === 'hex')
94693 return utils.toHex32(this.h.slice(0, 7), 'big');
94694 else
94695 return utils.split32(this.h.slice(0, 7), 'big');
94696 };
94697
94698 function SHA512() {
94699 if (!(this instanceof SHA512))
94700 return new SHA512();
94701
94702 BlockHash.call(this);
94703 this.h = [ 0x6a09e667, 0xf3bcc908,
94704 0xbb67ae85, 0x84caa73b,
94705 0x3c6ef372, 0xfe94f82b,
94706 0xa54ff53a, 0x5f1d36f1,
94707 0x510e527f, 0xade682d1,
94708 0x9b05688c, 0x2b3e6c1f,
94709 0x1f83d9ab, 0xfb41bd6b,
94710 0x5be0cd19, 0x137e2179 ];
94711 this.k = sha512_K;
94712 this.W = new Array(160);
94713 }
94714 utils.inherits(SHA512, BlockHash);
94715 exports.sha512 = SHA512;
94716
94717 SHA512.blockSize = 1024;
94718 SHA512.outSize = 512;
94719 SHA512.hmacStrength = 192;
94720 SHA512.padLength = 128;
94721
94722 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
94723 var W = this.W;
94724
94725 // 32 x 32bit words
94726 for (var i = 0; i < 32; i++)
94727 W[i] = msg[start + i];
94728 for (; i < W.length; i += 2) {
94729 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
94730 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
94731 var c1_hi = W[i - 14]; // i - 7
94732 var c1_lo = W[i - 13];
94733 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
94734 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
94735 var c3_hi = W[i - 32]; // i - 16
94736 var c3_lo = W[i - 31];
94737
94738 W[i] = sum64_4_hi(c0_hi, c0_lo,
94739 c1_hi, c1_lo,
94740 c2_hi, c2_lo,
94741 c3_hi, c3_lo);
94742 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
94743 c1_hi, c1_lo,
94744 c2_hi, c2_lo,
94745 c3_hi, c3_lo);
94746 }
94747 };
94748
94749 SHA512.prototype._update = function _update(msg, start) {
94750 this._prepareBlock(msg, start);
94751
94752 var W = this.W;
94753
94754 var ah = this.h[0];
94755 var al = this.h[1];
94756 var bh = this.h[2];
94757 var bl = this.h[3];
94758 var ch = this.h[4];
94759 var cl = this.h[5];
94760 var dh = this.h[6];
94761 var dl = this.h[7];
94762 var eh = this.h[8];
94763 var el = this.h[9];
94764 var fh = this.h[10];
94765 var fl = this.h[11];
94766 var gh = this.h[12];
94767 var gl = this.h[13];
94768 var hh = this.h[14];
94769 var hl = this.h[15];
94770
94771 assert(this.k.length === W.length);
94772 for (var i = 0; i < W.length; i += 2) {
94773 var c0_hi = hh;
94774 var c0_lo = hl;
94775 var c1_hi = s1_512_hi(eh, el);
94776 var c1_lo = s1_512_lo(eh, el);
94777 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
94778 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
94779 var c3_hi = this.k[i];
94780 var c3_lo = this.k[i + 1];
94781 var c4_hi = W[i];
94782 var c4_lo = W[i + 1];
94783
94784 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
94785 c1_hi, c1_lo,
94786 c2_hi, c2_lo,
94787 c3_hi, c3_lo,
94788 c4_hi, c4_lo);
94789 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
94790 c1_hi, c1_lo,
94791 c2_hi, c2_lo,
94792 c3_hi, c3_lo,
94793 c4_hi, c4_lo);
94794
94795 var c0_hi = s0_512_hi(ah, al);
94796 var c0_lo = s0_512_lo(ah, al);
94797 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
94798 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
94799
94800 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
94801 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
94802
94803 hh = gh;
94804 hl = gl;
94805
94806 gh = fh;
94807 gl = fl;
94808
94809 fh = eh;
94810 fl = el;
94811
94812 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
94813 el = sum64_lo(dl, dl, T1_hi, T1_lo);
94814
94815 dh = ch;
94816 dl = cl;
94817
94818 ch = bh;
94819 cl = bl;
94820
94821 bh = ah;
94822 bl = al;
94823
94824 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
94825 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
94826 }
94827
94828 sum64(this.h, 0, ah, al);
94829 sum64(this.h, 2, bh, bl);
94830 sum64(this.h, 4, ch, cl);
94831 sum64(this.h, 6, dh, dl);
94832 sum64(this.h, 8, eh, el);
94833 sum64(this.h, 10, fh, fl);
94834 sum64(this.h, 12, gh, gl);
94835 sum64(this.h, 14, hh, hl);
94836 };
94837
94838 SHA512.prototype._digest = function digest(enc) {
94839 if (enc === 'hex')
94840 return utils.toHex32(this.h, 'big');
94841 else
94842 return utils.split32(this.h, 'big');
94843 };
94844
94845 function SHA384() {
94846 if (!(this instanceof SHA384))
94847 return new SHA384();
94848
94849 SHA512.call(this);
94850 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
94851 0x629a292a, 0x367cd507,
94852 0x9159015a, 0x3070dd17,
94853 0x152fecd8, 0xf70e5939,
94854 0x67332667, 0xffc00b31,
94855 0x8eb44a87, 0x68581511,
94856 0xdb0c2e0d, 0x64f98fa7,
94857 0x47b5481d, 0xbefa4fa4 ];
94858 }
94859 utils.inherits(SHA384, SHA512);
94860 exports.sha384 = SHA384;
94861
94862 SHA384.blockSize = 1024;
94863 SHA384.outSize = 384;
94864 SHA384.hmacStrength = 192;
94865 SHA384.padLength = 128;
94866
94867 SHA384.prototype._digest = function digest(enc) {
94868 if (enc === 'hex')
94869 return utils.toHex32(this.h.slice(0, 12), 'big');
94870 else
94871 return utils.split32(this.h.slice(0, 12), 'big');
94872 };
94873
94874 function SHA1() {
94875 if (!(this instanceof SHA1))
94876 return new SHA1();
94877
94878 BlockHash.call(this);
94879 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
94880 0x10325476, 0xc3d2e1f0 ];
94881 this.W = new Array(80);
94882 }
94883
94884 utils.inherits(SHA1, BlockHash);
94885 exports.sha1 = SHA1;
94886
94887 SHA1.blockSize = 512;
94888 SHA1.outSize = 160;
94889 SHA1.hmacStrength = 80;
94890 SHA1.padLength = 64;
94891
94892 SHA1.prototype._update = function _update(msg, start) {
94893 var W = this.W;
94894
94895 for (var i = 0; i < 16; i++)
94896 W[i] = msg[start + i];
94897
94898 for(; i < W.length; i++)
94899 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
94900
94901 var a = this.h[0];
94902 var b = this.h[1];
94903 var c = this.h[2];
94904 var d = this.h[3];
94905 var e = this.h[4];
94906
94907 for (var i = 0; i < W.length; i++) {
94908 var s = ~~(i / 20);
94909 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
94910 e = d;
94911 d = c;
94912 c = rotl32(b, 30);
94913 b = a;
94914 a = t;
94915 }
94916
94917 this.h[0] = sum32(this.h[0], a);
94918 this.h[1] = sum32(this.h[1], b);
94919 this.h[2] = sum32(this.h[2], c);
94920 this.h[3] = sum32(this.h[3], d);
94921 this.h[4] = sum32(this.h[4], e);
94922 };
94923
94924 SHA1.prototype._digest = function digest(enc) {
94925 if (enc === 'hex')
94926 return utils.toHex32(this.h, 'big');
94927 else
94928 return utils.split32(this.h, 'big');
94929 };
94930
94931 function ch32(x, y, z) {
94932 return (x & y) ^ ((~x) & z);
94933 }
94934
94935 function maj32(x, y, z) {
94936 return (x & y) ^ (x & z) ^ (y & z);
94937 }
94938
94939 function p32(x, y, z) {
94940 return x ^ y ^ z;
94941 }
94942
94943 function s0_256(x) {
94944 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
94945 }
94946
94947 function s1_256(x) {
94948 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
94949 }
94950
94951 function g0_256(x) {
94952 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
94953 }
94954
94955 function g1_256(x) {
94956 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
94957 }
94958
94959 function ft_1(s, x, y, z) {
94960 if (s === 0)
94961 return ch32(x, y, z);
94962 if (s === 1 || s === 3)
94963 return p32(x, y, z);
94964 if (s === 2)
94965 return maj32(x, y, z);
94966 }
94967
94968 function ch64_hi(xh, xl, yh, yl, zh, zl) {
94969 var r = (xh & yh) ^ ((~xh) & zh);
94970 if (r < 0)
94971 r += 0x100000000;
94972 return r;
94973 }
94974
94975 function ch64_lo(xh, xl, yh, yl, zh, zl) {
94976 var r = (xl & yl) ^ ((~xl) & zl);
94977 if (r < 0)
94978 r += 0x100000000;
94979 return r;
94980 }
94981
94982 function maj64_hi(xh, xl, yh, yl, zh, zl) {
94983 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
94984 if (r < 0)
94985 r += 0x100000000;
94986 return r;
94987 }
94988
94989 function maj64_lo(xh, xl, yh, yl, zh, zl) {
94990 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
94991 if (r < 0)
94992 r += 0x100000000;
94993 return r;
94994 }
94995
94996 function s0_512_hi(xh, xl) {
94997 var c0_hi = rotr64_hi(xh, xl, 28);
94998 var c1_hi = rotr64_hi(xl, xh, 2); // 34
94999 var c2_hi = rotr64_hi(xl, xh, 7); // 39
95000
95001 var r = c0_hi ^ c1_hi ^ c2_hi;
95002 if (r < 0)
95003 r += 0x100000000;
95004 return r;
95005 }
95006
95007 function s0_512_lo(xh, xl) {
95008 var c0_lo = rotr64_lo(xh, xl, 28);
95009 var c1_lo = rotr64_lo(xl, xh, 2); // 34
95010 var c2_lo = rotr64_lo(xl, xh, 7); // 39
95011
95012 var r = c0_lo ^ c1_lo ^ c2_lo;
95013 if (r < 0)
95014 r += 0x100000000;
95015 return r;
95016 }
95017
95018 function s1_512_hi(xh, xl) {
95019 var c0_hi = rotr64_hi(xh, xl, 14);
95020 var c1_hi = rotr64_hi(xh, xl, 18);
95021 var c2_hi = rotr64_hi(xl, xh, 9); // 41
95022
95023 var r = c0_hi ^ c1_hi ^ c2_hi;
95024 if (r < 0)
95025 r += 0x100000000;
95026 return r;
95027 }
95028
95029 function s1_512_lo(xh, xl) {
95030 var c0_lo = rotr64_lo(xh, xl, 14);
95031 var c1_lo = rotr64_lo(xh, xl, 18);
95032 var c2_lo = rotr64_lo(xl, xh, 9); // 41
95033
95034 var r = c0_lo ^ c1_lo ^ c2_lo;
95035 if (r < 0)
95036 r += 0x100000000;
95037 return r;
95038 }
95039
95040 function g0_512_hi(xh, xl) {
95041 var c0_hi = rotr64_hi(xh, xl, 1);
95042 var c1_hi = rotr64_hi(xh, xl, 8);
95043 var c2_hi = shr64_hi(xh, xl, 7);
95044
95045 var r = c0_hi ^ c1_hi ^ c2_hi;
95046 if (r < 0)
95047 r += 0x100000000;
95048 return r;
95049 }
95050
95051 function g0_512_lo(xh, xl) {
95052 var c0_lo = rotr64_lo(xh, xl, 1);
95053 var c1_lo = rotr64_lo(xh, xl, 8);
95054 var c2_lo = shr64_lo(xh, xl, 7);
95055
95056 var r = c0_lo ^ c1_lo ^ c2_lo;
95057 if (r < 0)
95058 r += 0x100000000;
95059 return r;
95060 }
95061
95062 function g1_512_hi(xh, xl) {
95063 var c0_hi = rotr64_hi(xh, xl, 19);
95064 var c1_hi = rotr64_hi(xl, xh, 29); // 61
95065 var c2_hi = shr64_hi(xh, xl, 6);
95066
95067 var r = c0_hi ^ c1_hi ^ c2_hi;
95068 if (r < 0)
95069 r += 0x100000000;
95070 return r;
95071 }
95072
95073 function g1_512_lo(xh, xl) {
95074 var c0_lo = rotr64_lo(xh, xl, 19);
95075 var c1_lo = rotr64_lo(xl, xh, 29); // 61
95076 var c2_lo = shr64_lo(xh, xl, 6);
95077
95078 var r = c0_lo ^ c1_lo ^ c2_lo;
95079 if (r < 0)
95080 r += 0x100000000;
95081 return r;
95082 }
95083
95084 },{"../hash":57}],62:[function(require,module,exports){
95085 var utils = exports;
95086 var inherits = require('inherits');
95087
95088 function toArray(msg, enc) {
95089 if (Array.isArray(msg))
95090 return msg.slice();
95091 if (!msg)
95092 return [];
95093 var res = [];
95094 if (typeof msg === 'string') {
95095 if (!enc) {
95096 for (var i = 0; i < msg.length; i++) {
95097 var c = msg.charCodeAt(i);
95098 var hi = c >> 8;
95099 var lo = c & 0xff;
95100 if (hi)
95101 res.push(hi, lo);
95102 else
95103 res.push(lo);
95104 }
95105 } else if (enc === 'hex') {
95106 msg = msg.replace(/[^a-z0-9]+/ig, '');
95107 if (msg.length % 2 !== 0)
95108 msg = '0' + msg;
95109 for (var i = 0; i < msg.length; i += 2)
95110 res.push(parseInt(msg[i] + msg[i + 1], 16));
95111 }
95112 } else {
95113 for (var i = 0; i < msg.length; i++)
95114 res[i] = msg[i] | 0;
95115 }
95116 return res;
95117 }
95118 utils.toArray = toArray;
95119
95120 function toHex(msg) {
95121 var res = '';
95122 for (var i = 0; i < msg.length; i++)
95123 res += zero2(msg[i].toString(16));
95124 return res;
95125 }
95126 utils.toHex = toHex;
95127
95128 function htonl(w) {
95129 var res = (w >>> 24) |
95130 ((w >>> 8) & 0xff00) |
95131 ((w << 8) & 0xff0000) |
95132 ((w & 0xff) << 24);
95133 return res >>> 0;
95134 }
95135 utils.htonl = htonl;
95136
95137 function toHex32(msg, endian) {
95138 var res = '';
95139 for (var i = 0; i < msg.length; i++) {
95140 var w = msg[i];
95141 if (endian === 'little')
95142 w = htonl(w);
95143 res += zero8(w.toString(16));
95144 }
95145 return res;
95146 }
95147 utils.toHex32 = toHex32;
95148
95149 function zero2(word) {
95150 if (word.length === 1)
95151 return '0' + word;
95152 else
95153 return word;
95154 }
95155 utils.zero2 = zero2;
95156
95157 function zero8(word) {
95158 if (word.length === 7)
95159 return '0' + word;
95160 else if (word.length === 6)
95161 return '00' + word;
95162 else if (word.length === 5)
95163 return '000' + word;
95164 else if (word.length === 4)
95165 return '0000' + word;
95166 else if (word.length === 3)
95167 return '00000' + word;
95168 else if (word.length === 2)
95169 return '000000' + word;
95170 else if (word.length === 1)
95171 return '0000000' + word;
95172 else
95173 return word;
95174 }
95175 utils.zero8 = zero8;
95176
95177 function join32(msg, start, end, endian) {
95178 var len = end - start;
95179 assert(len % 4 === 0);
95180 var res = new Array(len / 4);
95181 for (var i = 0, k = start; i < res.length; i++, k += 4) {
95182 var w;
95183 if (endian === 'big')
95184 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
95185 else
95186 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
95187 res[i] = w >>> 0;
95188 }
95189 return res;
95190 }
95191 utils.join32 = join32;
95192
95193 function split32(msg, endian) {
95194 var res = new Array(msg.length * 4);
95195 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
95196 var m = msg[i];
95197 if (endian === 'big') {
95198 res[k] = m >>> 24;
95199 res[k + 1] = (m >>> 16) & 0xff;
95200 res[k + 2] = (m >>> 8) & 0xff;
95201 res[k + 3] = m & 0xff;
95202 } else {
95203 res[k + 3] = m >>> 24;
95204 res[k + 2] = (m >>> 16) & 0xff;
95205 res[k + 1] = (m >>> 8) & 0xff;
95206 res[k] = m & 0xff;
95207 }
95208 }
95209 return res;
95210 }
95211 utils.split32 = split32;
95212
95213 function rotr32(w, b) {
95214 return (w >>> b) | (w << (32 - b));
95215 }
95216 utils.rotr32 = rotr32;
95217
95218 function rotl32(w, b) {
95219 return (w << b) | (w >>> (32 - b));
95220 }
95221 utils.rotl32 = rotl32;
95222
95223 function sum32(a, b) {
95224 return (a + b) >>> 0;
95225 }
95226 utils.sum32 = sum32;
95227
95228 function sum32_3(a, b, c) {
95229 return (a + b + c) >>> 0;
95230 }
95231 utils.sum32_3 = sum32_3;
95232
95233 function sum32_4(a, b, c, d) {
95234 return (a + b + c + d) >>> 0;
95235 }
95236 utils.sum32_4 = sum32_4;
95237
95238 function sum32_5(a, b, c, d, e) {
95239 return (a + b + c + d + e) >>> 0;
95240 }
95241 utils.sum32_5 = sum32_5;
95242
95243 function assert(cond, msg) {
95244 if (!cond)
95245 throw new Error(msg || 'Assertion failed');
95246 }
95247 utils.assert = assert;
95248
95249 utils.inherits = inherits;
95250
95251 function sum64(buf, pos, ah, al) {
95252 var bh = buf[pos];
95253 var bl = buf[pos + 1];
95254
95255 var lo = (al + bl) >>> 0;
95256 var hi = (lo < al ? 1 : 0) + ah + bh;
95257 buf[pos] = hi >>> 0;
95258 buf[pos + 1] = lo;
95259 }
95260 exports.sum64 = sum64;
95261
95262 function sum64_hi(ah, al, bh, bl) {
95263 var lo = (al + bl) >>> 0;
95264 var hi = (lo < al ? 1 : 0) + ah + bh;
95265 return hi >>> 0;
95266 };
95267 exports.sum64_hi = sum64_hi;
95268
95269 function sum64_lo(ah, al, bh, bl) {
95270 var lo = al + bl;
95271 return lo >>> 0;
95272 };
95273 exports.sum64_lo = sum64_lo;
95274
95275 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
95276 var carry = 0;
95277 var lo = al;
95278 lo = (lo + bl) >>> 0;
95279 carry += lo < al ? 1 : 0;
95280 lo = (lo + cl) >>> 0;
95281 carry += lo < cl ? 1 : 0;
95282 lo = (lo + dl) >>> 0;
95283 carry += lo < dl ? 1 : 0;
95284
95285 var hi = ah + bh + ch + dh + carry;
95286 return hi >>> 0;
95287 };
95288 exports.sum64_4_hi = sum64_4_hi;
95289
95290 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
95291 var lo = al + bl + cl + dl;
95292 return lo >>> 0;
95293 };
95294 exports.sum64_4_lo = sum64_4_lo;
95295
95296 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95297 var carry = 0;
95298 var lo = al;
95299 lo = (lo + bl) >>> 0;
95300 carry += lo < al ? 1 : 0;
95301 lo = (lo + cl) >>> 0;
95302 carry += lo < cl ? 1 : 0;
95303 lo = (lo + dl) >>> 0;
95304 carry += lo < dl ? 1 : 0;
95305 lo = (lo + el) >>> 0;
95306 carry += lo < el ? 1 : 0;
95307
95308 var hi = ah + bh + ch + dh + eh + carry;
95309 return hi >>> 0;
95310 };
95311 exports.sum64_5_hi = sum64_5_hi;
95312
95313 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95314 var lo = al + bl + cl + dl + el;
95315
95316 return lo >>> 0;
95317 };
95318 exports.sum64_5_lo = sum64_5_lo;
95319
95320 function rotr64_hi(ah, al, num) {
95321 var r = (al << (32 - num)) | (ah >>> num);
95322 return r >>> 0;
95323 };
95324 exports.rotr64_hi = rotr64_hi;
95325
95326 function rotr64_lo(ah, al, num) {
95327 var r = (ah << (32 - num)) | (al >>> num);
95328 return r >>> 0;
95329 };
95330 exports.rotr64_lo = rotr64_lo;
95331
95332 function shr64_hi(ah, al, num) {
95333 return ah >>> num;
95334 };
95335 exports.shr64_hi = shr64_hi;
95336
95337 function shr64_lo(ah, al, num) {
95338 var r = (ah << (32 - num)) | (al >>> num);
95339 return r >>> 0;
95340 };
95341 exports.shr64_lo = shr64_lo;
95342
95343 },{"inherits":63}],63:[function(require,module,exports){
95344 arguments[4][9][0].apply(exports,arguments)
95345 },{"dup":9}],64:[function(require,module,exports){
95346 /**
95347 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
95348 * @param {String} str the string input value
95349 * @return {Boolean} a boolean if it is or is not hex prefixed
95350 * @throws if the str input is not a string
95351 */
95352 module.exports = function isHexPrefixed(str) {
95353 if (typeof str !== 'string') {
95354 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
95355 }
95356
95357 return str.slice(0, 2) === '0x';
95358 }
95359
95360 },{}],65:[function(require,module,exports){
95361 'use strict'
95362 module.exports = require('./lib/api')(require('./lib/keccak'))
95363
95364 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
95365 'use strict'
95366 var createKeccak = require('./keccak')
95367 var createShake = require('./shake')
95368
95369 module.exports = function (KeccakState) {
95370 var Keccak = createKeccak(KeccakState)
95371 var Shake = createShake(KeccakState)
95372
95373 return function (algorithm, options) {
95374 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
95375 switch (hash) {
95376 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
95377 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
95378 case 'keccak384': return new Keccak(832, 768, null, 384, options)
95379 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
95380
95381 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
95382 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
95383 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
95384 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
95385
95386 case 'shake128': return new Shake(1344, 256, 0x1f, options)
95387 case 'shake256': return new Shake(1088, 512, 0x1f, options)
95388
95389 default: throw new Error('Invald algorithm: ' + algorithm)
95390 }
95391 }
95392 }
95393
95394 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
95395 (function (Buffer){
95396 'use strict'
95397 var Transform = require('stream').Transform
95398 var inherits = require('inherits')
95399
95400 module.exports = function (KeccakState) {
95401 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
95402 Transform.call(this, options)
95403
95404 this._rate = rate
95405 this._capacity = capacity
95406 this._delimitedSuffix = delimitedSuffix
95407 this._hashBitLength = hashBitLength
95408 this._options = options
95409
95410 this._state = new KeccakState()
95411 this._state.initialize(rate, capacity)
95412 this._finalized = false
95413 }
95414
95415 inherits(Keccak, Transform)
95416
95417 Keccak.prototype._transform = function (chunk, encoding, callback) {
95418 var error = null
95419 try {
95420 this.update(chunk, encoding)
95421 } catch (err) {
95422 error = err
95423 }
95424
95425 callback(error)
95426 }
95427
95428 Keccak.prototype._flush = function (callback) {
95429 var error = null
95430 try {
95431 this.push(this.digest())
95432 } catch (err) {
95433 error = err
95434 }
95435
95436 callback(error)
95437 }
95438
95439 Keccak.prototype.update = function (data, encoding) {
95440 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95441 if (this._finalized) throw new Error('Digest already called')
95442 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95443
95444 this._state.absorb(data)
95445
95446 return this
95447 }
95448
95449 Keccak.prototype.digest = function (encoding) {
95450 if (this._finalized) throw new Error('Digest already called')
95451 this._finalized = true
95452
95453 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
95454 var digest = this._state.squeeze(this._hashBitLength / 8)
95455 if (encoding !== undefined) digest = digest.toString(encoding)
95456
95457 this._resetState()
95458
95459 return digest
95460 }
95461
95462 // remove result from memory
95463 Keccak.prototype._resetState = function () {
95464 this._state.initialize(this._rate, this._capacity)
95465 return this
95466 }
95467
95468 // because sometimes we need hash right now and little later
95469 Keccak.prototype._clone = function () {
95470 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
95471 this._state.copy(clone._state)
95472 clone._finalized = this._finalized
95473
95474 return clone
95475 }
95476
95477 return Keccak
95478 }
95479
95480 }).call(this,require("buffer").Buffer)
95481 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
95482 (function (Buffer){
95483 'use strict'
95484 var Transform = require('stream').Transform
95485 var inherits = require('inherits')
95486
95487 module.exports = function (KeccakState) {
95488 function Shake (rate, capacity, delimitedSuffix, options) {
95489 Transform.call(this, options)
95490
95491 this._rate = rate
95492 this._capacity = capacity
95493 this._delimitedSuffix = delimitedSuffix
95494 this._options = options
95495
95496 this._state = new KeccakState()
95497 this._state.initialize(rate, capacity)
95498 this._finalized = false
95499 }
95500
95501 inherits(Shake, Transform)
95502
95503 Shake.prototype._transform = function (chunk, encoding, callback) {
95504 var error = null
95505 try {
95506 this.update(chunk, encoding)
95507 } catch (err) {
95508 error = err
95509 }
95510
95511 callback(error)
95512 }
95513
95514 Shake.prototype._flush = function () {}
95515
95516 Shake.prototype._read = function (size) {
95517 this.push(this.squeeze(size))
95518 }
95519
95520 Shake.prototype.update = function (data, encoding) {
95521 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95522 if (this._finalized) throw new Error('Squeeze already called')
95523 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95524
95525 this._state.absorb(data)
95526
95527 return this
95528 }
95529
95530 Shake.prototype.squeeze = function (dataByteLength, encoding) {
95531 if (!this._finalized) {
95532 this._finalized = true
95533 this._state.absorbLastFewBits(this._delimitedSuffix)
95534 }
95535
95536 var data = this._state.squeeze(dataByteLength)
95537 if (encoding !== undefined) data = data.toString(encoding)
95538
95539 return data
95540 }
95541
95542 Shake.prototype._resetState = function () {
95543 this._state.initialize(this._rate, this._capacity)
95544 return this
95545 }
95546
95547 Shake.prototype._clone = function () {
95548 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
95549 this._state.copy(clone._state)
95550 clone._finalized = this._finalized
95551
95552 return clone
95553 }
95554
95555 return Shake
95556 }
95557
95558 }).call(this,require("buffer").Buffer)
95559 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
95560 'use strict'
95561 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]
95562
95563 exports.p1600 = function (s) {
95564 for (var round = 0; round < 24; ++round) {
95565 // theta
95566 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
95567 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
95568 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
95569 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
95570 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
95571 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
95572 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
95573 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
95574 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
95575 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
95576
95577 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
95578 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
95579 var t1slo0 = s[0] ^ lo
95580 var t1shi0 = s[1] ^ hi
95581 var t1slo5 = s[10] ^ lo
95582 var t1shi5 = s[11] ^ hi
95583 var t1slo10 = s[20] ^ lo
95584 var t1shi10 = s[21] ^ hi
95585 var t1slo15 = s[30] ^ lo
95586 var t1shi15 = s[31] ^ hi
95587 var t1slo20 = s[40] ^ lo
95588 var t1shi20 = s[41] ^ hi
95589 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
95590 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
95591 var t1slo1 = s[2] ^ lo
95592 var t1shi1 = s[3] ^ hi
95593 var t1slo6 = s[12] ^ lo
95594 var t1shi6 = s[13] ^ hi
95595 var t1slo11 = s[22] ^ lo
95596 var t1shi11 = s[23] ^ hi
95597 var t1slo16 = s[32] ^ lo
95598 var t1shi16 = s[33] ^ hi
95599 var t1slo21 = s[42] ^ lo
95600 var t1shi21 = s[43] ^ hi
95601 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
95602 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
95603 var t1slo2 = s[4] ^ lo
95604 var t1shi2 = s[5] ^ hi
95605 var t1slo7 = s[14] ^ lo
95606 var t1shi7 = s[15] ^ hi
95607 var t1slo12 = s[24] ^ lo
95608 var t1shi12 = s[25] ^ hi
95609 var t1slo17 = s[34] ^ lo
95610 var t1shi17 = s[35] ^ hi
95611 var t1slo22 = s[44] ^ lo
95612 var t1shi22 = s[45] ^ hi
95613 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
95614 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
95615 var t1slo3 = s[6] ^ lo
95616 var t1shi3 = s[7] ^ hi
95617 var t1slo8 = s[16] ^ lo
95618 var t1shi8 = s[17] ^ hi
95619 var t1slo13 = s[26] ^ lo
95620 var t1shi13 = s[27] ^ hi
95621 var t1slo18 = s[36] ^ lo
95622 var t1shi18 = s[37] ^ hi
95623 var t1slo23 = s[46] ^ lo
95624 var t1shi23 = s[47] ^ hi
95625 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
95626 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
95627 var t1slo4 = s[8] ^ lo
95628 var t1shi4 = s[9] ^ hi
95629 var t1slo9 = s[18] ^ lo
95630 var t1shi9 = s[19] ^ hi
95631 var t1slo14 = s[28] ^ lo
95632 var t1shi14 = s[29] ^ hi
95633 var t1slo19 = s[38] ^ lo
95634 var t1shi19 = s[39] ^ hi
95635 var t1slo24 = s[48] ^ lo
95636 var t1shi24 = s[49] ^ hi
95637
95638 // rho & pi
95639 var t2slo0 = t1slo0
95640 var t2shi0 = t1shi0
95641 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
95642 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
95643 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
95644 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
95645 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
95646 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
95647 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
95648 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
95649 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
95650 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
95651 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
95652 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
95653 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
95654 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
95655 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
95656 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
95657 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
95658 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
95659 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
95660 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
95661 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
95662 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
95663 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
95664 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
95665 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
95666 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
95667 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
95668 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
95669 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
95670 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
95671 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
95672 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
95673 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
95674 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
95675 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
95676 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
95677 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
95678 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
95679 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
95680 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
95681 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
95682 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
95683 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
95684 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
95685 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
95686 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
95687 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
95688 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
95689
95690 // chi
95691 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
95692 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
95693 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
95694 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
95695 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
95696 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
95697 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
95698 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
95699 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
95700 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
95701 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
95702 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
95703 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
95704 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
95705 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
95706 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
95707 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
95708 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
95709 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
95710 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
95711 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
95712 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
95713 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
95714 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
95715 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
95716 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
95717 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
95718 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
95719 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
95720 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
95721 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
95722 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
95723 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
95724 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
95725 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
95726 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
95727 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
95728 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
95729 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
95730 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
95731 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
95732 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
95733 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
95734 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
95735 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
95736 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
95737 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
95738 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
95739 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
95740 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
95741
95742 // iota
95743 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
95744 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
95745 }
95746 }
95747
95748 },{}],70:[function(require,module,exports){
95749 (function (Buffer){
95750 'use strict'
95751 var keccakState = require('./keccak-state-unroll')
95752
95753 function Keccak () {
95754 // much faster than `new Array(50)`
95755 this.state = [
95756 0, 0, 0, 0, 0,
95757 0, 0, 0, 0, 0,
95758 0, 0, 0, 0, 0,
95759 0, 0, 0, 0, 0,
95760 0, 0, 0, 0, 0
95761 ]
95762
95763 this.blockSize = null
95764 this.count = 0
95765 this.squeezing = false
95766 }
95767
95768 Keccak.prototype.initialize = function (rate, capacity) {
95769 for (var i = 0; i < 50; ++i) this.state[i] = 0
95770 this.blockSize = rate / 8
95771 this.count = 0
95772 this.squeezing = false
95773 }
95774
95775 Keccak.prototype.absorb = function (data) {
95776 for (var i = 0; i < data.length; ++i) {
95777 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
95778 this.count += 1
95779 if (this.count === this.blockSize) {
95780 keccakState.p1600(this.state)
95781 this.count = 0
95782 }
95783 }
95784 }
95785
95786 Keccak.prototype.absorbLastFewBits = function (bits) {
95787 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
95788 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
95789 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
95790 keccakState.p1600(this.state)
95791 this.count = 0
95792 this.squeezing = true
95793 }
95794
95795 Keccak.prototype.squeeze = function (length) {
95796 if (!this.squeezing) this.absorbLastFewBits(0x01)
95797
95798 var output = Buffer.allocUnsafe(length)
95799 for (var i = 0; i < length; ++i) {
95800 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
95801 this.count += 1
95802 if (this.count === this.blockSize) {
95803 keccakState.p1600(this.state)
95804 this.count = 0
95805 }
95806 }
95807
95808 return output
95809 }
95810
95811 Keccak.prototype.copy = function (dest) {
95812 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
95813 dest.blockSize = this.blockSize
95814 dest.count = this.count
95815 dest.squeezing = this.squeezing
95816 }
95817
95818 module.exports = Keccak
95819
95820 }).call(this,require("buffer").Buffer)
95821 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
95822 (function (Buffer){
95823 /*
95824 CryptoJS v3.1.2
95825 code.google.com/p/crypto-js
95826 (c) 2009-2013 by Jeff Mott. All rights reserved.
95827 code.google.com/p/crypto-js/wiki/License
95828 */
95829 /** @preserve
95830 (c) 2012 by Cédric Mesnil. All rights reserved.
95831
95832 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
95833
95834 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
95835 - 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.
95836
95837 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.
95838 */
95839
95840 // constants table
95841 var zl = [
95842 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
95843 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
95844 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
95845 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
95846 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
95847 ]
95848
95849 var zr = [
95850 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
95851 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
95852 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
95853 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
95854 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
95855 ]
95856
95857 var sl = [
95858 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
95859 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
95860 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
95861 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
95862 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
95863 ]
95864
95865 var sr = [
95866 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
95867 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
95868 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
95869 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
95870 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
95871 ]
95872
95873 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
95874 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
95875
95876 function bytesToWords (bytes) {
95877 var words = []
95878 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
95879 words[b >>> 5] |= bytes[i] << (24 - b % 32)
95880 }
95881 return words
95882 }
95883
95884 function wordsToBytes (words) {
95885 var bytes = []
95886 for (var b = 0; b < words.length * 32; b += 8) {
95887 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
95888 }
95889 return bytes
95890 }
95891
95892 function processBlock (H, M, offset) {
95893 // swap endian
95894 for (var i = 0; i < 16; i++) {
95895 var offset_i = offset + i
95896 var M_offset_i = M[offset_i]
95897
95898 // Swap
95899 M[offset_i] = (
95900 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
95901 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
95902 )
95903 }
95904
95905 // Working variables
95906 var al, bl, cl, dl, el
95907 var ar, br, cr, dr, er
95908
95909 ar = al = H[0]
95910 br = bl = H[1]
95911 cr = cl = H[2]
95912 dr = dl = H[3]
95913 er = el = H[4]
95914
95915 // computation
95916 var t
95917 for (i = 0; i < 80; i += 1) {
95918 t = (al + M[offset + zl[i]]) | 0
95919 if (i < 16) {
95920 t += f1(bl, cl, dl) + hl[0]
95921 } else if (i < 32) {
95922 t += f2(bl, cl, dl) + hl[1]
95923 } else if (i < 48) {
95924 t += f3(bl, cl, dl) + hl[2]
95925 } else if (i < 64) {
95926 t += f4(bl, cl, dl) + hl[3]
95927 } else {// if (i<80) {
95928 t += f5(bl, cl, dl) + hl[4]
95929 }
95930 t = t | 0
95931 t = rotl(t, sl[i])
95932 t = (t + el) | 0
95933 al = el
95934 el = dl
95935 dl = rotl(cl, 10)
95936 cl = bl
95937 bl = t
95938
95939 t = (ar + M[offset + zr[i]]) | 0
95940 if (i < 16) {
95941 t += f5(br, cr, dr) + hr[0]
95942 } else if (i < 32) {
95943 t += f4(br, cr, dr) + hr[1]
95944 } else if (i < 48) {
95945 t += f3(br, cr, dr) + hr[2]
95946 } else if (i < 64) {
95947 t += f2(br, cr, dr) + hr[3]
95948 } else {// if (i<80) {
95949 t += f1(br, cr, dr) + hr[4]
95950 }
95951
95952 t = t | 0
95953 t = rotl(t, sr[i])
95954 t = (t + er) | 0
95955 ar = er
95956 er = dr
95957 dr = rotl(cr, 10)
95958 cr = br
95959 br = t
95960 }
95961
95962 // intermediate hash value
95963 t = (H[1] + cl + dr) | 0
95964 H[1] = (H[2] + dl + er) | 0
95965 H[2] = (H[3] + el + ar) | 0
95966 H[3] = (H[4] + al + br) | 0
95967 H[4] = (H[0] + bl + cr) | 0
95968 H[0] = t
95969 }
95970
95971 function f1 (x, y, z) {
95972 return ((x) ^ (y) ^ (z))
95973 }
95974
95975 function f2 (x, y, z) {
95976 return (((x) & (y)) | ((~x) & (z)))
95977 }
95978
95979 function f3 (x, y, z) {
95980 return (((x) | (~(y))) ^ (z))
95981 }
95982
95983 function f4 (x, y, z) {
95984 return (((x) & (z)) | ((y) & (~(z))))
95985 }
95986
95987 function f5 (x, y, z) {
95988 return ((x) ^ ((y) | (~(z))))
95989 }
95990
95991 function rotl (x, n) {
95992 return (x << n) | (x >>> (32 - n))
95993 }
95994
95995 function ripemd160 (message) {
95996 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
95997
95998 if (typeof message === 'string') {
95999 message = new Buffer(message, 'utf8')
96000 }
96001
96002 var m = bytesToWords(message)
96003
96004 var nBitsLeft = message.length * 8
96005 var nBitsTotal = message.length * 8
96006
96007 // Add padding
96008 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
96009 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
96010 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
96011 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
96012 )
96013
96014 for (var i = 0; i < m.length; i += 16) {
96015 processBlock(H, m, i)
96016 }
96017
96018 // swap endian
96019 for (i = 0; i < 5; i++) {
96020 // shortcut
96021 var H_i = H[i]
96022
96023 // Swap
96024 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
96025 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
96026 }
96027
96028 var digestbytes = wordsToBytes(H)
96029 return new Buffer(digestbytes)
96030 }
96031
96032 module.exports = ripemd160
96033
96034 }).call(this,require("buffer").Buffer)
96035 },{"buffer":5}],72:[function(require,module,exports){
96036 (function (Buffer){
96037 const assert = require('assert')
96038 /**
96039 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
96040 * This function takes in a data, convert it to buffer if not, and a length for recursion
96041 *
96042 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96043 * @returns {Buffer} - returns buffer of encoded data
96044 **/
96045 exports.encode = function (input) {
96046 if (input instanceof Array) {
96047 var output = []
96048 for (var i = 0; i < input.length; i++) {
96049 output.push(exports.encode(input[i]))
96050 }
96051 var buf = Buffer.concat(output)
96052 return Buffer.concat([encodeLength(buf.length, 192), buf])
96053 } else {
96054 input = toBuffer(input)
96055 if (input.length === 1 && input[0] < 128) {
96056 return input
96057 } else {
96058 return Buffer.concat([encodeLength(input.length, 128), input])
96059 }
96060 }
96061 }
96062
96063 function safeParseInt (v, base) {
96064 if (v.slice(0, 2) === '00') {
96065 throw (new Error('invalid RLP: extra zeros'))
96066 }
96067
96068 return parseInt(v, base)
96069 }
96070
96071 function encodeLength (len, offset) {
96072 if (len < 56) {
96073 return new Buffer([len + offset])
96074 } else {
96075 var hexLength = intToHex(len)
96076 var lLength = hexLength.length / 2
96077 var firstByte = intToHex(offset + 55 + lLength)
96078 return new Buffer(firstByte + hexLength, 'hex')
96079 }
96080 }
96081
96082 /**
96083 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
96084 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96085 * @returns {Array} - returns decode Array of Buffers containg the original message
96086 **/
96087 exports.decode = function (input, stream) {
96088 if (!input || input.length === 0) {
96089 return new Buffer([])
96090 }
96091
96092 input = toBuffer(input)
96093 var decoded = _decode(input)
96094
96095 if (stream) {
96096 return decoded
96097 }
96098
96099 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
96100 return decoded.data
96101 }
96102
96103 exports.getLength = function (input) {
96104 if (!input || input.length === 0) {
96105 return new Buffer([])
96106 }
96107
96108 input = toBuffer(input)
96109 var firstByte = input[0]
96110 if (firstByte <= 0x7f) {
96111 return input.length
96112 } else if (firstByte <= 0xb7) {
96113 return firstByte - 0x7f
96114 } else if (firstByte <= 0xbf) {
96115 return firstByte - 0xb6
96116 } else if (firstByte <= 0xf7) {
96117 // a list between 0-55 bytes long
96118 return firstByte - 0xbf
96119 } else {
96120 // a list over 55 bytes long
96121 var llength = firstByte - 0xf6
96122 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96123 return llength + length
96124 }
96125 }
96126
96127 function _decode (input) {
96128 var length, llength, data, innerRemainder, d
96129 var decoded = []
96130 var firstByte = input[0]
96131
96132 if (firstByte <= 0x7f) {
96133 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
96134 return {
96135 data: input.slice(0, 1),
96136 remainder: input.slice(1)
96137 }
96138 } else if (firstByte <= 0xb7) {
96139 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
96140 // The range of the first byte is [0x80, 0xb7]
96141 length = firstByte - 0x7f
96142
96143 // set 0x80 null to 0
96144 if (firstByte === 0x80) {
96145 data = new Buffer([])
96146 } else {
96147 data = input.slice(1, length)
96148 }
96149
96150 if (length === 2 && data[0] < 0x80) {
96151 throw new Error('invalid rlp encoding: byte must be less 0x80')
96152 }
96153
96154 return {
96155 data: data,
96156 remainder: input.slice(length)
96157 }
96158 } else if (firstByte <= 0xbf) {
96159 llength = firstByte - 0xb6
96160 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96161 data = input.slice(llength, length + llength)
96162 if (data.length < length) {
96163 throw (new Error('invalid RLP'))
96164 }
96165
96166 return {
96167 data: data,
96168 remainder: input.slice(length + llength)
96169 }
96170 } else if (firstByte <= 0xf7) {
96171 // a list between 0-55 bytes long
96172 length = firstByte - 0xbf
96173 innerRemainder = input.slice(1, length)
96174 while (innerRemainder.length) {
96175 d = _decode(innerRemainder)
96176 decoded.push(d.data)
96177 innerRemainder = d.remainder
96178 }
96179
96180 return {
96181 data: decoded,
96182 remainder: input.slice(length)
96183 }
96184 } else {
96185 // a list over 55 bytes long
96186 llength = firstByte - 0xf6
96187 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96188 var totalLength = llength + length
96189 if (totalLength > input.length) {
96190 throw new Error('invalid rlp: total length is larger than the data')
96191 }
96192
96193 innerRemainder = input.slice(llength, totalLength)
96194 if (innerRemainder.length === 0) {
96195 throw new Error('invalid rlp, List has a invalid length')
96196 }
96197
96198 while (innerRemainder.length) {
96199 d = _decode(innerRemainder)
96200 decoded.push(d.data)
96201 innerRemainder = d.remainder
96202 }
96203 return {
96204 data: decoded,
96205 remainder: input.slice(totalLength)
96206 }
96207 }
96208 }
96209
96210 function isHexPrefixed (str) {
96211 return str.slice(0, 2) === '0x'
96212 }
96213
96214 // Removes 0x from a given String
96215 function stripHexPrefix (str) {
96216 if (typeof str !== 'string') {
96217 return str
96218 }
96219 return isHexPrefixed(str) ? str.slice(2) : str
96220 }
96221
96222 function intToHex (i) {
96223 var hex = i.toString(16)
96224 if (hex.length % 2) {
96225 hex = '0' + hex
96226 }
96227
96228 return hex
96229 }
96230
96231 function padToEven (a) {
96232 if (a.length % 2) a = '0' + a
96233 return a
96234 }
96235
96236 function intToBuffer (i) {
96237 var hex = intToHex(i)
96238 return new Buffer(hex, 'hex')
96239 }
96240
96241 function toBuffer (v) {
96242 if (!Buffer.isBuffer(v)) {
96243 if (typeof v === 'string') {
96244 if (isHexPrefixed(v)) {
96245 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
96246 } else {
96247 v = new Buffer(v)
96248 }
96249 } else if (typeof v === 'number') {
96250 if (!v) {
96251 v = new Buffer([])
96252 } else {
96253 v = intToBuffer(v)
96254 }
96255 } else if (v === null || v === undefined) {
96256 v = new Buffer([])
96257 } else if (v.toArray) {
96258 // converts a BN to a Buffer
96259 v = new Buffer(v.toArray())
96260 } else {
96261 throw new Error('invalid type')
96262 }
96263 }
96264 return v
96265 }
96266
96267 }).call(this,require("buffer").Buffer)
96268 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
96269 'use strict'
96270 module.exports = require('./lib')(require('./lib/elliptic'))
96271
96272 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
96273 (function (Buffer){
96274 'use strict'
96275 var toString = Object.prototype.toString
96276
96277 // TypeError
96278 exports.isArray = function (value, message) {
96279 if (!Array.isArray(value)) throw TypeError(message)
96280 }
96281
96282 exports.isBoolean = function (value, message) {
96283 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
96284 }
96285
96286 exports.isBuffer = function (value, message) {
96287 if (!Buffer.isBuffer(value)) throw TypeError(message)
96288 }
96289
96290 exports.isFunction = function (value, message) {
96291 if (toString.call(value) !== '[object Function]') throw TypeError(message)
96292 }
96293
96294 exports.isNumber = function (value, message) {
96295 if (toString.call(value) !== '[object Number]') throw TypeError(message)
96296 }
96297
96298 exports.isObject = function (value, message) {
96299 if (toString.call(value) !== '[object Object]') throw TypeError(message)
96300 }
96301
96302 // RangeError
96303 exports.isBufferLength = function (buffer, length, message) {
96304 if (buffer.length !== length) throw RangeError(message)
96305 }
96306
96307 exports.isBufferLength2 = function (buffer, length1, length2, message) {
96308 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
96309 }
96310
96311 exports.isLengthGTZero = function (value, message) {
96312 if (value.length === 0) throw RangeError(message)
96313 }
96314
96315 exports.isNumberInInterval = function (number, x, y, message) {
96316 if (number <= x || number >= y) throw RangeError(message)
96317 }
96318
96319 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
96320 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
96321 (function (Buffer){
96322 'use strict'
96323 var bip66 = require('bip66')
96324
96325 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
96326 // begin
96327 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
96328 // private key
96329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96330 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96331 // middle
96332 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96333 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96334 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96335 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96336 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96337 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96338 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96339 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96340 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
96341 // public key
96342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96344 0x00
96345 ])
96346
96347 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
96348 // begin
96349 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
96350 // private key
96351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96352 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96353 // middle
96354 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96355 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96356 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96357 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96358 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96359 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96360 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
96361 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
96362 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96363 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96364 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
96365 // public key
96366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96370 0x00
96371 ])
96372
96373 var ZERO_BUFFER_32 = new Buffer([
96374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
96376 ])
96377
96378 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
96379 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
96380 privateKey.copy(result, compressed ? 8 : 9)
96381 publicKey.copy(result, compressed ? 181 : 214)
96382 return result
96383 }
96384
96385 exports.privateKeyImport = function (privateKey) {
96386 var length = privateKey.length
96387
96388 // sequence header
96389 var index = 0
96390 if (length < index + 1 || privateKey[index] !== 0x30) return
96391 index += 1
96392
96393 // sequence length constructor
96394 if (length < index + 1 || !(privateKey[index] & 0x80)) return
96395
96396 var lenb = privateKey[index] & 0x7f
96397 index += 1
96398 if (lenb < 1 || lenb > 2) return
96399 if (length < index + lenb) return
96400
96401 // sequence length
96402 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
96403 index += lenb
96404 if (length < index + len) return
96405
96406 // sequence element 0: version number (=1)
96407 if (length < index + 3 ||
96408 privateKey[index] !== 0x02 ||
96409 privateKey[index + 1] !== 0x01 ||
96410 privateKey[index + 2] !== 0x01) {
96411 return
96412 }
96413 index += 3
96414
96415 // sequence element 1: octet string, up to 32 bytes
96416 if (length < index + 2 ||
96417 privateKey[index] !== 0x04 ||
96418 privateKey[index + 1] > 0x20 ||
96419 length < index + 2 + privateKey[index + 1]) {
96420 return
96421 }
96422
96423 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
96424 }
96425
96426 exports.signatureExport = function (sigObj) {
96427 var r = Buffer.concat([new Buffer([0]), sigObj.r])
96428 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
96429
96430 var s = Buffer.concat([new Buffer([0]), sigObj.s])
96431 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
96432
96433 return bip66.encode(r.slice(posR), s.slice(posS))
96434 }
96435
96436 exports.signatureImport = function (sig) {
96437 var r = new Buffer(ZERO_BUFFER_32)
96438 var s = new Buffer(ZERO_BUFFER_32)
96439
96440 try {
96441 var sigObj = bip66.decode(sig)
96442 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
96443 if (sigObj.r.length > 32) throw new Error('R length is too long')
96444 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
96445 if (sigObj.s.length > 32) throw new Error('S length is too long')
96446 } catch (err) {
96447 return
96448 }
96449
96450 sigObj.r.copy(r, 32 - sigObj.r.length)
96451 sigObj.s.copy(s, 32 - sigObj.s.length)
96452
96453 return { r: r, s: s }
96454 }
96455
96456 exports.signatureImportLax = function (sig) {
96457 var r = new Buffer(ZERO_BUFFER_32)
96458 var s = new Buffer(ZERO_BUFFER_32)
96459
96460 var length = sig.length
96461 var index = 0
96462
96463 // sequence tag byte
96464 if (sig[index++] !== 0x30) return
96465
96466 // sequence length byte
96467 var lenbyte = sig[index++]
96468 if (lenbyte & 0x80) {
96469 index += lenbyte - 0x80
96470 if (index > length) return
96471 }
96472
96473 // sequence tag byte for r
96474 if (sig[index++] !== 0x02) return
96475
96476 // length for r
96477 var rlen = sig[index++]
96478 if (rlen & 0x80) {
96479 lenbyte = rlen - 0x80
96480 if (index + lenbyte > length) return
96481 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96482 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
96483 }
96484 if (rlen > length - index) return
96485 var rindex = index
96486 index += rlen
96487
96488 // sequence tag byte for s
96489 if (sig[index++] !== 0x02) return
96490
96491 // length for s
96492 var slen = sig[index++]
96493 if (slen & 0x80) {
96494 lenbyte = slen - 0x80
96495 if (index + lenbyte > length) return
96496 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96497 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
96498 }
96499 if (slen > length - index) return
96500 var sindex = index
96501 index += slen
96502
96503 // ignore leading zeros in r
96504 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
96505 // copy r value
96506 if (rlen > 32) return
96507 var rvalue = sig.slice(rindex, rindex + rlen)
96508 rvalue.copy(r, 32 - rvalue.length)
96509
96510 // ignore leading zeros in s
96511 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
96512 // copy s value
96513 if (slen > 32) return
96514 var svalue = sig.slice(sindex, sindex + slen)
96515 svalue.copy(s, 32 - svalue.length)
96516
96517 return { r: r, s: s }
96518 }
96519
96520 }).call(this,require("buffer").Buffer)
96521 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
96522 (function (Buffer){
96523 'use strict'
96524 var createHash = require('create-hash')
96525 var BN = require('bn.js')
96526 var EC = require('elliptic').ec
96527
96528 var messages = require('../messages.json')
96529
96530 var ec = new EC('secp256k1')
96531 var ecparams = ec.curve
96532
96533 function loadCompressedPublicKey (first, xBuffer) {
96534 var x = new BN(xBuffer)
96535
96536 // overflow
96537 if (x.cmp(ecparams.p) >= 0) return null
96538 x = x.toRed(ecparams.red)
96539
96540 // compute corresponding Y
96541 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
96542 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
96543
96544 return ec.keyPair({ pub: { x: x, y: y } })
96545 }
96546
96547 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
96548 var x = new BN(xBuffer)
96549 var y = new BN(yBuffer)
96550
96551 // overflow
96552 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
96553
96554 x = x.toRed(ecparams.red)
96555 y = y.toRed(ecparams.red)
96556
96557 // is odd flag
96558 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
96559
96560 // x*x*x + b = y*y
96561 var x3 = x.redSqr().redIMul(x)
96562 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
96563
96564 return ec.keyPair({ pub: { x: x, y: y } })
96565 }
96566
96567 function loadPublicKey (publicKey) {
96568 var first = publicKey[0]
96569 switch (first) {
96570 case 0x02:
96571 case 0x03:
96572 if (publicKey.length !== 33) return null
96573 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
96574 case 0x04:
96575 case 0x06:
96576 case 0x07:
96577 if (publicKey.length !== 65) return null
96578 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
96579 default:
96580 return null
96581 }
96582 }
96583
96584 exports.privateKeyVerify = function (privateKey) {
96585 var bn = new BN(privateKey)
96586 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
96587 }
96588
96589 exports.privateKeyExport = function (privateKey, compressed) {
96590 var d = new BN(privateKey)
96591 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
96592
96593 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96594 }
96595
96596 exports.privateKeyTweakAdd = function (privateKey, tweak) {
96597 var bn = new BN(tweak)
96598 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96599
96600 bn.iadd(new BN(privateKey))
96601 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
96602 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96603
96604 return bn.toArrayLike(Buffer, 'be', 32)
96605 }
96606
96607 exports.privateKeyTweakMul = function (privateKey, tweak) {
96608 var bn = new BN(tweak)
96609 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
96610
96611 bn.imul(new BN(privateKey))
96612 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
96613
96614 return bn.toArrayLike(Buffer, 'be', 32)
96615 }
96616
96617 exports.publicKeyCreate = function (privateKey, compressed) {
96618 var d = new BN(privateKey)
96619 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
96620
96621 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96622 }
96623
96624 exports.publicKeyConvert = function (publicKey, compressed) {
96625 var pair = loadPublicKey(publicKey)
96626 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96627
96628 return new Buffer(pair.getPublic(compressed, true))
96629 }
96630
96631 exports.publicKeyVerify = function (publicKey) {
96632 return loadPublicKey(publicKey) !== null
96633 }
96634
96635 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
96636 var pair = loadPublicKey(publicKey)
96637 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96638
96639 tweak = new BN(tweak)
96640 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
96641
96642 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
96643 }
96644
96645 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
96646 var pair = loadPublicKey(publicKey)
96647 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96648
96649 tweak = new BN(tweak)
96650 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
96651
96652 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
96653 }
96654
96655 exports.publicKeyCombine = function (publicKeys, compressed) {
96656 var pairs = new Array(publicKeys.length)
96657 for (var i = 0; i < publicKeys.length; ++i) {
96658 pairs[i] = loadPublicKey(publicKeys[i])
96659 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96660 }
96661
96662 var point = pairs[0].pub
96663 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
96664 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
96665
96666 return new Buffer(point.encode(true, compressed))
96667 }
96668
96669 exports.signatureNormalize = function (signature) {
96670 var r = new BN(signature.slice(0, 32))
96671 var s = new BN(signature.slice(32, 64))
96672 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96673
96674 var result = new Buffer(signature)
96675 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
96676
96677 return result
96678 }
96679
96680 exports.signatureExport = function (signature) {
96681 var r = signature.slice(0, 32)
96682 var s = signature.slice(32, 64)
96683 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96684
96685 return { r: r, s: s }
96686 }
96687
96688 exports.signatureImport = function (sigObj) {
96689 var r = new BN(sigObj.r)
96690 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
96691
96692 var s = new BN(sigObj.s)
96693 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
96694
96695 return Buffer.concat([
96696 r.toArrayLike(Buffer, 'be', 32),
96697 s.toArrayLike(Buffer, 'be', 32)
96698 ])
96699 }
96700
96701 exports.sign = function (message, privateKey, noncefn, data) {
96702 if (typeof noncefn === 'function') {
96703 var getNonce = noncefn
96704 noncefn = function (counter) {
96705 var nonce = getNonce(message, privateKey, null, data, counter)
96706 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
96707
96708 return new BN(nonce)
96709 }
96710 }
96711
96712 var d = new BN(privateKey)
96713 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
96714
96715 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
96716 return {
96717 signature: Buffer.concat([
96718 result.r.toArrayLike(Buffer, 'be', 32),
96719 result.s.toArrayLike(Buffer, 'be', 32)
96720 ]),
96721 recovery: result.recoveryParam
96722 }
96723 }
96724
96725 exports.verify = function (message, signature, publicKey) {
96726 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96727
96728 var sigr = new BN(sigObj.r)
96729 var sigs = new BN(sigObj.s)
96730 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96731 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
96732
96733 var pair = loadPublicKey(publicKey)
96734 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96735
96736 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
96737 }
96738
96739 exports.recover = function (message, signature, recovery, compressed) {
96740 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96741
96742 var sigr = new BN(sigObj.r)
96743 var sigs = new BN(sigObj.s)
96744 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96745
96746 try {
96747 if (sigr.isZero() || sigs.isZero()) throw new Error()
96748
96749 var point = ec.recoverPubKey(message, sigObj, recovery)
96750 return new Buffer(point.encode(true, compressed))
96751 } catch (err) {
96752 throw new Error(messages.ECDSA_RECOVER_FAIL)
96753 }
96754 }
96755
96756 exports.ecdh = function (publicKey, privateKey) {
96757 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
96758 return createHash('sha256').update(shared).digest()
96759 }
96760
96761 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
96762 var pair = loadPublicKey(publicKey)
96763 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96764
96765 var scalar = new BN(privateKey)
96766 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
96767
96768 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
96769 }
96770
96771 }).call(this,require("buffer").Buffer)
96772 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
96773 'use strict'
96774 var assert = require('./assert')
96775 var der = require('./der')
96776 var messages = require('./messages.json')
96777
96778 function initCompressedValue (value, defaultValue) {
96779 if (value === undefined) return defaultValue
96780
96781 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
96782 return value
96783 }
96784
96785 module.exports = function (secp256k1) {
96786 return {
96787 privateKeyVerify: function (privateKey) {
96788 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96789 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
96790 },
96791
96792 privateKeyExport: function (privateKey, compressed) {
96793 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96794 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96795
96796 compressed = initCompressedValue(compressed, true)
96797 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
96798
96799 return der.privateKeyExport(privateKey, publicKey, compressed)
96800 },
96801
96802 privateKeyImport: function (privateKey) {
96803 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96804
96805 privateKey = der.privateKeyImport(privateKey)
96806 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
96807
96808 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
96809 },
96810
96811 privateKeyTweakAdd: function (privateKey, tweak) {
96812 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96813 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96814
96815 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96816 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96817
96818 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
96819 },
96820
96821 privateKeyTweakMul: function (privateKey, tweak) {
96822 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96823 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96824
96825 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96826 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96827
96828 return secp256k1.privateKeyTweakMul(privateKey, tweak)
96829 },
96830
96831 publicKeyCreate: function (privateKey, compressed) {
96832 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96833 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96834
96835 compressed = initCompressedValue(compressed, true)
96836
96837 return secp256k1.publicKeyCreate(privateKey, compressed)
96838 },
96839
96840 publicKeyConvert: function (publicKey, compressed) {
96841 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96842 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96843
96844 compressed = initCompressedValue(compressed, true)
96845
96846 return secp256k1.publicKeyConvert(publicKey, compressed)
96847 },
96848
96849 publicKeyVerify: function (publicKey) {
96850 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96851 return secp256k1.publicKeyVerify(publicKey)
96852 },
96853
96854 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
96855 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96856 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96857
96858 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96859 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96860
96861 compressed = initCompressedValue(compressed, true)
96862
96863 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
96864 },
96865
96866 publicKeyTweakMul: function (publicKey, tweak, compressed) {
96867 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96868 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96869
96870 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96871 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96872
96873 compressed = initCompressedValue(compressed, true)
96874
96875 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
96876 },
96877
96878 publicKeyCombine: function (publicKeys, compressed) {
96879 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
96880 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
96881 for (var i = 0; i < publicKeys.length; ++i) {
96882 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
96883 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96884 }
96885
96886 compressed = initCompressedValue(compressed, true)
96887
96888 return secp256k1.publicKeyCombine(publicKeys, compressed)
96889 },
96890
96891 signatureNormalize: function (signature) {
96892 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96893 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96894
96895 return secp256k1.signatureNormalize(signature)
96896 },
96897
96898 signatureExport: function (signature) {
96899 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96900 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96901
96902 var sigObj = secp256k1.signatureExport(signature)
96903 return der.signatureExport(sigObj)
96904 },
96905
96906 signatureImport: function (sig) {
96907 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96908 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96909
96910 var sigObj = der.signatureImport(sig)
96911 if (sigObj) return secp256k1.signatureImport(sigObj)
96912
96913 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96914 },
96915
96916 signatureImportLax: function (sig) {
96917 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96918 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96919
96920 var sigObj = der.signatureImportLax(sig)
96921 if (sigObj) return secp256k1.signatureImport(sigObj)
96922
96923 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96924 },
96925
96926 sign: function (message, privateKey, options) {
96927 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96928 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96929
96930 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96931 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96932
96933 var data = null
96934 var noncefn = null
96935 if (options !== undefined) {
96936 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
96937
96938 if (options.data !== undefined) {
96939 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
96940 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
96941 data = options.data
96942 }
96943
96944 if (options.noncefn !== undefined) {
96945 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
96946 noncefn = options.noncefn
96947 }
96948 }
96949
96950 return secp256k1.sign(message, privateKey, noncefn, data)
96951 },
96952
96953 verify: function (message, signature, publicKey) {
96954 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96955 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96956
96957 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96958 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96959
96960 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96961 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96962
96963 return secp256k1.verify(message, signature, publicKey)
96964 },
96965
96966 recover: function (message, signature, recovery, compressed) {
96967 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96968 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96969
96970 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96971 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96972
96973 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
96974 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
96975
96976 compressed = initCompressedValue(compressed, true)
96977
96978 return secp256k1.recover(message, signature, recovery, compressed)
96979 },
96980
96981 ecdh: function (publicKey, privateKey) {
96982 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96983 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96984
96985 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96986 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96987
96988 return secp256k1.ecdh(publicKey, privateKey)
96989 },
96990
96991 ecdhUnsafe: function (publicKey, privateKey, compressed) {
96992 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96993 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96994
96995 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96996 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96997
96998 compressed = initCompressedValue(compressed, true)
96999
97000 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
97001 }
97002 }
97003 }
97004
97005 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
97006 module.exports={
97007 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
97008 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
97009 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
97010 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
97011 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
97012 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
97013 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
97014 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
97015 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
97016 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
97017 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
97018 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
97019 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
97020 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
97021 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
97022 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
97023 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
97024 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
97025 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
97026 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
97027 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
97028 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
97029 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
97030 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
97031 "MSG32_TYPE_INVALID": "message should be a Buffer",
97032 "MSG32_LENGTH_INVALID": "message length is invalid",
97033 "OPTIONS_TYPE_INVALID": "options should be an Object",
97034 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
97035 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
97036 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
97037 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
97038 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
97039 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
97040 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
97041 }
97042
97043 },{}],79:[function(require,module,exports){
97044 (function (Buffer){
97045 // prototype class for hash functions
97046 function Hash (blockSize, finalSize) {
97047 this._block = new Buffer(blockSize)
97048 this._finalSize = finalSize
97049 this._blockSize = blockSize
97050 this._len = 0
97051 this._s = 0
97052 }
97053
97054 Hash.prototype.update = function (data, enc) {
97055 if (typeof data === 'string') {
97056 enc = enc || 'utf8'
97057 data = new Buffer(data, enc)
97058 }
97059
97060 var l = this._len += data.length
97061 var s = this._s || 0
97062 var f = 0
97063 var buffer = this._block
97064
97065 while (s < l) {
97066 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
97067 var ch = (t - f)
97068
97069 for (var i = 0; i < ch; i++) {
97070 buffer[(s % this._blockSize) + i] = data[i + f]
97071 }
97072
97073 s += ch
97074 f += ch
97075
97076 if ((s % this._blockSize) === 0) {
97077 this._update(buffer)
97078 }
97079 }
97080 this._s = s
97081
97082 return this
97083 }
97084
97085 Hash.prototype.digest = function (enc) {
97086 // Suppose the length of the message M, in bits, is l
97087 var l = this._len * 8
97088
97089 // Append the bit 1 to the end of the message
97090 this._block[this._len % this._blockSize] = 0x80
97091
97092 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
97093 this._block.fill(0, this._len % this._blockSize + 1)
97094
97095 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
97096 this._update(this._block)
97097 this._block.fill(0)
97098 }
97099
97100 // to this append the block which is equal to the number l written in binary
97101 // TODO: handle case where l is > Math.pow(2, 29)
97102 this._block.writeInt32BE(l, this._blockSize - 4)
97103
97104 var hash = this._update(this._block) || this._hash()
97105
97106 return enc ? hash.toString(enc) : hash
97107 }
97108
97109 Hash.prototype._update = function () {
97110 throw new Error('_update must be implemented by subclass')
97111 }
97112
97113 module.exports = Hash
97114
97115 }).call(this,require("buffer").Buffer)
97116 },{"buffer":5}],80:[function(require,module,exports){
97117 var exports = module.exports = function SHA (algorithm) {
97118 algorithm = algorithm.toLowerCase()
97119
97120 var Algorithm = exports[algorithm]
97121 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
97122
97123 return new Algorithm()
97124 }
97125
97126 exports.sha = require('./sha')
97127 exports.sha1 = require('./sha1')
97128 exports.sha224 = require('./sha224')
97129 exports.sha256 = require('./sha256')
97130 exports.sha384 = require('./sha384')
97131 exports.sha512 = require('./sha512')
97132
97133 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
97134 (function (Buffer){
97135 /*
97136 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
97137 * in FIPS PUB 180-1
97138 * This source code is derived from sha1.js of the same repository.
97139 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
97140 * operation was added.
97141 */
97142
97143 var inherits = require('inherits')
97144 var Hash = require('./hash')
97145
97146 var K = [
97147 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97148 ]
97149
97150 var W = new Array(80)
97151
97152 function Sha () {
97153 this.init()
97154 this._w = W
97155
97156 Hash.call(this, 64, 56)
97157 }
97158
97159 inherits(Sha, Hash)
97160
97161 Sha.prototype.init = function () {
97162 this._a = 0x67452301
97163 this._b = 0xefcdab89
97164 this._c = 0x98badcfe
97165 this._d = 0x10325476
97166 this._e = 0xc3d2e1f0
97167
97168 return this
97169 }
97170
97171 function rotl5 (num) {
97172 return (num << 5) | (num >>> 27)
97173 }
97174
97175 function rotl30 (num) {
97176 return (num << 30) | (num >>> 2)
97177 }
97178
97179 function ft (s, b, c, d) {
97180 if (s === 0) return (b & c) | ((~b) & d)
97181 if (s === 2) return (b & c) | (b & d) | (c & d)
97182 return b ^ c ^ d
97183 }
97184
97185 Sha.prototype._update = function (M) {
97186 var W = this._w
97187
97188 var a = this._a | 0
97189 var b = this._b | 0
97190 var c = this._c | 0
97191 var d = this._d | 0
97192 var e = this._e | 0
97193
97194 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97195 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
97196
97197 for (var j = 0; j < 80; ++j) {
97198 var s = ~~(j / 20)
97199 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97200
97201 e = d
97202 d = c
97203 c = rotl30(b)
97204 b = a
97205 a = t
97206 }
97207
97208 this._a = (a + this._a) | 0
97209 this._b = (b + this._b) | 0
97210 this._c = (c + this._c) | 0
97211 this._d = (d + this._d) | 0
97212 this._e = (e + this._e) | 0
97213 }
97214
97215 Sha.prototype._hash = function () {
97216 var H = new Buffer(20)
97217
97218 H.writeInt32BE(this._a | 0, 0)
97219 H.writeInt32BE(this._b | 0, 4)
97220 H.writeInt32BE(this._c | 0, 8)
97221 H.writeInt32BE(this._d | 0, 12)
97222 H.writeInt32BE(this._e | 0, 16)
97223
97224 return H
97225 }
97226
97227 module.exports = Sha
97228
97229 }).call(this,require("buffer").Buffer)
97230 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
97231 (function (Buffer){
97232 /*
97233 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
97234 * in FIPS PUB 180-1
97235 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
97236 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97237 * Distributed under the BSD License
97238 * See http://pajhome.org.uk/crypt/md5 for details.
97239 */
97240
97241 var inherits = require('inherits')
97242 var Hash = require('./hash')
97243
97244 var K = [
97245 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97246 ]
97247
97248 var W = new Array(80)
97249
97250 function Sha1 () {
97251 this.init()
97252 this._w = W
97253
97254 Hash.call(this, 64, 56)
97255 }
97256
97257 inherits(Sha1, Hash)
97258
97259 Sha1.prototype.init = function () {
97260 this._a = 0x67452301
97261 this._b = 0xefcdab89
97262 this._c = 0x98badcfe
97263 this._d = 0x10325476
97264 this._e = 0xc3d2e1f0
97265
97266 return this
97267 }
97268
97269 function rotl1 (num) {
97270 return (num << 1) | (num >>> 31)
97271 }
97272
97273 function rotl5 (num) {
97274 return (num << 5) | (num >>> 27)
97275 }
97276
97277 function rotl30 (num) {
97278 return (num << 30) | (num >>> 2)
97279 }
97280
97281 function ft (s, b, c, d) {
97282 if (s === 0) return (b & c) | ((~b) & d)
97283 if (s === 2) return (b & c) | (b & d) | (c & d)
97284 return b ^ c ^ d
97285 }
97286
97287 Sha1.prototype._update = function (M) {
97288 var W = this._w
97289
97290 var a = this._a | 0
97291 var b = this._b | 0
97292 var c = this._c | 0
97293 var d = this._d | 0
97294 var e = this._e | 0
97295
97296 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97297 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
97298
97299 for (var j = 0; j < 80; ++j) {
97300 var s = ~~(j / 20)
97301 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97302
97303 e = d
97304 d = c
97305 c = rotl30(b)
97306 b = a
97307 a = t
97308 }
97309
97310 this._a = (a + this._a) | 0
97311 this._b = (b + this._b) | 0
97312 this._c = (c + this._c) | 0
97313 this._d = (d + this._d) | 0
97314 this._e = (e + this._e) | 0
97315 }
97316
97317 Sha1.prototype._hash = function () {
97318 var H = new Buffer(20)
97319
97320 H.writeInt32BE(this._a | 0, 0)
97321 H.writeInt32BE(this._b | 0, 4)
97322 H.writeInt32BE(this._c | 0, 8)
97323 H.writeInt32BE(this._d | 0, 12)
97324 H.writeInt32BE(this._e | 0, 16)
97325
97326 return H
97327 }
97328
97329 module.exports = Sha1
97330
97331 }).call(this,require("buffer").Buffer)
97332 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
97333 (function (Buffer){
97334 /**
97335 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97336 * in FIPS 180-2
97337 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97338 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97339 *
97340 */
97341
97342 var inherits = require('inherits')
97343 var Sha256 = require('./sha256')
97344 var Hash = require('./hash')
97345
97346 var W = new Array(64)
97347
97348 function Sha224 () {
97349 this.init()
97350
97351 this._w = W // new Array(64)
97352
97353 Hash.call(this, 64, 56)
97354 }
97355
97356 inherits(Sha224, Sha256)
97357
97358 Sha224.prototype.init = function () {
97359 this._a = 0xc1059ed8
97360 this._b = 0x367cd507
97361 this._c = 0x3070dd17
97362 this._d = 0xf70e5939
97363 this._e = 0xffc00b31
97364 this._f = 0x68581511
97365 this._g = 0x64f98fa7
97366 this._h = 0xbefa4fa4
97367
97368 return this
97369 }
97370
97371 Sha224.prototype._hash = function () {
97372 var H = new Buffer(28)
97373
97374 H.writeInt32BE(this._a, 0)
97375 H.writeInt32BE(this._b, 4)
97376 H.writeInt32BE(this._c, 8)
97377 H.writeInt32BE(this._d, 12)
97378 H.writeInt32BE(this._e, 16)
97379 H.writeInt32BE(this._f, 20)
97380 H.writeInt32BE(this._g, 24)
97381
97382 return H
97383 }
97384
97385 module.exports = Sha224
97386
97387 }).call(this,require("buffer").Buffer)
97388 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
97389 (function (Buffer){
97390 /**
97391 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97392 * in FIPS 180-2
97393 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97394 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97395 *
97396 */
97397
97398 var inherits = require('inherits')
97399 var Hash = require('./hash')
97400
97401 var K = [
97402 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
97403 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
97404 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
97405 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
97406 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
97407 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
97408 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
97409 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
97410 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
97411 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
97412 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
97413 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
97414 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
97415 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
97416 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
97417 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
97418 ]
97419
97420 var W = new Array(64)
97421
97422 function Sha256 () {
97423 this.init()
97424
97425 this._w = W // new Array(64)
97426
97427 Hash.call(this, 64, 56)
97428 }
97429
97430 inherits(Sha256, Hash)
97431
97432 Sha256.prototype.init = function () {
97433 this._a = 0x6a09e667
97434 this._b = 0xbb67ae85
97435 this._c = 0x3c6ef372
97436 this._d = 0xa54ff53a
97437 this._e = 0x510e527f
97438 this._f = 0x9b05688c
97439 this._g = 0x1f83d9ab
97440 this._h = 0x5be0cd19
97441
97442 return this
97443 }
97444
97445 function ch (x, y, z) {
97446 return z ^ (x & (y ^ z))
97447 }
97448
97449 function maj (x, y, z) {
97450 return (x & y) | (z & (x | y))
97451 }
97452
97453 function sigma0 (x) {
97454 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
97455 }
97456
97457 function sigma1 (x) {
97458 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
97459 }
97460
97461 function gamma0 (x) {
97462 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
97463 }
97464
97465 function gamma1 (x) {
97466 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
97467 }
97468
97469 Sha256.prototype._update = function (M) {
97470 var W = this._w
97471
97472 var a = this._a | 0
97473 var b = this._b | 0
97474 var c = this._c | 0
97475 var d = this._d | 0
97476 var e = this._e | 0
97477 var f = this._f | 0
97478 var g = this._g | 0
97479 var h = this._h | 0
97480
97481 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97482 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
97483
97484 for (var j = 0; j < 64; ++j) {
97485 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
97486 var T2 = (sigma0(a) + maj(a, b, c)) | 0
97487
97488 h = g
97489 g = f
97490 f = e
97491 e = (d + T1) | 0
97492 d = c
97493 c = b
97494 b = a
97495 a = (T1 + T2) | 0
97496 }
97497
97498 this._a = (a + this._a) | 0
97499 this._b = (b + this._b) | 0
97500 this._c = (c + this._c) | 0
97501 this._d = (d + this._d) | 0
97502 this._e = (e + this._e) | 0
97503 this._f = (f + this._f) | 0
97504 this._g = (g + this._g) | 0
97505 this._h = (h + this._h) | 0
97506 }
97507
97508 Sha256.prototype._hash = function () {
97509 var H = new Buffer(32)
97510
97511 H.writeInt32BE(this._a, 0)
97512 H.writeInt32BE(this._b, 4)
97513 H.writeInt32BE(this._c, 8)
97514 H.writeInt32BE(this._d, 12)
97515 H.writeInt32BE(this._e, 16)
97516 H.writeInt32BE(this._f, 20)
97517 H.writeInt32BE(this._g, 24)
97518 H.writeInt32BE(this._h, 28)
97519
97520 return H
97521 }
97522
97523 module.exports = Sha256
97524
97525 }).call(this,require("buffer").Buffer)
97526 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
97527 (function (Buffer){
97528 var inherits = require('inherits')
97529 var SHA512 = require('./sha512')
97530 var Hash = require('./hash')
97531
97532 var W = new Array(160)
97533
97534 function Sha384 () {
97535 this.init()
97536 this._w = W
97537
97538 Hash.call(this, 128, 112)
97539 }
97540
97541 inherits(Sha384, SHA512)
97542
97543 Sha384.prototype.init = function () {
97544 this._ah = 0xcbbb9d5d
97545 this._bh = 0x629a292a
97546 this._ch = 0x9159015a
97547 this._dh = 0x152fecd8
97548 this._eh = 0x67332667
97549 this._fh = 0x8eb44a87
97550 this._gh = 0xdb0c2e0d
97551 this._hh = 0x47b5481d
97552
97553 this._al = 0xc1059ed8
97554 this._bl = 0x367cd507
97555 this._cl = 0x3070dd17
97556 this._dl = 0xf70e5939
97557 this._el = 0xffc00b31
97558 this._fl = 0x68581511
97559 this._gl = 0x64f98fa7
97560 this._hl = 0xbefa4fa4
97561
97562 return this
97563 }
97564
97565 Sha384.prototype._hash = function () {
97566 var H = new Buffer(48)
97567
97568 function writeInt64BE (h, l, offset) {
97569 H.writeInt32BE(h, offset)
97570 H.writeInt32BE(l, offset + 4)
97571 }
97572
97573 writeInt64BE(this._ah, this._al, 0)
97574 writeInt64BE(this._bh, this._bl, 8)
97575 writeInt64BE(this._ch, this._cl, 16)
97576 writeInt64BE(this._dh, this._dl, 24)
97577 writeInt64BE(this._eh, this._el, 32)
97578 writeInt64BE(this._fh, this._fl, 40)
97579
97580 return H
97581 }
97582
97583 module.exports = Sha384
97584
97585 }).call(this,require("buffer").Buffer)
97586 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
97587 (function (Buffer){
97588 var inherits = require('inherits')
97589 var Hash = require('./hash')
97590
97591 var K = [
97592 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
97593 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
97594 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
97595 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
97596 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
97597 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
97598 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
97599 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
97600 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
97601 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
97602 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
97603 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
97604 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
97605 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
97606 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
97607 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
97608 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
97609 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
97610 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
97611 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
97612 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
97613 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
97614 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
97615 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
97616 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
97617 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
97618 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
97619 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
97620 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
97621 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
97622 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
97623 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
97624 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
97625 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
97626 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
97627 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
97628 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
97629 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
97630 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
97631 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
97632 ]
97633
97634 var W = new Array(160)
97635
97636 function Sha512 () {
97637 this.init()
97638 this._w = W
97639
97640 Hash.call(this, 128, 112)
97641 }
97642
97643 inherits(Sha512, Hash)
97644
97645 Sha512.prototype.init = function () {
97646 this._ah = 0x6a09e667
97647 this._bh = 0xbb67ae85
97648 this._ch = 0x3c6ef372
97649 this._dh = 0xa54ff53a
97650 this._eh = 0x510e527f
97651 this._fh = 0x9b05688c
97652 this._gh = 0x1f83d9ab
97653 this._hh = 0x5be0cd19
97654
97655 this._al = 0xf3bcc908
97656 this._bl = 0x84caa73b
97657 this._cl = 0xfe94f82b
97658 this._dl = 0x5f1d36f1
97659 this._el = 0xade682d1
97660 this._fl = 0x2b3e6c1f
97661 this._gl = 0xfb41bd6b
97662 this._hl = 0x137e2179
97663
97664 return this
97665 }
97666
97667 function Ch (x, y, z) {
97668 return z ^ (x & (y ^ z))
97669 }
97670
97671 function maj (x, y, z) {
97672 return (x & y) | (z & (x | y))
97673 }
97674
97675 function sigma0 (x, xl) {
97676 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
97677 }
97678
97679 function sigma1 (x, xl) {
97680 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
97681 }
97682
97683 function Gamma0 (x, xl) {
97684 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
97685 }
97686
97687 function Gamma0l (x, xl) {
97688 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
97689 }
97690
97691 function Gamma1 (x, xl) {
97692 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
97693 }
97694
97695 function Gamma1l (x, xl) {
97696 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
97697 }
97698
97699 function getCarry (a, b) {
97700 return (a >>> 0) < (b >>> 0) ? 1 : 0
97701 }
97702
97703 Sha512.prototype._update = function (M) {
97704 var W = this._w
97705
97706 var ah = this._ah | 0
97707 var bh = this._bh | 0
97708 var ch = this._ch | 0
97709 var dh = this._dh | 0
97710 var eh = this._eh | 0
97711 var fh = this._fh | 0
97712 var gh = this._gh | 0
97713 var hh = this._hh | 0
97714
97715 var al = this._al | 0
97716 var bl = this._bl | 0
97717 var cl = this._cl | 0
97718 var dl = this._dl | 0
97719 var el = this._el | 0
97720 var fl = this._fl | 0
97721 var gl = this._gl | 0
97722 var hl = this._hl | 0
97723
97724 for (var i = 0; i < 32; i += 2) {
97725 W[i] = M.readInt32BE(i * 4)
97726 W[i + 1] = M.readInt32BE(i * 4 + 4)
97727 }
97728 for (; i < 160; i += 2) {
97729 var xh = W[i - 15 * 2]
97730 var xl = W[i - 15 * 2 + 1]
97731 var gamma0 = Gamma0(xh, xl)
97732 var gamma0l = Gamma0l(xl, xh)
97733
97734 xh = W[i - 2 * 2]
97735 xl = W[i - 2 * 2 + 1]
97736 var gamma1 = Gamma1(xh, xl)
97737 var gamma1l = Gamma1l(xl, xh)
97738
97739 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
97740 var Wi7h = W[i - 7 * 2]
97741 var Wi7l = W[i - 7 * 2 + 1]
97742
97743 var Wi16h = W[i - 16 * 2]
97744 var Wi16l = W[i - 16 * 2 + 1]
97745
97746 var Wil = (gamma0l + Wi7l) | 0
97747 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
97748 Wil = (Wil + gamma1l) | 0
97749 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
97750 Wil = (Wil + Wi16l) | 0
97751 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
97752
97753 W[i] = Wih
97754 W[i + 1] = Wil
97755 }
97756
97757 for (var j = 0; j < 160; j += 2) {
97758 Wih = W[j]
97759 Wil = W[j + 1]
97760
97761 var majh = maj(ah, bh, ch)
97762 var majl = maj(al, bl, cl)
97763
97764 var sigma0h = sigma0(ah, al)
97765 var sigma0l = sigma0(al, ah)
97766 var sigma1h = sigma1(eh, el)
97767 var sigma1l = sigma1(el, eh)
97768
97769 // t1 = h + sigma1 + ch + K[j] + W[j]
97770 var Kih = K[j]
97771 var Kil = K[j + 1]
97772
97773 var chh = Ch(eh, fh, gh)
97774 var chl = Ch(el, fl, gl)
97775
97776 var t1l = (hl + sigma1l) | 0
97777 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
97778 t1l = (t1l + chl) | 0
97779 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
97780 t1l = (t1l + Kil) | 0
97781 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
97782 t1l = (t1l + Wil) | 0
97783 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
97784
97785 // t2 = sigma0 + maj
97786 var t2l = (sigma0l + majl) | 0
97787 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
97788
97789 hh = gh
97790 hl = gl
97791 gh = fh
97792 gl = fl
97793 fh = eh
97794 fl = el
97795 el = (dl + t1l) | 0
97796 eh = (dh + t1h + getCarry(el, dl)) | 0
97797 dh = ch
97798 dl = cl
97799 ch = bh
97800 cl = bl
97801 bh = ah
97802 bl = al
97803 al = (t1l + t2l) | 0
97804 ah = (t1h + t2h + getCarry(al, t1l)) | 0
97805 }
97806
97807 this._al = (this._al + al) | 0
97808 this._bl = (this._bl + bl) | 0
97809 this._cl = (this._cl + cl) | 0
97810 this._dl = (this._dl + dl) | 0
97811 this._el = (this._el + el) | 0
97812 this._fl = (this._fl + fl) | 0
97813 this._gl = (this._gl + gl) | 0
97814 this._hl = (this._hl + hl) | 0
97815
97816 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
97817 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
97818 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
97819 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
97820 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
97821 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
97822 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
97823 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
97824 }
97825
97826 Sha512.prototype._hash = function () {
97827 var H = new Buffer(64)
97828
97829 function writeInt64BE (h, l, offset) {
97830 H.writeInt32BE(h, offset)
97831 H.writeInt32BE(l, offset + 4)
97832 }
97833
97834 writeInt64BE(this._ah, this._al, 0)
97835 writeInt64BE(this._bh, this._bl, 8)
97836 writeInt64BE(this._ch, this._cl, 16)
97837 writeInt64BE(this._dh, this._dl, 24)
97838 writeInt64BE(this._eh, this._el, 32)
97839 writeInt64BE(this._fh, this._fl, 40)
97840 writeInt64BE(this._gh, this._gl, 48)
97841 writeInt64BE(this._hh, this._hl, 56)
97842
97843 return H
97844 }
97845
97846 module.exports = Sha512
97847
97848 }).call(this,require("buffer").Buffer)
97849 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
97850 var isHexPrefixed = require('is-hex-prefixed');
97851
97852 /**
97853 * Removes '0x' from a given `String` is present
97854 * @param {String} str the string value
97855 * @return {String|Optional} a string by pass if necessary
97856 */
97857 module.exports = function stripHexPrefix(str) {
97858 if (typeof str !== 'string') {
97859 return str;
97860 }
97861
97862 return isHexPrefixed(str) ? str.slice(2) : str;
97863 }
97864
97865 },{"is-hex-prefixed":64}]},{},[31])(31)
97866 });</script>
97867 <script>function convertRippleAdrr(address) {
97868 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
97869 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
97870 )
97871 }
97872
97873 function convertRipplePriv(priv) {
97874 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
97875 }
97876
97877 </script>
97878 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
97879
97880 //// base.js
97881
97882 /** @fileOverview Javascript cryptography implementation.
97883 *
97884 * Crush to remove comments, shorten variable names and
97885 * generally reduce transmission size.
97886 *
97887 * @author Emily Stark
97888 * @author Mike Hamburg
97889 * @author Dan Boneh
97890 */
97891
97892 "use strict";
97893 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
97894 /*global document, window, escape, unescape, module, require, Uint32Array */
97895
97896 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
97897 var sjcl = {
97898 /** @namespace Symmetric ciphers. */
97899 cipher: {},
97900
97901 /** @namespace Hash functions. Right now only SHA256 is implemented. */
97902 hash: {},
97903
97904 /** @namespace Key exchange functions. Right now only SRP is implemented. */
97905 keyexchange: {},
97906
97907 /** @namespace Block cipher modes of operation. */
97908 mode: {},
97909
97910 /** @namespace Miscellaneous. HMAC and PBKDF2. */
97911 misc: {},
97912
97913 /**
97914 * @namespace Bit array encoders and decoders.
97915 *
97916 * @description
97917 * The members of this namespace are functions which translate between
97918 * SJCL's bitArrays and other objects (usually strings). Because it
97919 * isn't always clear which direction is encoding and which is decoding,
97920 * the method names are "fromBits" and "toBits".
97921 */
97922 codec: {},
97923
97924 /** @namespace Exceptions. */
97925 exception: {
97926 /** @constructor Ciphertext is corrupt. */
97927 corrupt: function(message) {
97928 this.toString = function() { return "CORRUPT: "+this.message; };
97929 this.message = message;
97930 },
97931
97932 /** @constructor Invalid parameter. */
97933 invalid: function(message) {
97934 this.toString = function() { return "INVALID: "+this.message; };
97935 this.message = message;
97936 },
97937
97938 /** @constructor Bug or missing feature in SJCL. @constructor */
97939 bug: function(message) {
97940 this.toString = function() { return "BUG: "+this.message; };
97941 this.message = message;
97942 },
97943
97944 /** @constructor Something isn't ready. */
97945 notReady: function(message) {
97946 this.toString = function() { return "NOT READY: "+this.message; };
97947 this.message = message;
97948 }
97949 }
97950 };
97951
97952 if(typeof module !== 'undefined' && module.exports){
97953 module.exports = sjcl;
97954 }
97955 if (typeof define === "function") {
97956 define([], function () {
97957 return sjcl;
97958 });
97959 }
97960
97961
97962 //// bitArray.js
97963
97964 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
97965 *
97966 * @author Emily Stark
97967 * @author Mike Hamburg
97968 * @author Dan Boneh
97969 */
97970
97971 /** @namespace Arrays of bits, encoded as arrays of Numbers.
97972 *
97973 * @description
97974 * <p>
97975 * These objects are the currency accepted by SJCL's crypto functions.
97976 * </p>
97977 *
97978 * <p>
97979 * Most of our crypto primitives operate on arrays of 4-byte words internally,
97980 * but many of them can take arguments that are not a multiple of 4 bytes.
97981 * This library encodes arrays of bits (whose size need not be a multiple of 8
97982 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
97983 * array of words, 32 bits at a time. Since the words are double-precision
97984 * floating point numbers, they fit some extra data. We use this (in a private,
97985 * possibly-changing manner) to encode the number of bits actually present
97986 * in the last word of the array.
97987 * </p>
97988 *
97989 * <p>
97990 * Because bitwise ops clear this out-of-band data, these arrays can be passed
97991 * to ciphers like AES which want arrays of words.
97992 * </p>
97993 */
97994 sjcl.bitArray = {
97995 /**
97996 * Array slices in units of bits.
97997 * @param {bitArray} a The array to slice.
97998 * @param {Number} bstart The offset to the start of the slice, in bits.
97999 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
98000 * slice until the end of the array.
98001 * @return {bitArray} The requested slice.
98002 */
98003 bitSlice: function (a, bstart, bend) {
98004 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
98005 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
98006 },
98007
98008 /**
98009 * Extract a number packed into a bit array.
98010 * @param {bitArray} a The array to slice.
98011 * @param {Number} bstart The offset to the start of the slice, in bits.
98012 * @param {Number} length The length of the number to extract.
98013 * @return {Number} The requested slice.
98014 */
98015 extract: function(a, bstart, blength) {
98016 // FIXME: this Math.floor is not necessary at all, but for some reason
98017 // seems to suppress a bug in the Chromium JIT.
98018 var x, sh = Math.floor((-bstart-blength) & 31);
98019 if ((bstart + blength - 1 ^ bstart) & -32) {
98020 // it crosses a boundary
98021 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
98022 } else {
98023 // within a single word
98024 x = a[bstart/32|0] >>> sh;
98025 }
98026 return x & ((1<<blength) - 1);
98027 },
98028
98029 /**
98030 * Concatenate two bit arrays.
98031 * @param {bitArray} a1 The first array.
98032 * @param {bitArray} a2 The second array.
98033 * @return {bitArray} The concatenation of a1 and a2.
98034 */
98035 concat: function (a1, a2) {
98036 if (a1.length === 0 || a2.length === 0) {
98037 return a1.concat(a2);
98038 }
98039
98040 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
98041 if (shift === 32) {
98042 return a1.concat(a2);
98043 } else {
98044 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
98045 }
98046 },
98047
98048 /**
98049 * Find the length of an array of bits.
98050 * @param {bitArray} a The array.
98051 * @return {Number} The length of a, in bits.
98052 */
98053 bitLength: function (a) {
98054 var l = a.length, x;
98055 if (l === 0) { return 0; }
98056 x = a[l - 1];
98057 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
98058 },
98059
98060 /**
98061 * Truncate an array.
98062 * @param {bitArray} a The array.
98063 * @param {Number} len The length to truncate to, in bits.
98064 * @return {bitArray} A new array, truncated to len bits.
98065 */
98066 clamp: function (a, len) {
98067 if (a.length * 32 < len) { return a; }
98068 a = a.slice(0, Math.ceil(len / 32));
98069 var l = a.length;
98070 len = len & 31;
98071 if (l > 0 && len) {
98072 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
98073 }
98074 return a;
98075 },
98076
98077 /**
98078 * Make a partial word for a bit array.
98079 * @param {Number} len The number of bits in the word.
98080 * @param {Number} x The bits.
98081 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
98082 * @return {Number} The partial word.
98083 */
98084 partial: function (len, x, _end) {
98085 if (len === 32) { return x; }
98086 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
98087 },
98088
98089 /**
98090 * Get the number of bits used by a partial word.
98091 * @param {Number} x The partial word.
98092 * @return {Number} The number of bits used by the partial word.
98093 */
98094 getPartial: function (x) {
98095 return Math.round(x/0x10000000000) || 32;
98096 },
98097
98098 /**
98099 * Compare two arrays for equality in a predictable amount of time.
98100 * @param {bitArray} a The first array.
98101 * @param {bitArray} b The second array.
98102 * @return {boolean} true if a == b; false otherwise.
98103 */
98104 equal: function (a, b) {
98105 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
98106 return false;
98107 }
98108 var x = 0, i;
98109 for (i=0; i<a.length; i++) {
98110 x |= a[i]^b[i];
98111 }
98112 return (x === 0);
98113 },
98114
98115 /** Shift an array right.
98116 * @param {bitArray} a The array to shift.
98117 * @param {Number} shift The number of bits to shift.
98118 * @param {Number} [carry=0] A byte to carry in
98119 * @param {bitArray} [out=[]] An array to prepend to the output.
98120 * @private
98121 */
98122 _shiftRight: function (a, shift, carry, out) {
98123 var i, last2=0, shift2;
98124 if (out === undefined) { out = []; }
98125
98126 for (; shift >= 32; shift -= 32) {
98127 out.push(carry);
98128 carry = 0;
98129 }
98130 if (shift === 0) {
98131 return out.concat(a);
98132 }
98133
98134 for (i=0; i<a.length; i++) {
98135 out.push(carry | a[i]>>>shift);
98136 carry = a[i] << (32-shift);
98137 }
98138 last2 = a.length ? a[a.length-1] : 0;
98139 shift2 = sjcl.bitArray.getPartial(last2);
98140 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
98141 return out;
98142 },
98143
98144 /** xor a block of 4 words together.
98145 * @private
98146 */
98147 _xor4: function(x,y) {
98148 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
98149 },
98150
98151 /** byteswap a word array inplace.
98152 * (does not handle partial words)
98153 * @param {sjcl.bitArray} a word array
98154 * @return {sjcl.bitArray} byteswapped array
98155 */
98156 byteswapM: function(a) {
98157 var i, v, m = 0xff00;
98158 for (i = 0; i < a.length; ++i) {
98159 v = a[i];
98160 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
98161 }
98162 return a;
98163 }
98164 };
98165
98166
98167 //// codecString.js
98168
98169 /** @fileOverview Bit array codec implementations.
98170 *
98171 * @author Emily Stark
98172 * @author Mike Hamburg
98173 * @author Dan Boneh
98174 */
98175
98176 /** @namespace UTF-8 strings */
98177 sjcl.codec.utf8String = {
98178 /** Convert from a bitArray to a UTF-8 string. */
98179 fromBits: function (arr) {
98180 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
98181 for (i=0; i<bl/8; i++) {
98182 if ((i&3) === 0) {
98183 tmp = arr[i/4];
98184 }
98185 out += String.fromCharCode(tmp >>> 24);
98186 tmp <<= 8;
98187 }
98188 return decodeURIComponent(escape(out));
98189 },
98190
98191 /** Convert from a UTF-8 string to a bitArray. */
98192 toBits: function (str) {
98193 str = unescape(encodeURIComponent(str));
98194 var out = [], i, tmp=0;
98195 for (i=0; i<str.length; i++) {
98196 tmp = tmp << 8 | str.charCodeAt(i);
98197 if ((i&3) === 3) {
98198 out.push(tmp);
98199 tmp = 0;
98200 }
98201 }
98202 if (i&3) {
98203 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
98204 }
98205 return out;
98206 }
98207 };
98208
98209
98210 //// codecHex.js
98211
98212 /** @fileOverview Bit array codec implementations.
98213 *
98214 * @author Emily Stark
98215 * @author Mike Hamburg
98216 * @author Dan Boneh
98217 */
98218
98219 /** @namespace Hexadecimal */
98220 sjcl.codec.hex = {
98221 /** Convert from a bitArray to a hex string. */
98222 fromBits: function (arr) {
98223 var out = "", i;
98224 for (i=0; i<arr.length; i++) {
98225 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
98226 }
98227 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
98228 },
98229 /** Convert from a hex string to a bitArray. */
98230 toBits: function (str) {
98231 var i, out=[], len;
98232 str = str.replace(/\s|0x/g, "");
98233 len = str.length;
98234 str = str + "00000000";
98235 for (i=0; i<str.length; i+=8) {
98236 out.push(parseInt(str.substr(i,8),16)^0);
98237 }
98238 return sjcl.bitArray.clamp(out, len*4);
98239 }
98240 };
98241
98242
98243 //// sha512.js
98244
98245 /** @fileOverview Javascript SHA-512 implementation.
98246 *
98247 * This implementation was written for CryptoJS by Jeff Mott and adapted for
98248 * SJCL by Stefan Thomas.
98249 *
98250 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
98251 * Released with New BSD License
98252 *
98253 * @author Emily Stark
98254 * @author Mike Hamburg
98255 * @author Dan Boneh
98256 * @author Jeff Mott
98257 * @author Stefan Thomas
98258 */
98259
98260 /**
98261 * Context for a SHA-512 operation in progress.
98262 * @constructor
98263 * @class Secure Hash Algorithm, 512 bits.
98264 */
98265 sjcl.hash.sha512 = function (hash) {
98266 if (!this._key[0]) { this._precompute(); }
98267 if (hash) {
98268 this._h = hash._h.slice(0);
98269 this._buffer = hash._buffer.slice(0);
98270 this._length = hash._length;
98271 } else {
98272 this.reset();
98273 }
98274 };
98275
98276 /**
98277 * Hash a string or an array of words.
98278 * @static
98279 * @param {bitArray|String} data the data to hash.
98280 * @return {bitArray} The hash value, an array of 16 big-endian words.
98281 */
98282 sjcl.hash.sha512.hash = function (data) {
98283 return (new sjcl.hash.sha512()).update(data).finalize();
98284 };
98285
98286 sjcl.hash.sha512.prototype = {
98287 /**
98288 * The hash's block size, in bits.
98289 * @constant
98290 */
98291 blockSize: 1024,
98292
98293 /**
98294 * Reset the hash state.
98295 * @return this
98296 */
98297 reset:function () {
98298 this._h = this._init.slice(0);
98299 this._buffer = [];
98300 this._length = 0;
98301 return this;
98302 },
98303
98304 /**
98305 * Input several words to the hash.
98306 * @param {bitArray|String} data the data to hash.
98307 * @return this
98308 */
98309 update: function (data) {
98310 if (typeof data === "string") {
98311 data = sjcl.codec.utf8String.toBits(data);
98312 }
98313 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98314 ol = this._length,
98315 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98316 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
98317 this._block(b.splice(0,32));
98318 }
98319 return this;
98320 },
98321
98322 /**
98323 * Complete hashing and output the hash value.
98324 * @return {bitArray} The hash value, an array of 16 big-endian words.
98325 */
98326 finalize:function () {
98327 var i, b = this._buffer, h = this._h;
98328
98329 // Round out and push the buffer
98330 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98331
98332 // Round out the buffer to a multiple of 32 words, less the 4 length words.
98333 for (i = b.length + 4; i & 31; i++) {
98334 b.push(0);
98335 }
98336
98337 // append the length
98338 b.push(0);
98339 b.push(0);
98340 b.push(Math.floor(this._length / 0x100000000));
98341 b.push(this._length | 0);
98342
98343 while (b.length) {
98344 this._block(b.splice(0,32));
98345 }
98346
98347 this.reset();
98348 return h;
98349 },
98350
98351 /**
98352 * The SHA-512 initialization vector, to be precomputed.
98353 * @private
98354 */
98355 _init:[],
98356
98357 /**
98358 * Least significant 24 bits of SHA512 initialization values.
98359 *
98360 * Javascript only has 53 bits of precision, so we compute the 40 most
98361 * significant bits and add the remaining 24 bits as constants.
98362 *
98363 * @private
98364 */
98365 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
98366
98367 /*
98368 _init:
98369 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
98370 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
98371 */
98372
98373 /**
98374 * The SHA-512 hash key, to be precomputed.
98375 * @private
98376 */
98377 _key:[],
98378
98379 /**
98380 * Least significant 24 bits of SHA512 key values.
98381 * @private
98382 */
98383 _keyr:
98384 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
98385 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
98386 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
98387 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
98388 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
98389 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
98390 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
98391 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
98392 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
98393 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
98394
98395 /*
98396 _key:
98397 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
98398 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
98399 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
98400 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
98401 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
98402 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
98403 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
98404 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
98405 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
98406 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
98407 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
98408 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
98409 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
98410 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
98411 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
98412 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
98413 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
98414 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
98415 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
98416 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
98417 */
98418
98419 /**
98420 * Function to precompute _init and _key.
98421 * @private
98422 */
98423 _precompute: function () {
98424 // XXX: This code is for precomputing the SHA256 constants, change for
98425 // SHA512 and re-enable.
98426 var i = 0, prime = 2, factor;
98427
98428 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98429 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
98430
98431 outer: for (; i<80; prime++) {
98432 for (factor=2; factor*factor <= prime; factor++) {
98433 if (prime % factor === 0) {
98434 // not a prime
98435 continue outer;
98436 }
98437 }
98438
98439 if (i<8) {
98440 this._init[i*2] = frac(Math.pow(prime, 1/2));
98441 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
98442 }
98443 this._key[i*2] = frac(Math.pow(prime, 1/3));
98444 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
98445 i++;
98446 }
98447 },
98448
98449 /**
98450 * Perform one cycle of SHA-512.
98451 * @param {bitArray} words one block of words.
98452 * @private
98453 */
98454 _block:function (words) {
98455 var i, wrh, wrl,
98456 w = words.slice(0),
98457 h = this._h,
98458 k = this._key,
98459 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
98460 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
98461 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
98462 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
98463
98464 // Working variables
98465 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
98466 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
98467 eh = h4h, el = h4l, fh = h5h, fl = h5l,
98468 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
98469
98470 for (i=0; i<80; i++) {
98471 // load up the input word for this round
98472 if (i<16) {
98473 wrh = w[i * 2];
98474 wrl = w[i * 2 + 1];
98475 } else {
98476 // Gamma0
98477 var gamma0xh = w[(i-15) * 2];
98478 var gamma0xl = w[(i-15) * 2 + 1];
98479 var gamma0h =
98480 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
98481 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
98482 (gamma0xh >>> 7);
98483 var gamma0l =
98484 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
98485 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
98486 ((gamma0xh << 25) | (gamma0xl >>> 7));
98487
98488 // Gamma1
98489 var gamma1xh = w[(i-2) * 2];
98490 var gamma1xl = w[(i-2) * 2 + 1];
98491 var gamma1h =
98492 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
98493 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
98494 (gamma1xh >>> 6);
98495 var gamma1l =
98496 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
98497 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
98498 ((gamma1xh << 26) | (gamma1xl >>> 6));
98499
98500 // Shortcuts
98501 var wr7h = w[(i-7) * 2];
98502 var wr7l = w[(i-7) * 2 + 1];
98503
98504 var wr16h = w[(i-16) * 2];
98505 var wr16l = w[(i-16) * 2 + 1];
98506
98507 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
98508 wrl = gamma0l + wr7l;
98509 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
98510 wrl += gamma1l;
98511 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
98512 wrl += wr16l;
98513 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
98514 }
98515
98516 w[i*2] = wrh |= 0;
98517 w[i*2 + 1] = wrl |= 0;
98518
98519 // Ch
98520 var chh = (eh & fh) ^ (~eh & gh);
98521 var chl = (el & fl) ^ (~el & gl);
98522
98523 // Maj
98524 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
98525 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
98526
98527 // Sigma0
98528 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
98529 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
98530
98531 // Sigma1
98532 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
98533 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
98534
98535 // K(round)
98536 var krh = k[i*2];
98537 var krl = k[i*2+1];
98538
98539 // t1 = h + sigma1 + ch + K(round) + W(round)
98540 var t1l = hl + sigma1l;
98541 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
98542 t1l += chl;
98543 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
98544 t1l += krl;
98545 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
98546 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
98547 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
98548
98549 // t2 = sigma0 + maj
98550 var t2l = sigma0l + majl;
98551 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
98552
98553 // Update working variables
98554 hh = gh;
98555 hl = gl;
98556 gh = fh;
98557 gl = fl;
98558 fh = eh;
98559 fl = el;
98560 el = (dl + t1l) | 0;
98561 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98562 dh = ch;
98563 dl = cl;
98564 ch = bh;
98565 cl = bl;
98566 bh = ah;
98567 bl = al;
98568 al = (t1l + t2l) | 0;
98569 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
98570 }
98571
98572 // Intermediate hash
98573 h0l = h[1] = (h0l + al) | 0;
98574 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
98575 h1l = h[3] = (h1l + bl) | 0;
98576 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
98577 h2l = h[5] = (h2l + cl) | 0;
98578 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
98579 h3l = h[7] = (h3l + dl) | 0;
98580 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98581 h4l = h[9] = (h4l + el) | 0;
98582 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
98583 h5l = h[11] = (h5l + fl) | 0;
98584 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
98585 h6l = h[13] = (h6l + gl) | 0;
98586 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
98587 h7l = h[15] = (h7l + hl) | 0;
98588 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
98589 }
98590 };
98591
98592
98593 //// hmac.js
98594
98595 /** @fileOverview HMAC implementation.
98596 *
98597 * @author Emily Stark
98598 * @author Mike Hamburg
98599 * @author Dan Boneh
98600 */
98601
98602 /** HMAC with the specified hash function.
98603 * @constructor
98604 * @param {bitArray} key the key for HMAC.
98605 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
98606 */
98607 sjcl.misc.hmac = function (key, Hash) {
98608 this._hash = Hash = Hash || sjcl.hash.sha256;
98609 var exKey = [[],[]], i,
98610 bs = Hash.prototype.blockSize / 32;
98611 this._baseHash = [new Hash(), new Hash()];
98612
98613 if (key.length > bs) {
98614 key = Hash.hash(key);
98615 }
98616
98617 for (i=0; i<bs; i++) {
98618 exKey[0][i] = key[i]^0x36363636;
98619 exKey[1][i] = key[i]^0x5C5C5C5C;
98620 }
98621
98622 this._baseHash[0].update(exKey[0]);
98623 this._baseHash[1].update(exKey[1]);
98624 this._resultHash = new Hash(this._baseHash[0]);
98625 };
98626
98627 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
98628 * @param {bitArray|String} data The data to mac.
98629 */
98630 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
98631 if (!this._updated) {
98632 this.update(data);
98633 return this.digest(data);
98634 } else {
98635 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
98636 }
98637 };
98638
98639 sjcl.misc.hmac.prototype.reset = function () {
98640 this._resultHash = new this._hash(this._baseHash[0]);
98641 this._updated = false;
98642 };
98643
98644 sjcl.misc.hmac.prototype.update = function (data) {
98645 this._updated = true;
98646 this._resultHash.update(data);
98647 };
98648
98649 sjcl.misc.hmac.prototype.digest = function () {
98650 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
98651
98652 this.reset();
98653
98654 return result;
98655 };
98656
98657
98658 //// pbkdf2.js
98659
98660
98661 /** @fileOverview Password-based key-derivation function, version 2.0.
98662 *
98663 * @author Emily Stark
98664 * @author Mike Hamburg
98665 * @author Dan Boneh
98666 */
98667
98668 /** Password-Based Key-Derivation Function, version 2.0.
98669 *
98670 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
98671 *
98672 * This is the method specified by RSA's PKCS #5 standard.
98673 *
98674 * @param {bitArray|String} password The password.
98675 * @param {bitArray|String} salt The salt. Should have lots of entropy.
98676 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
98677 * @param {Number} [length] The length of the derived key. Defaults to the
98678 output size of the hash function.
98679 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
98680 * @return {bitArray} the derived key.
98681 */
98682 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
98683 count = count || 1000;
98684
98685 if (length < 0 || count < 0) {
98686 throw sjcl.exception.invalid("invalid params to pbkdf2");
98687 }
98688
98689 if (typeof password === "string") {
98690 password = sjcl.codec.utf8String.toBits(password);
98691 }
98692
98693 if (typeof salt === "string") {
98694 salt = sjcl.codec.utf8String.toBits(salt);
98695 }
98696
98697 Prff = Prff || sjcl.misc.hmac;
98698
98699 var prf = new Prff(password),
98700 u, ui, i, j, k, out = [], b = sjcl.bitArray;
98701
98702 for (k = 1; 32 * out.length < (length || 1); k++) {
98703 u = ui = prf.encrypt(b.concat(salt,[k]));
98704
98705 for (i=1; i<count; i++) {
98706 ui = prf.encrypt(ui);
98707 for (j=0; j<ui.length; j++) {
98708 u[j] ^= ui[j];
98709 }
98710 }
98711
98712 out = out.concat(u);
98713 }
98714
98715 if (length) { out = b.clamp(out, length); }
98716
98717 return out;
98718 };
98719
98720
98721 //// sha256.js
98722
98723 /** @fileOverview Javascript SHA-256 implementation.
98724 *
98725 * An older version of this implementation is available in the public
98726 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
98727 * Stanford University 2008-2010 and BSD-licensed for liability
98728 * reasons.
98729 *
98730 * Special thanks to Aldo Cortesi for pointing out several bugs in
98731 * this code.
98732 *
98733 * @author Emily Stark
98734 * @author Mike Hamburg
98735 * @author Dan Boneh
98736 */
98737
98738 /**
98739 * Context for a SHA-256 operation in progress.
98740 * @constructor
98741 * @class Secure Hash Algorithm, 256 bits.
98742 */
98743 sjcl.hash.sha256 = function (hash) {
98744 if (!this._key[0]) { this._precompute(); }
98745 if (hash) {
98746 this._h = hash._h.slice(0);
98747 this._buffer = hash._buffer.slice(0);
98748 this._length = hash._length;
98749 } else {
98750 this.reset();
98751 }
98752 };
98753
98754 /**
98755 * Hash a string or an array of words.
98756 * @static
98757 * @param {bitArray|String} data the data to hash.
98758 * @return {bitArray} The hash value, an array of 16 big-endian words.
98759 */
98760 sjcl.hash.sha256.hash = function (data) {
98761 return (new sjcl.hash.sha256()).update(data).finalize();
98762 };
98763
98764 sjcl.hash.sha256.prototype = {
98765 /**
98766 * The hash's block size, in bits.
98767 * @constant
98768 */
98769 blockSize: 512,
98770
98771 /**
98772 * Reset the hash state.
98773 * @return this
98774 */
98775 reset:function () {
98776 this._h = this._init.slice(0);
98777 this._buffer = [];
98778 this._length = 0;
98779 return this;
98780 },
98781
98782 /**
98783 * Input several words to the hash.
98784 * @param {bitArray|String} data the data to hash.
98785 * @return this
98786 */
98787 update: function (data) {
98788 if (typeof data === "string") {
98789 data = sjcl.codec.utf8String.toBits(data);
98790 }
98791 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98792 ol = this._length,
98793 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98794 for (i = 512+ol & -512; i <= nl; i+= 512) {
98795 this._block(b.splice(0,16));
98796 }
98797 return this;
98798 },
98799
98800 /**
98801 * Complete hashing and output the hash value.
98802 * @return {bitArray} The hash value, an array of 8 big-endian words.
98803 */
98804 finalize:function () {
98805 var i, b = this._buffer, h = this._h;
98806
98807 // Round out and push the buffer
98808 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98809
98810 // Round out the buffer to a multiple of 16 words, less the 2 length words.
98811 for (i = b.length + 2; i & 15; i++) {
98812 b.push(0);
98813 }
98814
98815 // append the length
98816 b.push(Math.floor(this._length / 0x100000000));
98817 b.push(this._length | 0);
98818
98819 while (b.length) {
98820 this._block(b.splice(0,16));
98821 }
98822
98823 this.reset();
98824 return h;
98825 },
98826
98827 /**
98828 * The SHA-256 initialization vector, to be precomputed.
98829 * @private
98830 */
98831 _init:[],
98832 /*
98833 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
98834 */
98835
98836 /**
98837 * The SHA-256 hash key, to be precomputed.
98838 * @private
98839 */
98840 _key:[],
98841 /*
98842 _key:
98843 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
98844 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
98845 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
98846 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
98847 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
98848 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
98849 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
98850 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
98851 */
98852
98853
98854 /**
98855 * Function to precompute _init and _key.
98856 * @private
98857 */
98858 _precompute: function () {
98859 var i = 0, prime = 2, factor;
98860
98861 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98862
98863 outer: for (; i<64; prime++) {
98864 for (factor=2; factor*factor <= prime; factor++) {
98865 if (prime % factor === 0) {
98866 // not a prime
98867 continue outer;
98868 }
98869 }
98870
98871 if (i<8) {
98872 this._init[i] = frac(Math.pow(prime, 1/2));
98873 }
98874 this._key[i] = frac(Math.pow(prime, 1/3));
98875 i++;
98876 }
98877 },
98878
98879 /**
98880 * Perform one cycle of SHA-256.
98881 * @param {bitArray} words one block of words.
98882 * @private
98883 */
98884 _block:function (words) {
98885 var i, tmp, a, b,
98886 w = words.slice(0),
98887 h = this._h,
98888 k = this._key,
98889 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
98890 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
98891
98892 /* Rationale for placement of |0 :
98893 * If a value can overflow is original 32 bits by a factor of more than a few
98894 * million (2^23 ish), there is a possibility that it might overflow the
98895 * 53-bit mantissa and lose precision.
98896 *
98897 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
98898 * propagates around the loop, and on the hash state h[]. I don't believe
98899 * that the clamps on h4 and on h0 are strictly necessary, but it's close
98900 * (for h4 anyway), and better safe than sorry.
98901 *
98902 * The clamps on h[] are necessary for the output to be correct even in the
98903 * common case and for short inputs.
98904 */
98905 for (i=0; i<64; i++) {
98906 // load up the input word for this round
98907 if (i<16) {
98908 tmp = w[i];
98909 } else {
98910 a = w[(i+1 ) & 15];
98911 b = w[(i+14) & 15];
98912 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
98913 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
98914 w[i&15] + w[(i+9) & 15]) | 0;
98915 }
98916
98917 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
98918
98919 // shift register
98920 h7 = h6; h6 = h5; h5 = h4;
98921 h4 = h3 + tmp | 0;
98922 h3 = h2; h2 = h1; h1 = h0;
98923
98924 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
98925 }
98926
98927 h[0] = h[0]+h0 | 0;
98928 h[1] = h[1]+h1 | 0;
98929 h[2] = h[2]+h2 | 0;
98930 h[3] = h[3]+h3 | 0;
98931 h[4] = h[4]+h4 | 0;
98932 h[5] = h[5]+h5 | 0;
98933 h[6] = h[6]+h6 | 0;
98934 h[7] = h[7]+h7 | 0;
98935 }
98936 };
98937 </script>
98938 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
98939 WORDLISTS["english"] = [
98940 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
98941 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
98942 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
98943 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
98944 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
98945 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
98946 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
98947 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
98948 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
98949 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
98950 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
98951 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
98952 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
98953 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
98954 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
98955 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
98956 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
98957 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
98958 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
98959 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
98960 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
98961 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
98962 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
98963 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
98964 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
98965 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
98966 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
98967 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
98968 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
98969 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
98970 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
98971 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
98972 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
98973 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
98974 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
98975 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
98976 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
98977 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
98978 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
98979 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
98980 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
98981 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
98982 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
98983 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
98984 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
98985 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
98986 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
98987 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
98988 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
98989 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
98990 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
98991 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
98992 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
98993 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
98994 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
98995 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
98996 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
98997 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
98998 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
98999 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
99000 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
99001 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
99002 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
99003 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
99004 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
99005 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
99006 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
99007 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
99008 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
99009 "film","filter","final","find","fine","finger","finish","fire","firm","first",
99010 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
99011 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
99012 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
99013 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
99014 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
99015 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
99016 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
99017 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
99018 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
99019 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
99020 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
99021 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
99022 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
99023 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
99024 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
99025 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
99026 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
99027 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
99028 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
99029 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
99030 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
99031 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
99032 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
99033 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
99034 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
99035 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
99036 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
99037 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
99038 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
99039 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
99040 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
99041 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
99042 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
99043 "liar","liberty","library","license","life","lift","light","like","limb","limit",
99044 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
99045 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
99046 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
99047 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
99048 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
99049 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
99050 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
99051 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
99052 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
99053 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
99054 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
99055 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
99056 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
99057 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
99058 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
99059 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
99060 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
99061 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
99062 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
99063 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
99064 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
99065 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
99066 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
99067 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
99068 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
99069 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
99070 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
99071 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
99072 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
99073 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
99074 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
99075 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
99076 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
99077 "prize","problem","process","produce","profit","program","project","promote","proof","property",
99078 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
99079 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
99080 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
99081 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
99082 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
99083 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
99084 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
99085 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
99086 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
99087 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
99088 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
99089 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
99090 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
99091 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
99092 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
99093 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
99094 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
99095 "scrub","sea","search","season","seat","second","secret","section","security","seed",
99096 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
99097 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
99098 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
99099 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
99100 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
99101 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
99102 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
99103 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
99104 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
99105 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
99106 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
99107 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
99108 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
99109 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
99110 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
99111 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
99112 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
99113 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
99114 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
99115 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
99116 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
99117 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
99118 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
99119 "thank","that","theme","then","theory","there","they","thing","this","thought",
99120 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
99121 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
99122 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
99123 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
99124 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
99125 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
99126 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
99127 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
99128 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
99129 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
99130 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
99131 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
99132 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
99133 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
99134 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
99135 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
99136 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
99137 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
99138 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
99139 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
99140 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
99141 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
99142 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
99143 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
99144 "yellow","you","young","youth","zebra","zero","zone","zoo"]
99145 </script>
99146 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99147 WORDLISTS["japanese"] = [
99148 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
99149 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
99150 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
99151 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
99152 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
99153 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
99154 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
99155 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
99156 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
99157 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
99158 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
99159 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
99160 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
99161 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
99162 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
99163 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
99164 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
99165 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
99166 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
99167 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
99168 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
99169 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
99170 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
99171 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
99172 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
99173 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
99174 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
99175 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
99176 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
99177 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
99178 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
99179 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
99180 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
99181 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
99182 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
99183 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
99184 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
99185 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
99186 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
99187 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
99188 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
99189 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
99190 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
99191 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
99192 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
99193 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
99194 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
99195 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
99196 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
99197 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
99198 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
99199 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
99200 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
99201 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
99202 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
99203 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
99204 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
99205 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
99206 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
99207 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
99208 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
99209 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
99210 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
99211 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
99212 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
99213 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
99214 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
99215 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
99216 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
99217 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
99218 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
99219 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
99220 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
99221 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
99222 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
99223 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
99224 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
99225 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
99226 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
99227 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
99228 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
99229 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
99230 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
99231 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
99232 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
99233 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
99234 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
99235 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
99236 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
99237 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
99238 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
99239 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
99240 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
99241 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
99242 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
99243 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
99244 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
99245 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
99246 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
99247 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
99248 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
99249 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
99250 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
99251 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
99252 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
99253 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
99254 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
99255 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
99256 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
99257 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
99258 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
99259 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
99260 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
99261 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
99262 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
99263 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
99264 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
99265 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
99266 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
99267 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
99268 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
99269 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
99270 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
99271 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
99272 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
99273 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
99274 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
99275 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
99276 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
99277 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
99278 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
99279 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
99280 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
99281 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
99282 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
99283 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
99284 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
99285 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
99286 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
99287 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
99288 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
99289 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
99290 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
99291 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
99292 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
99293 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
99294 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
99295 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
99296 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
99297 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
99298 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
99299 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
99300 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
99301 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
99302 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
99303 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
99304 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
99305 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
99306 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
99307 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
99308 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
99309 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
99310 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
99311 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
99312 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
99313 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
99314 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
99315 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
99316 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
99317 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
99318 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
99319 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
99320 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
99321 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
99322 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
99323 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
99324 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
99325 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
99326 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
99327 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
99328 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
99329 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
99330 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
99331 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
99332 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
99333 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
99334 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
99335 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
99336 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
99337 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
99338 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
99339 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
99340 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
99341 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
99342 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
99343 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
99344 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
99345 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
99346 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
99347 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
99348 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
99349 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
99350 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
99351 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
99352 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
99353 </script>
99354 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99355 WORDLISTS["spanish"] = [
99356 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
99357 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
99358 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
99359 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
99360 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
99361 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
99362 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
99363 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
99364 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
99365 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
99366 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
99367 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
99368 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
99369 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
99370 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
99371 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
99372 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
99373 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
99374 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
99375 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
99376 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
99377 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
99378 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
99379 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
99380 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
99381 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
99382 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
99383 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
99384 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
99385 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
99386 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
99387 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
99388 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
99389 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
99390 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
99391 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
99392 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
99393 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
99394 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
99395 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
99396 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
99397 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
99398 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
99399 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
99400 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
99401 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
99402 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
99403 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
99404 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
99405 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
99406 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
99407 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
99408 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
99409 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
99410 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
99411 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
99412 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
99413 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
99414 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
99415 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
99416 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
99417 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
99418 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
99419 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
99420 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
99421 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
99422 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
99423 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
99424 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
99425 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
99426 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
99427 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
99428 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
99429 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
99430 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
99431 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
99432 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
99433 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
99434 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
99435 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
99436 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
99437 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
99438 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
99439 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
99440 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
99441 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
99442 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
99443 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
99444 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
99445 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
99446 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
99447 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
99448 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
99449 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
99450 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
99451 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
99452 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
99453 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
99454 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
99455 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
99456 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
99457 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
99458 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
99459 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
99460 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
99461 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
99462 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
99463 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
99464 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
99465 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
99466 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
99467 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
99468 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
99469 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
99470 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
99471 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
99472 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
99473 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
99474 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
99475 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
99476 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
99477 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
99478 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
99479 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
99480 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
99481 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
99482 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
99483 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
99484 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
99485 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
99486 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
99487 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
99488 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
99489 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
99490 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
99491 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
99492 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
99493 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
99494 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
99495 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
99496 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
99497 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
99498 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
99499 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
99500 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
99501 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
99502 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
99503 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
99504 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
99505 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
99506 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
99507 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
99508 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
99509 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
99510 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
99511 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
99512 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
99513 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
99514 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
99515 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
99516 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
99517 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
99518 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
99519 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
99520 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
99521 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
99522 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
99523 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
99524 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
99525 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
99526 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
99527 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
99528 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
99529 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
99530 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
99531 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
99532 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
99533 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
99534 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
99535 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
99536 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
99537 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
99538 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
99539 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
99540 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
99541 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
99542 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
99543 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
99544 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
99545 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
99546 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
99547 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
99548 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
99549 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
99550 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
99551 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
99552 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
99553 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
99554 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
99555 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
99556 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
99557 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
99558 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
99559 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
99560 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
99561 </script>
99562 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99563 WORDLISTS["chinese_simplified"] = [
99564 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
99565 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
99566 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
99567 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
99568 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
99569 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
99570 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
99571 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
99572 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
99573 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
99574 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
99575 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99576 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
99577 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
99578 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
99579 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
99580 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
99581 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
99582 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
99583 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
99584 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
99585 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
99586 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
99587 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
99588 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
99589 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
99590 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
99591 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
99592 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
99593 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
99594 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
99595 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
99596 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
99597 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
99598 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
99599 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
99600 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
99601 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
99602 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
99603 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
99604 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
99605 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
99606 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
99607 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
99608 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
99609 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
99610 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
99611 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
99612 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
99613 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
99614 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
99615 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
99616 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
99617 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
99618 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
99619 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
99620 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
99621 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
99622 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
99623 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
99624 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
99625 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
99626 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
99627 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
99628 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
99629 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
99630 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
99631 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
99632 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
99633 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
99634 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
99635 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
99636 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
99637 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
99638 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
99639 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99640 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
99641 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
99642 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
99643 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
99644 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
99645 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
99646 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
99647 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
99648 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
99649 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
99650 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
99651 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
99652 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
99653 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
99654 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
99655 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
99656 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99657 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
99658 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
99659 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
99660 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
99661 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
99662 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
99663 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
99664 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
99665 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
99666 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
99667 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
99668 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
99669 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
99670 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
99671 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
99672 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99673 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99674 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
99675 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
99676 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
99677 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
99678 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
99679 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
99680 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
99681 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
99682 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
99683 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
99684 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
99685 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99686 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
99687 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
99688 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
99689 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
99690 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
99691 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
99692 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
99693 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
99694 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
99695 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
99696 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
99697 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
99698 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
99699 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
99700 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
99701 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
99702 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
99703 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
99704 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
99705 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
99706 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
99707 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
99708 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
99709 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
99710 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
99711 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
99712 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
99713 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
99714 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
99715 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
99716 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
99717 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
99718 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
99719 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
99720 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
99721 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
99722 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
99723 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
99724 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
99725 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
99726 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
99727 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
99728 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
99729 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
99730 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
99731 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
99732 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
99733 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
99734 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
99735 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
99736 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
99737 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
99738 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
99739 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
99740 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
99741 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
99742 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
99743 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
99744 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
99745 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
99746 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
99747 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
99748 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
99749 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
99750 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
99751 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
99752 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
99753 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
99754 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
99755 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
99756 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
99757 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
99758 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
99759 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
99760 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
99761 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
99762 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
99763 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
99764 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
99765 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
99766 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
99767 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
99768 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
99769 </script>
99770 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99771 WORDLISTS["chinese_traditional"] = [
99772 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
99773 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
99774 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
99775 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
99776 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
99777 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
99778 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
99779 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
99780 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
99781 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
99782 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
99783 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99784 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
99785 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
99786 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
99787 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
99788 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
99789 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
99790 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
99791 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
99792 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
99793 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
99794 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
99795 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
99796 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
99797 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
99798 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
99799 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
99800 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
99801 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
99802 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
99803 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
99804 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
99805 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
99806 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
99807 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
99808 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
99809 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
99810 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
99811 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
99812 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
99813 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
99814 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
99815 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
99816 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
99817 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
99818 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
99819 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
99820 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
99821 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
99822 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
99823 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
99824 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
99825 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
99826 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
99827 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
99828 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
99829 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
99830 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
99831 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
99832 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
99833 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
99834 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
99835 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
99836 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
99837 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
99838 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
99839 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
99840 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
99841 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
99842 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
99843 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
99844 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
99845 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
99846 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
99847 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99848 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
99849 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
99850 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
99851 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
99852 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
99853 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
99854 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
99855 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
99856 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
99857 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
99858 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
99859 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
99860 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
99861 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
99862 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
99863 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
99864 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99865 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
99866 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
99867 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
99868 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
99869 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
99870 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
99871 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
99872 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
99873 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
99874 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
99875 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
99876 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
99877 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
99878 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
99879 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
99880 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99881 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99882 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
99883 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
99884 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
99885 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
99886 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
99887 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
99888 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
99889 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
99890 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
99891 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
99892 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
99893 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99894 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
99895 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
99896 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
99897 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
99898 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
99899 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
99900 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
99901 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
99902 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
99903 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
99904 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
99905 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
99906 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
99907 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
99908 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
99909 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
99910 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
99911 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
99912 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
99913 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
99914 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
99915 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
99916 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
99917 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
99918 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
99919 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
99920 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
99921 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
99922 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
99923 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
99924 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
99925 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
99926 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
99927 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
99928 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
99929 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
99930 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
99931 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
99932 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
99933 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
99934 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
99935 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
99936 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
99937 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
99938 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
99939 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
99940 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
99941 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
99942 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
99943 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
99944 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
99945 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
99946 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
99947 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
99948 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
99949 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
99950 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
99951 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
99952 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
99953 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
99954 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
99955 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
99956 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
99957 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
99958 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
99959 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
99960 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
99961 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
99962 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
99963 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
99964 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
99965 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
99966 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
99967 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
99968 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
99969 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
99970 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
99971 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
99972 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
99973 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
99974 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
99975 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
99976 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
99977 </script>
99978 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99979 WORDLISTS["french"] = [
99980 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
99981 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
99982 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
99983 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
99984 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
99985 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
99986 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
99987 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
99988 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
99989 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
99990 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
99991 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
99992 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
99993 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
99994 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
99995 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
99996 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
99997 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
99998 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
99999 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
100000 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
100001 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
100002 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
100003 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
100004 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
100005 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
100006 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
100007 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
100008 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
100009 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
100010 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
100011 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
100012 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
100013 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
100014 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
100015 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
100016 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
100017 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
100018 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
100019 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
100020 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
100021 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
100022 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
100023 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
100024 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
100025 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
100026 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
100027 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
100028 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
100029 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
100030 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
100031 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
100032 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
100033 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
100034 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
100035 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
100036 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
100037 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
100038 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
100039 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
100040 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
100041 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
100042 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
100043 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
100044 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
100045 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
100046 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
100047 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
100048 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
100049 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
100050 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
100051 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
100052 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
100053 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
100054 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
100055 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
100056 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
100057 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
100058 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
100059 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
100060 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
100061 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
100062 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
100063 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
100064 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
100065 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
100066 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
100067 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
100068 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
100069 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
100070 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
100071 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
100072 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
100073 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
100074 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
100075 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
100076 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
100077 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
100078 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
100079 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
100080 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
100081 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
100082 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
100083 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
100084 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
100085 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
100086 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
100087 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
100088 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
100089 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
100090 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
100091 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
100092 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
100093 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
100094 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
100095 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
100096 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
100097 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
100098 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
100099 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
100100 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
100101 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
100102 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
100103 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
100104 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
100105 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
100106 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
100107 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
100108 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
100109 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
100110 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
100111 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
100112 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
100113 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
100114 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
100115 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
100116 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
100117 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
100118 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
100119 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
100120 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
100121 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
100122 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
100123 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
100124 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
100125 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
100126 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
100127 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
100128 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
100129 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
100130 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
100131 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
100132 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
100133 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
100134 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
100135 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
100136 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
100137 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
100138 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
100139 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
100140 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
100141 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
100142 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
100143 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
100144 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
100145 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
100146 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
100147 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
100148 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
100149 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
100150 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
100151 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
100152 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
100153 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
100154 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
100155 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
100156 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
100157 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
100158 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
100159 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
100160 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
100161 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
100162 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
100163 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
100164 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
100165 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
100166 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
100167 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
100168 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
100169 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
100170 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
100171 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
100172 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
100173 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
100174 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
100175 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
100176 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
100177 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
100178 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
100179 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
100180 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
100181 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
100182 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
100183 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
100184 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
100185 </script>
100186 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100187 WORDLISTS["italian"] = [
100188 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
100189 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
100190 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
100191 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
100192 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
100193 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
100194 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
100195 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
100196 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
100197 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
100198 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
100199 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
100200 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
100201 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
100202 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
100203 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
100204 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
100205 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
100206 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
100207 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
100208 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
100209 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
100210 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
100211 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
100212 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
100213 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
100214 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
100215 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
100216 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
100217 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
100218 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
100219 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
100220 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
100221 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
100222 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
100223 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
100224 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
100225 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
100226 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
100227 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
100228 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
100229 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
100230 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
100231 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
100232 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
100233 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
100234 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
100235 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
100236 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
100237 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
100238 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
100239 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
100240 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
100241 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
100242 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
100243 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
100244 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
100245 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
100246 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
100247 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
100248 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
100249 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
100250 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
100251 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
100252 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
100253 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
100254 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
100255 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
100256 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
100257 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
100258 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
100259 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
100260 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
100261 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
100262 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
100263 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
100264 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
100265 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
100266 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
100267 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
100268 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
100269 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
100270 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
100271 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
100272 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
100273 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
100274 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
100275 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
100276 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
100277 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
100278 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
100279 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
100280 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
100281 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
100282 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
100283 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
100284 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
100285 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
100286 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
100287 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
100288 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
100289 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
100290 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
100291 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
100292 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
100293 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
100294 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
100295 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
100296 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
100297 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
100298 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
100299 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
100300 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
100301 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
100302 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
100303 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
100304 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
100305 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
100306 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
100307 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
100308 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
100309 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
100310 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
100311 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
100312 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
100313 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
100314 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
100315 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
100316 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
100317 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
100318 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
100319 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
100320 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
100321 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
100322 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
100323 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
100324 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
100325 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
100326 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
100327 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
100328 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
100329 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
100330 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
100331 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
100332 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
100333 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
100334 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
100335 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
100336 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
100337 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
100338 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
100339 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
100340 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
100341 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
100342 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
100343 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
100344 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
100345 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
100346 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
100347 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
100348 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
100349 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
100350 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
100351 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
100352 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
100353 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
100354 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
100355 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
100356 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
100357 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
100358 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
100359 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
100360 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
100361 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
100362 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
100363 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
100364 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
100365 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
100366 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
100367 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
100368 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
100369 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
100370 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
100371 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
100372 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
100373 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
100374 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
100375 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
100376 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
100377 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
100378 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
100379 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
100380 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
100381 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
100382 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
100383 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
100384 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
100385 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
100386 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
100387 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
100388 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
100389 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
100390 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
100391 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
100392 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
100393 </script>
100394 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100395 WORDLISTS["korean"] = [
100396 "가격",
100397 "가끔",
100398 "가난",
100399 "가능",
100400 "가득",
100401 "가르침",
100402 "가뭄",
100403 "가방",
100404 "가상",
100405 "가슴",
100406 "가운데",
100407 "가을",
100408 "가이드",
100409 "가입",
100410 "가장",
100411 "가정",
100412 "가족",
100413 "가죽",
100414 "각오",
100415 "각자",
100416 "간격",
100417 "간부",
100418 "간섭",
100419 "간장",
100420 "간접",
100421 "간판",
100422 "갈등",
100423 "갈비",
100424 "갈색",
100425 "갈증",
100426 "감각",
100427 "감기",
100428 "감소",
100429 "감수성",
100430 "감자",
100431 "감정",
100432 "갑자기",
100433 "강남",
100434 "강당",
100435 "강도",
100436 "강력히",
100437 "강변",
100438 "강북",
100439 "강사",
100440 "강수량",
100441 "강아지",
100442 "강원도",
100443 "강의",
100444 "강제",
100445 "강조",
100446 "같이",
100447 "개구리",
100448 "개나리",
100449 "개방",
100450 "개별",
100451 "개선",
100452 "개성",
100453 "개인",
100454 "객관적",
100455 "거실",
100456 "거액",
100457 "거울",
100458 "거짓",
100459 "거품",
100460 "걱정",
100461 "건강",
100462 "건물",
100463 "건설",
100464 "건조",
100465 "건축",
100466 "걸음",
100467 "검사",
100468 "검토",
100469 "게시판",
100470 "게임",
100471 "겨울",
100472 "견해",
100473 "결과",
100474 "결국",
100475 "결론",
100476 "결석",
100477 "결승",
100478 "결심",
100479 "결정",
100480 "결혼",
100481 "경계",
100482 "경고",
100483 "경기",
100484 "경력",
100485 "경복궁",
100486 "경비",
100487 "경상도",
100488 "경영",
100489 "경우",
100490 "경쟁",
100491 "경제",
100492 "경주",
100493 "경찰",
100494 "경치",
100495 "경향",
100496 "경험",
100497 "계곡",
100498 "계단",
100499 "계란",
100500 "계산",
100501 "계속",
100502 "계약",
100503 "계절",
100504 "계층",
100505 "계획",
100506 "고객",
100507 "고구려",
100508 "고궁",
100509 "고급",
100510 "고등학생",
100511 "고무신",
100512 "고민",
100513 "고양이",
100514 "고장",
100515 "고전",
100516 "고집",
100517 "고춧가루",
100518 "고통",
100519 "고향",
100520 "곡식",
100521 "골목",
100522 "골짜기",
100523 "골프",
100524 "공간",
100525 "공개",
100526 "공격",
100527 "공군",
100528 "공급",
100529 "공기",
100530 "공동",
100531 "공무원",
100532 "공부",
100533 "공사",
100534 "공식",
100535 "공업",
100536 "공연",
100537 "공원",
100538 "공장",
100539 "공짜",
100540 "공책",
100541 "공통",
100542 "공포",
100543 "공항",
100544 "공휴일",
100545 "과목",
100546 "과일",
100547 "과장",
100548 "과정",
100549 "과학",
100550 "관객",
100551 "관계",
100552 "관광",
100553 "관념",
100554 "관람",
100555 "관련",
100556 "관리",
100557 "관습",
100558 "관심",
100559 "관점",
100560 "관찰",
100561 "광경",
100562 "광고",
100563 "광장",
100564 "광주",
100565 "괴로움",
100566 "굉장히",
100567 "교과서",
100568 "교문",
100569 "교복",
100570 "교실",
100571 "교양",
100572 "교육",
100573 "교장",
100574 "교직",
100575 "교통",
100576 "교환",
100577 "교훈",
100578 "구경",
100579 "구름",
100580 "구멍",
100581 "구별",
100582 "구분",
100583 "구석",
100584 "구성",
100585 "구속",
100586 "구역",
100587 "구입",
100588 "구청",
100589 "구체적",
100590 "국가",
100591 "국기",
100592 "국내",
100593 "국립",
100594 "국물",
100595 "국민",
100596 "국수",
100597 "국어",
100598 "국왕",
100599 "국적",
100600 "국제",
100601 "국회",
100602 "군대",
100603 "군사",
100604 "군인",
100605 "궁극적",
100606 "권리",
100607 "권위",
100608 "권투",
100609 "귀국",
100610 "귀신",
100611 "규정",
100612 "규칙",
100613 "균형",
100614 "그날",
100615 "그냥",
100616 "그늘",
100617 "그러나",
100618 "그룹",
100619 "그릇",
100620 "그림",
100621 "그제서야",
100622 "그토록",
100623 "극복",
100624 "극히",
100625 "근거",
100626 "근교",
100627 "근래",
100628 "근로",
100629 "근무",
100630 "근본",
100631 "근원",
100632 "근육",
100633 "근처",
100634 "글씨",
100635 "글자",
100636 "금강산",
100637 "금고",
100638 "금년",
100639 "금메달",
100640 "금액",
100641 "금연",
100642 "금요일",
100643 "금지",
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 "많이",
100850 "말기",
100851 "말씀",
100852 "말투",
100853 "맘대로",
100854 "망원경",
100855 "매년",
100856 "매달",
100857 "매력",
100858 "매번",
100859 "매스컴",
100860 "매일",
100861 "매장",
100862 "맥주",
100863 "먹이",
100864 "먼저",
100865 "먼지",
100866 "멀리",
100867 "메일",
100868 "며느리",
100869 "며칠",
100870 "면담",
100871 "멸치",
100872 "명단",
100873 "명령",
100874 "명예",
100875 "명의",
100876 "명절",
100877 "명칭",
100878 "명함",
100879 "모금",
100880 "모니터",
100881 "모델",
100882 "모든",
100883 "모범",
100884 "모습",
100885 "모양",
100886 "모임",
100887 "모조리",
100888 "모집",
100889 "모퉁이",
100890 "목걸이",
100891 "목록",
100892 "목사",
100893 "목소리",
100894 "목숨",
100895 "목적",
100896 "목표",
100897 "몰래",
100898 "몸매",
100899 "몸무게",
100900 "몸살",
100901 "몸속",
100902 "몸짓",
100903 "몸통",
100904 "몹시",
100905 "무관심",
100906 "무궁화",
100907 "무더위",
100908 "무덤",
100909 "무릎",
100910 "무슨",
100911 "무엇",
100912 "무역",
100913 "무용",
100914 "무조건",
100915 "무지개",
100916 "무척",
100917 "문구",
100918 "문득",
100919 "문법",
100920 "문서",
100921 "문제",
100922 "문학",
100923 "문화",
100924 "물가",
100925 "물건",
100926 "물결",
100927 "물고기",
100928 "물론",
100929 "물리학",
100930 "물음",
100931 "물질",
100932 "물체",
100933 "미국",
100934 "미디어",
100935 "미사일",
100936 "미술",
100937 "미역",
100938 "미용실",
100939 "미움",
100940 "미인",
100941 "미팅",
100942 "미혼",
100943 "민간",
100944 "민족",
100945 "민주",
100946 "믿음",
100947 "밀가루",
100948 "밀리미터",
100949 "밑바닥",
100950 "바가지",
100951 "바구니",
100952 "바나나",
100953 "바늘",
100954 "바닥",
100955 "바닷가",
100956 "바람",
100957 "바이러스",
100958 "바탕",
100959 "박물관",
100960 "박사",
100961 "박수",
100962 "반대",
100963 "반드시",
100964 "반말",
100965 "반발",
100966 "반성",
100967 "반응",
100968 "반장",
100969 "반죽",
100970 "반지",
100971 "반찬",
100972 "받침",
100973 "발가락",
100974 "발걸음",
100975 "발견",
100976 "발달",
100977 "발레",
100978 "발목",
100979 "발바닥",
100980 "발생",
100981 "발음",
100982 "발자국",
100983 "발전",
100984 "발톱",
100985 "발표",
100986 "밤하늘",
100987 "밥그릇",
100988 "밥맛",
100989 "밥상",
100990 "밥솥",
100991 "방금",
100992 "방면",
100993 "방문",
100994 "방바닥",
100995 "방법",
100996 "방송",
100997 "방식",
100998 "방안",
100999 "방울",
101000 "방지",
101001 "방학",
101002 "방해",
101003 "방향",
101004 "배경",
101005 "배꼽",
101006 "배달",
101007 "배드민턴",
101008 "백두산",
101009 "백색",
101010 "백성",
101011 "백인",
101012 "백제",
101013 "백화점",
101014 "버릇",
101015 "버섯",
101016 "버튼",
101017 "번개",
101018 "번역",
101019 "번지",
101020 "번호",
101021 "벌금",
101022 "벌레",
101023 "벌써",
101024 "범위",
101025 "범인",
101026 "범죄",
101027 "법률",
101028 "법원",
101029 "법적",
101030 "법칙",
101031 "베이징",
101032 "벨트",
101033 "변경",
101034 "변동",
101035 "변명",
101036 "변신",
101037 "변호사",
101038 "변화",
101039 "별도",
101040 "별명",
101041 "별일",
101042 "병실",
101043 "병아리",
101044 "병원",
101045 "보관",
101046 "보너스",
101047 "보라색",
101048 "보람",
101049 "보름",
101050 "보상",
101051 "보안",
101052 "보자기",
101053 "보장",
101054 "보전",
101055 "보존",
101056 "보통",
101057 "보편적",
101058 "보험",
101059 "복도",
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 "소망",
101266 "소문",
101267 "소설",
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 "앨범",
101474 "야간",
101475 "야단",
101476 "야옹",
101477 "약간",
101478 "약국",
101479 "약속",
101480 "약수",
101481 "약점",
101482 "약품",
101483 "약혼녀",
101484 "양념",
101485 "양력",
101486 "양말",
101487 "양배추",
101488 "양주",
101489 "양파",
101490 "어둠",
101491 "어려움",
101492 "어른",
101493 "어젯밤",
101494 "어쨌든",
101495 "어쩌다가",
101496 "어쩐지",
101497 "언니",
101498 "언덕",
101499 "언론",
101500 "언어",
101501 "얼굴",
101502 "얼른",
101503 "얼음",
101504 "얼핏",
101505 "엄마",
101506 "업무",
101507 "업종",
101508 "업체",
101509 "엉덩이",
101510 "엉망",
101511 "엉터리",
101512 "엊그제",
101513 "에너지",
101514 "에어컨",
101515 "엔진",
101516 "여건",
101517 "여고생",
101518 "여관",
101519 "여군",
101520 "여권",
101521 "여대생",
101522 "여덟",
101523 "여동생",
101524 "여든",
101525 "여론",
101526 "여름",
101527 "여섯",
101528 "여성",
101529 "여왕",
101530 "여인",
101531 "여전히",
101532 "여직원",
101533 "여학생",
101534 "여행",
101535 "역사",
101536 "역시",
101537 "역할",
101538 "연결",
101539 "연구",
101540 "연극",
101541 "연기",
101542 "연락",
101543 "연설",
101544 "연세",
101545 "연속",
101546 "연습",
101547 "연애",
101548 "연예인",
101549 "연인",
101550 "연장",
101551 "연주",
101552 "연출",
101553 "연필",
101554 "연합",
101555 "연휴",
101556 "열기",
101557 "열매",
101558 "열쇠",
101559 "열심히",
101560 "열정",
101561 "열차",
101562 "열흘",
101563 "염려",
101564 "엽서",
101565 "영국",
101566 "영남",
101567 "영상",
101568 "영양",
101569 "영역",
101570 "영웅",
101571 "영원히",
101572 "영하",
101573 "영향",
101574 "영혼",
101575 "영화",
101576 "옆구리",
101577 "옆방",
101578 "옆집",
101579 "예감",
101580 "예금",
101581 "예방",
101582 "예산",
101583 "예상",
101584 "예선",
101585 "예술",
101586 "예습",
101587 "예식장",
101588 "예약",
101589 "예전",
101590 "예절",
101591 "예정",
101592 "예컨대",
101593 "옛날",
101594 "오늘",
101595 "오락",
101596 "오랫동안",
101597 "오렌지",
101598 "오로지",
101599 "오른발",
101600 "오븐",
101601 "오십",
101602 "오염",
101603 "오월",
101604 "오전",
101605 "오직",
101606 "오징어",
101607 "오페라",
101608 "오피스텔",
101609 "오히려",
101610 "옥상",
101611 "옥수수",
101612 "온갖",
101613 "온라인",
101614 "온몸",
101615 "온종일",
101616 "온통",
101617 "올가을",
101618 "올림픽",
101619 "올해",
101620 "옷차림",
101621 "와이셔츠",
101622 "와인",
101623 "완성",
101624 "완전",
101625 "왕비",
101626 "왕자",
101627 "왜냐하면",
101628 "왠지",
101629 "외갓집",
101630 "외국",
101631 "외로움",
101632 "외삼촌",
101633 "외출",
101634 "외침",
101635 "외할머니",
101636 "왼발",
101637 "왼손",
101638 "왼쪽",
101639 "요금",
101640 "요일",
101641 "요즘",
101642 "요청",
101643 "용기",
101644 "용서",
101645 "용어",
101646 "우산",
101647 "우선",
101648 "우승",
101649 "우연히",
101650 "우정",
101651 "우체국",
101652 "우편",
101653 "운동",
101654 "운명",
101655 "운반",
101656 "운전",
101657 "운행",
101658 "울산",
101659 "울음",
101660 "움직임",
101661 "웃어른",
101662 "웃음",
101663 "워낙",
101664 "원고",
101665 "원래",
101666 "원서",
101667 "원숭이",
101668 "원인",
101669 "원장",
101670 "원피스",
101671 "월급",
101672 "월드컵",
101673 "월세",
101674 "월요일",
101675 "웨이터",
101676 "위반",
101677 "위법",
101678 "위성",
101679 "위원",
101680 "위험",
101681 "위협",
101682 "윗사람",
101683 "유난히",
101684 "유럽",
101685 "유명",
101686 "유물",
101687 "유산",
101688 "유적",
101689 "유치원",
101690 "유학",
101691 "유행",
101692 "유형",
101693 "육군",
101694 "육상",
101695 "육십",
101696 "육체",
101697 "은행",
101698 "음력",
101699 "음료",
101700 "음반",
101701 "음성",
101702 "음식",
101703 "음악",
101704 "음주",
101705 "의견",
101706 "의논",
101707 "의문",
101708 "의복",
101709 "의식",
101710 "의심",
101711 "의외로",
101712 "의욕",
101713 "의원",
101714 "의학",
101715 "이것",
101716 "이곳",
101717 "이념",
101718 "이놈",
101719 "이달",
101720 "이대로",
101721 "이동",
101722 "이렇게",
101723 "이력서",
101724 "이론적",
101725 "이름",
101726 "이민",
101727 "이발소",
101728 "이별",
101729 "이불",
101730 "이빨",
101731 "이상",
101732 "이성",
101733 "이슬",
101734 "이야기",
101735 "이용",
101736 "이웃",
101737 "이월",
101738 "이윽고",
101739 "이익",
101740 "이전",
101741 "이중",
101742 "이튿날",
101743 "이틀",
101744 "이혼",
101745 "인간",
101746 "인격",
101747 "인공",
101748 "인구",
101749 "인근",
101750 "인기",
101751 "인도",
101752 "인류",
101753 "인물",
101754 "인생",
101755 "인쇄",
101756 "인연",
101757 "인원",
101758 "인재",
101759 "인종",
101760 "인천",
101761 "인체",
101762 "인터넷",
101763 "인하",
101764 "인형",
101765 "일곱",
101766 "일기",
101767 "일단",
101768 "일대",
101769 "일등",
101770 "일반",
101771 "일본",
101772 "일부",
101773 "일상",
101774 "일생",
101775 "일손",
101776 "일요일",
101777 "일월",
101778 "일정",
101779 "일종",
101780 "일주일",
101781 "일찍",
101782 "일체",
101783 "일치",
101784 "일행",
101785 "일회용",
101786 "임금",
101787 "임무",
101788 "입대",
101789 "입력",
101790 "입맛",
101791 "입사",
101792 "입술",
101793 "입시",
101794 "입원",
101795 "입장",
101796 "입학",
101797 "자가용",
101798 "자격",
101799 "자극",
101800 "자동",
101801 "자랑",
101802 "자부심",
101803 "자식",
101804 "자신",
101805 "자연",
101806 "자원",
101807 "자율",
101808 "자전거",
101809 "자정",
101810 "자존심",
101811 "자판",
101812 "작가",
101813 "작년",
101814 "작성",
101815 "작업",
101816 "작용",
101817 "작은딸",
101818 "작품",
101819 "잔디",
101820 "잔뜩",
101821 "잔치",
101822 "잘못",
101823 "잠깐",
101824 "잠수함",
101825 "잠시",
101826 "잠옷",
101827 "잠자리",
101828 "잡지",
101829 "장관",
101830 "장군",
101831 "장기간",
101832 "장래",
101833 "장례",
101834 "장르",
101835 "장마",
101836 "장면",
101837 "장모",
101838 "장미",
101839 "장비",
101840 "장사",
101841 "장소",
101842 "장식",
101843 "장애인",
101844 "장인",
101845 "장점",
101846 "장차",
101847 "장학금",
101848 "재능",
101849 "재빨리",
101850 "재산",
101851 "재생",
101852 "재작년",
101853 "재정",
101854 "재채기",
101855 "재판",
101856 "재학",
101857 "재활용",
101858 "저것",
101859 "저고리",
101860 "저곳",
101861 "저녁",
101862 "저런",
101863 "저렇게",
101864 "저번",
101865 "저울",
101866 "저절로",
101867 "저축",
101868 "적극",
101869 "적당히",
101870 "적성",
101871 "적용",
101872 "적응",
101873 "전개",
101874 "전공",
101875 "전기",
101876 "전달",
101877 "전라도",
101878 "전망",
101879 "전문",
101880 "전반",
101881 "전부",
101882 "전세",
101883 "전시",
101884 "전용",
101885 "전자",
101886 "전쟁",
101887 "전주",
101888 "전철",
101889 "전체",
101890 "전통",
101891 "전혀",
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 </script>
102446 <script>/*
102447 * Copyright (c) 2013 Pavol Rusnak
102448 *
102449 * Permission is hereby granted, free of charge, to any person obtaining a copy of
102450 * this software and associated documentation files (the "Software"), to deal in
102451 * the Software without restriction, including without limitation the rights to
102452 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
102453 * of the Software, and to permit persons to whom the Software is furnished to do
102454 * so, subject to the following conditions:
102455 *
102456 * The above copyright notice and this permission notice shall be included in all
102457 * copies or substantial portions of the Software.
102458 *
102459 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
102460 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
102461 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
102462 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
102463 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
102464 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
102465 */
102466
102467 /*
102468 * Javascript port from python by Ian Coleman
102469 *
102470 * Requires code from sjcl
102471 * https://github.com/bitwiseshiftleft/sjcl
102472 */
102473
102474 var Mnemonic = function(language) {
102475
102476 var PBKDF2_ROUNDS = 2048;
102477 var RADIX = 2048;
102478
102479 var self = this;
102480 var wordlist = [];
102481
102482 var hmacSHA512 = function(key) {
102483 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
102484 this.encrypt = function() {
102485 return hasher.encrypt.apply(hasher, arguments);
102486 };
102487 };
102488
102489 function init() {
102490 wordlist = WORDLISTS[language];
102491 if (wordlist.length != RADIX) {
102492 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
102493 throw err;
102494 }
102495 }
102496
102497 self.generate = function(strength) {
102498 strength = strength || 128;
102499 var r = strength % 32;
102500 if (r > 0) {
102501 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
102502 }
102503 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
102504 if (!hasStrongCrypto) {
102505 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
102506 }
102507 var buffer = new Uint8Array(strength / 8);
102508 var data = crypto.getRandomValues(buffer);
102509 return self.toMnemonic(data);
102510 }
102511
102512 self.toMnemonic = function(byteArray) {
102513 if (byteArray.length % 4 > 0) {
102514 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
102515 }
102516
102517 //h = hashlib.sha256(data).hexdigest()
102518 var data = byteArrayToWordArray(byteArray);
102519 var hash = sjcl.hash.sha256.hash(data);
102520 var h = sjcl.codec.hex.fromBits(hash);
102521
102522 // b is a binary string, eg '00111010101100...'
102523 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
102524 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
102525 //
102526 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
102527 // c = bin(int(h, 16))[2:].zfill(256)
102528 // d = c[:len(data) * 8 / 32]
102529 var a = byteArrayToBinaryString(byteArray);
102530 var c = zfill(hexStringToBinaryString(h), 256);
102531 var d = c.substring(0, byteArray.length * 8 / 32);
102532 // b = line1 + line2
102533 var b = a + d;
102534
102535 var result = [];
102536 var blen = b.length / 11;
102537 for (var i=0; i<blen; i++) {
102538 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
102539 result.push(wordlist[idx]);
102540 }
102541 return self.joinWords(result);
102542 }
102543
102544 self.check = function(mnemonic) {
102545 var mnemonic = self.splitWords(mnemonic);
102546 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
102547 return false
102548 }
102549 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
102550 var idx = [];
102551 for (var i=0; i<mnemonic.length; i++) {
102552 var word = mnemonic[i];
102553 var wordIndex = wordlist.indexOf(word);
102554 if (wordIndex == -1) {
102555 return false;
102556 }
102557 var binaryIndex = zfill(wordIndex.toString(2), 11);
102558 idx.push(binaryIndex);
102559 }
102560 var b = idx.join('');
102561 var l = b.length;
102562 //d = b[:l / 33 * 32]
102563 //h = b[-l / 33:]
102564 var d = b.substring(0, l / 33 * 32);
102565 var h = b.substring(l - l / 33, l);
102566 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
102567 var nd = binaryStringToWordArray(d);
102568 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
102569 var ndHash = sjcl.hash.sha256.hash(nd);
102570 var ndHex = sjcl.codec.hex.fromBits(ndHash);
102571 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
102572 var nh = ndBstr.substring(0,l/33);
102573 return h == nh;
102574 }
102575
102576 self.toSeed = function(mnemonic, passphrase) {
102577 passphrase = passphrase || '';
102578 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
102579 var mnemonicNormalized = self.normalizeString(mnemonic);
102580 passphrase = self.normalizeString(passphrase)
102581 passphrase = "mnemonic" + passphrase;
102582 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
102583 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
102584 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
102585 var hashHex = sjcl.codec.hex.fromBits(result);
102586 return hashHex;
102587 }
102588
102589 self.splitWords = function(mnemonic) {
102590 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
102591 }
102592
102593 self.joinWords = function(words) {
102594 // Set space correctly depending on the language
102595 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
102596 var space = " ";
102597 if (language == "japanese" || language == "korean") {
102598 space = "\u3000"; // ideographic space
102599 }
102600 return words.join(space);
102601 }
102602
102603 self.normalizeString = function(str) {
102604 return str.normalize("NFKD");
102605 }
102606
102607 function byteArrayToWordArray(data) {
102608 var a = [];
102609 for (var i=0; i<data.length/4; i++) {
102610 v = 0;
102611 v += data[i*4 + 0] << 8 * 3;
102612 v += data[i*4 + 1] << 8 * 2;
102613 v += data[i*4 + 2] << 8 * 1;
102614 v += data[i*4 + 3] << 8 * 0;
102615 a.push(v);
102616 }
102617 return a;
102618 }
102619
102620 function byteArrayToBinaryString(data) {
102621 var bin = "";
102622 for (var i=0; i<data.length; i++) {
102623 bin += zfill(data[i].toString(2), 8);
102624 }
102625 return bin;
102626 }
102627
102628 function hexStringToBinaryString(hexString) {
102629 binaryString = "";
102630 for (var i=0; i<hexString.length; i++) {
102631 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
102632 }
102633 return binaryString;
102634 }
102635
102636 function binaryStringToWordArray(binary) {
102637 var aLen = binary.length / 32;
102638 var a = [];
102639 for (var i=0; i<aLen; i++) {
102640 var valueStr = binary.substring(0,32);
102641 var value = parseInt(valueStr, 2);
102642 a.push(value);
102643 binary = binary.slice(32);
102644 }
102645 return a;
102646 }
102647
102648 // Pad a numeric string on the left with zero digits until the given width
102649 // is reached.
102650 // Note this differs to the python implementation because it does not
102651 // handle numbers starting with a sign.
102652 function zfill(source, length) {
102653 source = source.toString();
102654 while (source.length < length) {
102655 source = '0' + source;
102656 }
102657 return source;
102658 }
102659
102660 init();
102661
102662 }
102663 </script>
102664 <script>/*
102665 JavaScript BigInteger library version 0.9.1
102666 http://silentmatt.com/biginteger/
102667
102668 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
102669 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
102670 Licensed under the MIT license.
102671
102672 Support for arbitrary internal representation base was added by
102673 Vitaly Magerya.
102674 */
102675
102676 /*
102677 File: biginteger.js
102678
102679 Exports:
102680
102681 <BigInteger>
102682 */
102683 (function(exports) {
102684 "use strict";
102685 /*
102686 Class: BigInteger
102687 An arbitrarily-large integer.
102688
102689 <BigInteger> objects should be considered immutable. None of the "built-in"
102690 methods modify *this* or their arguments. All properties should be
102691 considered private.
102692
102693 All the methods of <BigInteger> instances can be called "statically". The
102694 static versions are convenient if you don't already have a <BigInteger>
102695 object.
102696
102697 As an example, these calls are equivalent.
102698
102699 > BigInteger(4).multiply(5); // returns BigInteger(20);
102700 > BigInteger.multiply(4, 5); // returns BigInteger(20);
102701
102702 > var a = 42;
102703 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
102704 */
102705
102706 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
102707
102708 /*
102709 Constructor: BigInteger()
102710 Convert a value to a <BigInteger>.
102711
102712 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
102713 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
102714 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
102715 without a radix argument.
102716
102717 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
102718 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
102719 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
102720 > var n3 = BigInteger(n2); // Return n2, unchanged
102721
102722 The constructor form only takes an array and a sign. *n* must be an
102723 array of numbers in little-endian order, where each digit is between 0
102724 and BigInteger.base. The second parameter sets the sign: -1 for
102725 negative, +1 for positive, or 0 for zero. The array is *not copied and
102726 may be modified*. If the array contains only zeros, the sign parameter
102727 is ignored and is forced to zero.
102728
102729 > new BigInteger([5], -1): create a new BigInteger with value -5
102730
102731 Parameters:
102732
102733 n - Value to convert to a <BigInteger>.
102734
102735 Returns:
102736
102737 A <BigInteger> value.
102738
102739 See Also:
102740
102741 <parse>, <BigInteger>
102742 */
102743 function BigInteger(n, s, token) {
102744 if (token !== CONSTRUCT) {
102745 if (n instanceof BigInteger) {
102746 return n;
102747 }
102748 else if (typeof n === "undefined") {
102749 return ZERO;
102750 }
102751 return BigInteger.parse(n);
102752 }
102753
102754 n = n || []; // Provide the nullary constructor for subclasses.
102755 while (n.length && !n[n.length - 1]) {
102756 --n.length;
102757 }
102758 this._d = n;
102759 this._s = n.length ? (s || 1) : 0;
102760 }
102761
102762 BigInteger._construct = function(n, s) {
102763 return new BigInteger(n, s, CONSTRUCT);
102764 };
102765
102766 // Base-10 speedup hacks in parse, toString, exp10 and log functions
102767 // require base to be a power of 10. 10^7 is the largest such power
102768 // that won't cause a precision loss when digits are multiplied.
102769 var BigInteger_base = 10000000;
102770 var BigInteger_base_log10 = 7;
102771
102772 BigInteger.base = BigInteger_base;
102773 BigInteger.base_log10 = BigInteger_base_log10;
102774
102775 var ZERO = new BigInteger([], 0, CONSTRUCT);
102776 // Constant: ZERO
102777 // <BigInteger> 0.
102778 BigInteger.ZERO = ZERO;
102779
102780 var ONE = new BigInteger([1], 1, CONSTRUCT);
102781 // Constant: ONE
102782 // <BigInteger> 1.
102783 BigInteger.ONE = ONE;
102784
102785 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
102786 // Constant: M_ONE
102787 // <BigInteger> -1.
102788 BigInteger.M_ONE = M_ONE;
102789
102790 // Constant: _0
102791 // Shortcut for <ZERO>.
102792 BigInteger._0 = ZERO;
102793
102794 // Constant: _1
102795 // Shortcut for <ONE>.
102796 BigInteger._1 = ONE;
102797
102798 /*
102799 Constant: small
102800 Array of <BigIntegers> from 0 to 36.
102801
102802 These are used internally for parsing, but useful when you need a "small"
102803 <BigInteger>.
102804
102805 See Also:
102806
102807 <ZERO>, <ONE>, <_0>, <_1>
102808 */
102809 BigInteger.small = [
102810 ZERO,
102811 ONE,
102812 /* Assuming BigInteger_base > 36 */
102813 new BigInteger( [2], 1, CONSTRUCT),
102814 new BigInteger( [3], 1, CONSTRUCT),
102815 new BigInteger( [4], 1, CONSTRUCT),
102816 new BigInteger( [5], 1, CONSTRUCT),
102817 new BigInteger( [6], 1, CONSTRUCT),
102818 new BigInteger( [7], 1, CONSTRUCT),
102819 new BigInteger( [8], 1, CONSTRUCT),
102820 new BigInteger( [9], 1, CONSTRUCT),
102821 new BigInteger([10], 1, CONSTRUCT),
102822 new BigInteger([11], 1, CONSTRUCT),
102823 new BigInteger([12], 1, CONSTRUCT),
102824 new BigInteger([13], 1, CONSTRUCT),
102825 new BigInteger([14], 1, CONSTRUCT),
102826 new BigInteger([15], 1, CONSTRUCT),
102827 new BigInteger([16], 1, CONSTRUCT),
102828 new BigInteger([17], 1, CONSTRUCT),
102829 new BigInteger([18], 1, CONSTRUCT),
102830 new BigInteger([19], 1, CONSTRUCT),
102831 new BigInteger([20], 1, CONSTRUCT),
102832 new BigInteger([21], 1, CONSTRUCT),
102833 new BigInteger([22], 1, CONSTRUCT),
102834 new BigInteger([23], 1, CONSTRUCT),
102835 new BigInteger([24], 1, CONSTRUCT),
102836 new BigInteger([25], 1, CONSTRUCT),
102837 new BigInteger([26], 1, CONSTRUCT),
102838 new BigInteger([27], 1, CONSTRUCT),
102839 new BigInteger([28], 1, CONSTRUCT),
102840 new BigInteger([29], 1, CONSTRUCT),
102841 new BigInteger([30], 1, CONSTRUCT),
102842 new BigInteger([31], 1, CONSTRUCT),
102843 new BigInteger([32], 1, CONSTRUCT),
102844 new BigInteger([33], 1, CONSTRUCT),
102845 new BigInteger([34], 1, CONSTRUCT),
102846 new BigInteger([35], 1, CONSTRUCT),
102847 new BigInteger([36], 1, CONSTRUCT)
102848 ];
102849
102850 // Used for parsing/radix conversion
102851 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
102852
102853 /*
102854 Method: toString
102855 Convert a <BigInteger> to a string.
102856
102857 When *base* is greater than 10, letters are upper case.
102858
102859 Parameters:
102860
102861 base - Optional base to represent the number in (default is base 10).
102862 Must be between 2 and 36 inclusive, or an Error will be thrown.
102863
102864 Returns:
102865
102866 The string representation of the <BigInteger>.
102867 */
102868 BigInteger.prototype.toString = function(base) {
102869 base = +base || 10;
102870 if (base < 2 || base > 36) {
102871 throw new Error("illegal radix " + base + ".");
102872 }
102873 if (this._s === 0) {
102874 return "0";
102875 }
102876 if (base === 10) {
102877 var str = this._s < 0 ? "-" : "";
102878 str += this._d[this._d.length - 1].toString();
102879 for (var i = this._d.length - 2; i >= 0; i--) {
102880 var group = this._d[i].toString();
102881 while (group.length < BigInteger_base_log10) group = '0' + group;
102882 str += group;
102883 }
102884 return str;
102885 }
102886 else {
102887 var numerals = BigInteger.digits;
102888 base = BigInteger.small[base];
102889 var sign = this._s;
102890
102891 var n = this.abs();
102892 var digits = [];
102893 var digit;
102894
102895 while (n._s !== 0) {
102896 var divmod = n.divRem(base);
102897 n = divmod[0];
102898 digit = divmod[1];
102899 // TODO: This could be changed to unshift instead of reversing at the end.
102900 // Benchmark both to compare speeds.
102901 digits.push(numerals[digit.valueOf()]);
102902 }
102903 return (sign < 0 ? "-" : "") + digits.reverse().join("");
102904 }
102905 };
102906
102907 // Verify strings for parsing
102908 BigInteger.radixRegex = [
102909 /^$/,
102910 /^$/,
102911 /^[01]*$/,
102912 /^[012]*$/,
102913 /^[0-3]*$/,
102914 /^[0-4]*$/,
102915 /^[0-5]*$/,
102916 /^[0-6]*$/,
102917 /^[0-7]*$/,
102918 /^[0-8]*$/,
102919 /^[0-9]*$/,
102920 /^[0-9aA]*$/,
102921 /^[0-9abAB]*$/,
102922 /^[0-9abcABC]*$/,
102923 /^[0-9a-dA-D]*$/,
102924 /^[0-9a-eA-E]*$/,
102925 /^[0-9a-fA-F]*$/,
102926 /^[0-9a-gA-G]*$/,
102927 /^[0-9a-hA-H]*$/,
102928 /^[0-9a-iA-I]*$/,
102929 /^[0-9a-jA-J]*$/,
102930 /^[0-9a-kA-K]*$/,
102931 /^[0-9a-lA-L]*$/,
102932 /^[0-9a-mA-M]*$/,
102933 /^[0-9a-nA-N]*$/,
102934 /^[0-9a-oA-O]*$/,
102935 /^[0-9a-pA-P]*$/,
102936 /^[0-9a-qA-Q]*$/,
102937 /^[0-9a-rA-R]*$/,
102938 /^[0-9a-sA-S]*$/,
102939 /^[0-9a-tA-T]*$/,
102940 /^[0-9a-uA-U]*$/,
102941 /^[0-9a-vA-V]*$/,
102942 /^[0-9a-wA-W]*$/,
102943 /^[0-9a-xA-X]*$/,
102944 /^[0-9a-yA-Y]*$/,
102945 /^[0-9a-zA-Z]*$/
102946 ];
102947
102948 /*
102949 Function: parse
102950 Parse a string into a <BigInteger>.
102951
102952 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
102953 *base* is not provided, it will be guessed based on the leading characters
102954 of *s* as follows:
102955
102956 - "0x" or "0X": *base* = 16
102957 - "0c" or "0C": *base* = 8
102958 - "0b" or "0B": *base* = 2
102959 - else: *base* = 10
102960
102961 If no base is provided, or *base* is 10, the number can be in exponential
102962 form. For example, these are all valid:
102963
102964 > BigInteger.parse("1e9"); // Same as "1000000000"
102965 > BigInteger.parse("1.234*10^3"); // Same as 1234
102966 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
102967
102968 If any characters fall outside the range defined by the radix, an exception
102969 will be thrown.
102970
102971 Parameters:
102972
102973 s - The string to parse.
102974 base - Optional radix (default is to guess based on *s*).
102975
102976 Returns:
102977
102978 a <BigInteger> instance.
102979 */
102980 BigInteger.parse = function(s, base) {
102981 // Expands a number in exponential form to decimal form.
102982 // expandExponential("-13.441*10^5") === "1344100";
102983 // expandExponential("1.12300e-1") === "0.112300";
102984 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
102985 function expandExponential(str) {
102986 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
102987
102988 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
102989 c = +c;
102990 var l = c < 0;
102991 var i = n.length + c;
102992 x = (l ? n : f).length;
102993 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
102994 var z = (new Array(c + 1)).join("0");
102995 var r = n + f;
102996 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
102997 });
102998 }
102999
103000 s = s.toString();
103001 if (typeof base === "undefined" || +base === 10) {
103002 s = expandExponential(s);
103003 }
103004
103005 var prefixRE;
103006 if (typeof base === "undefined") {
103007 prefixRE = '0[xcb]';
103008 }
103009 else if (base == 16) {
103010 prefixRE = '0x';
103011 }
103012 else if (base == 8) {
103013 prefixRE = '0c';
103014 }
103015 else if (base == 2) {
103016 prefixRE = '0b';
103017 }
103018 else {
103019 prefixRE = '';
103020 }
103021 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
103022 if (parts) {
103023 var sign = parts[1] || "+";
103024 var baseSection = parts[2] || "";
103025 var digits = parts[3] || "";
103026
103027 if (typeof base === "undefined") {
103028 // Guess base
103029 if (baseSection === "0x" || baseSection === "0X") { // Hex
103030 base = 16;
103031 }
103032 else if (baseSection === "0c" || baseSection === "0C") { // Octal
103033 base = 8;
103034 }
103035 else if (baseSection === "0b" || baseSection === "0B") { // Binary
103036 base = 2;
103037 }
103038 else {
103039 base = 10;
103040 }
103041 }
103042 else if (base < 2 || base > 36) {
103043 throw new Error("Illegal radix " + base + ".");
103044 }
103045
103046 base = +base;
103047
103048 // Check for digits outside the range
103049 if (!(BigInteger.radixRegex[base].test(digits))) {
103050 throw new Error("Bad digit for radix " + base);
103051 }
103052
103053 // Strip leading zeros, and convert to array
103054 digits = digits.replace(/^0+/, "").split("");
103055 if (digits.length === 0) {
103056 return ZERO;
103057 }
103058
103059 // Get the sign (we know it's not zero)
103060 sign = (sign === "-") ? -1 : 1;
103061
103062 // Optimize 10
103063 if (base == 10) {
103064 var d = [];
103065 while (digits.length >= BigInteger_base_log10) {
103066 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
103067 }
103068 d.push(parseInt(digits.join(''), 10));
103069 return new BigInteger(d, sign, CONSTRUCT);
103070 }
103071
103072 // Do the conversion
103073 var d = ZERO;
103074 base = BigInteger.small[base];
103075 var small = BigInteger.small;
103076 for (var i = 0; i < digits.length; i++) {
103077 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
103078 }
103079 return new BigInteger(d._d, sign, CONSTRUCT);
103080 }
103081 else {
103082 throw new Error("Invalid BigInteger format: " + s);
103083 }
103084 };
103085
103086 /*
103087 Function: add
103088 Add two <BigIntegers>.
103089
103090 Parameters:
103091
103092 n - The number to add to *this*. Will be converted to a <BigInteger>.
103093
103094 Returns:
103095
103096 The numbers added together.
103097
103098 See Also:
103099
103100 <subtract>, <multiply>, <quotient>, <next>
103101 */
103102 BigInteger.prototype.add = function(n) {
103103 if (this._s === 0) {
103104 return BigInteger(n);
103105 }
103106
103107 n = BigInteger(n);
103108 if (n._s === 0) {
103109 return this;
103110 }
103111 if (this._s !== n._s) {
103112 n = n.negate();
103113 return this.subtract(n);
103114 }
103115
103116 var a = this._d;
103117 var b = n._d;
103118 var al = a.length;
103119 var bl = b.length;
103120 var sum = new Array(Math.max(al, bl) + 1);
103121 var size = Math.min(al, bl);
103122 var carry = 0;
103123 var digit;
103124
103125 for (var i = 0; i < size; i++) {
103126 digit = a[i] + b[i] + carry;
103127 sum[i] = digit % BigInteger_base;
103128 carry = (digit / BigInteger_base) | 0;
103129 }
103130 if (bl > al) {
103131 a = b;
103132 al = bl;
103133 }
103134 for (i = size; carry && i < al; i++) {
103135 digit = a[i] + carry;
103136 sum[i] = digit % BigInteger_base;
103137 carry = (digit / BigInteger_base) | 0;
103138 }
103139 if (carry) {
103140 sum[i] = carry;
103141 }
103142
103143 for ( ; i < al; i++) {
103144 sum[i] = a[i];
103145 }
103146
103147 return new BigInteger(sum, this._s, CONSTRUCT);
103148 };
103149
103150 /*
103151 Function: negate
103152 Get the additive inverse of a <BigInteger>.
103153
103154 Returns:
103155
103156 A <BigInteger> with the same magnatude, but with the opposite sign.
103157
103158 See Also:
103159
103160 <abs>
103161 */
103162 BigInteger.prototype.negate = function() {
103163 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
103164 };
103165
103166 /*
103167 Function: abs
103168 Get the absolute value of a <BigInteger>.
103169
103170 Returns:
103171
103172 A <BigInteger> with the same magnatude, but always positive (or zero).
103173
103174 See Also:
103175
103176 <negate>
103177 */
103178 BigInteger.prototype.abs = function() {
103179 return (this._s < 0) ? this.negate() : this;
103180 };
103181
103182 /*
103183 Function: subtract
103184 Subtract two <BigIntegers>.
103185
103186 Parameters:
103187
103188 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
103189
103190 Returns:
103191
103192 The *n* subtracted from *this*.
103193
103194 See Also:
103195
103196 <add>, <multiply>, <quotient>, <prev>
103197 */
103198 BigInteger.prototype.subtract = function(n) {
103199 if (this._s === 0) {
103200 return BigInteger(n).negate();
103201 }
103202
103203 n = BigInteger(n);
103204 if (n._s === 0) {
103205 return this;
103206 }
103207 if (this._s !== n._s) {
103208 n = n.negate();
103209 return this.add(n);
103210 }
103211
103212 var m = this;
103213 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
103214 if (this._s < 0) {
103215 m = new BigInteger(n._d, 1, CONSTRUCT);
103216 n = new BigInteger(this._d, 1, CONSTRUCT);
103217 }
103218
103219 // Both are positive => a - b
103220 var sign = m.compareAbs(n);
103221 if (sign === 0) {
103222 return ZERO;
103223 }
103224 else if (sign < 0) {
103225 // swap m and n
103226 var t = n;
103227 n = m;
103228 m = t;
103229 }
103230
103231 // a > b
103232 var a = m._d;
103233 var b = n._d;
103234 var al = a.length;
103235 var bl = b.length;
103236 var diff = new Array(al); // al >= bl since a > b
103237 var borrow = 0;
103238 var i;
103239 var digit;
103240
103241 for (i = 0; i < bl; i++) {
103242 digit = a[i] - borrow - b[i];
103243 if (digit < 0) {
103244 digit += BigInteger_base;
103245 borrow = 1;
103246 }
103247 else {
103248 borrow = 0;
103249 }
103250 diff[i] = digit;
103251 }
103252 for (i = bl; i < al; i++) {
103253 digit = a[i] - borrow;
103254 if (digit < 0) {
103255 digit += BigInteger_base;
103256 }
103257 else {
103258 diff[i++] = digit;
103259 break;
103260 }
103261 diff[i] = digit;
103262 }
103263 for ( ; i < al; i++) {
103264 diff[i] = a[i];
103265 }
103266
103267 return new BigInteger(diff, sign, CONSTRUCT);
103268 };
103269
103270 (function() {
103271 function addOne(n, sign) {
103272 var a = n._d;
103273 var sum = a.slice();
103274 var carry = true;
103275 var i = 0;
103276
103277 while (true) {
103278 var digit = (a[i] || 0) + 1;
103279 sum[i] = digit % BigInteger_base;
103280 if (digit <= BigInteger_base - 1) {
103281 break;
103282 }
103283 ++i;
103284 }
103285
103286 return new BigInteger(sum, sign, CONSTRUCT);
103287 }
103288
103289 function subtractOne(n, sign) {
103290 var a = n._d;
103291 var sum = a.slice();
103292 var borrow = true;
103293 var i = 0;
103294
103295 while (true) {
103296 var digit = (a[i] || 0) - 1;
103297 if (digit < 0) {
103298 sum[i] = digit + BigInteger_base;
103299 }
103300 else {
103301 sum[i] = digit;
103302 break;
103303 }
103304 ++i;
103305 }
103306
103307 return new BigInteger(sum, sign, CONSTRUCT);
103308 }
103309
103310 /*
103311 Function: next
103312 Get the next <BigInteger> (add one).
103313
103314 Returns:
103315
103316 *this* + 1.
103317
103318 See Also:
103319
103320 <add>, <prev>
103321 */
103322 BigInteger.prototype.next = function() {
103323 switch (this._s) {
103324 case 0:
103325 return ONE;
103326 case -1:
103327 return subtractOne(this, -1);
103328 // case 1:
103329 default:
103330 return addOne(this, 1);
103331 }
103332 };
103333
103334 /*
103335 Function: prev
103336 Get the previous <BigInteger> (subtract one).
103337
103338 Returns:
103339
103340 *this* - 1.
103341
103342 See Also:
103343
103344 <next>, <subtract>
103345 */
103346 BigInteger.prototype.prev = function() {
103347 switch (this._s) {
103348 case 0:
103349 return M_ONE;
103350 case -1:
103351 return addOne(this, -1);
103352 // case 1:
103353 default:
103354 return subtractOne(this, 1);
103355 }
103356 };
103357 })();
103358
103359 /*
103360 Function: compareAbs
103361 Compare the absolute value of two <BigIntegers>.
103362
103363 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
103364
103365 Parameters:
103366
103367 n - The number to compare to *this*. Will be converted to a <BigInteger>.
103368
103369 Returns:
103370
103371 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
103372
103373 See Also:
103374
103375 <compare>, <abs>
103376 */
103377 BigInteger.prototype.compareAbs = function(n) {
103378 if (this === n) {
103379 return 0;
103380 }
103381
103382 if (!(n instanceof BigInteger)) {
103383 if (!isFinite(n)) {
103384 return(isNaN(n) ? n : -1);
103385 }
103386 n = BigInteger(n);
103387 }
103388
103389 if (this._s === 0) {
103390 return (n._s !== 0) ? -1 : 0;
103391 }
103392 if (n._s === 0) {
103393 return 1;
103394 }
103395
103396 var l = this._d.length;
103397 var nl = n._d.length;
103398 if (l < nl) {
103399 return -1;
103400 }
103401 else if (l > nl) {
103402 return 1;
103403 }
103404
103405 var a = this._d;
103406 var b = n._d;
103407 for (var i = l-1; i >= 0; i--) {
103408 if (a[i] !== b[i]) {
103409 return a[i] < b[i] ? -1 : 1;
103410 }
103411 }
103412
103413 return 0;
103414 };
103415
103416 /*
103417 Function: compare
103418 Compare two <BigIntegers>.
103419
103420 Parameters:
103421
103422 n - The number to compare to *this*. Will be converted to a <BigInteger>.
103423
103424 Returns:
103425
103426 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
103427
103428 See Also:
103429
103430 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
103431 */
103432 BigInteger.prototype.compare = function(n) {
103433 if (this === n) {
103434 return 0;
103435 }
103436
103437 n = BigInteger(n);
103438
103439 if (this._s === 0) {
103440 return -n._s;
103441 }
103442
103443 if (this._s === n._s) { // both positive or both negative
103444 var cmp = this.compareAbs(n);
103445 return cmp * this._s;
103446 }
103447 else {
103448 return this._s;
103449 }
103450 };
103451
103452 /*
103453 Function: isUnit
103454 Return true iff *this* is either 1 or -1.
103455
103456 Returns:
103457
103458 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
103459
103460 See Also:
103461
103462 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
103463 <BigInteger.ONE>, <BigInteger.M_ONE>
103464 */
103465 BigInteger.prototype.isUnit = function() {
103466 return this === ONE ||
103467 this === M_ONE ||
103468 (this._d.length === 1 && this._d[0] === 1);
103469 };
103470
103471 /*
103472 Function: multiply
103473 Multiply two <BigIntegers>.
103474
103475 Parameters:
103476
103477 n - The number to multiply *this* by. Will be converted to a
103478 <BigInteger>.
103479
103480 Returns:
103481
103482 The numbers multiplied together.
103483
103484 See Also:
103485
103486 <add>, <subtract>, <quotient>, <square>
103487 */
103488 BigInteger.prototype.multiply = function(n) {
103489 // TODO: Consider adding Karatsuba multiplication for large numbers
103490 if (this._s === 0) {
103491 return ZERO;
103492 }
103493
103494 n = BigInteger(n);
103495 if (n._s === 0) {
103496 return ZERO;
103497 }
103498 if (this.isUnit()) {
103499 if (this._s < 0) {
103500 return n.negate();
103501 }
103502 return n;
103503 }
103504 if (n.isUnit()) {
103505 if (n._s < 0) {
103506 return this.negate();
103507 }
103508 return this;
103509 }
103510 if (this === n) {
103511 return this.square();
103512 }
103513
103514 var r = (this._d.length >= n._d.length);
103515 var a = (r ? this : n)._d; // a will be longer than b
103516 var b = (r ? n : this)._d;
103517 var al = a.length;
103518 var bl = b.length;
103519
103520 var pl = al + bl;
103521 var partial = new Array(pl);
103522 var i;
103523 for (i = 0; i < pl; i++) {
103524 partial[i] = 0;
103525 }
103526
103527 for (i = 0; i < bl; i++) {
103528 var carry = 0;
103529 var bi = b[i];
103530 var jlimit = al + i;
103531 var digit;
103532 for (var j = i; j < jlimit; j++) {
103533 digit = partial[j] + bi * a[j - i] + carry;
103534 carry = (digit / BigInteger_base) | 0;
103535 partial[j] = (digit % BigInteger_base) | 0;
103536 }
103537 if (carry) {
103538 digit = partial[j] + carry;
103539 carry = (digit / BigInteger_base) | 0;
103540 partial[j] = digit % BigInteger_base;
103541 }
103542 }
103543 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
103544 };
103545
103546 // Multiply a BigInteger by a single-digit native number
103547 // Assumes that this and n are >= 0
103548 // This is not really intended to be used outside the library itself
103549 BigInteger.prototype.multiplySingleDigit = function(n) {
103550 if (n === 0 || this._s === 0) {
103551 return ZERO;
103552 }
103553 if (n === 1) {
103554 return this;
103555 }
103556
103557 var digit;
103558 if (this._d.length === 1) {
103559 digit = this._d[0] * n;
103560 if (digit >= BigInteger_base) {
103561 return new BigInteger([(digit % BigInteger_base)|0,
103562 (digit / BigInteger_base)|0], 1, CONSTRUCT);
103563 }
103564 return new BigInteger([digit], 1, CONSTRUCT);
103565 }
103566
103567 if (n === 2) {
103568 return this.add(this);
103569 }
103570 if (this.isUnit()) {
103571 return new BigInteger([n], 1, CONSTRUCT);
103572 }
103573
103574 var a = this._d;
103575 var al = a.length;
103576
103577 var pl = al + 1;
103578 var partial = new Array(pl);
103579 for (var i = 0; i < pl; i++) {
103580 partial[i] = 0;
103581 }
103582
103583 var carry = 0;
103584 for (var j = 0; j < al; j++) {
103585 digit = n * a[j] + carry;
103586 carry = (digit / BigInteger_base) | 0;
103587 partial[j] = (digit % BigInteger_base) | 0;
103588 }
103589 if (carry) {
103590 partial[j] = carry;
103591 }
103592
103593 return new BigInteger(partial, 1, CONSTRUCT);
103594 };
103595
103596 /*
103597 Function: square
103598 Multiply a <BigInteger> by itself.
103599
103600 This is slightly faster than regular multiplication, since it removes the
103601 duplicated multiplcations.
103602
103603 Returns:
103604
103605 > this.multiply(this)
103606
103607 See Also:
103608 <multiply>
103609 */
103610 BigInteger.prototype.square = function() {
103611 // Normally, squaring a 10-digit number would take 100 multiplications.
103612 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
103613 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
103614 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
103615
103616 if (this._s === 0) {
103617 return ZERO;
103618 }
103619 if (this.isUnit()) {
103620 return ONE;
103621 }
103622
103623 var digits = this._d;
103624 var length = digits.length;
103625 var imult1 = new Array(length + length + 1);
103626 var product, carry, k;
103627 var i;
103628
103629 // Calculate diagonal
103630 for (i = 0; i < length; i++) {
103631 k = i * 2;
103632 product = digits[i] * digits[i];
103633 carry = (product / BigInteger_base) | 0;
103634 imult1[k] = product % BigInteger_base;
103635 imult1[k + 1] = carry;
103636 }
103637
103638 // Calculate repeating part
103639 for (i = 0; i < length; i++) {
103640 carry = 0;
103641 k = i * 2 + 1;
103642 for (var j = i + 1; j < length; j++, k++) {
103643 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
103644 carry = (product / BigInteger_base) | 0;
103645 imult1[k] = product % BigInteger_base;
103646 }
103647 k = length + i;
103648 var digit = carry + imult1[k];
103649 carry = (digit / BigInteger_base) | 0;
103650 imult1[k] = digit % BigInteger_base;
103651 imult1[k + 1] += carry;
103652 }
103653
103654 return new BigInteger(imult1, 1, CONSTRUCT);
103655 };
103656
103657 /*
103658 Function: quotient
103659 Divide two <BigIntegers> and truncate towards zero.
103660
103661 <quotient> throws an exception if *n* is zero.
103662
103663 Parameters:
103664
103665 n - The number to divide *this* by. Will be converted to a <BigInteger>.
103666
103667 Returns:
103668
103669 The *this* / *n*, truncated to an integer.
103670
103671 See Also:
103672
103673 <add>, <subtract>, <multiply>, <divRem>, <remainder>
103674 */
103675 BigInteger.prototype.quotient = function(n) {
103676 return this.divRem(n)[0];
103677 };
103678
103679 /*
103680 Function: divide
103681 Deprecated synonym for <quotient>.
103682 */
103683 BigInteger.prototype.divide = BigInteger.prototype.quotient;
103684
103685 /*
103686 Function: remainder
103687 Calculate the remainder of two <BigIntegers>.
103688
103689 <remainder> throws an exception if *n* is zero.
103690
103691 Parameters:
103692
103693 n - The remainder after *this* is divided *this* by *n*. Will be
103694 converted to a <BigInteger>.
103695
103696 Returns:
103697
103698 *this* % *n*.
103699
103700 See Also:
103701
103702 <divRem>, <quotient>
103703 */
103704 BigInteger.prototype.remainder = function(n) {
103705 return this.divRem(n)[1];
103706 };
103707
103708 /*
103709 Function: divRem
103710 Calculate the integer quotient and remainder of two <BigIntegers>.
103711
103712 <divRem> throws an exception if *n* is zero.
103713
103714 Parameters:
103715
103716 n - The number to divide *this* by. Will be converted to a <BigInteger>.
103717
103718 Returns:
103719
103720 A two-element array containing the quotient and the remainder.
103721
103722 > a.divRem(b)
103723
103724 is exactly equivalent to
103725
103726 > [a.quotient(b), a.remainder(b)]
103727
103728 except it is faster, because they are calculated at the same time.
103729
103730 See Also:
103731
103732 <quotient>, <remainder>
103733 */
103734 BigInteger.prototype.divRem = function(n) {
103735 n = BigInteger(n);
103736 if (n._s === 0) {
103737 throw new Error("Divide by zero");
103738 }
103739 if (this._s === 0) {
103740 return [ZERO, ZERO];
103741 }
103742 if (n._d.length === 1) {
103743 return this.divRemSmall(n._s * n._d[0]);
103744 }
103745
103746 // Test for easy cases -- |n1| <= |n2|
103747 switch (this.compareAbs(n)) {
103748 case 0: // n1 == n2
103749 return [this._s === n._s ? ONE : M_ONE, ZERO];
103750 case -1: // |n1| < |n2|
103751 return [ZERO, this];
103752 }
103753
103754 var sign = this._s * n._s;
103755 var a = n.abs();
103756 var b_digits = this._d;
103757 var b_index = b_digits.length;
103758 var digits = n._d.length;
103759 var quot = [];
103760 var guess;
103761
103762 var part = new BigInteger([], 0, CONSTRUCT);
103763
103764 while (b_index) {
103765 part._d.unshift(b_digits[--b_index]);
103766 part = new BigInteger(part._d, 1, CONSTRUCT);
103767
103768 if (part.compareAbs(n) < 0) {
103769 quot.push(0);
103770 continue;
103771 }
103772 if (part._s === 0) {
103773 guess = 0;
103774 }
103775 else {
103776 var xlen = part._d.length, ylen = a._d.length;
103777 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
103778 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
103779 if (part._d.length > a._d.length) {
103780 // The length of part._d can either match a._d length,
103781 // or exceed it by one.
103782 highx = (highx+1)*BigInteger_base;
103783 }
103784 guess = Math.ceil(highx/highy);
103785 }
103786 do {
103787 var check = a.multiplySingleDigit(guess);
103788 if (check.compareAbs(part) <= 0) {
103789 break;
103790 }
103791 guess--;
103792 } while (guess);
103793
103794 quot.push(guess);
103795 if (!guess) {
103796 continue;
103797 }
103798 var diff = part.subtract(check);
103799 part._d = diff._d.slice();
103800 }
103801
103802 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
103803 new BigInteger(part._d, this._s, CONSTRUCT)];
103804 };
103805
103806 // Throws an exception if n is outside of (-BigInteger.base, -1] or
103807 // [1, BigInteger.base). It's not necessary to call this, since the
103808 // other division functions will call it if they are able to.
103809 BigInteger.prototype.divRemSmall = function(n) {
103810 var r;
103811 n = +n;
103812 if (n === 0) {
103813 throw new Error("Divide by zero");
103814 }
103815
103816 var n_s = n < 0 ? -1 : 1;
103817 var sign = this._s * n_s;
103818 n = Math.abs(n);
103819
103820 if (n < 1 || n >= BigInteger_base) {
103821 throw new Error("Argument out of range");
103822 }
103823
103824 if (this._s === 0) {
103825 return [ZERO, ZERO];
103826 }
103827
103828 if (n === 1 || n === -1) {
103829 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
103830 }
103831
103832 // 2 <= n < BigInteger_base
103833
103834 // divide a single digit by a single digit
103835 if (this._d.length === 1) {
103836 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
103837 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
103838 if (sign < 0) {
103839 q = q.negate();
103840 }
103841 if (this._s < 0) {
103842 r = r.negate();
103843 }
103844 return [q, r];
103845 }
103846
103847 var digits = this._d.slice();
103848 var quot = new Array(digits.length);
103849 var part = 0;
103850 var diff = 0;
103851 var i = 0;
103852 var guess;
103853
103854 while (digits.length) {
103855 part = part * BigInteger_base + digits[digits.length - 1];
103856 if (part < n) {
103857 quot[i++] = 0;
103858 digits.pop();
103859 diff = BigInteger_base * diff + part;
103860 continue;
103861 }
103862 if (part === 0) {
103863 guess = 0;
103864 }
103865 else {
103866 guess = (part / n) | 0;
103867 }
103868
103869 var check = n * guess;
103870 diff = part - check;
103871 quot[i++] = guess;
103872 if (!guess) {
103873 digits.pop();
103874 continue;
103875 }
103876
103877 digits.pop();
103878 part = diff;
103879 }
103880
103881 r = new BigInteger([diff], 1, CONSTRUCT);
103882 if (this._s < 0) {
103883 r = r.negate();
103884 }
103885 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
103886 };
103887
103888 /*
103889 Function: isEven
103890 Return true iff *this* is divisible by two.
103891
103892 Note that <BigInteger.ZERO> is even.
103893
103894 Returns:
103895
103896 true if *this* is even, false otherwise.
103897
103898 See Also:
103899
103900 <isOdd>
103901 */
103902 BigInteger.prototype.isEven = function() {
103903 var digits = this._d;
103904 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
103905 };
103906
103907 /*
103908 Function: isOdd
103909 Return true iff *this* is not divisible by two.
103910
103911 Returns:
103912
103913 true if *this* is odd, false otherwise.
103914
103915 See Also:
103916
103917 <isEven>
103918 */
103919 BigInteger.prototype.isOdd = function() {
103920 return !this.isEven();
103921 };
103922
103923 /*
103924 Function: sign
103925 Get the sign of a <BigInteger>.
103926
103927 Returns:
103928
103929 * -1 if *this* < 0
103930 * 0 if *this* == 0
103931 * +1 if *this* > 0
103932
103933 See Also:
103934
103935 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
103936 */
103937 BigInteger.prototype.sign = function() {
103938 return this._s;
103939 };
103940
103941 /*
103942 Function: isPositive
103943 Return true iff *this* > 0.
103944
103945 Returns:
103946
103947 true if *this*.compare(<BigInteger.ZERO>) == 1.
103948
103949 See Also:
103950
103951 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
103952 */
103953 BigInteger.prototype.isPositive = function() {
103954 return this._s > 0;
103955 };
103956
103957 /*
103958 Function: isNegative
103959 Return true iff *this* < 0.
103960
103961 Returns:
103962
103963 true if *this*.compare(<BigInteger.ZERO>) == -1.
103964
103965 See Also:
103966
103967 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
103968 */
103969 BigInteger.prototype.isNegative = function() {
103970 return this._s < 0;
103971 };
103972
103973 /*
103974 Function: isZero
103975 Return true iff *this* == 0.
103976
103977 Returns:
103978
103979 true if *this*.compare(<BigInteger.ZERO>) == 0.
103980
103981 See Also:
103982
103983 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
103984 */
103985 BigInteger.prototype.isZero = function() {
103986 return this._s === 0;
103987 };
103988
103989 /*
103990 Function: exp10
103991 Multiply a <BigInteger> by a power of 10.
103992
103993 This is equivalent to, but faster than
103994
103995 > if (n >= 0) {
103996 > return this.multiply(BigInteger("1e" + n));
103997 > }
103998 > else { // n <= 0
103999 > return this.quotient(BigInteger("1e" + -n));
104000 > }
104001
104002 Parameters:
104003
104004 n - The power of 10 to multiply *this* by. *n* is converted to a
104005 javascipt number and must be no greater than <BigInteger.MAX_EXP>
104006 (0x7FFFFFFF), or an exception will be thrown.
104007
104008 Returns:
104009
104010 *this* * (10 ** *n*), truncated to an integer if necessary.
104011
104012 See Also:
104013
104014 <pow>, <multiply>
104015 */
104016 BigInteger.prototype.exp10 = function(n) {
104017 n = +n;
104018 if (n === 0) {
104019 return this;
104020 }
104021 if (Math.abs(n) > Number(MAX_EXP)) {
104022 throw new Error("exponent too large in BigInteger.exp10");
104023 }
104024 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
104025 if (this._s === 0) {
104026 return ZERO;
104027 }
104028 if (n > 0) {
104029 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
104030
104031 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
104032 k._d.unshift(0);
104033 }
104034 if (n == 0)
104035 return k;
104036 k._s = 1;
104037 k = k.multiplySingleDigit(Math.pow(10, n));
104038 return (this._s < 0 ? k.negate() : k);
104039 } else if (-n >= this._d.length*BigInteger_base_log10) {
104040 return ZERO;
104041 } else {
104042 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
104043
104044 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
104045 k._d.shift();
104046 }
104047 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
104048 }
104049 };
104050
104051 /*
104052 Function: pow
104053 Raise a <BigInteger> to a power.
104054
104055 In this implementation, 0**0 is 1.
104056
104057 Parameters:
104058
104059 n - The exponent to raise *this* by. *n* must be no greater than
104060 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
104061
104062 Returns:
104063
104064 *this* raised to the *nth* power.
104065
104066 See Also:
104067
104068 <modPow>
104069 */
104070 BigInteger.prototype.pow = function(n) {
104071 if (this.isUnit()) {
104072 if (this._s > 0) {
104073 return this;
104074 }
104075 else {
104076 return BigInteger(n).isOdd() ? this : this.negate();
104077 }
104078 }
104079
104080 n = BigInteger(n);
104081 if (n._s === 0) {
104082 return ONE;
104083 }
104084 else if (n._s < 0) {
104085 if (this._s === 0) {
104086 throw new Error("Divide by zero");
104087 }
104088 else {
104089 return ZERO;
104090 }
104091 }
104092 if (this._s === 0) {
104093 return ZERO;
104094 }
104095 if (n.isUnit()) {
104096 return this;
104097 }
104098
104099 if (n.compareAbs(MAX_EXP) > 0) {
104100 throw new Error("exponent too large in BigInteger.pow");
104101 }
104102 var x = this;
104103 var aux = ONE;
104104 var two = BigInteger.small[2];
104105
104106 while (n.isPositive()) {
104107 if (n.isOdd()) {
104108 aux = aux.multiply(x);
104109 if (n.isUnit()) {
104110 return aux;
104111 }
104112 }
104113 x = x.square();
104114 n = n.quotient(two);
104115 }
104116
104117 return aux;
104118 };
104119
104120 /*
104121 Function: modPow
104122 Raise a <BigInteger> to a power (mod m).
104123
104124 Because it is reduced by a modulus, <modPow> is not limited by
104125 <BigInteger.MAX_EXP> like <pow>.
104126
104127 Parameters:
104128
104129 exponent - The exponent to raise *this* by. Must be positive.
104130 modulus - The modulus.
104131
104132 Returns:
104133
104134 *this* ^ *exponent* (mod *modulus*).
104135
104136 See Also:
104137
104138 <pow>, <mod>
104139 */
104140 BigInteger.prototype.modPow = function(exponent, modulus) {
104141 var result = ONE;
104142 var base = this;
104143
104144 while (exponent.isPositive()) {
104145 if (exponent.isOdd()) {
104146 result = result.multiply(base).remainder(modulus);
104147 }
104148
104149 exponent = exponent.quotient(BigInteger.small[2]);
104150 if (exponent.isPositive()) {
104151 base = base.square().remainder(modulus);
104152 }
104153 }
104154
104155 return result;
104156 };
104157
104158 /*
104159 Function: log
104160 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
104161
104162 This is equivalent to
104163
104164 > Math.log(this.toJSValue())
104165
104166 but handles values outside of the native number range.
104167
104168 Returns:
104169
104170 log( *this* )
104171
104172 See Also:
104173
104174 <toJSValue>
104175 */
104176 BigInteger.prototype.log = function() {
104177 switch (this._s) {
104178 case 0: return -Infinity;
104179 case -1: return NaN;
104180 default: // Fall through.
104181 }
104182
104183 var l = this._d.length;
104184
104185 if (l*BigInteger_base_log10 < 30) {
104186 return Math.log(this.valueOf());
104187 }
104188
104189 var N = Math.ceil(30/BigInteger_base_log10);
104190 var firstNdigits = this._d.slice(l - N);
104191 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
104192 };
104193
104194 /*
104195 Function: valueOf
104196 Convert a <BigInteger> to a native JavaScript integer.
104197
104198 This is called automatically by JavaScipt to convert a <BigInteger> to a
104199 native value.
104200
104201 Returns:
104202
104203 > parseInt(this.toString(), 10)
104204
104205 See Also:
104206
104207 <toString>, <toJSValue>
104208 */
104209 BigInteger.prototype.valueOf = function() {
104210 return parseInt(this.toString(), 10);
104211 };
104212
104213 /*
104214 Function: toJSValue
104215 Convert a <BigInteger> to a native JavaScript integer.
104216
104217 This is the same as valueOf, but more explicitly named.
104218
104219 Returns:
104220
104221 > parseInt(this.toString(), 10)
104222
104223 See Also:
104224
104225 <toString>, <valueOf>
104226 */
104227 BigInteger.prototype.toJSValue = function() {
104228 return parseInt(this.toString(), 10);
104229 };
104230
104231 var MAX_EXP = BigInteger(0x7FFFFFFF);
104232 // Constant: MAX_EXP
104233 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
104234 BigInteger.MAX_EXP = MAX_EXP;
104235
104236 (function() {
104237 function makeUnary(fn) {
104238 return function(a) {
104239 return fn.call(BigInteger(a));
104240 };
104241 }
104242
104243 function makeBinary(fn) {
104244 return function(a, b) {
104245 return fn.call(BigInteger(a), BigInteger(b));
104246 };
104247 }
104248
104249 function makeTrinary(fn) {
104250 return function(a, b, c) {
104251 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
104252 };
104253 }
104254
104255 (function() {
104256 var i, fn;
104257 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
104258 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
104259 var trinary = ["modPow"];
104260
104261 for (i = 0; i < unary.length; i++) {
104262 fn = unary[i];
104263 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
104264 }
104265
104266 for (i = 0; i < binary.length; i++) {
104267 fn = binary[i];
104268 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
104269 }
104270
104271 for (i = 0; i < trinary.length; i++) {
104272 fn = trinary[i];
104273 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
104274 }
104275
104276 BigInteger.exp10 = function(x, n) {
104277 return BigInteger(x).exp10(n);
104278 };
104279 })();
104280 })();
104281
104282 exports.BigInteger = BigInteger;
104283 })(typeof exports !== 'undefined' ? exports : this);
104284 </script>
104285 <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){
104286 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;
104287
104288 },{}],2:[function(require,module,exports){
104289 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;
104290
104291 },{"./scoring":6}],3:[function(require,module,exports){
104292 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(","),
104293 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(","),
104294 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(","),
104295 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(","),
104296 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;
104297
104298 },{}],4:[function(require,module,exports){
104299 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;
104300
104301 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
104302 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;
104303
104304 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
104305 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;
104306
104307 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
104308 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;
104309
104310 },{}]},{},[4])(4)
104311 });
104312
104313 </script>
104314 <script>/*
104315 * Detects entropy from a string.
104316 *
104317 * Formats include:
104318 * binary [0-1]
104319 * base 6 [0-5]
104320 * dice 6 [1-6]
104321 * decimal [0-9]
104322 * hexadecimal [0-9A-F]
104323 * card [A2-9TJQK][CDHS]
104324 *
104325 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
104326 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
104327 * entropy.
104328 */
104329
104330 window.Entropy = new (function() {
104331
104332 var TWO = new BigInteger(2);
104333
104334 // matchers returns an array of the matched events for each type of entropy.
104335 // eg
104336 // matchers.binary("010") returns ["0", "1", "0"]
104337 // matchers.binary("a10") returns ["1", "0"]
104338 // matchers.hex("a10") returns ["a", "1", "0"]
104339 var matchers = {
104340 binary: function(str) {
104341 return str.match(/[0-1]/gi) || [];
104342 },
104343 base6: function(str) {
104344 return str.match(/[0-5]/gi) || [];
104345 },
104346 dice: function(str) {
104347 return str.match(/[1-6]/gi) || []; // ie dice numbers
104348 },
104349 base10: function(str) {
104350 return str.match(/[0-9]/gi) || [];
104351 },
104352 hex: function(str) {
104353 return str.match(/[0-9A-F]/gi) || [];
104354 },
104355 card: function(str) {
104356 // Format is NumberSuit, eg
104357 // AH ace of hearts
104358 // 8C eight of clubs
104359 // TD ten of diamonds
104360 // JS jack of spades
104361 // QH queen of hearts
104362 // KC king of clubs
104363 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
104364 }
104365 }
104366
104367 // Convert array of cards from ["ac", "4d", "ks"]
104368 // to numbers between 0 and 51 [0, 16, 51]
104369 function convertCardsToInts(cards) {
104370 var ints = [];
104371 var values = "a23456789tjqk";
104372 var suits = "cdhs";
104373 for (var i=0; i<cards.length; i++) {
104374 var card = cards[i].toLowerCase();
104375 var value = card[0];
104376 var suit = card[1];
104377 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
104378 ints.push(asInt);
104379 }
104380 return ints;
104381 }
104382
104383 this.fromString = function(rawEntropyStr) {
104384 // Find type of entropy being used (binary, hex, dice etc)
104385 var base = getBase(rawEntropyStr);
104386 // Convert dice to base6 entropy (ie 1-6 to 0-5)
104387 // This is done by changing all 6s to 0s
104388 if (base.str == "dice") {
104389 var newParts = [];
104390 var newInts = [];
104391 for (var i=0; i<base.parts.length; i++) {
104392 var c = base.parts[i];
104393 if ("12345".indexOf(c) > -1) {
104394 newParts[i] = base.parts[i];
104395 newInts[i] = base.ints[i];
104396 }
104397 else {
104398 newParts[i] = "0";
104399 newInts[i] = 0;
104400 }
104401 }
104402 base.str = "base 6 (dice)";
104403 base.ints = newInts;
104404 base.parts = newParts;
104405 base.matcher = matchers.base6;
104406 }
104407 // Detect empty entropy
104408 if (base.parts.length == 0) {
104409 return {
104410 binaryStr: "",
104411 cleanStr: "",
104412 cleanHtml: "",
104413 base: base,
104414 };
104415 }
104416 // Convert base.ints to BigInteger.
104417 // Due to using unusual bases, eg cards of base52, this is not as simple as
104418 // using BigInteger.parse()
104419 var entropyInt = BigInteger.ZERO;
104420 for (var i=base.ints.length-1; i>=0; i--) {
104421 var thisInt = BigInteger.parse(base.ints[i]);
104422 var power = (base.ints.length - 1) - i;
104423 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
104424 entropyInt = entropyInt.add(additionalEntropy);
104425 }
104426 // Convert entropy to binary
104427 var entropyBin = entropyInt.toString(2);
104428 // If the first integer is small, it must be padded with zeros.
104429 // Otherwise the chance of the first bit being 1 is 100%, which is
104430 // obviously incorrect.
104431 // This is not perfect for non-2^n bases.
104432 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
104433 while (entropyBin.length < expectedBits) {
104434 entropyBin = "0" + entropyBin;
104435 }
104436 // Calculate the number of bits per event
104437 var bitsPerEvent = Math.log2(base.asInt);
104438 // Cards binary must be handled differently, since they're not replaced
104439 if (base.asInt == 52) {
104440 var cardEntropy = processCardEntropy(base.parts);
104441 entropyBin = cardEntropy.binaryStr;
104442 bitsPerEvent = cardEntropy.bitsPerEvent;
104443 }
104444 // Supply a 'filtered' entropy string for display purposes
104445 var entropyClean = base.parts.join("");
104446 var entropyHtml = base.parts.join("");
104447 if (base.asInt == 52) {
104448 entropyClean = base.parts.join(" ").toUpperCase();
104449 entropyClean = entropyClean.replace(/C/g, "\u2663");
104450 entropyClean = entropyClean.replace(/D/g, "\u2666");
104451 entropyClean = entropyClean.replace(/H/g, "\u2665");
104452 entropyClean = entropyClean.replace(/S/g, "\u2660");
104453 entropyHtml = base.parts.join(" ").toUpperCase();
104454 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
104455 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
104456 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
104457 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
104458 }
104459 // Return the result
104460 var e = {
104461 binaryStr: entropyBin,
104462 cleanStr: entropyClean,
104463 cleanHtml: entropyHtml,
104464 bitsPerEvent: bitsPerEvent,
104465 base: base,
104466 }
104467 return e;
104468 }
104469
104470 function getSortedDeck() {
104471 var s = [];
104472 var suits = "CDHS";
104473 var values = "A23456789TJQK";
104474 for (var i=0; i<suits.length; i++) {
104475 for (var j=0; j<values.length; j++) {
104476 s.push(values[j]+suits[i]);
104477 }
104478 }
104479 return s;
104480 }
104481
104482 function getBase(str) {
104483 // Need to get the lowest base for the supplied entropy.
104484 // This prevents interpreting, say, dice rolls as hexadecimal.
104485 var binaryMatches = matchers.binary(str);
104486 var hexMatches = matchers.hex(str);
104487 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
104488 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
104489 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
104490 return {
104491 ints: ints,
104492 parts: binaryMatches,
104493 matcher: matchers.binary,
104494 asInt: 2,
104495 str: "binary",
104496 }
104497 }
104498 var cardMatches = matchers.card(str);
104499 if (cardMatches.length >= hexMatches.length / 2) {
104500 var ints = convertCardsToInts(cardMatches);
104501 return {
104502 ints: ints,
104503 parts: cardMatches,
104504 matcher: matchers.card,
104505 asInt: 52,
104506 str: "card",
104507 }
104508 }
104509 var diceMatches = matchers.dice(str);
104510 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
104511 var ints = diceMatches.map(function(i) { return parseInt(i) });
104512 return {
104513 ints: ints,
104514 parts: diceMatches,
104515 matcher: matchers.dice,
104516 asInt: 6,
104517 str: "dice",
104518 }
104519 }
104520 var base6Matches = matchers.base6(str);
104521 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
104522 var ints = base6Matches.map(function(i) { return parseInt(i) });
104523 return {
104524 ints: ints,
104525 parts: base6Matches,
104526 matcher: matchers.base6,
104527 asInt: 6,
104528 str: "base 6",
104529 }
104530 }
104531 var base10Matches = matchers.base10(str);
104532 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
104533 var ints = base10Matches.map(function(i) { return parseInt(i) });
104534 return {
104535 ints: ints,
104536 parts: base10Matches,
104537 matcher: matchers.base10,
104538 asInt: 10,
104539 str: "base 10",
104540 }
104541 }
104542 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
104543 return {
104544 ints: ints,
104545 parts: hexMatches,
104546 matcher: matchers.hex,
104547 asInt: 16,
104548 str: "hexadecimal",
104549 }
104550 }
104551
104552 // Assume cards are NOT replaced.
104553 // Additional entropy decreases as more cards are used. This means
104554 // total possible entropy is measured using n!, not base^n.
104555 // eg the second last card can be only one of two, not one of fifty two
104556 // so the added entropy for that card is only one bit at most
104557 function processCardEntropy(cards) {
104558 // Track how many instances of each card have been used, and thus
104559 // how many decks are in use.
104560 var cardCounts = {};
104561 var numberOfDecks = 0;
104562 // Work out number of decks by max(duplicates)
104563 for (var i=0; i<cards.length; i++) {
104564 // Get the card that was drawn
104565 var cardLower = cards[i];
104566 var card = cardLower.toUpperCase();
104567 // Initialize the count for this card if needed
104568 if (!(card in cardCounts)) {
104569 cardCounts[card] = 0;
104570 }
104571 cardCounts[card] += 1;
104572 // See if this is max(duplicates)
104573 if (cardCounts[card] > numberOfDecks) {
104574 numberOfDecks = cardCounts[card];
104575 }
104576 }
104577 // Work out the total number of bits for this many decks
104578 // See http://crypto.stackexchange.com/q/41886
104579 var gainedBits = 0;
104580 // Equivalent of Math.log2(factorial(52*numberOfDecks))
104581 // which becomes infinity for numberOfDecks > 4
104582 for (var i=1; i<=52*numberOfDecks; i++) {
104583 gainedBits = gainedBits + Math.log2(i);
104584 }
104585 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
104586 var maxBits = gainedBits - lostBits;
104587 // Convert the drawn cards to a binary representation.
104588 // The exact technique for doing this is unclear.
104589 // See
104590 // http://crypto.stackexchange.com/a/41896
104591 // "I even doubt that this is well defined (only the average entropy
104592 // is, I believe)."
104593 // See
104594 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
104595 // "The binary representation can be the first log(permutations,2) bits
104596 // of the sha-2 hash of the normalized deck string."
104597 //
104598 // In this specific implementation, the first N bits of the hash of the
104599 // normalized cards string is being used. Uppercase, no spaces; eg
104600 // sha256("AH8DQSTC2H")
104601 var totalCards = numberOfDecks * 52;
104602 var percentUsed = cards.length / totalCards;
104603 // Calculate the average number of bits of entropy for the number of
104604 // cards drawn.
104605 var numberOfBits = Math.floor(maxBits * percentUsed);
104606 // Create a normalized string of the selected cards
104607 var normalizedCards = cards.join("").toUpperCase();
104608 // Convert to binary using the SHA256 hash of the normalized cards.
104609 // If the number of bits is more than 256, multiple hashes
104610 // are used until the required number of bits is reached.
104611 var entropyBin = "";
104612 var iterations = 0;
104613 while (entropyBin.length < numberOfBits) {
104614 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
104615 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
104616 for (var i=0; i<hashHex.length; i++) {
104617 var decimal = parseInt(hashHex[i], 16);
104618 var binary = decimal.toString(2);
104619 while (binary.length < 4) {
104620 binary = "0" + binary;
104621 }
104622 entropyBin = entropyBin + binary;
104623 }
104624 iterations = iterations + 1;
104625 }
104626 // Truncate to the appropriate number of bits.
104627 entropyBin = entropyBin.substring(0, numberOfBits);
104628 // Get the number of bits per event
104629 bitsPerEvent = maxBits / totalCards;
104630 return {
104631 binaryStr: entropyBin,
104632 bitsPerEvent: bitsPerEvent,
104633 }
104634 }
104635
104636 // Polyfill for Math.log2
104637 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
104638 Math.log2 = Math.log2 || function(x) {
104639 // The polyfill isn't good enough because of the poor accuracy of
104640 // Math.LOG2E
104641 // log2(8) gave 2.9999999999999996 which when floored causes issues.
104642 // So instead use the BigInteger library to get it right.
104643 return BigInteger.log(x) / BigInteger.log(2);
104644 };
104645
104646 // Depends on BigInteger
104647 function factorial(n) {
104648 if (n == 0) {
104649 return 1;
104650 }
104651 f = BigInteger.ONE;
104652 for (var i=1; i<=n; i++) {
104653 f = f.multiply(new BigInteger(i));
104654 }
104655 return f;
104656 }
104657
104658 })();
104659 </script>
104660 <script>(function() {
104661
104662 // mnemonics is populated as required by getLanguage
104663 var mnemonics = { "english": new Mnemonic("english") };
104664 var mnemonic = mnemonics["english"];
104665 var seed = null;
104666 var bip32RootKey = null;
104667 var bip32ExtendedKey = null;
104668 var network = bitcoinjs.bitcoin.networks.bitcoin;
104669 var addressRowTemplate = $("#address-row-template");
104670
104671 var showIndex = true;
104672 var showAddress = true;
104673 var showPubKey = true;
104674 var showPrivKey = true;
104675 var showQr = false;
104676 var litecoinUseLtub = true;
104677
104678 var entropyChangeTimeoutEvent = null;
104679 var phraseChangeTimeoutEvent = null;
104680 var rootKeyChangedTimeoutEvent = null;
104681
104682 var generationProcesses = [];
104683
104684 var DOM = {};
104685 DOM.network = $(".network");
104686 DOM.bip32Client = $("#bip32-client");
104687 DOM.phraseNetwork = $("#network-phrase");
104688 DOM.useEntropy = $(".use-entropy");
104689 DOM.entropyContainer = $(".entropy-container");
104690 DOM.entropy = $(".entropy");
104691 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
104692 DOM.entropyType = DOM.entropyContainer.find(".type");
104693 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
104694 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
104695 DOM.entropyBits = DOM.entropyContainer.find(".bits");
104696 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
104697 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
104698 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
104699 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
104700 DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
104701 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
104702 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
104703 DOM.phrase = $(".phrase");
104704 DOM.passphrase = $(".passphrase");
104705 DOM.generateContainer = $(".generate-container");
104706 DOM.generate = $(".generate");
104707 DOM.seed = $(".seed");
104708 DOM.rootKey = $(".root-key");
104709 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
104710 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
104711 DOM.extendedPrivKey = $(".extended-priv-key");
104712 DOM.extendedPubKey = $(".extended-pub-key");
104713 DOM.bip32tab = $("#bip32-tab");
104714 DOM.bip44tab = $("#bip44-tab");
104715 DOM.bip49tab = $("#bip49-tab");
104716 DOM.bip84tab = $("#bip84-tab");
104717 DOM.bip141tab = $("#bip141-tab");
104718 DOM.bip32panel = $("#bip32");
104719 DOM.bip44panel = $("#bip44");
104720 DOM.bip49panel = $("#bip49");
104721 DOM.bip32path = $("#bip32-path");
104722 DOM.bip44path = $("#bip44-path");
104723 DOM.bip44purpose = $("#bip44 .purpose");
104724 DOM.bip44coin = $("#bip44 .coin");
104725 DOM.bip44account = $("#bip44 .account");
104726 DOM.bip44accountXprv = $("#bip44 .account-xprv");
104727 DOM.bip44accountXpub = $("#bip44 .account-xpub");
104728 DOM.bip44change = $("#bip44 .change");
104729 DOM.bip49unavailable = $("#bip49 .unavailable");
104730 DOM.bip49available = $("#bip49 .available");
104731 DOM.bip49path = $("#bip49-path");
104732 DOM.bip49purpose = $("#bip49 .purpose");
104733 DOM.bip49coin = $("#bip49 .coin");
104734 DOM.bip49account = $("#bip49 .account");
104735 DOM.bip49accountXprv = $("#bip49 .account-xprv");
104736 DOM.bip49accountXpub = $("#bip49 .account-xpub");
104737 DOM.bip49change = $("#bip49 .change");
104738 DOM.bip84path = $("#bip84-path");
104739 DOM.bip84purpose = $("#bip84 .purpose");
104740 DOM.bip84coin = $("#bip84 .coin");
104741 DOM.bip84account = $("#bip84 .account");
104742 DOM.bip84accountXprv = $("#bip84 .account-xprv");
104743 DOM.bip84accountXpub = $("#bip84 .account-xpub");
104744 DOM.bip84change = $("#bip84 .change");
104745 DOM.bip141unavailable = $("#bip141 .unavailable");
104746 DOM.bip141available = $("#bip141 .available");
104747 DOM.bip141path = $("#bip141-path");
104748 DOM.bip141semantics = $(".bip141-semantics");
104749 DOM.generatedStrength = $(".generate-container .strength");
104750 DOM.hardenedAddresses = $(".hardened-addresses");
104751 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
104752 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
104753 DOM.useBip38 = $(".use-bip38");
104754 DOM.bip38Password = $(".bip38-password");
104755 DOM.addresses = $(".addresses");
104756 DOM.csvTab = $("#csv-tab a");
104757 DOM.csv = $(".csv");
104758 DOM.rowsToAdd = $(".rows-to-add");
104759 DOM.more = $(".more");
104760 DOM.moreRowsStartIndex = $(".more-rows-start-index");
104761 DOM.feedback = $(".feedback");
104762 DOM.tab = $(".derivation-type a");
104763 DOM.indexToggle = $(".index-toggle");
104764 DOM.addressToggle = $(".address-toggle");
104765 DOM.publicKeyToggle = $(".public-key-toggle");
104766 DOM.privateKeyToggle = $(".private-key-toggle");
104767 DOM.languages = $(".languages a");
104768 DOM.qrContainer = $(".qr-container");
104769 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
104770 DOM.qrImage = DOM.qrContainer.find(".qr-image");
104771 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
104772 DOM.showQrEls = $("[data-show-qr]");
104773
104774 function init() {
104775 // Events
104776 DOM.network.on("change", networkChanged);
104777 DOM.bip32Client.on("change", bip32ClientChanged);
104778 DOM.useEntropy.on("change", setEntropyVisibility);
104779 DOM.entropy.on("input", delayedEntropyChanged);
104780 DOM.entropyMnemonicLength.on("change", entropyChanged);
104781 DOM.phrase.on("input", delayedPhraseChanged);
104782 DOM.passphrase.on("input", delayedPhraseChanged);
104783 DOM.generate.on("click", generateClicked);
104784 DOM.more.on("click", showMore);
104785 DOM.rootKey.on("input", delayedRootKeyChanged);
104786 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
104787 DOM.bip32path.on("input", calcForDerivationPath);
104788 DOM.bip44account.on("input", calcForDerivationPath);
104789 DOM.bip44change.on("input", calcForDerivationPath);
104790 DOM.bip49account.on("input", calcForDerivationPath);
104791 DOM.bip49change.on("input", calcForDerivationPath);
104792 DOM.bip84account.on("input", calcForDerivationPath);
104793 DOM.bip84change.on("input", calcForDerivationPath);
104794 DOM.bip141path.on("input", calcForDerivationPath);
104795 DOM.bip141semantics.on("change", tabChanged);
104796 DOM.tab.on("shown.bs.tab", tabChanged);
104797 DOM.hardenedAddresses.on("change", calcForDerivationPath);
104798 DOM.useBip38.on("change", calcForDerivationPath);
104799 DOM.bip38Password.on("change", calcForDerivationPath);
104800 DOM.indexToggle.on("click", toggleIndexes);
104801 DOM.addressToggle.on("click", toggleAddresses);
104802 DOM.publicKeyToggle.on("click", togglePublicKeys);
104803 DOM.privateKeyToggle.on("click", togglePrivateKeys);
104804 DOM.csvTab.on("click", updateCsv);
104805 DOM.languages.on("click", languageChanged);
104806 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
104807 setQrEvents(DOM.showQrEls);
104808 disableForms();
104809 hidePending();
104810 hideValidationError();
104811 populateNetworkSelect();
104812 populateClientSelect();
104813 }
104814
104815 // Event handlers
104816
104817 function networkChanged(e) {
104818 clearDerivedKeys();
104819 clearAddressesList();
104820 DOM.litecoinLtubContainer.addClass("hidden");
104821 DOM.useBitpayAddressesContainer.addClass("hidden");
104822 var networkIndex = e.target.value;
104823 var network = networks[networkIndex];
104824 network.onSelect();
104825 if (network.segwitAvailable) {
104826 adjustNetworkForSegwit();
104827 showSegwitAvailable();
104828 }
104829 else {
104830 showSegwitUnavailable();
104831 }
104832 if (seed != null) {
104833 phraseChanged();
104834 }
104835 else {
104836 rootKeyChanged();
104837 }
104838 }
104839
104840 function bip32ClientChanged(e) {
104841 var clientIndex = DOM.bip32Client.val();
104842 if (clientIndex == "custom") {
104843 DOM.bip32path.prop("readonly", false);
104844 }
104845 else {
104846 DOM.bip32path.prop("readonly", true);
104847 clients[clientIndex].onSelect();
104848 if (seed != null) {
104849 phraseChanged();
104850 }
104851 else {
104852 rootKeyChanged();
104853 }
104854 }
104855 }
104856
104857 function setEntropyVisibility() {
104858 if (isUsingOwnEntropy()) {
104859 DOM.entropyContainer.removeClass("hidden");
104860 DOM.generateContainer.addClass("hidden");
104861 DOM.phrase.prop("readonly", true);
104862 DOM.entropy.focus();
104863 entropyChanged();
104864 }
104865 else {
104866 DOM.entropyContainer.addClass("hidden");
104867 DOM.generateContainer.removeClass("hidden");
104868 DOM.phrase.prop("readonly", false);
104869 hidePending();
104870 }
104871 }
104872
104873 function delayedPhraseChanged() {
104874 hideValidationError();
104875 seed = null;
104876 bip32RootKey = null;
104877 bip32ExtendedKey = null;
104878 clearAddressesList();
104879 showPending();
104880 if (phraseChangeTimeoutEvent != null) {
104881 clearTimeout(phraseChangeTimeoutEvent);
104882 }
104883 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
104884 }
104885
104886 function phraseChanged() {
104887 showPending();
104888 setMnemonicLanguage();
104889 // Get the mnemonic phrase
104890 var phrase = DOM.phrase.val();
104891 var errorText = findPhraseErrors(phrase);
104892 if (errorText) {
104893 showValidationError(errorText);
104894 return;
104895 }
104896 // Calculate and display
104897 var passphrase = DOM.passphrase.val();
104898 calcBip32RootKeyFromSeed(phrase, passphrase);
104899 calcForDerivationPath();
104900 // Show the word indexes
104901 showWordIndexes();
104902 }
104903
104904 function tabChanged() {
104905 showPending();
104906 adjustNetworkForSegwit();
104907 var phrase = DOM.phrase.val();
104908 if (phrase != "") {
104909 // Calculate and display for mnemonic
104910 var errorText = findPhraseErrors(phrase);
104911 if (errorText) {
104912 showValidationError(errorText);
104913 return;
104914 }
104915 // Calculate and display
104916 var passphrase = DOM.passphrase.val();
104917 calcBip32RootKeyFromSeed(phrase, passphrase);
104918 }
104919 else {
104920 // Calculate and display for root key
104921 var rootKeyBase58 = DOM.rootKey.val();
104922 var errorText = validateRootKey(rootKeyBase58);
104923 if (errorText) {
104924 showValidationError(errorText);
104925 return;
104926 }
104927 // Calculate and display
104928 calcBip32RootKeyFromBase58(rootKeyBase58);
104929 }
104930 calcForDerivationPath();
104931 }
104932
104933 function delayedEntropyChanged() {
104934 hideValidationError();
104935 showPending();
104936 if (entropyChangeTimeoutEvent != null) {
104937 clearTimeout(entropyChangeTimeoutEvent);
104938 }
104939 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
104940 }
104941
104942 function entropyChanged() {
104943 // If blank entropy, clear mnemonic, addresses, errors
104944 if (DOM.entropy.val().trim().length == 0) {
104945 clearDisplay();
104946 clearEntropyFeedback();
104947 DOM.phrase.val("");
104948 showValidationError("Blank entropy");
104949 return;
104950 }
104951 // Get the current phrase to detect changes
104952 var phrase = DOM.phrase.val();
104953 // Set the phrase from the entropy
104954 setMnemonicFromEntropy();
104955 // Recalc addresses if the phrase has changed
104956 var newPhrase = DOM.phrase.val();
104957 if (newPhrase != phrase) {
104958 if (newPhrase.length == 0) {
104959 clearDisplay();
104960 }
104961 else {
104962 phraseChanged();
104963 }
104964 }
104965 else {
104966 hidePending();
104967 }
104968 }
104969
104970 function delayedRootKeyChanged() {
104971 // Warn if there is an existing mnemonic or passphrase.
104972 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
104973 if (!confirm("This will clear existing mnemonic and passphrase")) {
104974 DOM.rootKey.val(bip32RootKey);
104975 return
104976 }
104977 }
104978 hideValidationError();
104979 showPending();
104980 // Clear existing mnemonic and passphrase
104981 DOM.phrase.val("");
104982 DOM.passphrase.val("");
104983 seed = null;
104984 if (rootKeyChangedTimeoutEvent != null) {
104985 clearTimeout(rootKeyChangedTimeoutEvent);
104986 }
104987 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
104988 }
104989
104990 function rootKeyChanged() {
104991 showPending();
104992 hideValidationError();
104993 var rootKeyBase58 = DOM.rootKey.val();
104994 var errorText = validateRootKey(rootKeyBase58);
104995 if (errorText) {
104996 showValidationError(errorText);
104997 return;
104998 }
104999 // Calculate and display
105000 calcBip32RootKeyFromBase58(rootKeyBase58);
105001 calcForDerivationPath();
105002 }
105003
105004 function litecoinUseLtubChanged() {
105005 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
105006 if (litecoinUseLtub) {
105007 network = bitcoinjs.bitcoin.networks.litecoin;
105008 }
105009 else {
105010 network = bitcoinjs.bitcoin.networks.litecoinXprv;
105011 }
105012 phraseChanged();
105013 }
105014
105015 function calcForDerivationPath() {
105016 clearDerivedKeys();
105017 clearAddressesList();
105018 showPending();
105019 // Don't show segwit if it's selected but network doesn't support it
105020 if (segwitSelected() && !networkHasSegwit()) {
105021 return;
105022 }
105023 // Get the derivation path
105024 var derivationPath = getDerivationPath();
105025 var errorText = findDerivationPathErrors(derivationPath);
105026 if (errorText) {
105027 showValidationError(errorText);
105028 return;
105029 }
105030 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
105031 if (bip44TabSelected()) {
105032 displayBip44Info();
105033 }
105034 else if (bip49TabSelected()) {
105035 displayBip49Info();
105036 }
105037 else if (bip84TabSelected()) {
105038 displayBip84Info();
105039 }
105040 displayBip32Info();
105041 }
105042
105043 function generateClicked() {
105044 if (isUsingOwnEntropy()) {
105045 return;
105046 }
105047 clearDisplay();
105048 showPending();
105049 setTimeout(function() {
105050 setMnemonicLanguage();
105051 var phrase = generateRandomPhrase();
105052 if (!phrase) {
105053 return;
105054 }
105055 phraseChanged();
105056 }, 50);
105057 }
105058
105059 function languageChanged() {
105060 setTimeout(function() {
105061 setMnemonicLanguage();
105062 if (DOM.phrase.val().length > 0) {
105063 var newPhrase = convertPhraseToNewLanguage();
105064 DOM.phrase.val(newPhrase);
105065 phraseChanged();
105066 }
105067 else {
105068 DOM.generate.trigger("click");
105069 }
105070 }, 50);
105071 }
105072
105073 function useBitpayAddressesChange() {
105074 setBitcoinCashNetworkValues();
105075 phraseChanged();
105076 }
105077
105078 function toggleIndexes() {
105079 showIndex = !showIndex;
105080 $("td.index span").toggleClass("invisible");
105081 }
105082
105083 function toggleAddresses() {
105084 showAddress = !showAddress;
105085 $("td.address span").toggleClass("invisible");
105086 }
105087
105088 function togglePublicKeys() {
105089 showPubKey = !showPubKey;
105090 $("td.pubkey span").toggleClass("invisible");
105091 }
105092
105093 function togglePrivateKeys() {
105094 showPrivKey = !showPrivKey;
105095 $("td.privkey span").toggleClass("invisible");
105096 }
105097
105098 // Private methods
105099
105100 function generateRandomPhrase() {
105101 if (!hasStrongRandom()) {
105102 var errorText = "This browser does not support strong randomness";
105103 showValidationError(errorText);
105104 return;
105105 }
105106 // get the amount of entropy to use
105107 var numWords = parseInt(DOM.generatedStrength.val());
105108 var strength = numWords / 3 * 32;
105109 var buffer = new Uint8Array(strength / 8);
105110 // create secure entropy
105111 var data = crypto.getRandomValues(buffer);
105112 // show the words
105113 var words = mnemonic.toMnemonic(data);
105114 DOM.phrase.val(words);
105115 // show the entropy
105116 var entropyHex = uint8ArrayToHex(data);
105117 DOM.entropy.val(entropyHex);
105118 // ensure entropy fields are consistent with what is being displayed
105119 DOM.entropyMnemonicLength.val("raw");
105120 return words;
105121 }
105122
105123 function calcBip32RootKeyFromSeed(phrase, passphrase) {
105124 seed = mnemonic.toSeed(phrase, passphrase);
105125 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
105126 }
105127
105128 function calcBip32RootKeyFromBase58(rootKeyBase58) {
105129 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
105130 }
105131
105132 function calcBip32ExtendedKey(path) {
105133 // Check there's a root key to derive from
105134 if (!bip32RootKey) {
105135 return bip32RootKey;
105136 }
105137 var extendedKey = bip32RootKey;
105138 // Derive the key from the path
105139 var pathBits = path.split("/");
105140 for (var i=0; i<pathBits.length; i++) {
105141 var bit = pathBits[i];
105142 var index = parseInt(bit);
105143 if (isNaN(index)) {
105144 continue;
105145 }
105146 var hardened = bit[bit.length-1] == "'";
105147 var isPriv = !(extendedKey.isNeutered());
105148 var invalidDerivationPath = hardened && !isPriv;
105149 if (invalidDerivationPath) {
105150 extendedKey = null;
105151 }
105152 else if (hardened) {
105153 extendedKey = extendedKey.deriveHardened(index);
105154 }
105155 else {
105156 extendedKey = extendedKey.derive(index);
105157 }
105158 }
105159 return extendedKey
105160 }
105161
105162 function showValidationError(errorText) {
105163 DOM.feedback
105164 .text(errorText)
105165 .show();
105166 }
105167
105168 function hideValidationError() {
105169 DOM.feedback
105170 .text("")
105171 .hide();
105172 }
105173
105174 function findPhraseErrors(phrase) {
105175 // Preprocess the words
105176 phrase = mnemonic.normalizeString(phrase);
105177 var words = phraseToWordArray(phrase);
105178 // Detect blank phrase
105179 if (words.length == 0) {
105180 return "Blank mnemonic";
105181 }
105182 // Check each word
105183 for (var i=0; i<words.length; i++) {
105184 var word = words[i];
105185 var language = getLanguage();
105186 if (WORDLISTS[language].indexOf(word) == -1) {
105187 console.log("Finding closest match to " + word);
105188 var nearestWord = findNearestWord(word);
105189 return word + " not in wordlist, did you mean " + nearestWord + "?";
105190 }
105191 }
105192 // Check the words are valid
105193 var properPhrase = wordArrayToPhrase(words);
105194 var isValid = mnemonic.check(properPhrase);
105195 if (!isValid) {
105196 return "Invalid mnemonic";
105197 }
105198 return false;
105199 }
105200
105201 function validateRootKey(rootKeyBase58) {
105202 try {
105203 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
105204 }
105205 catch (e) {
105206 return "Invalid root key";
105207 }
105208 return "";
105209 }
105210
105211 function getDerivationPath() {
105212 if (bip44TabSelected()) {
105213 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
105214 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
105215 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
105216 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
105217 var path = "m/";
105218 path += purpose + "'/";
105219 path += coin + "'/";
105220 path += account + "'/";
105221 path += change;
105222 DOM.bip44path.val(path);
105223 var derivationPath = DOM.bip44path.val();
105224 console.log("Using derivation path from BIP44 tab: " + derivationPath);
105225 return derivationPath;
105226 }
105227 else if (bip49TabSelected()) {
105228 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
105229 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
105230 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
105231 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
105232 var path = "m/";
105233 path += purpose + "'/";
105234 path += coin + "'/";
105235 path += account + "'/";
105236 path += change;
105237 DOM.bip49path.val(path);
105238 var derivationPath = DOM.bip49path.val();
105239 console.log("Using derivation path from BIP49 tab: " + derivationPath);
105240 return derivationPath;
105241 }
105242 else if (bip84TabSelected()) {
105243 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
105244 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
105245 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
105246 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
105247 var path = "m/";
105248 path += purpose + "'/";
105249 path += coin + "'/";
105250 path += account + "'/";
105251 path += change;
105252 DOM.bip84path.val(path);
105253 var derivationPath = DOM.bip84path.val();
105254 console.log("Using derivation path from BIP84 tab: " + derivationPath);
105255 return derivationPath;
105256 }
105257 else if (bip32TabSelected()) {
105258 var derivationPath = DOM.bip32path.val();
105259 console.log("Using derivation path from BIP32 tab: " + derivationPath);
105260 return derivationPath;
105261 }
105262 else if (bip141TabSelected()) {
105263 var derivationPath = DOM.bip141path.val();
105264 console.log("Using derivation path from BIP141 tab: " + derivationPath);
105265 return derivationPath;
105266 }
105267 else {
105268 console.log("Unknown derivation path");
105269 }
105270 }
105271
105272 function findDerivationPathErrors(path) {
105273 // TODO is not perfect but is better than nothing
105274 // Inspired by
105275 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
105276 // and
105277 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
105278 var maxDepth = 255; // TODO verify this!!
105279 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
105280 if (path[0] != "m") {
105281 return "First character must be 'm'";
105282 }
105283 if (path.length > 1) {
105284 if (path[1] != "/") {
105285 return "Separator must be '/'";
105286 }
105287 var indexes = path.split("/");
105288 if (indexes.length > maxDepth) {
105289 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
105290 }
105291 for (var depth = 1; depth<indexes.length; depth++) {
105292 var index = indexes[depth];
105293 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
105294 if (invalidChars.length > 0) {
105295 return "Invalid characters " + invalidChars + " found at depth " + depth;
105296 }
105297 var indexValue = parseInt(index.replace("'", ""));
105298 if (isNaN(depth)) {
105299 return "Invalid number at depth " + depth;
105300 }
105301 if (indexValue > maxIndexValue) {
105302 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
105303 }
105304 }
105305 }
105306 // Check root key exists or else derivation path is useless!
105307 if (!bip32RootKey) {
105308 return "No root key";
105309 }
105310 // Check no hardened derivation path when using xpub keys
105311 var hardenedPath = path.indexOf("'") > -1;
105312 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
105313 var hardened = hardenedPath || hardenedAddresses;
105314 var isXpubkey = bip32RootKey.isNeutered();
105315 if (hardened && isXpubkey) {
105316 return "Hardened derivation path is invalid with xpub key";
105317 }
105318 return false;
105319 }
105320
105321 function displayBip44Info() {
105322 // Get the derivation path for the account
105323 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
105324 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
105325 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
105326 var path = "m/";
105327 path += purpose + "'/";
105328 path += coin + "'/";
105329 path += account + "'/";
105330 // Calculate the account extended keys
105331 var accountExtendedKey = calcBip32ExtendedKey(path);
105332 var accountXprv = accountExtendedKey.toBase58();
105333 var accountXpub = accountExtendedKey.neutered().toBase58();
105334 // Display the extended keys
105335 DOM.bip44accountXprv.val(accountXprv);
105336 DOM.bip44accountXpub.val(accountXpub);
105337 }
105338
105339 function displayBip49Info() {
105340 // Get the derivation path for the account
105341 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
105342 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
105343 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
105344 var path = "m/";
105345 path += purpose + "'/";
105346 path += coin + "'/";
105347 path += account + "'/";
105348 // Calculate the account extended keys
105349 var accountExtendedKey = calcBip32ExtendedKey(path);
105350 var accountXprv = accountExtendedKey.toBase58();
105351 var accountXpub = accountExtendedKey.neutered().toBase58();
105352 // Display the extended keys
105353 DOM.bip49accountXprv.val(accountXprv);
105354 DOM.bip49accountXpub.val(accountXpub);
105355 }
105356
105357 function displayBip84Info() {
105358 // Get the derivation path for the account
105359 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
105360 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
105361 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
105362 var path = "m/";
105363 path += purpose + "'/";
105364 path += coin + "'/";
105365 path += account + "'/";
105366 // Calculate the account extended keys
105367 var accountExtendedKey = calcBip32ExtendedKey(path);
105368 var accountXprv = accountExtendedKey.toBase58();
105369 var accountXpub = accountExtendedKey.neutered().toBase58();
105370 // Display the extended keys
105371 DOM.bip84accountXprv.val(accountXprv);
105372 DOM.bip84accountXpub.val(accountXpub);
105373 }
105374
105375 function displayBip32Info() {
105376 // Display the key
105377 DOM.seed.val(seed);
105378 var rootKey = bip32RootKey.toBase58();
105379 DOM.rootKey.val(rootKey);
105380 var xprvkeyB58 = "NA";
105381 if (!bip32ExtendedKey.isNeutered()) {
105382 xprvkeyB58 = bip32ExtendedKey.toBase58();
105383 }
105384 var extendedPrivKey = xprvkeyB58;
105385 DOM.extendedPrivKey.val(extendedPrivKey);
105386 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
105387 DOM.extendedPubKey.val(extendedPubKey);
105388 // Display the addresses and privkeys
105389 clearAddressesList();
105390 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
105391 displayAddresses(0, initialAddressCount);
105392 }
105393
105394 function displayAddresses(start, total) {
105395 generationProcesses.push(new (function() {
105396
105397 var rows = [];
105398
105399 this.stop = function() {
105400 for (var i=0; i<rows.length; i++) {
105401 rows[i].shouldGenerate = false;
105402 }
105403 hidePending();
105404 }
105405
105406 for (var i=0; i<total; i++) {
105407 var index = i + start;
105408 var isLast = i == total - 1;
105409 rows.push(new TableRow(index, isLast));
105410 }
105411
105412 })());
105413 }
105414
105415 function segwitSelected() {
105416 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
105417 }
105418
105419 function p2wpkhSelected() {
105420 return bip84TabSelected() ||
105421 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
105422 }
105423
105424 function p2wpkhInP2shSelected() {
105425 return bip49TabSelected() ||
105426 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
105427 }
105428
105429 function TableRow(index, isLast) {
105430
105431 var self = this;
105432 this.shouldGenerate = true;
105433 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
105434 var useBip38 = DOM.useBip38.prop("checked");
105435 var bip38password = DOM.bip38Password.val();
105436 var isSegwit = segwitSelected();
105437 var segwitAvailable = networkHasSegwit();
105438 var isP2wpkh = p2wpkhSelected();
105439 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
105440
105441 function init() {
105442 calculateValues();
105443 }
105444
105445 function calculateValues() {
105446 setTimeout(function() {
105447 if (!self.shouldGenerate) {
105448 return;
105449 }
105450 // derive HDkey for this row of the table
105451 var key = "NA";
105452 if (useHardenedAddresses) {
105453 key = bip32ExtendedKey.deriveHardened(index);
105454 }
105455 else {
105456 key = bip32ExtendedKey.derive(index);
105457 }
105458 // bip38 requires uncompressed keys
105459 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
105460 var keyPair = key.keyPair;
105461 var useUncompressed = useBip38;
105462 if (useUncompressed) {
105463 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false });
105464 }
105465 // get address
105466 var address = keyPair.getAddress().toString();
105467 // get privkey
105468 var hasPrivkey = !key.isNeutered();
105469 var privkey = "NA";
105470 if (hasPrivkey) {
105471 privkey = keyPair.toWIF(network);
105472 // BIP38 encode private key if required
105473 if (useBip38) {
105474 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
105475 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
105476 });
105477 }
105478 }
105479 // get pubkey
105480 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
105481 var indexText = getDerivationPath() + "/" + index;
105482 if (useHardenedAddresses) {
105483 indexText = indexText + "'";
105484 }
105485 // Ethereum values are different
105486 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
105487 var privKeyBuffer = keyPair.d.toBuffer(32);
105488 privkey = privKeyBuffer.toString('hex');
105489 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
105490 var hexAddress = addressBuffer.toString('hex');
105491 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
105492 address = ethUtil.addHexPrefix(checksumAddress);
105493 privkey = ethUtil.addHexPrefix(privkey);
105494 pubkey = ethUtil.addHexPrefix(pubkey);
105495 }
105496 // Ripple values are different
105497 if (networks[DOM.network.val()].name == "XRP - Ripple") {
105498 privkey = convertRipplePriv(privkey);
105499 address = convertRippleAdrr(address);
105500 }
105501 // Segwit addresses are different
105502 if (isSegwit) {
105503 if (!segwitAvailable) {
105504 return;
105505 }
105506 if (isP2wpkh) {
105507 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
105508 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
105509 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
105510 }
105511 else if (isP2wpkhInP2sh) {
105512 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
105513 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
105514 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
105515 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
105516 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
105517 }
105518 }
105519 addAddressToList(indexText, address, pubkey, privkey);
105520 if (isLast) {
105521 hidePending();
105522 updateCsv();
105523 }
105524 }, 50)
105525 }
105526
105527 init();
105528
105529 }
105530
105531 function showMore() {
105532 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
105533 if (isNaN(rowsToAdd)) {
105534 rowsToAdd = 20;
105535 DOM.rowsToAdd.val("20");
105536 }
105537 var start = parseInt(DOM.moreRowsStartIndex.val())
105538 if (isNaN(start)) {
105539 start = lastIndexInTable() + 1;
105540 }
105541 else {
105542 var newStart = start + rowsToAdd;
105543 DOM.moreRowsStartIndex.val(newStart);
105544 }
105545 if (rowsToAdd > 200) {
105546 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
105547 msg += "Do you want to continue?";
105548 if (!confirm(msg)) {
105549 return;
105550 }
105551 }
105552 displayAddresses(start, rowsToAdd);
105553 }
105554
105555 function clearDisplay() {
105556 clearAddressesList();
105557 clearKeys();
105558 hideValidationError();
105559 }
105560
105561 function clearAddressesList() {
105562 DOM.addresses.empty();
105563 DOM.csv.val("");
105564 stopGenerating();
105565 }
105566
105567 function stopGenerating() {
105568 while (generationProcesses.length > 0) {
105569 var generation = generationProcesses.shift();
105570 generation.stop();
105571 }
105572 }
105573
105574 function clearKeys() {
105575 clearRootKey();
105576 clearDerivedKeys();
105577 }
105578
105579 function clearRootKey() {
105580 DOM.rootKey.val("");
105581 }
105582
105583 function clearDerivedKeys() {
105584 DOM.extendedPrivKey.val("");
105585 DOM.extendedPubKey.val("");
105586 DOM.bip44accountXprv.val("");
105587 DOM.bip44accountXpub.val("");
105588 }
105589
105590 function addAddressToList(indexText, address, pubkey, privkey) {
105591 var row = $(addressRowTemplate.html());
105592 // Elements
105593 var indexCell = row.find(".index span");
105594 var addressCell = row.find(".address span");
105595 var pubkeyCell = row.find(".pubkey span");
105596 var privkeyCell = row.find(".privkey span");
105597 // Content
105598 indexCell.text(indexText);
105599 addressCell.text(address);
105600 pubkeyCell.text(pubkey);
105601 privkeyCell.text(privkey);
105602 // Visibility
105603 if (!showIndex) {
105604 indexCell.addClass("invisible");
105605 }
105606 if (!showAddress) {
105607 addressCell.addClass("invisible");
105608 }
105609 if (!showPubKey) {
105610 pubkeyCell.addClass("invisible");
105611 }
105612 if (!showPrivKey) {
105613 privkeyCell.addClass("invisible");
105614 }
105615 DOM.addresses.append(row);
105616 var rowShowQrEls = row.find("[data-show-qr]");
105617 setQrEvents(rowShowQrEls);
105618 }
105619
105620 function hasStrongRandom() {
105621 return 'crypto' in window && window['crypto'] !== null;
105622 }
105623
105624 function disableForms() {
105625 $("form").on("submit", function(e) {
105626 e.preventDefault();
105627 });
105628 }
105629
105630 function parseIntNoNaN(val, defaultVal) {
105631 var v = parseInt(val);
105632 if (isNaN(v)) {
105633 return defaultVal;
105634 }
105635 return v;
105636 }
105637
105638 function showPending() {
105639 DOM.feedback
105640 .text("Calculating...")
105641 .show();
105642 }
105643
105644 function findNearestWord(word) {
105645 var language = getLanguage();
105646 var words = WORDLISTS[language];
105647 var minDistance = 99;
105648 var closestWord = words[0];
105649 for (var i=0; i<words.length; i++) {
105650 var comparedTo = words[i];
105651 if (comparedTo.indexOf(word) == 0) {
105652 return comparedTo;
105653 }
105654 var distance = Levenshtein.get(word, comparedTo);
105655 if (distance < minDistance) {
105656 closestWord = comparedTo;
105657 minDistance = distance;
105658 }
105659 }
105660 return closestWord;
105661 }
105662
105663 function hidePending() {
105664 DOM.feedback
105665 .text("")
105666 .hide();
105667 }
105668
105669 function populateNetworkSelect() {
105670 for (var i=0; i<networks.length; i++) {
105671 var network = networks[i];
105672 var option = $("<option>");
105673 option.attr("value", i);
105674 option.text(network.name);
105675 if (network.name == "BTC - Bitcoin") {
105676 option.prop("selected", true);
105677 }
105678 DOM.phraseNetwork.append(option);
105679 }
105680 }
105681
105682 function populateClientSelect() {
105683 for (var i=0; i<clients.length; i++) {
105684 var client = clients[i];
105685 var option = $("<option>");
105686 option.attr("value", i);
105687 option.text(client.name);
105688 DOM.bip32Client.append(option);
105689 }
105690 }
105691
105692 function getLanguage() {
105693 var defaultLanguage = "english";
105694 // Try to get from existing phrase
105695 var language = getLanguageFromPhrase();
105696 // Try to get from url if not from phrase
105697 if (language.length == 0) {
105698 language = getLanguageFromUrl();
105699 }
105700 // Default to English if no other option
105701 if (language.length == 0) {
105702 language = defaultLanguage;
105703 }
105704 return language;
105705 }
105706
105707 function getLanguageFromPhrase(phrase) {
105708 // Check if how many words from existing phrase match a language.
105709 var language = "";
105710 if (!phrase) {
105711 phrase = DOM.phrase.val();
105712 }
105713 if (phrase.length > 0) {
105714 var words = phraseToWordArray(phrase);
105715 var languageMatches = {};
105716 for (l in WORDLISTS) {
105717 // Track how many words match in this language
105718 languageMatches[l] = 0;
105719 for (var i=0; i<words.length; i++) {
105720 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
105721 if (wordInLanguage) {
105722 languageMatches[l]++;
105723 }
105724 }
105725 // Find languages with most word matches.
105726 // This is made difficult due to commonalities between Chinese
105727 // simplified vs traditional.
105728 var mostMatches = 0;
105729 var mostMatchedLanguages = [];
105730 for (var l in languageMatches) {
105731 var numMatches = languageMatches[l];
105732 if (numMatches > mostMatches) {
105733 mostMatches = numMatches;
105734 mostMatchedLanguages = [l];
105735 }
105736 else if (numMatches == mostMatches) {
105737 mostMatchedLanguages.push(l);
105738 }
105739 }
105740 }
105741 if (mostMatchedLanguages.length > 0) {
105742 // Use first language and warn if multiple detected
105743 language = mostMatchedLanguages[0];
105744 if (mostMatchedLanguages.length > 1) {
105745 console.warn("Multiple possible languages");
105746 console.warn(mostMatchedLanguages);
105747 }
105748 }
105749 }
105750 return language;
105751 }
105752
105753 function getLanguageFromUrl() {
105754 for (var language in WORDLISTS) {
105755 if (window.location.hash.indexOf(language) > -1) {
105756 return language;
105757 }
105758 }
105759 return "";
105760 }
105761
105762 function setMnemonicLanguage() {
105763 var language = getLanguage();
105764 // Load the bip39 mnemonic generator for this language if required
105765 if (!(language in mnemonics)) {
105766 mnemonics[language] = new Mnemonic(language);
105767 }
105768 mnemonic = mnemonics[language];
105769 }
105770
105771 function convertPhraseToNewLanguage() {
105772 var oldLanguage = getLanguageFromPhrase();
105773 var newLanguage = getLanguageFromUrl();
105774 var oldPhrase = DOM.phrase.val();
105775 var oldWords = phraseToWordArray(oldPhrase);
105776 var newWords = [];
105777 for (var i=0; i<oldWords.length; i++) {
105778 var oldWord = oldWords[i];
105779 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
105780 var newWord = WORDLISTS[newLanguage][index];
105781 newWords.push(newWord);
105782 }
105783 newPhrase = wordArrayToPhrase(newWords);
105784 return newPhrase;
105785 }
105786
105787 // TODO look at jsbip39 - mnemonic.splitWords
105788 function phraseToWordArray(phrase) {
105789 var words = phrase.split(/\s/g);
105790 var noBlanks = [];
105791 for (var i=0; i<words.length; i++) {
105792 var word = words[i];
105793 if (word.length > 0) {
105794 noBlanks.push(word);
105795 }
105796 }
105797 return noBlanks;
105798 }
105799
105800 // TODO look at jsbip39 - mnemonic.joinWords
105801 function wordArrayToPhrase(words) {
105802 var phrase = words.join(" ");
105803 var language = getLanguageFromPhrase(phrase);
105804 if (language == "japanese" || language == "korean") {
105805 phrase = words.join("\u3000");
105806 }
105807 return phrase;
105808 }
105809
105810 function isUsingOwnEntropy() {
105811 return DOM.useEntropy.prop("checked");
105812 }
105813
105814 function setMnemonicFromEntropy() {
105815 clearEntropyFeedback();
105816 // Get entropy value
105817 var entropyStr = DOM.entropy.val();
105818 // Work out minimum base for entropy
105819 var entropy = Entropy.fromString(entropyStr);
105820 if (entropy.binaryStr.length == 0) {
105821 return;
105822 }
105823 // Show entropy details
105824 showEntropyFeedback(entropy);
105825 // Use entropy hash if not using raw entropy
105826 var bits = entropy.binaryStr;
105827 var mnemonicLength = DOM.entropyMnemonicLength.val();
105828 if (mnemonicLength != "raw") {
105829 // Get bits by hashing entropy with SHA256
105830 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
105831 var hex = sjcl.codec.hex.fromBits(hash);
105832 bits = BigInteger.parse(hex, 16).toString(2);
105833 while (bits.length % 256 != 0) {
105834 bits = "0" + bits;
105835 }
105836 // Truncate hash to suit number of words
105837 mnemonicLength = parseInt(mnemonicLength);
105838 var numberOfBits = 32 * mnemonicLength / 3;
105839 bits = bits.substring(0, numberOfBits);
105840 }
105841 // Discard trailing entropy
105842 var bitsToUse = Math.floor(bits.length / 32) * 32;
105843 var start = bits.length - bitsToUse;
105844 var binaryStr = bits.substring(start);
105845 // Convert entropy string to numeric array
105846 var entropyArr = [];
105847 for (var i=0; i<binaryStr.length / 8; i++) {
105848 var byteAsBits = binaryStr.substring(i*8, i*8+8);
105849 var entropyByte = parseInt(byteAsBits, 2);
105850 entropyArr.push(entropyByte)
105851 }
105852 // Convert entropy array to mnemonic
105853 var phrase = mnemonic.toMnemonic(entropyArr);
105854 // Set the mnemonic in the UI
105855 DOM.phrase.val(phrase);
105856 // Show the word indexes
105857 showWordIndexes();
105858 // Show the checksum
105859 showChecksum();
105860 }
105861
105862 function clearEntropyFeedback() {
105863 DOM.entropyCrackTime.text("...");
105864 DOM.entropyType.text("");
105865 DOM.entropyWordCount.text("0");
105866 DOM.entropyEventCount.text("0");
105867 DOM.entropyBitsPerEvent.text("0");
105868 DOM.entropyBits.text("0");
105869 DOM.entropyFiltered.html("&nbsp;");
105870 DOM.entropyBinary.html("&nbsp;");
105871 }
105872
105873 function showEntropyFeedback(entropy) {
105874 var numberOfBits = entropy.binaryStr.length;
105875 var timeToCrack = "unknown";
105876 try {
105877 var z = zxcvbn(entropy.base.parts.join(""));
105878 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
105879 if (z.feedback.warning != "") {
105880 timeToCrack = timeToCrack + " - " + z.feedback.warning;
105881 };
105882 }
105883 catch (e) {
105884 console.log("Error detecting entropy strength with zxcvbn:");
105885 console.log(e);
105886 }
105887 var entropyTypeStr = getEntropyTypeStr(entropy);
105888 var wordCount = Math.floor(numberOfBits / 32) * 3;
105889 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
105890 var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr);
105891 DOM.entropyFiltered.html(entropy.cleanHtml);
105892 DOM.entropyType.text(entropyTypeStr);
105893 DOM.entropyCrackTime.text(timeToCrack);
105894 DOM.entropyEventCount.text(entropy.base.ints.length);
105895 DOM.entropyBits.text(numberOfBits);
105896 DOM.entropyWordCount.text(wordCount);
105897 DOM.entropyBinary.text(spacedBinaryStr);
105898 DOM.entropyBitsPerEvent.text(bitsPerEvent);
105899 // detect and warn of filtering
105900 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
105901 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
105902 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
105903 if (isFiltered) {
105904 DOM.entropyFilterWarning.removeClass('hidden');
105905 }
105906 else {
105907 DOM.entropyFilterWarning.addClass('hidden');
105908 }
105909 }
105910
105911 function getEntropyTypeStr(entropy) {
105912 var typeStr = entropy.base.str;
105913 // Add some detail if these are cards
105914 if (entropy.base.asInt == 52) {
105915 var cardDetail = []; // array of message strings
105916 // Detect duplicates
105917 var dupes = [];
105918 var dupeTracker = {};
105919 for (var i=0; i<entropy.base.parts.length; i++) {
105920 var card = entropy.base.parts[i];
105921 var cardUpper = card.toUpperCase();
105922 if (cardUpper in dupeTracker) {
105923 dupes.push(card);
105924 }
105925 dupeTracker[cardUpper] = true;
105926 }
105927 if (dupes.length > 0) {
105928 var dupeWord = "duplicates";
105929 if (dupes.length == 1) {
105930 dupeWord = "duplicate";
105931 }
105932 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
105933 if (dupes.length > 3) {
105934 msg += "...";
105935 }
105936 cardDetail.push(msg);
105937 }
105938 // Detect full deck
105939 var uniqueCards = [];
105940 for (var uniqueCard in dupeTracker) {
105941 uniqueCards.push(uniqueCard);
105942 }
105943 if (uniqueCards.length == 52) {
105944 cardDetail.unshift("full deck");
105945 }
105946 // Detect missing cards
105947 var values = "A23456789TJQK";
105948 var suits = "CDHS";
105949 var missingCards = [];
105950 for (var i=0; i<suits.length; i++) {
105951 for (var j=0; j<values.length; j++) {
105952 var card = values[j] + suits[i];
105953 if (!(card in dupeTracker)) {
105954 missingCards.push(card);
105955 }
105956 }
105957 }
105958 // Display missing cards if six or less, ie clearly going for full deck
105959 if (missingCards.length > 0 && missingCards.length <= 6) {
105960 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
105961 if (missingCards.length > 3) {
105962 msg += "...";
105963 }
105964 cardDetail.push(msg);
105965 }
105966 // Add card details to typeStr
105967 if (cardDetail.length > 0) {
105968 typeStr += " (" + cardDetail.join(", ") + ")";
105969 }
105970 }
105971 return typeStr;
105972 }
105973
105974 function setQrEvents(els) {
105975 els.on("mouseenter", createQr);
105976 els.on("mouseleave", destroyQr);
105977 els.on("click", toggleQr);
105978 }
105979
105980 function createQr(e) {
105981 var content = e.target.textContent || e.target.value;
105982 if (content) {
105983 var qrEl = kjua({
105984 text: content,
105985 render: "canvas",
105986 size: 310,
105987 ecLevel: 'H',
105988 });
105989 DOM.qrImage.append(qrEl);
105990 if (!showQr) {
105991 DOM.qrHider.addClass("hidden");
105992 }
105993 else {
105994 DOM.qrHider.removeClass("hidden");
105995 }
105996 DOM.qrContainer.removeClass("hidden");
105997 }
105998 }
105999
106000 function destroyQr() {
106001 DOM.qrImage.text("");
106002 DOM.qrContainer.addClass("hidden");
106003 }
106004
106005 function toggleQr() {
106006 showQr = !showQr;
106007 DOM.qrHider.toggleClass("hidden");
106008 DOM.qrHint.toggleClass("hidden");
106009 }
106010
106011 function bip44TabSelected() {
106012 return DOM.bip44tab.hasClass("active");
106013 }
106014
106015 function bip32TabSelected() {
106016 return DOM.bip32tab.hasClass("active");
106017 }
106018
106019 function networkHasSegwit() {
106020 return networks[DOM.network.val()].segwitAvailable;
106021 }
106022
106023 function bip49TabSelected() {
106024 return DOM.bip49tab.hasClass("active");
106025 }
106026
106027 function bip84TabSelected() {
106028 return DOM.bip84tab.hasClass("active");
106029 }
106030
106031 function bip141TabSelected() {
106032 return DOM.bip141tab.hasClass("active");
106033 }
106034
106035 function setHdCoin(coinValue) {
106036 DOM.bip44coin.val(coinValue);
106037 DOM.bip49coin.val(coinValue);
106038 DOM.bip84coin.val(coinValue);
106039 }
106040
106041 function showSegwitAvailable() {
106042 DOM.bip49unavailable.addClass("hidden");
106043 DOM.bip49available.removeClass("hidden");
106044 DOM.bip141unavailable.addClass("hidden");
106045 DOM.bip141available.removeClass("hidden");
106046 }
106047
106048 function showSegwitUnavailable() {
106049 DOM.bip49available.addClass("hidden");
106050 DOM.bip49unavailable.removeClass("hidden");
106051 DOM.bip141available.addClass("hidden");
106052 DOM.bip141unavailable.removeClass("hidden");
106053 }
106054
106055 function useBitpayAddresses() {
106056 return !(DOM.useBitpayAddresses.prop("checked"));
106057 }
106058
106059 function setBitcoinCashNetworkValues() {
106060 if (useBitpayAddresses()) {
106061 network = bitcoinjs.bitcoin.networks.bitcoin;
106062 }
106063 else {
106064 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
106065 }
106066 }
106067
106068 function adjustNetworkForSegwit() {
106069 // If segwit is selected the xpub/xprv prefixes need to be adjusted
106070 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
106071 // wallet.
106072 // See https://github.com/iancoleman/bip39/issues/125
106073 var segwitNetworks = null;
106074 // if a segwit network is alread selected, need to use base network to
106075 // look up new parameters
106076 if ("baseNetwork" in network) {
106077 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
106078 }
106079 // choose the right segwit params
106080 if (p2wpkhSelected() && "p2wpkh" in network) {
106081 network = network.p2wpkh;
106082 }
106083 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
106084 network = network.p2wpkhInP2sh;
106085 }
106086 }
106087
106088 function lastIndexInTable() {
106089 var pathText = DOM.addresses.find(".index").last().text();
106090 var pathBits = pathText.split("/");
106091 var lastBit = pathBits[pathBits.length-1];
106092 var lastBitClean = lastBit.replace("'", "");
106093 return parseInt(lastBitClean);
106094 }
106095
106096 function uint8ArrayToHex(a) {
106097 var s = ""
106098 for (var i=0; i<a.length; i++) {
106099 var h = a[i].toString(16);
106100 while (h.length < 2) {
106101 h = "0" + h;
106102 }
106103 s = s + h;
106104 }
106105 return s;
106106 }
106107
106108 function showWordIndexes() {
106109 var phrase = DOM.phrase.val();
106110 var words = phraseToWordArray(phrase);
106111 var wordIndexes = [];
106112 var language = getLanguage();
106113 for (var i=0; i<words.length; i++) {
106114 var word = words[i];
106115 var wordIndex = WORDLISTS[language].indexOf(word);
106116 wordIndexes.push(wordIndex);
106117 }
106118 var wordIndexesStr = wordIndexes.join(", ");
106119 DOM.entropyWordIndexes.text(wordIndexesStr);
106120 }
106121
106122 function showChecksum() {
106123 var phrase = DOM.phrase.val();
106124 var words = phraseToWordArray(phrase);
106125 var checksumBitlength = words.length / 3;
106126 var checksum = "";
106127 var binaryStr = "";
106128 var language = getLanguage();
106129 for (var i=words.length-1; i>=0; i--) {
106130 var word = words[i];
106131 var wordIndex = WORDLISTS[language].indexOf(word);
106132 var wordBinary = wordIndex.toString(2);
106133 while (wordBinary.length < 11) {
106134 wordBinary = "0" + wordBinary;
106135 }
106136 var binaryStr = wordBinary + binaryStr;
106137 if (binaryStr.length >= checksumBitlength) {
106138 var start = binaryStr.length - checksumBitlength;
106139 var end = binaryStr.length;
106140 checksum = binaryStr.substring(start, end);
106141 // add spaces so the last group is 11 bits, not the first
106142 checksum = checksum.split("").reverse().join("")
106143 checksum = addSpacesEveryElevenBits(checksum);
106144 checksum = checksum.split("").reverse().join("")
106145 break;
106146 }
106147 }
106148 DOM.entropyChecksum.text(checksum);
106149 }
106150
106151 function updateCsv() {
106152 var tableCsv = "path,address,public key,private key\n";
106153 var rows = DOM.addresses.find("tr");
106154 for (var i=0; i<rows.length; i++) {
106155 var row = $(rows[i]);
106156 var cells = row.find("td");
106157 for (var j=0; j<cells.length; j++) {
106158 var cell = $(cells[j]);
106159 if (!cell.children().hasClass("invisible")) {
106160 tableCsv = tableCsv + cell.text();
106161 }
106162 if (j != cells.length - 1) {
106163 tableCsv = tableCsv + ",";
106164 }
106165 }
106166 tableCsv = tableCsv + "\n";
106167 }
106168 DOM.csv.val(tableCsv);
106169 }
106170
106171 function addSpacesEveryElevenBits(binaryStr) {
106172 return binaryStr.match(/.{1,11}/g).join(" ");
106173 }
106174
106175 var networks = [
106176 {
106177 name: "AXE - Axe",
106178 segwitAvailable: false,
106179 onSelect: function() {
106180 network = bitcoinjs.bitcoin.networks.axe;
106181 setHdCoin(0);
106182 },
106183 },
106184 {
106185 name: "BCH - Bitcoin Cash",
106186 segwitAvailable: false,
106187 onSelect: function() {
106188 DOM.useBitpayAddressesContainer.removeClass("hidden");
106189 setBitcoinCashNetworkValues();
106190 setHdCoin(145);
106191 },
106192 },
106193 {
106194 name: "BLK - BlackCoin",
106195 segwitAvailable: false,
106196 onSelect: function() {
106197 network = bitcoinjs.bitcoin.networks.blackcoin;
106198 setHdCoin(10);
106199 },
106200 },
106201 {
106202 name: "BTC - Bitcoin",
106203 segwitAvailable: true,
106204 onSelect: function() {
106205 network = bitcoinjs.bitcoin.networks.bitcoin;
106206 setHdCoin(0);
106207 },
106208 },
106209 {
106210 name: "BTC - Bitcoin Testnet",
106211 segwitAvailable: true,
106212 onSelect: function() {
106213 network = bitcoinjs.bitcoin.networks.testnet;
106214 setHdCoin(1);
106215 },
106216 },
106217 {
106218 name: "BTG - Bitcoin Gold",
106219 segwitAvailable: true,
106220 onSelect: function() {
106221 network = bitcoinjs.bitcoin.networks.bgold;
106222 setHdCoin(0);
106223 },
106224 },
106225 {
106226 name: "CLAM - Clams",
106227 segwitAvailable: false,
106228 onSelect: function() {
106229 network = bitcoinjs.bitcoin.networks.clam;
106230 setHdCoin(23);
106231 },
106232 },
106233 {
106234 name: "CRW - Crown",
106235 segwitAvailable: false,
106236 onSelect: function() {
106237 network = bitcoinjs.bitcoin.networks.crown;
106238 setHdCoin(72);
106239 },
106240 },
106241 {
106242 name: "DASH - Dash",
106243 segwitAvailable: false,
106244 onSelect: function() {
106245 network = bitcoinjs.bitcoin.networks.dash;
106246 setHdCoin(5);
106247 },
106248 },
106249 {
106250 name: "DASH - Dash Testnet",
106251 segwitAvailable: false,
106252 onSelect: function() {
106253 network = bitcoinjs.bitcoin.networks.dashtn;
106254 setHdCoin(1);
106255 },
106256 },
106257 {
106258 name: "DNR - Denarius",
106259 segwitAvailable: false,
106260 onSelect: function() {
106261 network = bitcoinjs.bitcoin.networks.denarius;
106262 setHdCoin(116);
106263 },
106264 },
106265 {
106266 name: "DOGE - Dogecoin",
106267 segwitAvailable: false,
106268 onSelect: function() {
106269 network = bitcoinjs.bitcoin.networks.dogecoin;
106270 setHdCoin(3);
106271 },
106272 },
106273 {
106274 name: "ETH - Ethereum",
106275 segwitAvailable: false,
106276 onSelect: function() {
106277 network = bitcoinjs.bitcoin.networks.bitcoin;
106278 setHdCoin(60);
106279 },
106280 },
106281 {
106282 name: "FJC - Fujicoin",
106283 segwitAvailable: false,
106284 onSelect: function() {
106285 network = bitcoinjs.bitcoin.networks.fujicoin;
106286 setHdCoin(75);
106287 },
106288 },
106289 {
106290 name: "GAME - GameCredits",
106291 segwitAvailable: false,
106292 onSelect: function() {
106293 network = bitcoinjs.bitcoin.networks.game;
106294 setHdCoin(101);
106295 },
106296 },
106297 {
106298 name: "JBS - Jumbucks",
106299 segwitAvailable: false,
106300 onSelect: function() {
106301 network = bitcoinjs.bitcoin.networks.jumbucks;
106302 setHdCoin(26);
106303 },
106304 },
106305 {
106306 name: "KMD - Komodo",
106307 bip49available: false,
106308 onSelect: function() {
106309 network = bitcoinjs.bitcoin.networks.komodo;
106310 setHdCoin(141);
106311 },
106312 },
106313 {
106314 name: "LTC - Litecoin",
106315 segwitAvailable: true,
106316 onSelect: function() {
106317 network = bitcoinjs.bitcoin.networks.litecoin;
106318 setHdCoin(2);
106319 DOM.litecoinLtubContainer.removeClass("hidden");
106320 },
106321 },
106322 {
106323 name: "MAZA - Maza",
106324 segwitAvailable: false,
106325 onSelect: function() {
106326 network = bitcoinjs.bitcoin.networks.maza;
106327 setHdCoin(13);
106328 },
106329 },
106330 {
106331 name: "MONA - Monacoin",
106332 segwitAvailable: true,
106333 onSelect: function() {
106334 network = bitcoinjs.bitcoin.networks.monacoin,
106335 setHdCoin(22);
106336 },
106337 },
106338 {
106339 name: "NMC - Namecoin",
106340 segwitAvailable: false,
106341 onSelect: function() {
106342 network = bitcoinjs.bitcoin.networks.namecoin;
106343 setHdCoin(7);
106344 },
106345 },
106346 {
106347 name: "ONX - Onixcoin",
106348 segwitAvailable: false,
106349 onSelect: function() {
106350 network = bitcoinjs.bitcoin.networks.onixcoin;
106351 setHdCoin(174);
106352 },
106353 },
106354 {
106355 name: "PIVX - PIVX",
106356 segwitAvailable: false,
106357 onSelect: function() {
106358 network = bitcoinjs.bitcoin.networks.pivx;
106359 setHdCoin(119);
106360 },
106361 },
106362 {
106363 name: "PIVX - PIVX Testnet",
106364 segwitAvailable: false,
106365 onSelect: function() {
106366 network = bitcoinjs.bitcoin.networks.pivxtestnet;
106367 setHdCoin(1);
106368 },
106369 },
106370 {
106371 name: "PPC - Peercoin",
106372 segwitAvailable: false,
106373 onSelect: function() {
106374 network = bitcoinjs.bitcoin.networks.peercoin;
106375 setHdCoin(6);
106376 },
106377 },
106378 {
106379 name: "SDC - ShadowCash",
106380 segwitAvailable: false,
106381 onSelect: function() {
106382 network = bitcoinjs.bitcoin.networks.shadow;
106383 setHdCoin(35);
106384 },
106385 },
106386 {
106387 name: "SDC - ShadowCash Testnet",
106388 segwitAvailable: false,
106389 onSelect: function() {
106390 network = bitcoinjs.bitcoin.networks.shadowtn;
106391 setHdCoin(1);
106392 },
106393 },
106394 {
106395 name: "SLM - Slimcoin",
106396 segwitAvailable: false,
106397 onSelect: function() {
106398 network = bitcoinjs.bitcoin.networks.slimcoin;
106399 setHdCoin(63);
106400 },
106401 },
106402 {
106403 name: "SLM - Slimcoin Testnet",
106404 segwitAvailable: false,
106405 onSelect: function() {
106406 network = bitcoinjs.bitcoin.networks.slimcointn;
106407 setHdCoin(111);
106408 },
106409 },
106410 {
106411 name: "USNBT - NuBits",
106412 segwitAvailable: false,
106413 onSelect: function() {
106414 network = bitcoinjs.bitcoin.networks.nubits;
106415 setHdCoin(12);
106416 },
106417 },
106418 {
106419 name: "VIA - Viacoin",
106420 segwitAvailable: false,
106421 onSelect: function() {
106422 network = bitcoinjs.bitcoin.networks.viacoin;
106423 setHdCoin(14);
106424 },
106425 },
106426 {
106427 name: "VIA - Viacoin Testnet",
106428 segwitAvailable: false,
106429 onSelect: function() {
106430 network = bitcoinjs.bitcoin.networks.viacointestnet;
106431 setHdCoin(1);
106432 },
106433 },
106434 {
106435 name: "XMY - Myriadcoin",
106436 segwitAvailable: false,
106437 onSelect: function() {
106438 network = bitcoinjs.bitcoin.networks.myriadcoin;
106439 setHdCoin(90);
106440 },
106441 },
106442 {
106443 name: "XRP - Ripple",
106444 segwitAvailable: false,
106445 onSelect: function() {
106446 network = bitcoinjs.bitcoin.networks.bitcoin;
106447 setHdCoin(144);
106448 },
106449 },
106450 ]
106451
106452 var clients = [
106453 {
106454 name: "Bitcoin Core",
106455 onSelect: function() {
106456 DOM.bip32path.val("m/0'/0'");
106457 DOM.hardenedAddresses.prop('checked', true);
106458 },
106459 },
106460 {
106461 name: "blockchain.info",
106462 onSelect: function() {
106463 DOM.bip32path.val("m/44'/0'/0'");
106464 DOM.hardenedAddresses.prop('checked', false);
106465 },
106466 },
106467 {
106468 name: "MultiBit HD",
106469 onSelect: function() {
106470 DOM.bip32path.val("m/0'/0");
106471 DOM.hardenedAddresses.prop('checked', false);
106472 },
106473 }
106474 ]
106475
106476 init();
106477
106478 })();
106479 </script>
106480 </body>
106481 </html>